翻譯服務選擇免費的百度翻譯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("\r\n>> 當前頁:", 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','頁面數:%s\n'%num_page,'圖片數:%s\n'%num_image,'曲線數:%s\n'%num_curve,'水平文本框:%s\n'
%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:
翻譯: