【论文翻译小助手】python2使用pdfminer读取本地pdf内容(支持中文)并去掉多余换行符

写在前面

看paper英语不好是硬伤,比如我,每次都大段大段把pdf里的内容占到google翻译里,但是pdf直接复制出来的内容每一行会多一个换行,似的翻译出来的内容不连贯,影响翻译的质量,每次都手动删太麻烦了,就抽空写了这个小程序,来帮我自动读取本地的pdf内容,并去掉多余的换行符,保存为txt文本。

pdfminer

python2.4及以上(python3不支持)有一个可以从PDF文档中提取信息的库——pdfminer,具体的下载和安装就不赘述了,链接中有。

代码

原谅我最近比较忙,就不多说了,直接贴代码,关键部分有注释:

# -*- coding: utf-8 -*-
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.layout import *
from pdfminer.converter import PDFPageAggregator
import re,os


def Pdf2Txt(Path,file_txt):
    #来创建一个pdf文档分析器
    parser = PDFParser(Path)
    #创建一个PDF文档对象存储文档结构
    document = PDFDocument(parser)
    # 检查文件是否允许文本提取
    if not document.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 创建一个PDF资源管理器对象来存储共赏资源
        rsrcmgr=PDFResourceManager()
        # 设定参数进行分析
        laparams=LAParams()
        # 创建一个PDF设备对象
        # device=PDFDevice(rsrcmgr)
        device=PDFPageAggregator(rsrcmgr,laparams=laparams)
        # 创建一个PDF解释器对象
        interpreter=PDFPageInterpreter(rsrcmgr,device)
        # 处理每一页
        for page in PDFPage.create_pages(document):
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout=device.get_result()
            for x in layout:
                if(isinstance(x,LTTextBoxHorizontal)):
                    with open('%s'%(file_txt),'a') as f:
                        # 除去多余换行(选用了不常用的字符'~'过渡)
                        re_result, number = re.subn('(\n\s)+', '~',  x.get_text().encode('utf-8'))
                        result = re_result.replace('\n','').replace('~','\n') + '\n'
                        f.write(result)

fileIn = unicode('paper_name.pdf',"utf-8")
Path = open(fileIn, 'rb')
file_txt = fileIn.replace('.pdf','.txt')
if os.path.exists(file_txt):
    os.remove(file_txt)
Pdf2Txt(Path,file_txt)

翻译的话,本来想直接在程序中调用google翻译的,正常途径需要收费,查了很多资料,除了翻墙问题,google翻译更新后ticket机制已经不允许简单的爬虫访问了,感兴趣的话可以换成百度翻译,或者可以直接将生成的txt中的内容粘贴到google翻译中,也不算太麻烦。

文章目录
  1. 1. 写在前面
  2. 2. pdfminer
  3. 3. 代码
,