Python读取PDF文档并翻译
时间:2022-07-23
本文章向大家介绍Python读取PDF文档并翻译,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
翻译服务选择免费的百度翻译api:https://api.fanyi.baidu.com/
标准版服务完全免费,不限使用字符量 完成身份认证,还可免费升级至高级版、尊享版,每月享受200万免费字符量及增值服务
# -*- coding: utf-8 -*-
import random
import hashlib
import sys
import importlib
importlib.reload(sys)
import time
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
#**********翻译部分********************
def fanyi(query):
import http.client
import hashlib
import urllib
import random
import json
appid = '' # !!!!补充
secretKey = '' # !!!!补充
httpClient = None
myurl = '/api/trans/vip/translate'
q = query
fromLang = 'auto'
toLang = 'zh'
salt = random.randint(32768, 65536)
sign = appid + q + str(salt) + secretKey
m1 = hashlib.md5()
m1.update(sign.encode())
sign = m1.hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(salt) + '&sign=' + sign
# print(urllib.parse.quote(q))
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
# response是HTTPResponse对象
response = httpClient.getresponse()
html = response.read() # bytes
# print("html: ",type(html),html)
html_str = html.decode() # bytes to str
# print("html_str: ",type(html_str),html_str)
html_dict = json.loads(html_str) # str to dict
# print("html_dist: ",type(html_dict),html_str)
# result_ori = html_dict["trans_result"][0]["src"]
# result_tar = html_dict["trans_result"][0]["dst"]
# print(html_dict["trans_result"])
result_tar = ''
for i in html_dict["trans_result"]:
result_tar += i["dst"]
# print(result_ori, " --> ", result_tar)
print("翻译文本: " + result_tar)
print("*" * 100)
return result_tar
except Exception as e:
print(e)
return ''
finally:
if httpClient:
httpClient.close()
'''
解析pdf文件,获取文件中包含的各种对象
'''
# 解析pdf文件函数
def parse(pdf_path):
textName = pdf_path.split('\')[-1].split('.')[0] + '.txt'
fp = open(pdf_path, 'rb') # 以二进制读模式打开
# 用文件对象来创建一个pdf文档分析器
parser = PDFParser(fp)
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器 与文档对象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始化密码
# 如果没有密码 就创建一个空的字符串
doc.initialize()
# 检测文档是否提供txt转换,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 创建PDf 资源管理器 来管理共享资源
rsrcmgr = PDFResourceManager()
# 创建一个PDF设备对象
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 用来计数页面,图片,曲线,figure,水平文本框等对象的数量
num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0
# 循环遍历列表,每次处理一个page的内容
for page in doc.get_pages(): # doc.get_pages() 获取page列表
num_page += 1 # 页面增一
print("rn>> 当前页:", num_page)
interpreter.process_page(page)
# 接受该页面的LTPage对象
layout = device.get_result()
for x in layout:
if isinstance(x,LTImage): # 图片对象
num_image += 1
if isinstance(x,LTCurve): # 曲线对象
num_curve += 1
if isinstance(x,LTFigure): # figure对象
num_figure += 1
if isinstance(x, LTTextBoxHorizontal): # 获取文本内容
num_TextBoxHorizontal += 1 # 水平文本框对象增一
results = x.get_text()
print(results.replace('n', ''))
# 保存文本内容
with open(textName, 'a+', encoding='utf8') as f:
results = x.get_text()
f.write(results.replace('n', '') + 'n')
print('对象数量:n','页面数:%sn'%num_page,'图片数:%sn'%num_image,'曲线数:%sn'%num_curve,'水平文本框:%sn'
%num_TextBoxHorizontal)
import os
if __name__ == '__main__':
pdf_path = r'A Survey on Network Methodologies for.pdf'
rootPath = '\'.join(pdf_path.split('\')[:-1]) if "\" in pdf_path else ''
textName = pdf_path.split('\')[-1].split('.')[0] + '.txt'
print(">> 当前文件:", os.path.join(rootPath, textName))
if os.path.exists(os.path.join(rootPath, textName)):
print(">> 删除:", textName)
os.remove(os.path.join(rootPath, textName))
if os.path.exists(os.path.join(rootPath, "translate.txt")):
print(">> 删除:", "translate.txt")
os.remove(os.path.join(rootPath, "translate.txt"))
parse(pdf_path)
with open(textName, 'r', encoding='utf8') as f:
content = f.read()
results = content.split('.')
for i in results:
res = fanyi(i)
with open("translate.txt", 'a+', encoding='utf8') as fp:
fp.write(res + 'n')
time.sleep(1)
运行中:
pdf转txt:
翻译:
- hdu----149850 years, 50 colors(最小覆盖点)
- hdu------1281 棋盘游戏(最小覆盖点)
- hdu-----(1179)Ollivanders: Makers of Fine Wands since 382 BC.(二分匹配)
- hdu-----(1151)Air Raid(最小覆盖路径)
- hdu-----(1150)Machine Schedule(最小覆盖点)
- 【重磅】微软Facebook联手发布AI生态系统,CNTK+Caffe2+PyTorch挑战TensorFlow
- hduoj-----(1068)Girls and Boys(二分匹配)
- 使用Django suit或Bootstrap美化admin模板
- hdu---------(1026)Ignatius and the Princess I(bfs+dfs)
- hdu-----(1113)Word Amalgamation(字符串排序)
- HDUoj-------(1128)Self Numbers
- cf------(round 2)A. Winner
- cf------(round)#1 C. Ancient Berland Circus(几何)
- MySQL配置TokuDB的简单总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- webview添加参数与修改请求头的user-agent实例
- android webview获取html代码和根据id获取value实例
- pip 安装MySQL-python:EnvironmentError: mysql_config not found
- 关于WebView 重定向行为导致的多次加载的问题
- 解决webview内的iframe中的事件不可用的问题
- Android WebView拦截iframe标签内部跳转教程
- Android实现WebView点击拦截跳转原生
- Android实现带节点的进度条
- Android WebView userAgent 设置为桌面UA实例
- Android WebView 内处理302重定向不跳转的解决
- android studio集成极光推送的操作步骤
- Android中的webview监听每次URL变化实例
- 解决Android WebView拦截url,视频播放加载失败的问题
- Android 极光推送别名与标签方式
- Android Webview的postUrl与loadUrl加载页面实例