1. 程式人生 > 程式設計 >python如何提取英語pdf內容並翻譯

python如何提取英語pdf內容並翻譯

本文例項為大家分享了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")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。