python如何提取英语pdf内容并翻译
作者:Zuolyme 发布时间:2023-06-13 13:37:27
标签:python,翻译,pdf
本文实例为大家分享了python提取英语pdf内容并翻译的具体代码,供大家参考,具体内容如下
前期准备工作:
翻译接口: 调用的是百度翻译的api (注册后,每个月有2百万的免费翻译字符数。)
pdfminer3k: pdfminer3k是pdfminer的Python 3端口。 PDFMiner是一种从PDF文档中提取信息的工具。 与其他PDF相关工具不同,它完全专注于获取和分析文本数据。 PDFMiner允许获取页面中文本的确切位置,以及字体或线条等其他信息。 它包括一个PDF转换器,可以将PDF文件转换为其他文本格式(如HTML)。 它有一个可扩展的PDF解析器,可用于其他目的而不是文本分析。
要解析PDF至少需要两个类:PDFParser 和 PDFDocument,PDFParser 从文件中提取数据,PDFDocument保存数据。另外还需要PDFPageInterpreter去处理页面内容,PDFDevice将其转换为我们所需要的。PDFResourceManager用于保存共享内容例如字体或图片。
安装:pip install pdfminer3k
前期工作准备好后,即可开始代码编写。
# -*- coding: utf-8 -*-
import sys
import io
"""
Created on Sun Mar 3 12:22:49 2019
@author: Ben
"""
import importlib
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
#from PyPDF2.pdf import PdfFileReader, PdfFileWriter, ContentStream
import requests
import string
import time
import hashlib
import json
##初始化
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读取
def getDataUsingPyPDF(filename):
parser = PDFParser(open(pdffile,'rb')) #以二进制打开文件 ,并创建一个pdf文档分析器
doc = PDFDocument() ##创建一个pdf文档
#将文档对象和连接分析器连接起来
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize()
#判断该pdf是否支持txt转换
if doc.is_extractable:
#创建一个PDF设备对象
rsrcmgr = PDFResourceManager()
#创建一个pdf设备对象
laparamas = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparamas)
#创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
contents = "" #保存读取的text
#依次读取每个page的内容
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result() # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性,
#在windows下,新文件的默认编码是gbk编码,所以我们在写入文件的时候需要设置一个编码格式,如下:
for x in layout:
if(isinstance(x,LTTextBoxHorizontal)):
results = x.get_text()
results = results.replace("\n","") #去掉换行符 因为排版问题 有的换行导致句子中断
contents += (results)
##为了看着舒服,每一句为一行
saveText(contents.replace(".",".\n"),ENtextfile)
return contents
## 将读取的content以txt格式存放到本地
def saveText(content,Textfile):
with open(Textfile,"w",encoding='utf-8') as f:
f.write(content)
## 翻译从pdf提取的content
def translate(content):
salt = str(time.time())[:10]
final_sign = str(api_id) + content + salt+ cyber
final_sign = hashlib.md5(final_sign.encode("utf-8")).hexdigest()
# from to 代表翻译的语言
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)
return json_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<clist.__len__()):
chinese += (translate(clist[i]).replace("\n","。"))
#chinese += '\n'
i+=1
saveText(chinese,CNtextfile)
print("翻译结束,ok")
来源:https://blog.csdn.net/zlyaxixuexi/article/details/88088899


猜你喜欢
- 1.查看Anaconda中有哪些虚拟环境及所在目录:在桌面搜索框中输入Anaconda Prompt并打开输入命令conda env lis
- ASPJPEG组件是Persits出品的共享软件,试用期为30天,您可以在这里下载:http://www.persits.com/aspjp
- 在 Python 中对一个可迭代对象进行排序是很常见的一个操作,一般会用到 sorted() 函数num_list = [4, 2, 8,
- 1 安装pyqt51.1 安装pyqt5pip install PyQt51.2 安装pyqt5常用工具包pip install PyQt5
- Python获取时间范围内日期列表和周列表的函数 1、获取日期列表# -*- coding=utf-8 -*-import datetime
- 我们提倡尽可能使用CSS,而且我们常常能做到这一点。现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计。但是有时候
- 报错:raise MissingSchema(requests.exceptions.MissingSchema: Invalid URL
- 一、85%的广告没人看解读:如何挤进那15%的成功广告中去,吸引了读者就是成功了一半。Quester视角:反过来讲,只有不到1/5的广告能吸
- 简介ORA-10458: standby database requires recoveryORA-01196: 文件 1 由于介质恢复会
- 一.概述:Selenium是一个用于Web应用程序测试的工具,本文使用的是Selenium 2。Selenium就是一套类库,不依赖于任何测
- 用js判断复选框是否选中及选中个数,以前经常有朋友提到复选框的选中问题,这段代码可以帮你解决这个问题,而且它还可以判断你选择了多少个复选框,
- 功能:返回字符、二进制、文本或图像表达式的一部分语法:SUBSTRING ( expression, start, length )&nbs
- 自动化测试验证码登陆的三种解决方式1,找开发关闭验证码2,找开发设置万能验证码3,使用第三方接口识别验证–不能100%识别,比自己搭建的oc
- 展示:一般情况下序列化得到的外键的内容只是id:...{ fields: { uat_date: "2015-07-
- 昨天公司的网络更换,然后在使用git操作代码的时候,遇见了标题所述问题。仅以此文,记录该问题的解决过程。首先第一步: 得到本机的I
- 前言文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。通过网上爬虫获取了全国所
- 微信扫码支付分为两种模式,模式一比较复杂,需要公众号配置回调地址。模式二比较简单,只需要在代码中配置回调地址就可以了。我这次使用的是模式二。
- 本文实例为大家分享了Python求多幅图像栅格值的平均值,供大家参考,具体内容如下本程序所采用的方法并不是最优方法,ARCGIS已经提供了相
- union all在MySQL5.6下的表现Part1:MySQL5.6.25[root@HE1 ~]# MySQL -uroot -pEn
- 因为即将开始淘宝的项目,在前端方面必然要深入了解taobao ued规范,规范还是比较全的,只是对taobao.com的编码和字符集的选择有