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引用(import)文件夹下的py文件的方法
Aug 26 Python
Python入门篇之文件
Oct 20 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
window下eclipse安装python插件教程
Apr 24 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
python监控nginx端口和进程状态
Sep 06 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
python集合能干吗
Jul 19 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 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
3
2006/10/09 PHP
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
javascript String 对象
2008/04/25 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
python list语法学习(带例子)
2013/11/01 Python
python中函数默认值使用注意点详解
2016/06/01 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
材料加工硕士生求职信
2013/10/10 职场文书
采购员的工作职责
2013/12/26 职场文书
促销活动总结范文
2014/04/30 职场文书
2015年话务员工作总结
2015/04/29 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
python - timeit 时间模块
2021/04/06 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript