首页 > 解决方案 > PDFMiner:如何仅提取正文

问题描述

我使用以下代码将 PDF 转换为文本文件。但是,我只对文档的正文感兴趣,没有数字、没有页码、没有表格、没有标题、没有公式等。

但它给了我一堆文本,其中一些是从表格或公式中提取的短行。我希望用户可以阅读生成的文本,而无需在文本模式下显示的内容。

另一个问题是它把句子分成多行,所以我会放宽句子的界限。我想有完整的句子没有中断。

我玩了一些选项,例如“all_text = False”,但没有成功。

import sys
from tqdm import tqdm
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
import io


def pdfparser(pdf_file):

    fp = open(pdf_file, 'rb')
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    laparams.all_texts = False
    laparams.detect_vertical = False
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    # Create a PDF interpreter object.
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    # Process each page contained in the document.
    password = ""
    maxpages = 3
    caching = True
    pagenos=set()
    imagewriter = None
    for page in tqdm(PDFPage.get_pages(fp)):
        interpreter.process_page(page)
        text =  retstr.getvalue()

    text = text.replace("\\n","\n")
    return text

if __name__ == '__main__':
    text = pdfparser(sys.argv[1])
    print(text)

标签: python-3.xpdfminerpdf-manipulation

解决方案


通常,这在 PDF 中是无法直接实现的。

与 docbook、markdown 和 restructuredtext 等不同,PDF 文件不包含有关文档内容的语义信息。

也就是说,内容没有被标记为eq“图像”、“公式”、“页眉”、“页脚”、“章节标题”、“正文”等。

因此,您将不得不尝试从文本中的线索重建这些语义信息。不幸的是,这是否可能取决于文档。

例如,如果文档的结构使得页眉和页脚与正文明确分开,您可以从字符串的起始位置推断它是否是页眉、页脚或正文的一部分。

例如,字体系列和大小可能使您能够区分正文和章节或章节标题以及图像或表格标题。但这是假设这些特征得到一致应用。


推荐阅读