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字符遍历的艺术
Sep 06 Python
python 生成不重复的随机数的代码
May 15 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Python实现带参数的用户验证功能装饰器示例
Dec 14 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
linux环境下Django的安装配置详解
Jul 22 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
php自动加载代码实例详解
2021/02/26 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
微信小程序 弹窗自定义实例代码
2017/03/08 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
python选择排序算法的实现代码
2013/11/21 Python
python使用webbrowser浏览指定url的方法
2015/04/04 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python 性能优化方法小结
2017/03/31 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
Python用input输入列表的实例代码
2020/02/07 Python
python调用win32接口进行截图的示例
2020/11/11 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
如何将整数int转换成字串String
2014/03/21 面试题
2014年妇幼保健工作总结
2014/12/08 职场文书
奖学金个人总结
2015/03/04 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书