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小程序
Aug 15 Python
python获取当前日期和时间的方法
Apr 30 Python
python3中int(整型)的使用教程
Mar 23 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python中pillow知识点学习
Apr 30 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
python实现石头剪刀布小游戏
Jan 20 Python
浅谈Python 函数式编程
Jun 20 Python
Python hashlib模块的使用示例
Oct 09 Python
python 实现端口扫描工具
Dec 18 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python re模块常见用法例举
Mar 01 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/07/22 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
PHP 获取文件权限函数介绍
2013/07/11 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
python 运算符 供重载参考
2009/06/11 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
浅谈Python基础之I/O模型
2017/05/11 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
python 基于opencv实现图像增强
2020/12/23 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
法人委托书的范本格式
2014/09/11 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
公司晚会主持词
2019/04/17 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js