python翻译pdf英文-看不懂pdf中的英文?就用Python

pdf作为只读文稿,直接拿来翻译是不现实的。当我们学会Python 后,这个问题就很好解决了。

前期准备工作:

翻译接口: 调用的是api

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(" ","") #去掉换行符 因为排版问题 有的换行导致句子中断

contents += (results)

##为了看着舒服,每一句为一行

saveText(contents.replace(".",". "),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

chinese="" +="(translate(clist[i]).replace(" ","。"))"

#chinese=""

i+="1"

savetext(chinese,cntextfile)=""

print("翻译结束,ok")

学会了的小伙伴可以动手尝试啦。更多Python学习推荐:PyThon学习网教学中心。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值