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 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
python统计cpu利用率的方法
Jun 02 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
Python 描述符(Descriptor)入门
Nov 20 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
python3实现猜数字游戏
Dec 07 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
python绘制规则网络图形实例
Dec 09 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
python多进程下的生产者和消费者模型
May 07 Python
python 实现简单的计算器(gui界面)
Nov 11 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 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
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
js转换对象为xml
2017/02/17 Javascript
详解vue-router和vue-cli以及组件之间的传值
2017/07/04 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
django和vue实现数据交互的方法
2019/08/21 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
小学生期末评语大全
2014/04/21 职场文书
市政管理求职信范文
2014/05/07 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
css3 文字断裂效果
2022/04/22 HTML / CSS