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实现的百度站长自动URL提交小工具
Jun 27 Python
Python记录详细调用堆栈日志的方法
May 05 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
python+selenium识别验证码并登录的示例代码
Dec 21 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
Python中的取模运算方法
Nov 10 Python
postman传递当前时间戳实例详解
Sep 14 Python
python os模块常用的29种方法使用详解
Jun 02 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
python 多态 协议 鸭子类型详解
Nov 27 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php设计模式 Proxy (代理模式)
2011/06/26 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
jQuery ready函数滥用分析
2011/02/16 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
美国五金商店:Ace Hardware
2018/03/27 全球购物
大学生职业生涯规划范文
2014/01/22 职场文书
我的中国梦口号
2014/06/16 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript