• 技术文章 >Python技术 >Python基础教程

    看不懂pdf中的英文?就用Python

    2020-10-29 15:51:33原创2215
    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


    前期工作准备好后,即可开始代码编写。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    <p style="line-height: 1.75em;"><span style="font-family: 微软雅黑, "Microsoft YaHei";"># -*- 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__()): <br> chinese="" +="(translate(clist[i]).replace("\n",""))" <br> #chinese=""<br> i+="1"<br> savetext(chinese,cntextfile)=""<br> print("翻译结束,ok")<br></span></p>

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

    专题推荐:python提取pdf英文内容并翻译
    上一篇:解决报错?怎么用Pycharm在项目里配置python解释器? 下一篇:如何用Python合并多个pdf 的文件夹

    相关文章推荐

    • python中怎么将pdf内容显示出来?• pdf如何用python读取?• 进阶PDF,就用Python(pdfminer.six和pdfplumber模块)• Python教程:pdfplumber提取pdf中的表格数据• 如何用Python把pdf转换成word• Python中怎样把html网页转换成pdf• Python中用PyPDF2拆分pdf提取页面• 详解利用python提取pdf文本数字

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网