python-docx高亮单词_python查找单词高亮显示-程序员宅基地

技术标签: python  First Project  

最近在读经济学人,阅读的时候遇到不认识的单词不想停下来查词典,我寻思如果这些单词的中文解释自动标注在旁边就好了。之前我已经做了个小工具(link),阅读的时候运行程序不断读取剪切板里的英文单词,并生成对应的中文解释,但是我无法在手机上使用程序。为了解决这个问题,我需要利用计算机将文章里我可能不认识的单词自动翻译并标注,这样省去了手机上阅读时的查询过程,从而实现流畅阅读。
############################################################
代码思路
1.以雅思词库(7600)作为我认识的词汇,创建excel文件word_list
(将来会将更多单词写入文件,并利用excel排序维持有序性,也可导出单词到其他英语学习软件进行复习)
2.对文章里的每一个单词,判断是否存在于词库,不存在则写入highlight.txt
(英语中动词可能有不同形式compete-competed-competing,名词可能有复数,解决方案是进行匹配忽略每个单词的后三位,单词长度少于6位的视为简单词,不进行匹配)
3.查找并高亮word文档里出现在highlight.txt文件中的单词
4.翻译highlight.txt文件中的单词写入translate.txt
############################################################
代码实现
1.使用python-docx处理word文档

#得到文章里的每一个单词
document = Document('text.docx')
fullText=[]
for p in document.paragraphs:
    fullText.append(p.text)
str=' '
fullText=str.join(fullText)
fullText = re.sub('[^a-zA-Z ]','',fullText)#将除字母之外的字符去掉,如1000,',……
arr__test =fullText.split()

2.使用openpyxl将excel中的一列转换成一个数组
在这里插入图片描述

#得到词库里的每一个单词
f_highlight = open('highlight.txt','w')
wb=openpyxl.load_workbook('word_list.xlsx')
sheet= wb.active
arr_word_list=list(sheet.columns)[0]

3.excel里的单词已经按照字典序排列,使用二分法判断里的文章单词是否存在于词库(查找结束后会自动打开highlight,txt,有需要的话可以手动删一下地点名词和人名,加快翻译速度)

def binarySearch (arr, l, r, x):
    if r >= l:
        mid = int(l + (r - l)/2)
        if cpr(arr[mid].value,x)==0:
            return 1
        elif cpr(arr[mid].value,x)==1:
            return binarySearch(arr, l, mid-1, x)
        else:
            return binarySearch(arr, mid+1, r, x)
    else:
        return 0
#判断里的文章单词是否存在于词库
for i in range(len(arr__test)):
    if(len(arr__test[i])>5):
        word=arr__test[i].lower()
        result = binarySearch(arr_word_list, 0, len(arr_word_list)-1, word)
        if result==0:
            f_highlight.write(word+"\n");
f_highlight.close()
subprocess.call("highlight.txt",shell=True)
os.system("pause");

4.在word文档中查找并高亮已经写入highlight.txt的单词
在这里插入图片描述

with open('highlight.txt') as f_highlight:
    arr_highlight = f_highlight.read().splitlines()
    for j in range(len(arr_highlight)):
        for paragraph in document.paragraphs:
            if arr_highlight[j] in paragraph.text:
                x = paragraph.text.split(arr_highlight[j])
                #切割后的文本保留在x,删除原有run,将文本内容重新写入段落
                #来实现高亮效果
                paragraph.clear()
                for i in range(len(x)-1):
                    paragraph.add_run(x[i])
                    font = paragraph.add_run(arr_highlight[j]).font
                    font.highlight_color = WD_COLOR_INDEX.YELLOW
                paragraph.add_run(x[-1])
    #统一文档字体样式
    font = document.styles['Normal'].font
    font.name = 'Roboto'
    font.size = Pt(10.5)
    document.save('text.docx')
    f_highlight.close()

paragraph 内部根据不同的文字格式, 划分为一个个的内联块(run),高亮的过程先定位特定单词的位置,将段落切割成特定单词前的句子,特定单词,特定单词后的句子,进而可以对特定单词增加高亮效果。
该方法得到的文档字体样式不统一,需要统一文档字体样式。
5.进行翻译
在这里插入图片描述

f_translate = open('translate.txt','a')
    for i in range(len(arr_highlight)):
        res = requests.get('https://www.youdao.com/w/eng/' + arr_highlight[i]+'/#keyfrom=dict2.index')
        res.raise_for_status()
        exampleSoup = bs4.BeautifulSoup(res.text)
        type(exampleSoup)
        elems = exampleSoup.select('#phrsListTab .trans-container ul li')
        f_translate.write(arr_highlight[i]+" : ")
        for elems in elems:
          str=elems.getText()
          f_translate.write(str+"\n")
    f_translate.close()
    subprocess.call("translate.txt",shell=True)
    os.remove("translate.txt")
    os.remove("highlight.txt")

############################################################
参考材料
python-docx笔记心得
python-docx官方文档
highlight text using python-docx

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aren8/article/details/107030827

智能推荐

学习学习再学习(转)-程序员宅基地

文章浏览阅读3k次,点赞36次,收藏14次。http://lixiaolai.com/alpha/on-learning/学习学习再学习Table of Contents前言a) 关于《学习学习再学习》b) 写作风格1. 学习是意识问题2. 成功需要先例3. 学习是一辈子的事情4. 专家心态5. 读书只有一种:精读6. 选书基本原则6.1 出版社6.2 作者6.3 版次_学习

编程实现多表替代密码加密_js 实现多表置换加密的代码-程序员宅基地

文章浏览阅读5.9k次。安全课老师布置了一道作业题,以下是三种不同的语言写的。编程实现多表替代密码加密明文中奇数位字母由表1加密,偶数位字母由表2加密。解法一(Python): List_PA = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']List_..._js 实现多表置换加密的代码

机器人门禁控制盒怎么接线方法_一文读懂弱电工程门禁系统知识,有施工规范,有安装教程...-程序员宅基地

文章浏览阅读1k次。门禁系统我们是见过使用最多的系统,所以有些门禁知识我们是必须掌握的,比如今天的门禁系统施工规范,大家可以学习一下正文:一、 电缆1、RS-485总线电缆采用通讯电缆屏蔽双绞线,阻抗为120欧(超5类线)2. 读卡数据线采用八芯屏蔽通讯电缆。3. 接地电缆采用单线铜芯电源线,阻抗≤4欧。二、 布线规则1. 总线采用统一型号的电缆,不得在不同段使用不同型号(厂家)的电缆。2. 总线布线时避免分支,如果..._门磁开关接什么线

集成显卡安装pytorch_intel 显卡怎么安装pytorch-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏45次。Inter集成显卡安装pytorch安装pytorch计算机右键“管理”->“设备显示器”->“显示适配器”,查看显卡。我的电脑只有Inter的集成显卡,没有独显。刚开始接触,对GPU不懂,查了些资料,了解到一些内容。GPU可以认为是显卡的CPU,主要处理高度线程化的并行处理任务(大规模计算任务)。CUDA是面向Nvidia的GPU的,所以,如果要搭建CUDA环境必须要有nvidia显卡。集成显卡是显卡集成在主板上的。但是不管是集显还是独显都有GPU。安装pytorchpytorch_intel 显卡怎么安装pytorch

模拟CMOS集成电路设计中的gm/id设计方法及用Cadence Virtuoso IC617仿真有关参数曲线-程序员宅基地

文章浏览阅读5w次,点赞216次,收藏909次。模拟CMOS集成电路设计中的gm/id设计方法及用Cadence Virtuoso IC617仿真有关参数曲线_gm/id

windows自动启动程序并登陆账号密码的VBS脚本_win7自动重启脚本写入账号-程序员宅基地

文章浏览阅读1w次,点赞8次,收藏36次。windows自动启动程序并登陆账号密码的VBS脚本备注:这是VBS脚本,中间的TAB次数根据不同的程序会有不同的差异,请自行调整 类似qq一类的程序,经测试可以实现,其他程序没有尝试,初学者,如有疑问可下方评论沟通。dim programprogram="程序路径"set Wshell=CreateObject("Wscript.Shell")set oexec=Wshell.E..._win7自动重启脚本写入账号

随便推点

word2dec的算法-程序员宅基地

文章浏览阅读494次。词向量的设计算法:1:one-hot represention:就是用一个很长的向量来表示一个词,向量的长度为词典D的大小N,向量的分量只有一个1,其余全为0.1的位置对应该词在词典中的索引。但这种词向量表示有一些缺点,如容易受维数灾难的困扰,尤其是将其用于Deep Learning 场景时;也不能能很好的刻画词与词之间的相似性。2::Distributed Representation:通过训练..._word2dec

市政管网检测机器人收费标准_大冶市水库大坝检测检修费用,市政管网检测机器人多少钱...-程序员宅基地

文章浏览阅读238次。当由上而下激光切割时,一旦火苗历经易燃气体集聚处便会造成可爆。水面和水中全部工作员,任何时刻留意观查并避免 液體或汽体物质的泄露防止在水面集聚造成起火或造成有害和环境污染等安全事故。为避免 因水中打火和氧割全过程中的淬火造成可爆,除在气路主管处安裝回火防止器外,还应在割具柄与供支气管中间安裝防爆阀,它是由止逆阀和火苗消除器构成,前面一种避免 易燃气体倒注入管,后面一种是万一火苗根据止逆阀,但是火苗..._无人潜航器检测管网

紫光同创国产FPGA学习之Design Editor_紫光同创ide如何查看fpga的布局-程序员宅基地

文章浏览阅读5.7k次,点赞2次,收藏18次。这一篇也是从紫光参考书里面拷贝出来的。这个design editor我很少用。你们凑合的看吧。一、 功能介绍该文档详细描述了Design Editor(下文简称DE)的各项功能,使用方法。Design Editor支持查看芯片结构、查看布局布线结果、手动修改布局布线结果以及输入命令来执行各种手动布局布线操作等功能。Design Editor界面如图所示:图 1- 1 ..._紫光同创ide如何查看fpga的布局

基于MATLAB的主成分分析(PCA)图像重建_pca主成分重建-程序员宅基地

文章浏览阅读119次。本文将介绍如何使用MATLAB实现基于PCA的图像重建。重建图像:使用投影系数和选定的主成分进行重建,将重建后的图像向量重新转换为图像矩阵,并显示重建后的图像。请注意,上述代码仅为示例,实际应用中还需要考虑数据预处理、参数选择等问题,以及适当的性能评估和结果分析。选择主成分:选择前k个特征向量作为主成分,这里选择了前100个主成分。计算投影系数:将图像向量投影到选定的主成分上,得到投影系数。操作符将灰度图像矩阵转换为向量,以便进行PCA分析。通过以上步骤,我们可以实现基于PCA的图像重建。_pca主成分重建

ZZULIOJ 1048阶乘表_输入一个正整数n(n<=20),输出1到n之间阶乘表。-程序员宅基地

文章浏览阅读216次。ZZULIOJ 1048阶乘表题目描述输入一个正整数n(n<=20),输出1到n之间阶乘表。输入只有一个正整数n。输出1到n之间的阶乘表,格式见输出样例。每行两个数据,第一个数据占4列,第二个数据占20列,左对齐。样例输入 Copy5样例输出 Copy1 1 2 2 3 6 4 24 5 120 _输入一个正整数n(n<=20),输出1到n之间阶乘表。

GEE学习01--配置Python与Jupyter Notebook_arcgispro notebook 编译器位置-程序员宅基地

文章浏览阅读691次。我这里有三个Python编译器,一个是Pro自带的,一个是Clone的,一个是微软应用商店的路径:xxx/AppData/Local/Microsoft/WindowsApps。这里我不是很懂,两种方式启动的时候,启用的编译器是不同的两个,但是他们的内核是否都是一个。首先,使用Arcgis Pro克隆了Python,原先的Pro自带和clone的Python都要确保在系统变量中设置了Path。因为我的arcgis pro当前使用的python是clone的,所以命令提示符内也是调用的克隆的python。_arcgispro notebook 编译器位置