【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 rewith 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:continueif '[' not in line:  # 如果行中没有 [print("无法解析的行:", line)  # 直接输出行的内容continueword, 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 rewords, 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)continueif '[' not in line:  # 如果行中没有 [# print("无法解析的行:", line)  # 直接输出行的内容continueword, 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 npwords, 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)continueif '[' not in line:  # 如果行中没有 [print("无法解析的行:", line)  # 直接输出行的内容continueword, 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:continueif '[' not in line:  # 如果行中没有 [# print("无法解析的行:", line)  # 直接输出行的内容continueword, 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)continueif '[' not in line:  # 如果行中没有 [# print("无法解析的行:", line)  # 直接输出行的内容continueword, 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)continueif '[' not in line:  # 如果行中没有 [print("无法解析的行:", line)  # 直接输出行的内容continueword, 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 Romantext_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 += 50problem_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 += 50answer_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ɔ:®]更多的(量),较多的(量)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于环境配置没问题,pnpm能安装却无法使用的问题

pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 pnpm i ~~~~ CategoryInfo : ObjectNotFound: (pn…

flutter开发实战-Camera自定义相机拍照功能实现

flutter开发实战-Camera自定义相机拍照功能实现 一、前言 在项目中使用image_picker插件时候,在android设备上使用无法默认设置前置摄像头(暂时不清楚什么原因),由于项目默认需要使用前置摄像头,所以最终采用自定义…

面试经典150题 -- 区间(总结)

总的链接 : 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台最经典 150 题,掌握面试所有知识点https://leetcode.cn/studyplan/top-interview-150/ 228 汇总区间 直接用双指针模拟即可 ; class Solution { public…

Linux 指令

Linux 指令 1 登入/登出1.1 关机1.2 重启1.3 切用户 2 文件和目录管理2.1 目录操作2.2 文件操作2.3 文件内容操作2.4 归档及压缩 3 文本编辑器 vim3.1 命令模式3.2 输入模式3.3 末行模式 4 用户和组管理4.1 用户和组帐号概述4.1.1 用户帐号4.1.2 UID和GID 4.2 用户管理 5 组管理…

拥抱个人成长与社会进步:自我认知与开放心态的相互影响

拥抱个人成长与社会进步:自我认知与开放心态的相互影响 Embracing Personal Growth and Societal Progress: The Interplay of Self-Awareness and Open-mindedness 一、引言 I. Introduction 在当今急速发展的时代,个人成长与社会进步交织在一起&…

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

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

后端软件三层架构

一、三层架构简介 三层架构是软件开发中广泛采用的一种经典架构模式,其核心价值在于通过清晰的任务划分来提高代码的可维护性和重用性。具体来说,三层架构主要包括以下三个层次: 持久层(DAO层):这一层主要…

提升 Web 请求效率:Axios request 封装技巧

在开发中,为了提高效率,通常对 Axios 进行封装,简化了请求的发送和对响应的处理。同时,统一错误处理机制有助于维护代码的清晰和一致性。本文介绍了一些高效封装 Axios 请求的方法。 封装理念 通过创建一个请求函数,我…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(四)NodeJS入门——网络基础概念

041_网络基础概念_IP的介绍 hello,大家好,我们来一起认识一下IP。 在开始介绍 IP 之前,我们首先来介绍一个场景,方便大家去理解 IP 这个概念。比如这会儿强哥正在成都,然后还有另外一个小伙伴,谁呢&#x…

2023.02.03

复习进程间通信的7种方式,总结出他们的优点。 一 内核提供的原始通信方式有三种 1、有名管道和无名管道 有名管道和无名管道都属于管道通信,通过在内核空间创建一个特殊的文件(管道文件),一个进程将数据写入管道&a…

互补滤波算法介绍+SCL源代码(收放卷线速度处理)

工程上对测量信号进行处理,我们可以利用低通滤波器,还可以利用滑动平均值滤波等,关于低通滤波器和滑动平均值滤波器,可以参考专栏相关文章,常用链接如下: 博途PLC一阶滞后低通滤波器(支持采样频率设置) https://rxxw-control.blog.csdn.net/article/details/132972093h…

带着问题读源码——Spring MVC是怎么找到接口实现类的?

引言 我们的产品主打金融服务领域,以B端客户为我们的核心合作伙伴,然而,我们的服务最终将惠及C端消费者。在技术实现上,我们采用了公司自主研发的微服务框架,该框架基于SpringBoot,旨在提供高效、可靠的服…

MyBatis笔记梳理

文章目录 什么是 MyBatis?前期准备依赖配置文件mapper利用注解 增、删、改、查查增改删#{} 和 ${} 的区别类型别名 动态sqlwhere ifforeachsql引用不常用标签 多表查询多对一(一对一)一对多多对多多表查询 个人理解 延迟加载概念使用场景延迟…

Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用

一、前言 之前在做倍速这个功能的时候,发现快速播放会有滴滴滴的破音出现,正常1倍速没有这个问题,尽管这个破音间隔很短,要放大音量才能听到,但是总归是不完美的,后面发现,通过修改qaudiooutpu…

PyTorch中tensor.backward()函数的详细介绍

backward() 函数是PyTorch框架中自动求梯度功能的一部分,它负责执行反向传播算法以计算模型参数的梯度。由于PyTorch的源代码相当复杂且深度嵌入在C底层实现中,这里将提供一个高层次的概念性解释,并说明其使用方式而非详细的源代码实现。 在P…

2024年美赛数学建模E题思路分析 - 财产保险的可持续性

# 1 赛题 问题E:财产保险的可持续性 极端天气事件正成为财产所有者和保险公司面临的危机。“近年来,世界已经遭受了1000多起极端天气事件造成的超过1万亿美元的损失”。[1]2022年,保险业的自然灾害索赔人数“比30年的平均水平增加了115%”。…

[Java]JDK 安装后运行环境的配置

这篇文章用于介绍jdk.exe安装之后的运行环境配置,以及如何检查是否安装成功 检查自己是否安装jdk环境,记住这个安装的改的路径: (应该要安装2个,一个是jdk,一个是jre) 安装后的在文件夹的样子(路径自定义,在java下面): 参考如下…

【Springcloud篇】学习笔记二(四至六章):Eureka、Zookeeper、Consul

第四章_Eureka服务注册与发现 1.Eureka基础知识 1.1Eureka工作流程-服务注册 1.2Eureka两大组件 2.单机Eureka构建步骤 IDEA生成EurekaServer端服务注册中心,类似于物业公司 EurekaClient端cloud-provider-payment8081将注册进EurekaServer成为服务提供者provide…

MySQL对JSON数据内对象进行更新

UPDATE表名 SET字段名 CASE WHENJSON_EXTRACT(字段名,$.字段里的对象名.对象内部字段名) IS NOT NULLTHENJSON_SET (字段名,"$.字段里的对象.对象内部字段",更新后的值)ELSEJSON_INSERT (字段名,"$.字段里的对象名",JSON_OBJECT("对象内部字段名&quo…

Pytest框架测试

Pytest 是什么? pytest 能够支持简单的单元测试和复杂的功能测试;pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试;使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。pytest 支持 315 种以上的插件;为什么要选择 Pytest 丰…