实践项目六:PDF全英论文解析和翻译
来源:互联网 发布:餐厅收银软件 免费 编辑:程序博客网 时间:2024/06/05 05:30
环境
- 操作系统:ubuntu 16.04
- python版本: python2
功能
将pdf格式的全英论文解析并翻译为中文,结果保存在txt文件中。
分析
pdf全英论文是没法直接翻译的,需要将pdf格式的转换为其他格式,正巧python有个pdfminer包可以解析pdf文档,同时可以保存为txt格式的,我们只需在保存之前翻译就可以达到效果。
本项目分为两部分:解析pdf 和 翻译。
解析pdf
主要用到PDFMiner:
PDFMiner是一种从PDF文档中提取信息的工具。 与其他与PDF相关的工具不同,它完全侧重于获取和分析文本数据。 PDFMiner允许人们获取页面中文本的确切位置,以及其他信息,如字体或行。 它包括一个PDF转换器,可以将PDF文件转换为其他文本格式(如HTML)。 它具有可扩展的PDF解析器,可以用于文本分析的其他目的。
安装pdfminer :http://jingyan.baidu.com/article/3aed632e0490e570108091aa.html。
翻译
翻译部分在项目五有具体的实现详解,传送门:http://blog.csdn.net/xunalove/article/details/74999761
实现代码
#!/usr/bin/python2#-*- coding:utf-8 -*-import urllib,hashlibimport randomimport requests,sysfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.pdfdocument import PDFDocumentfrom pdfminer.pdfparser import PDFParserfrom pdfminer.pdfpage import PDFPage,PDFTextExtractionNotAllowedfrom pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreterfrom pdfminer.pdfdevice import PDFDevicefrom pdfminer.layout import LAParams,LTTextBoxHorizontalfrom pdfminer.converter import PDFPageAggregatorimport sysreload(sys)sys.setdefaultencoding('utf-8')def getTransText(text): #翻译 q = text fromLang = 'auto' #翻译源语言=自动检测 toLang1 = 'auto' #译文语言 = 自动检测 appid = '20170711000064108' salt = random.randint(32768, 65536) secretKey = '0y2JkztWWwGFfgivKz2N' #密钥 #生成sign sign = appid+q+str(salt)+secretKey #计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码) m1 = hashlib.md5(sign.encode('utf-8')) sign = m1.hexdigest() #计算完整请求 myurl = '/api/trans/vip/translate' myurl = myurl+'?appid='+appid+'&q='+q+'&from='+fromLang+'&to='+toLang1+'&salt='+str(salt)+'&sign='+sign url = "http://api.fanyi.baidu.com"+myurl # 发送请求 url = url.encode('UTF-8') res = requests.get(url) #转换为字典类型 res = eval(res.text) return (res["trans_result"][0]['dst'])def pdf_to_txt(): fp = open("/home/xuna/桌面/python/1.pdf","rb") #获取文档对象,把路径换成自己的就行,读写打开一个二进制文件 parser = PDFParser(fp) #创建一个与文档相关联的解释器 doc = PDFDocument(parser) #PDF文档对象存储文档结构 if not doc.is_extractable: #检查文件是否允许文本提取 raise PDFTextExtractionNotAllowed resource = PDFResourceManager(caching=False) #创建PDF资源管理器 laparam = LAParams() #参数分析器 device = PDFPageAggregator(resource,laparams = laparam) #创建一个聚合器 interpreter = PDFPageInterpreter(resource,device) #创建PDF页面解释器 #循环遍历列表,每次处理一个page内容 for page in PDFPage.create_pages(doc): interpreter.process_page(page) #接受该页面的LTPage对象 layout = device.get_result() #这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象 #一般包括LTTextBox,LTFigure,LTImage,LTTextBoxHorizontal等等 result="" s=0 for x in layout: #如果x是文本对象的话 if(isinstance(x,LTTextBoxHorizontal)): with open('/home/xuna/桌面/python/3.txt','a') as f: res1 = x.get_text() result+=res1 result+='\n' res1 = res1.replace('\n',' ') #处理换行 res2 = getTransText(res1).decode('unicode_escape').encode('utf8') result+=res2 result+='\n' f.write(result + '\n') return resultprint (pdf_to_txt())
运行效果
遇到的问题:
在解析之后不能立即翻译,里面含有停止词 ‘\n ’ ,用replace()函数将’ \n ’ 替换成‘ ’
阅读全文
1 0
- 实践项目六:PDF全英论文解析和翻译
- Raft算法国际论文全翻译
- PDF解析模块-PDFMiner开发手册[翻译]
- python实践项目(六)
- 论文翻译
- Gson项目使用全解析
- 高频率数据采集、解析和存储(结合项目写的小论文)
- 项目管理实践【六】自动同步数据库
- 项目管理实践【六】自动同步数据库
- JAVA读取和操作PDF系列《六》
- 第七周项目六C/C++数据结构实践——停车场模拟(栈和队列综合)
- 全栈开发技术栈---项目实践
- pdf论文图中数据自动扫描,识别和获取
- HMM经典介绍论文【Rabiner 1989】翻译(六)——概率计算问题
- haystack论文翻译以及和TFS的对比
- AlexNet学习笔记-论文翻译和理解(一)
- AlexNet学习笔记-论文翻译和理解(二)
- Gradlle 全解析(Android官方技术文档翻译)
- Quartz 定时器动态创建任务和修改执行时间修改后出现立即执行情况
- linux下cpu参数的参看和说明
- 研究Win32 GUI中SetActiveWindow与SetFocus和窗口消息
- mongodb的增删改查操作指南
- linux下定时执行php脚本
- 实践项目六:PDF全英论文解析和翻译
- Android中图片压缩方式总结
- 备忘:Hibernate5中调用存储过程
- jdk版本不兼容解决
- 无我编程的十大戒律
- OPTICS:通过点排序识别聚类结构的密度聚类算法
- java多线程共同工作,利用synchronized关键字
- Linux的Terminal中如何生成静态库以及如何使用静态库
- 开发者论坛一周精粹(第二十期) :晒往期云栖大会的照片或感想,赢2017杭州云栖大会门票