【python】英语单词文本处理

文章目录

  • 前言
  • 一、环境
    • 实验所需的库
    • 终端指令
  • 二、实现过程
    • Version 1 起源
    • Version 2 list
    • Version 3 array
    • Version 4 结构化数组
    • Version 5 区分单元且打乱顺序
    • Version 6 可视化
  • 三、txt文件

前言

  缘起自懒得考小孩儿单词,最终效果如图:
在这里插入图片描述

  本文记录了英语单词文本处理过程,生成“试卷”

PS:单词docx文件来源于百度文库高校版(单词txt文本附文末)

一、环境

实验所需的库

import re
import numpy as np
from PIL import Image, ImageDraw, ImageFont

终端指令

conda create -n DL python==3.11
conda activate DL
conda install numpy pillow

pip install numpy pillow

二、实现过程

  大过年的,暂不对代码进行详细介绍,其进化过程如下:

Version 1 起源

import re


with open('./word.txt', 'r', encoding='utf-8') as file:
    for line in file:
        if re.match(r'^[A-Za-z*]', line):  # 使用正则表达式匹配以英文字母开头的行
            if 'Module' in line:
                continue
            if '[' not in line:  # 如果行中没有 [
                print("无法解析的行:", line)  # 直接输出行的内容
                continue
            word, pro_chinese = line.strip().split('[')
            pronunciation, meaning = pro_chinese.strip().split(']')
            pronunciation = '[' + pronunciation + ']'  # 将括号加回去
            meaning = meaning.rstrip()  # 去掉末尾的换行符
            print("单词:", word)
            print("音标:", pronunciation)
            print("中文:", meaning)
            

在这里插入图片描述
在这里插入图片描述

Version 2 list

  存储为列表

import re


words, pronunciations, meanings, modules = [], [], [], []
with open('./word.txt', 'r', encoding='utf-8') as file:
    current_module = ""
    for line in file:
        if re.match(r'^[A-Za-z*]', line):  # 使用正则表达式匹配以英文字母开头的行
            if 'Module' in line:
                current_module = line.strip()
                # print(current_module)
                continue
            if '[' not in line:  # 如果行中没有 [
                # print("无法解析的行:", line)  # 直接输出行的内容
                continue
            word, pro_chinese = line.strip().split('[')
            pronunciation, meaning = pro_chinese.strip().split(']')
            pronunciation = '[' + pronunciation + ']'  # 将括号加回去
            meaning = meaning.rstrip()  # 去掉末尾的换行符
            # print("单词:", word)
            # print("音标:", pronunciation)
            # print("中文:", meaning)
            words.append(word)
            pronunciations.append(pronunciation)
            meanings.append(meaning)
            modules.append(current_module)

for i in range(len(words)):
    print(modules[i], words[i], pronunciations[i], meanings[i])

在这里插入图片描述

Version 3 array

  存储为array数组

import re
import numpy as np

words, pronunciations, meanings = np.array([]), np.array([]), np.array([])

with open('./word.txt', 'r', encoding='utf-8') as file:
    current_module = ""
    for line in file:
        if re.match(r'^[A-Za-z*]', line):  # 使用正则表达式匹配以英文字母开头的行
            if 'Module' in line:
                current_module = line.strip()
                print(current_module)
                continue
            if '[' not in line:  # 如果行中没有 [
                print("无法解析的行:", line)  # 直接输出行的内容
                continue
            word, pro_chinese = line.strip().split('[')
            pronunciation, meaning = pro_chinese.strip().split(']')
            pronunciation = '[' + pronunciation + ']'  # 将括号加回去
            meaning = meaning.rstrip()  # 去掉末尾的换行符
            words = np.append(words, word)
            pronunciations = np.append(pronunciations, pronunciation)
            meanings = np.append(meanings, meaning)

for i in range(len(words)):
    print("单词:", words[i])
    print("音标:", pronunciations[i])
    print("中文:", meanings[i])

在这里插入图片描述

Version 4 结构化数组

  进化为结构化数组

import re
import numpy as np

# 定义结构化数组的数据类型
dt = np.dtype([('word', 'U50'), ('pronunciation', 'U50'), ('meaning', 'U50')])

# 创建空的结构化数组
data = np.array([], dtype=dt)

with open('./word.txt', 'r', encoding='utf-8') as file:
    for line in file:
        if re.match(r'^[A-Za-z*]', line):  # 使用正则表达式匹配以英文字母开头的行
            if 'Module' in line:
                continue
            if '[' not in line:  # 如果行中没有 [
                # print("无法解析的行:", line)  # 直接输出行的内容
                continue
            word, pro_chinese = line.strip().split('[')
            pronunciation, meaning = pro_chinese.strip().split(']')
            pronunciation = '[' + pronunciation + ']'  # 将括号加回去
            meaning = meaning.rstrip()  # 去掉末尾的换行符
            new_data = np.array([(word, pronunciation, meaning)], dtype=dt)  # 创建包含当前单词数据的结构化数组
            data = np.append(data, new_data)  # 将当前单词数据添加到总的结构化数组中

for i in data:
    print(i)

在这里插入图片描述

Version 5 区分单元且打乱顺序

  区分单元且打乱顺序

import re
import numpy as np

# 定义结构化数组的数据类型
dt = np.dtype([('module', 'U50'), ('word', 'U50'), ('pronunciation', 'U50'), ('meaning', 'U50')])

# 创建空的结构化数组
data = np.array([], dtype=dt)

with open('./word.txt', 'r', encoding='utf-8') as file:
    current_module = ""
    for line in file:
        if re.match(r'^[A-Za-z*]', line):  # 使用正则表达式匹配以英文字母开头的行
            if 'Module' in line:
                current_module = line.strip()
                # print(current_module)
                continue
            if '[' not in line:  # 如果行中没有 [
                # print("无法解析的行:", line)  # 直接输出行的内容
                continue
            word, pro_chinese = line.strip().split('[')
            pronunciation, meaning = pro_chinese.strip().split(']')
            pronunciation = '[' + pronunciation + ']'  # 将括号加回去
            meaning = meaning.rstrip()  # 去掉末尾的换行符
            new_data = np.array([(current_module, word, pronunciation, meaning)], dtype=dt)  # 创建包含当前单词数据的结构化数组
            data = np.append(data, new_data)  # 将当前单词数据添加到总的结构化数组中


np.random.shuffle(data)
# 打印打乱顺序后的数组
print(data[0]['word'])
print(len(data))
for d in data:
    print(d)
for d in data:
    if d['module'] == 'Module 1':
        print(d)

在这里插入图片描述
在这里插入图片描述

Version 6 可视化

  可视化

import re
import numpy as np
from PIL import Image, ImageDraw, ImageFont

# 定义结构化数组的数据类型
dt = np.dtype([('module', 'U50'), ('word', 'U50'), ('pronunciation', 'U50'), ('meaning', 'U50')])

# 创建空的结构化数组
data = np.array([], dtype=dt)

with open('./word.txt', 'r', encoding='utf-8') as file:
    current_module = ""
    for line in file:
        if re.match(r'^[A-Za-z*]', line):  # 使用正则表达式匹配以英文字母开头的行
            if 'Module' in line:
                current_module = line.strip()
                print(current_module)
                continue
            if '[' not in line:  # 如果行中没有 [
                print("无法解析的行:", line)  # 直接输出行的内容
                continue
            word, pro_chinese = line.strip().split('[')
            pronunciation, meaning = pro_chinese.strip().split(']')
            pronunciation = '[' + pronunciation + ']'  # 将括号加回去
            meaning = meaning.rstrip()  # 去掉末尾的换行符
            new_data = np.array([(current_module, word, pronunciation, meaning)], dtype=dt)  # 创建包含当前单词数据的结构化数组
            data = np.append(data, new_data)  # 将当前单词数据添加到总的结构化数组中

# 打印数组
print(data[0]['word'])
print(len(data))
for d in data:
    if d['module'] == 'Module 1':
        print(d)


np.random.shuffle(data)
# 打印打乱顺序后的数组
print(data)
# dt = np.dtype([('module', 'U50'), ('word', 'U50'), ('pronunciation', 'U50'), ('meaning', 'U50')])

problem_image = Image.new('RGB', (800, 1200), color='white')
draw = ImageDraw.Draw(problem_image)
# font = ImageFont.truetype("arial.ttf", 25)
c_font = ImageFont.truetype("STKAITI.TTF", 25)  # 华文楷体
e_font = ImageFont.truetype("times.ttf", 25)    # times new Roman

text_y = 100
draw.text((300, 20), 'English Problems', fill='blue', font=e_font)
for i in range(20):
    draw.text((50, text_y), str(i+1)+' '+data[i]['word'], fill='black', font=e_font)
    draw.text((350, text_y), str(i + 21) + ' ' + data[i+20]['meaning'], fill='black', font=c_font)
    text_y += 50

problem_image.save('en_problems_3.png')

# Generate a combined image of the answers
answer_image = Image.new('RGB', (800, 1200), color='white')
draw = ImageDraw.Draw(answer_image)


text_y = 100
draw.text((300, 20), 'English Problems', fill='blue', font=e_font)
for i in range(20):
    draw.text((50, text_y), str(i+1)+' '+data[i]['meaning'], fill='black', font=c_font)
    draw.text((450, text_y), str(i + 21) + ' ' + data[i+20]['word'], fill='black', font=e_font)
    text_y += 50

answer_image.save('en_answers_3.png')

问题:左侧前20英译汉,右侧汉译英:
在这里插入图片描述
答案

在这里插入图片描述

三、txt文件

外研社小学英语五年级下册(三年级起点)单词表(带音标):

Module 1
still[stil]还,仍然
Programme’prəugræm节目
lady['leidi]女士,夫人
life[laif]生活
different['difrənt]不同的
ago[ə’gəu]以前
Interviewer['intɚvjuɚ]采访者
enough[i’nʌf]足够的
television['teliviiʒ(ə)n]电视机
*grandchildren’græn’tʃildrən(外)孙子(女)
change[tʃendʒ]改变,变化
night[nait]夜晚,夜间
work[wɜ:k]工作;劳动;干活儿
field[fi:ld]田地
fire['faiə]火,炉火
orɔ:也不,也没
radio['reidiəu]收音机
telephone['telifəun]电话
couldn`t=could not不能
write[rait]写
hope[həup]希望

Module 2
learnt[lɜ:nt](learn的过去式)学习
taughttɔ:t教,讲授
language['læŋgwidʒ]语言
wroterəut写
dancer['dɑ:nsə®] 舞蹈演员
foreign['fɔrən]外国的
studied’stʌdid学习
hard[hɑ:d]努力地

Module 3
hamburger['hæmbɜ:gə®]汉堡
English['iŋgliʃ]英国(式)的
breakfast['brekfəst]早餐,早饭
lunch[lʌntʃ]午餐,午饭
sandwich['sænwitʃ]三明治
fish and chips炸鱼加炸薯条
traditional[trə’diʃənl]传统的
dish[diʃ]食品;菜肴
very much['veri mʌtʃ]很,非常
gave[geiv](give的过去式)给
tonight[tə’nait]今夜,今晚

Module 4
library['laibrəri]图书馆
student['stju:dnt]学生
sentsent发送,寄
*CD 激光唱片,光盘
idea[ai’diə]主意,想法
put[put]放,安放
*shelf[ʃelf]架子
heavy['hevi]重的,沉的
dictionary['dikʃənri]词典;字典
card[kɑ:d]卡片
library card图书卡,借书证
ask[ɑ:sk]邀请
wrong[rɔ:ŋ]错误的
dear[diə®]哎呀
information[ˌinfə’meiʃn]信息
*e-book电子书
project['prɔdʒekt]项目
guide[gaid]介绍,指南,手册
film[film]电影
as well又,还,也
way[wei]方法,方式
on[ɔn]关于
*topic['tɔpik]话题

Module 5
light[lait]轻的
hard[hɑ:d]困难的,费力的
*broken['brəukən]坏的,破的
department store[di’pɑ:tmənt stɔ:]百货商店
pocket['pɔkit]口袋,兜
umbrella[ʌm’brelə]雨伞
sales assistant[seilz ə’sistənt]售货员,营业员
wheel[wi:l]轮子
easy['i:zi]容易的,不费力的
take[teik]选择要,选择购买
too[tu:]太,过于
try[trai]试,尝试
lovely['lʌvli]美丽的,可爱的;令人愉快的

Module 6
moon[mu:n]月亮,月球
get[ɡet]到达
west[west]西,西部,西方;向西方
parent['peərənt]母亲;父亲;家长
stay[stei]停留
July[dʒu’lai]七月
south[sauθ]南,南部,南方;向南方
remember[ri’membə®]记得
June[dʒu:n]六月
east[i:st]东,东部,东方;向东方
best[best]最好的
north[nɔ:θ]北,北部,北方;向北方
rest[rest]休息
have a rest休息一下
rode[rəud](ride的过去式)骑

Module 7
evening['i:vniŋ]傍晚,晚上
late[leit]近日暮的;近深夜的;时间不早的
worker['wɜ:kə®]工人
factory['fæktri]制造厂;工厂
early['ɜ:li]早的
taxi['tæksi]出租车,计程车
quarter['kwɔ:tə®]一刻钟
to[tu,tə](距整点)差…
worry['wʌri]焦虑,担心

Module 8
paper['peipə®]纸
Chinese[ˌtʃai’ni:z]中国人的
so[səʊ]如此,这样
word[wɜ:d]词,字
drewdru:画
cutkʌt剪,切,割
piece[pi:s]张,片,块
paint[peint](用颜料)绘画,着色
putput放,安放
stick[stik]小木棍,小木条
tied[taid](tie的过去式)扎上,系上
*string[striŋ]线,绳子

Module 9
laugh[lɑ:f]笑
worewɔ:®穿
letter['letə®]信,书信
theatre['θiətə]剧院
women’wimin女性,妇女
actor['æktə®]演员
toldtəuld口述,讲(故事等)
joke[dʒəuk]笑话
after['ɑ:ftə®]在……以后
showʃəu演出,表演
restaurant['restrɔnt]饭店,餐馆
readri:d读
at all[æt ɔ:l]一点都
in[in]在(将来一段时间)之后
another[ə’nʌðə®]另一个
history['histri]历史
ask[ɑ:sk]问,询问
question['kwestʃən]问题
forget[fə’get]忘,忘记
bring[briŋ]带来,拿来
soon[su:n]不久,很快

Module 10
when[wen]在什么时候
end[end]结束,终止
nervous['nɜ:vəs]紧张的,情绪不安的
all right[ɔ:l rait]没事,没问题
airport['eəpɔ:t]机场
ticket['tikit]票
passport['pɑ:spɔ:t]护照
safe[seif]安全的,平安的
pet[pet]宠物
speak[spi:k]说,讲
building['bildiŋ]建筑物
American[ə’merikən]美国的;美国人的;美国人
find out[faind aut]发现,弄清
more[mɔ:®]更多的(量),较多的(量)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/366901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024美赛数学建模B题思路分析 - 搜索潜水器

1 赛题 问题B:搜索潜水器 总部位于希腊的小型海上巡航潜艇(MCMS)公司,制造能够将人类运送到海洋最深处的潜水器。潜水器被移动到该位置,并不受主船的束缚。MCMS现在希望用他们的潜水器带游客在爱奥尼亚海底探险&…

react 之 useCallback

简单讲述下useCallback的使用方法,useCallback也是用来缓存的,只不过是用于做函数缓存 // useCallbackimport { memo, useCallback, useState } from "react"const Input memo(function Input ({ onChange }) {console.log(子组件重新渲染了…

物流自动化移动机器人|HEGERLS三维智能四向穿梭车助力优化企业供应链

智能化仓库/仓储贯穿于物流的各个环节,不局限于存储、输送、分拣、搬运等单一作业环节的自动化,更多的是利用科技手段实现整个物流供应链流程的自动化与智能化,将传统自动化仓储物流各环节进行多维度的有效融合。 例如在数智化物流仓储的建设…

OpenHarmony—Hap包签名工具

概述 为了保证OpenHarmony应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在真机设备上安装、运行、和调试。developtools_hapsigner仓 提供了签名工具的源码,包含密钥对生成、CSR文件生成、证书生成、Profile文件签名、Ha…

华为数通方向HCIP-DataCom H12-821题库(单选题:401-420)

第401题 R1的配置如图所示,此时在R1查看FIB表时,关于目的网段192.168.1.0/24的下跳是以下哪一项? A、10.0.23.3 B、10.0.12.2 C、10.0.23.2 D、10.0.12.1 【答案】A 【答案解析】 该题目考查的是路由的递归查询和 RIB 以及 FIB 的关系。在 RIB 中,静态路由写的是什么,下…

Node.js之内存限制理解_对处理前端打包内存溢出有所帮助

Node.js内存限制理解_对处理前端打包内存溢出有所帮助 文章目录 Node.js内存限制理解_对处理前端打包内存溢出有所帮助Node.js内存限制1. 查看Node.js默认内存限制1. Ndos.js_V20.10.02. Node.js_V18.16.0 2. V8引擎垃圾回收相关Heap organization堆组织 Node.js内存限制 默认情…

(十二)springboot实战——SSE服务推送事件案例实现

前言 SSE(Server-Sent Events,服务器推送事件)是一种基于HTTP协议的服务器推送技术。它允许服务器向客户端发送异步的、无限长的数据流,而无需客户端不断地轮询或发起请求。这种技术可以用来实现实时通信、在线聊天、即时更新等功…

Entity实体设计

Entity实体设计 💡用来和数据库中的表对应,解决的是数据格式在Java和数据库间的转换。 (一)设计思想 数据库Java表类行对象字段(列)属性 (二)实体Entity编程 编码规范 &#x1f4a…

文本检测学习笔记_CTPN

论文地址:https://arxiv.org/pdf/1609.03605.pdf 开源代码:https://github.com/lvliguoren/pytorch_ctpn?tabreadme-ov-file 本文主要的的内容 提出了一种将文本视为由密集排列的具有固定宽度的文本候选区域组成的序列的方法。这些文本候选区域可以通…

三.Linux权限管控 1-5.Linux的root用户用户和用户组查看权限控制信息chmod命令chown命令

目录 三.Linux权限管控 1.Linux的root用户 root用户(超级管理员) su和exit命令 sudo命令 为普通用户配置sudo认证 三.Linux权限管控 2.用户和用户组 用户,用户组 用户组管理 用户管理 getent---查看系统中的用户 三.Linux权限管控…

[每周一更]-(第86期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要: 应用: 利用NLP技术从医疗文档中自动生成病历摘要,以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类: 应用: 使用文本分类技术自动分类法律文件&#xf…

【网络安全实验】snort实现高级IDS

注:本实验分别使用kali和CentOS6.8进行测试,可惜的是使用kali进行实验过程中遇到了困难,未能完成完整实验,而使用CentOS6.8成功完成了完整实验。 实验中用到的软件: https://download.csdn.net/download/weixin_5255…

Spring-集成Web

一、引子 前面我们在Spring集成Junit中为读者引出了Spring善于集成其它框架的优势,而Spring项目不可能仅限于小范围的某个方法的测试,终究会落脚于Web项目上。于是,我们就从这里正式进入Spring集成Web的话题。由于笔者会从原生的Java Web开发…

【Spark实践6】特征转换FeatureTransformers实践Scala版--补充算子

本节介绍了用于处理特征的算法,大致可以分为以下几组: 提取(Extraction):从“原始”数据中提取特征。转换(Transformation):缩放、转换或修改特征。选择(Selection&…

前端常见标签

<li> (List Item)&#xff1a;定义列表中的一个项目&#xff08;项&#xff09; <ul> (Unordered List)&#xff1a;定义无序列表 <ol> (Ordered List)&#xff1a;定义有序列表 <a> (Anchor Tag)&#xff1a;定义超链接 <ul><li>苹…

关于华为应用市场上架,申请权限未告知目的被驳回问题的简单处理方式

关于华为应用市场上架过程中出现的【您的应用在运行时&#xff0c;未同步告知权限申请的使用目的&#xff0c;向用户索取&#xff08;存储、拍照&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。】 使用方式&#xff1a; 1、引入 import permision from "/m…

paddle环境安装

一、paddle环境安装 如pytorch环境安装一样&#xff0c;首先在base环境下创建一个新的环境来安装paddlepaddle框架。首先创建一个新的环境名叫paddle。执行如下命令。 conda create -n paddle python3.8创建好了名叫paddle这个环境以后&#xff0c;进入到这个环境中&#xff…

【Java 数据结构】排序

排序算法 1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2. 常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序2.3.3 快速排序非递归 2.4 归并排…

【Linux C | 网络编程】netstat 命令图文详解 | 查看网络连接、查看路由表、查看统计数据

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

rust gui开发框架选择

作为一个系统编程强大语言&#xff0c;怎么能少得了图形界面的开发 实际上写这篇前我也不知道&#xff0c;于是我问了ai大模型&#xff0c;文心3.5和chatgpt4.0 答案实际上不能满意&#xff0c;最后我做了下筛选 参考博文&#xff1a; rust开发环境配置&#xff1a;链接 一、…