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中的对象拷贝示例 python引用传递
Jan 23 Python
python中MySQLdb模块用法实例
Nov 10 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
用Python实现KNN分类算法
Dec 22 Python
Numpy掩码式数组详解
Apr 17 Python
对python append 与浅拷贝的实例讲解
May 04 Python
python实现决策树分类(2)
Aug 30 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
python3.4中清屏的处理方法
Jul 06 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
Snoopy类使用小例子
2008/04/15 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
php生成rss类用法实例
2015/04/14 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
python实现Floyd算法
2018/01/03 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
如何使用python代码操作git代码
2020/02/29 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
婚宴邀请函
2015/01/30 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js