实践项目六:PDF全英论文解析和翻译

xiaoxiao2021-02-28  97

环境

操作系统: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,hashlib import random import requests,sys from pdfminer.converter import PDFPageAggregator from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfparser import PDFParser from pdfminer.pdfpage import PDFPage,PDFTextExtractionNotAllowed from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter from pdfminer.pdfdevice import PDFDevice from pdfminer.layout import LAParams,LTTextBoxHorizontal from pdfminer.converter import PDFPageAggregator import sys reload(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 result print (pdf_to_txt())

运行效果

遇到的问题:

在解析之后不能立即翻译,里面含有停止词 ‘\n ’ ,用replace()函数将’ \n ’ 替换成‘ ’

转载请注明原文地址: https://www.6miu.com/read-38484.html

最新回复(0)