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 ljust rjust center输出
Sep 06 Python
Python基础入门之seed()方法的使用
May 15 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
Python地图绘制实操详解
Mar 04 Python
python的依赖管理的实现
May 14 Python
python如何实现代码检查
Jun 28 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
Django实现聊天机器人
May 31 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学习之 认清变量的作用范围
2010/01/26 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
php实现MySQL数据库备份与还原类实例
2014/12/09 PHP
详解PHP队列的实现
2019/03/14 PHP
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
python文件及目录操作代码汇总
2020/07/08 Python
python 如何快速复制序列
2020/09/07 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
护理专科自荐书范文
2014/02/18 职场文书
企业承诺书格式
2014/05/21 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
AJAX实现省市县三级联动效果
2021/10/16 Javascript
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js