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实现提取百度搜索结果的方法
May 19 Python
Python检测一个对象是否为字符串类的方法
May 21 Python
Django imgareaselect手动剪切头像实现方法
May 26 Python
解决Python传递中文参数的问题
Aug 04 Python
python数据处理实战(必看篇)
Jun 11 Python
关于Python 3中print函数的换行详解
Aug 08 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
基于python实现学生信息管理系统
Nov 22 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 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
1 Tube Radio
2021/03/02 无线电
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
python re.match()用法相关示例
2021/01/27 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
一道Delphi面试题
2016/10/28 面试题
数据管理员的自我评价分享
2013/11/15 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL