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实现绘制树枝简单示例
Jul 24 Python
视觉直观感受若干常用排序算法
Apr 13 Python
python通过opencv实现批量剪切图片
Nov 13 Python
python flask中静态文件的管理方法
Mar 20 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
python3.6数独问题的解决
Jan 21 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
django基于存储在前端的token用户认证解析
Aug 06 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
pycharm快捷键汇总
Feb 14 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Python 保存加载mat格式文件的示例代码
Aug 04 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
python使用cookie库操保存cookie详解
2014/03/03 Python
python中的字符串内部换行方法
2018/07/19 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python3几个常见问题的处理方法
2019/02/26 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
python打开windows应用程序的实例
2019/06/28 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python tkinter实现连连看游戏
2020/11/16 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
财会自我鉴定范文
2013/12/27 职场文书
干部现实表现材料
2014/02/13 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
库房保管员岗位职责
2014/04/07 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
授权收款委托书范本
2014/10/10 职场文书
意向协议书
2015/01/27 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
军训通讯稿范文
2015/07/18 职场文书
2016年离婚协议书范文
2016/03/18 职场文书