Python讀取PDF文檔並翻譯

翻譯服務選擇免費的百度翻譯apihttps://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:

翻譯:

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章