python读取pdf翻译生成word文件

对应python版本未3.7.3
首先是安装所需要的包
通过pip安装或是pycharm的setting安装
这里仅列出包名(tkinter requests time hashlib json os pdfminer docx)

在运行程序前需要先注册一个百度翻译的api
设置api_id、cyber

这里注册普通的接口就足够使用

import tkinter
import requests
import time
import hashlib
import json
import os
import docx
from tkinter.filedialog import askdirectory
from tkinter.messagebox import *
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams,LTTextBox##初始化api_url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
api_id = "  "  ##申请的百度翻译接口的id
cyber = "  "  ##申请的百度翻译接口的passwordfile = "multinet.pdf"  ##处理的pdf##存储提取的txt
CNtextfile = "CNmultinet.txt"  ##存储翻译的结果
isTranslate = True  ##是否将提取的英文翻译为中文#生成界面
root=tkinter.Tk()
root.geometry('500x250')
root.title('翻译小程序')
#定义读取本地路径函数
def selectPath1():path_ = askdirectory()pathroad1.set(path_)
def selectPath2():path_ = askdirectory()pathroad2.set(path_)#生成文本框
pathroad1=tkinter.StringVar()#设置pathroad为输入文本
b1entry=tkinter.Entry(root,width=500,textvariable=pathroad1)#为输入文本的功能设计文本框
b1entry.place(x=100,y=60,width=300,height=20)pathroad2=tkinter.StringVar()#设置pathroad为输入文本
b2entry=tkinter.Entry(root,width=500,textvariable=pathroad2)#为输入文本的功能设计文本框
b2entry.place(x=100,y=80,width=300,height=20)#定义中间文件及函数
ENtextfile=b1entry.get()+'ENtextfile'
## 处理PDF
## 读取PDF的内容 filename是待处理的PDF的名字
###使用PDFminer读取
def getDataUsingPyPDF(file):parser = PDFParser(open(file, '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, LTTextBox)):results = x.get_text()contents += (results)saveText( contents,ENtextfile)return contents## 将读取的content以txt格式存放到
def saveText(content, Textfile):with open(Textfile, "w", encoding='utf-8') as f:f.write(content)
##将读取的
def savedoc(content, docfile):doc = docx.Document()  # 创建一个Document对象doc.add_paragraph(content)  # 增加一个paragraphdoc.save( docfile+'.docx')#文字的排版,去掉多余换行符及字数过少的行
def adjust(text):f =open(text,encoding='UTF-8', errors = 'ignore')lines = f.readlines()string = ""for line in lines:if len(line)<8 and line[-1]=='\n':#字母少于8则删去passelif line[-1] == '\n' and line[-2]=='.':#句尾是.和回车则保留回车string += lineelse:string += line[:-1]#去掉句尾回车return string## 翻译从pdf提取的content
def translate(content):salt = str(time.time())[:10]final_sign = str(api_id) + content + salt + cyberfinal_sign = hashlib.md5(final_sign.encode("utf-8")).hexdigest()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_signresponse = requests.get(api_url, params=paramas).contentcontent = str(response, encoding="utf-8")json_reads = json.loads(content)return json_reads['trans_result'][0]['dst'] + "\n"#定义按钮处理函数
def fanyi():PDFlist=b1entry.get()TXTlist=b2entry.get()for filename in os.listdir(PDFlist):outfile = filename[:-4] + '.docx'print(outfile)file=PDFlist+'\\'+filenamecontents = getDataUsingPyPDF(file)contents=adjust(ENtextfile)if (isTranslate):clist = contents.split("\n")  # split() 通过指定.将英文分成多个句子i = 0chinese = ""outfile = TXTlist + '\\' + outfilewhile (i < clist.__len__()):print(i)  # 22try:chinese += (translate(clist[i]))time.sleep(0.5)#设置等待时间except:print("Current failed: " + str(i))i += 1#saveText(chinese, outfile)savedoc(chinese,outfile)showinfo('提示', '翻译完成')##生成按钮
b1=tkinter.Button(root,text='PDF文件夹',command = selectPath1)#生成文本提示词
#b1.pack(side=tkinter.LEFT)#将b1添加至主窗口
b1.place(x=20,y=60,width=70,height=20)b2=tkinter.Button(root,text='txt文件夹',command = selectPath2)#
#b2.pack(side=tkinter.LEFT)#将b1添加至主窗口
b2.place(x=20,y=80,width=70,height=20)work=tkinter.Button(root,text='翻译',command=fanyi)#生成翻译键
work.pack(side=tkinter.LEFT)#将b1添加至主窗口
work.place(x=200,y=120,width=70,height=20)root.mainloop()#进入消息循环
######

程序运行成功会出现下图界面

这里要注意的是文件夹不会显示里面的文件,pdf文件夹选择时里面一定要只有pdf文件且没有密码。选择完路径后点击翻译就可以了。

生成的word排版存在一些问题,可以在adjust函数再加一些限制,或者读取pdf时识别它的排版,这些暂时未能解决。

python读取pdf翻译生成word相关推荐

  1. Python 读取 PDF 信息插入 Word 文档

    Python 读取 PDF 信息插入 Word 文档 思路 PDFMiner模块 docx-mailmerge 模块 回顾 代码下载 Hello,上个周末没能搞事情,被一个代码需求给绊住了:朋友在平时 ...

  2. Python读取PDF信息插入Word文档

    转载自公众号:TEDxPY Hello,上个周末没能搞事情,被一个代码需求给绊住了:朋友在平时工作中会经常重复性地打开不同PDF文件,选取其中特定的几组信息复制粘贴到不同的Word文档中,完成一份PD ...

  3. 数据导入与预处理-第4章-数据获取python读取pdf文档

    数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库 2.2 pdfplumber基本操作 2 ...

  4. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  5. python读取pdf表格_Python使用Tabula提取PDF表格数据

    今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...

  6. python批量将pdf转成word_如何用Python把pdf转换成word

    很多时候,我们需要把文件的形式来回转换.那么学了编程的小伙伴,我们该如何用Python把pdf转换成word呢? 一.下载所需要的库 1.pdfminer 安装库命令pip install pdfmi ...

  7. 【word2vec】python读取pdf文件,通过词向量寻找相关词语

    1. 什么是Word2vec 对于自然语音处理而言,首先要做的就是将文字转换为计算机能看懂的数字,也就是说,将词语进行数字化. (1)one-hot编码,比较常用的一种编码方式,又叫独热编码. 对于一 ...

  8. pdf转word用python轻松搞定_使用Python将PDF转化为word

    60行Python代码,实现多线程PDF转Word 分解任务 把PDF转为Word,分几步?两步,第一步读取PDF文件,第二步写入Word文件. 是的,就是这么简单,借助Python第三方包,可以轻松 ...

  9. 使用Python读取pdf文件

    学习python,不用再为pdf无法转换而烦恼~~~ 下面我们介绍python读取pdf文件(主要是针对文字部分) 1.打开环境 2.安装pdfminer3k包 可以使用jupyter noteboo ...

  10. Python读取PDF文档(或TXT)

    字符串在Python内部的表示是Unicode编码,首先我们来认识Python中encode()和decode()的作用与区别: 在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的 ...

最新文章

  1. 设置maxJsonLength,解决ajax通过POST方式调用.net的webService时,数据过长时服务器返回500错误的问题
  2. IOS树视图学习总结
  3. 深入剖析阿里云推荐引擎——新架构,新体验
  4. 190. 颠倒二进制位
  5. 表弟面试被虐,我教他缓存连招,借机蹭了波奈雪的茶
  6. psutil python库
  7. iostat命令简单使用
  8. node-webkit浏览器插件注册升级方式
  9. python--字符串为空
  10. 编写高质量代码改善C#程序的157个建议——建议9: 习惯重载运算符
  11. CSS:设置图片不可拖动
  12. CS224N刷题——Assignment3.2_Recurrent neural nets for NER
  13. MySQL索引的使用及注意事项
  14. BUUCTF---死亡之Ping详解
  15. Python在气象与海洋中的实践技术应用
  16. 鸿蒙珠融入体内,逍遥至尊之诸天逍遥
  17. bzoj3168-钙铁锌硒维生素
  18. python实现指数增长
  19. Vodafone 移动终端声质量评价
  20. 【AUTOSAR】【以太网】Eth驱动

热门文章

  1. 算法排序----二分排序法
  2. RK3288关于LVDS信号配置和1080p视频信号的详解
  3. 数资 | 已知现期量如何求出增长量?
  4. 红帽认证是什么?红帽认证含金量高吗?
  5. 五种主流的虚拟化技术
  6. matlab啁啾信号,啁啾信号chirp(扫频余弦信号)
  7. 超实用压力测试工具-ab工具
  8. RS232和RS485的协议原理及应用
  9. 土壤HWSD处理流程
  10. 计算机网络课程设计 学校园网设计