python如何提取英语pdf内容并翻译


Posted in Python onMarch 03, 2020

本文实例为大家分享了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")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python如何实现excel数据添加到mongodb
Jul 30 Python
详解python中的文件与目录操作
Jul 11 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
python使用rpc框架gRPC的方法
Aug 24 Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
python实现函数极小值
Jul 10 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
Python 保存加载mat格式文件的示例代码
Aug 04 Python
基于Python编写一个监控CPU的应用系统
Jun 25 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 #Python
python生成大写32位uuid代码
Mar 03 #Python
python str字符串转uuid实例
Mar 03 #Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 #Python
python生成并处理uuid的实现方式
Mar 03 #Python
python实现在线翻译功能
Mar 03 #Python
Python configparser模块配置文件过程解析
Mar 03 #Python
You might like
PHP添加Xdebug扩展的方法
2014/02/12 PHP
PHP 类与构造函数解析
2017/02/06 PHP
php-fpm中max_children的配置
2019/03/15 PHP
javascript 写类方式之一
2009/07/05 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
基于python使用tibco ems代码实例
2019/12/20 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
企业治理工作自我评价
2013/09/26 职场文书
保洁主管岗位职责
2013/11/20 职场文书
社区端午节活动方案
2014/01/28 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
护校行动方案
2014/05/31 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
永不妥协观后感
2015/06/10 职场文书
宿舍管理制度范本
2015/08/07 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
Python循环之while无限迭代
2022/04/30 Python