python如何提取英語pdf內(nèi)容并翻譯
本文實(shí)例為大家分享了python提取英語pdf內(nèi)容并翻譯的具體代碼,供大家參考,具體內(nèi)容如下
前期準(zhǔn)備工作:
翻譯接口: 調(diào)用的是百度翻譯的api (注冊(cè)后,每個(gè)月有2百萬的免費(fèi)翻譯字符數(shù)。)
pdfminer3k: pdfminer3k是pdfminer的Python 3端口。 PDFMiner是一種從PDF文檔中提取信息的工具。 與其他PDF相關(guān)工具不同,它完全專注于獲取和分析文本數(shù)據(jù)。 PDFMiner允許獲取頁面中文本的確切位置,以及字體或線條等其他信息。 它包括一個(gè)PDF轉(zhuǎn)換器,可以將PDF文件轉(zhuǎn)換為其他文本格式(如HTML)。 它有一個(gè)可擴(kuò)展的PDF解析器,可用于其他目的而不是文本分析。
要解析PDF至少需要兩個(gè)類:PDFParser 和 PDFDocument,PDFParser 從文件中提取數(shù)據(jù),PDFDocument保存數(shù)據(jù)。另外還需要PDFPageInterpreter去處理頁面內(nèi)容,PDFDevice將其轉(zhuǎn)換為我們所需要的。PDFResourceManager用于保存共享內(nèi)容例如字體或圖片。
安裝:pip install pdfminer3k
前期工作準(zhǔn)備好后,即可開始代碼編寫。
# -*- 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 = "" ##申請(qǐng)的百度翻譯接口的id
cyber = "" ##申請(qǐng)的百度翻譯接口的password
pdffile = "multinet.pdf" ##處理的pdf
ENtextfile = "ENmultinet.txt" ##存儲(chǔ)提取的txt
CNtextfile = "CNmultinet.txt" ##存儲(chǔ)翻譯的結(jié)果
isTranslate = False ##是否將提取的英文翻譯為中文
## 處理PDF
## 讀取PDF的內(nèi)容 filename是待處理的PDF的名字
###使用PDFminer讀取
def getDataUsingPyPDF(filename):
parser = PDFParser(open(pdffile,'rb')) #以二進(jìn)制打開文件 ,并創(chuàng)建一個(gè)pdf文檔分析器
doc = PDFDocument() ##創(chuàng)建一個(gè)pdf文檔
#將文檔對(duì)象和連接分析器連接起來
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize()
#判斷該pdf是否支持txt轉(zhuǎn)換
if doc.is_extractable:
#創(chuàng)建一個(gè)PDF設(shè)備對(duì)象
rsrcmgr = PDFResourceManager()
#創(chuàng)建一個(gè)pdf設(shè)備對(duì)象
laparamas = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparamas)
#創(chuàng)建一個(gè)PDF解釋器對(duì)象
interpreter = PDFPageInterpreter(rsrcmgr, device)
contents = "" #保存讀取的text
#依次讀取每個(gè)page的內(nèi)容
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result() # 這里layout是一個(gè)LTPage對(duì)象 里面存放著 這個(gè)page解析出的各種對(duì)象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對(duì)象的text屬性,
#在windows下,新文件的默認(rèn)編碼是gbk編碼,所以我們?cè)趯懭胛募臅r(shí)候需要設(shè)置一個(gè)編碼格式,如下:
for x in layout:
if(isinstance(x,LTTextBoxHorizontal)):
results = x.get_text()
results = results.replace("\n","") #去掉換行符 因?yàn)榕虐鎲栴} 有的換行導(dǎo)致句子中斷
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() 通過指定.將英文分成多個(gè)句子
i = 0
chinese = ""
print("一共有"+str(clist.__len__())+"行需要翻譯")
print("開始翻譯...請(qǐng)耐心等待")
while(i<clist.__len__()):
chinese += (translate(clist[i]).replace("\n","。"))
#chinese += '\n'
i+=1
saveText(chinese,CNtextfile)
print("翻譯結(jié)束,ok")
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Django框架用戶注銷功能實(shí)現(xiàn)方法分析
這篇文章主要介紹了Django框架用戶注銷功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了基于Django框架的刪除cookie實(shí)現(xiàn)用戶注銷功能的相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
PyTorch之前向傳播函數(shù)forward用法解讀
這篇文章主要介紹了PyTorch之前向傳播函數(shù)forward用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
在Python中操作字典之setdefault()方法的使用
這篇文章主要介紹了在Python中操作字典之setdefault()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
Python利用keyboard模塊實(shí)現(xiàn)鍵盤記錄操作
模擬鍵盤操作執(zhí)行自動(dòng)化任務(wù),我們常用的有pyautowin等自動(dòng)化操作模塊。今天介紹的這個(gè)模塊叫做keyboard,它是純Python原生開發(fā),編譯時(shí)完全不需要依賴C語言模塊。一行命令就能完成安裝,非常方便,需要的可以了解一下2022-10-10
升級(jí)Python版本后anaconda navigator啟動(dòng)失敗解決方案(最新推薦)
anaconda navigator啟動(dòng)失敗,尤其是重裝不解決問題的,大概率是庫沖突,解決方法也很簡單,只需要?jiǎng)h掉引起沖突的庫,感興趣的朋友跟隨小編一起看看吧2023-11-11

