python如何提取英语pdf内容并翻译
本文实例为大家分享了python提取英语pdf内容并翻译的具体代码,供大家参考,具体内容如下
前期准备工作:
翻译接口:调用的是百度翻译的api(注册后,每个月有2百万的免费翻译字符数。)
pdfminer3k:pdfminer3k是pdfminer的Python3端口。PDFMiner是一种从PDF文档中提取信息的工具。与其他PDF相关工具不同,它完全专注于获取和分析文本数据。PDFMiner允许获取页面中文本的确切位置,以及字体或线条等其他信息。它包括一个PDF转换器,可以将PDF文件转换为其他文本格式(如HTML)。它有一个可扩展的PDF解析器,可用于其他目的而不是文本分析。
要解析PDF至少需要两个类:PDFParser和PDFDocument,PDFParser从文件中提取数据,PDFDocument保存数据。另外还需要PDFPageInterpreter去处理页面内容,PDFDevice将其转换为我们所需要的。PDFResourceManager用于保存共享内容例如字体或图片。
安装:pipinstallpdfminer3k
前期工作准备好后,即可开始代码编写。
#-*-coding:utf-8-*- importsys importio """ CreatedonSunMar312:22:492019 @author:Ben """ importimportlib importlib.reload(sys) frompdfminer.pdfparserimportPDFParser,PDFDocument frompdfminer.pdfinterpimportPDFResourceManager,PDFPageInterpreter frompdfminer.converterimportPDFPageAggregator frompdfminer.layoutimportLTTextBoxHorizontal,LAParams frompdfminer.pdfinterpimportPDFTextExtractionNotAllowed #fromPyPDF2.pdfimportPdfFileReader,PdfFileWriter,ContentStream importrequests importstring importtime importhashlib importjson ##初始化 api_url="http://api.fanyi.baidu.com/api/trans/vip/translate" api_id=""##申请的百度翻译接口的id cyber=""##申请的百度翻译接口的password pdffile="multinet.pdf"##处理的pdf ENtextfile="ENmultinet.txt"##存储提取的txt CNtextfile="CNmultinet.txt"##存储翻译的结果 isTranslate=False##是否将提取的英文翻译为中文 ##处理PDF ##读取PDF的内容filename是待处理的PDF的名字 ###使用PDFminer读取 defgetDataUsingPyPDF(filename): parser=PDFParser(open(pdffile,'rb'))#以二进制打开文件,并创建一个pdf文档分析器 doc=PDFDocument()##创建一个pdf文档 #将文档对象和连接分析器连接起来 parser.set_document(doc) doc.set_parser(parser) doc.initialize() #判断该pdf是否支持txt转换 ifdoc.is_extractable: #创建一个PDF设备对象 rsrcmgr=PDFResourceManager() #创建一个pdf设备对象 laparamas=LAParams() device=PDFPageAggregator(rsrcmgr,laparams=laparamas) #创建一个PDF解释器对象 interpreter=PDFPageInterpreter(rsrcmgr,device) contents=""#保存读取的text #依次读取每个page的内容 forpageindoc.get_pages(): interpreter.process_page(page) layout=device.get_result()#这里layout是一个LTPage对象里面存放着这个page解析出的各种对象一般包括LTTextBox,LTFigure,LTImage,LTTextBoxHorizontal等等想要获取文本就获得对象的text属性, #在windows下,新文件的默认编码是gbk编码,所以我们在写入文件的时候需要设置一个编码格式,如下: forxinlayout: if(isinstance(x,LTTextBoxHorizontal)): results=x.get_text() results=results.replace("\n","")#去掉换行符因为排版问题有的换行导致句子中断 contents+=(results) ##为了看着舒服,每一句为一行 saveText(contents.replace(".",".\n"),ENtextfile) returncontents ##将读取的content以txt格式存放到本地 defsaveText(content,Textfile): withopen(Textfile,"w",encoding='utf-8')asf: f.write(content) ##翻译从pdf提取的content deftranslate(content): salt=str(time.time())[:10] final_sign=str(api_id)+content+salt+cyber final_sign=hashlib.md5(final_sign.encode("utf-8")).hexdigest() #fromto代表翻译的语言 paramas={ 'q':content, 'from':'en', 'to':'zh', 'appid':'%s'%api_id, 'salt':'%s'%salt, 'sign':'%s'%final_sign } my_url=api_url+'?appid='+str(api_id)+'&q='+content+'&from='+'zh'+'&to='+'en'+'&salt='+salt+'&sign='+final_sign response=requests.get(api_url,params=paramas).content content=str(response,encoding="utf-8") json_reads=json.loads(content) returnjson_reads['trans_result'][0]['dst']+"" ### content=getDataUsingPyPDF(pdffile) print("读取pdf成功,将其保存为txt格式") if(isTranslate): clist=content.split(".")#split()通过指定.将英文分成多个句子 i=0 chinese="" print("一共有"+str(clist.__len__())+"行需要翻译") print("开始翻译...请耐心等待") while(i以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。