环境
操作系统: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
实现代码
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 = appid+q+str(salt)+secretKey
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)
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
resource = PDFResourceManager(caching=
False)
laparam = LAParams()
device = PDFPageAggregator(resource,laparams = laparam)
interpreter = PDFPageInterpreter(resource,device)
for page
in PDFPage.create_pages(doc):
interpreter.process_page(page)
layout = device.get_result()
result=
""
s=
0
for x
in layout:
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 ’ 替换成‘ ’