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)

解决方法

通常,这在PDF中不直接可行。

与例如docbook,markdown和retextedtext,PDF文件不包含有关文档内容的语义信息。

即,内容未标记为e.q. “图像”,“公式”,“页面标题”,“页面页脚”,“章节标题”,“正文”等。

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

例如,如果文档的结构使页眉和页脚与主体文本清楚地分开,则可以从字符串的起始位置推断出它是否是页眉,页脚或主体的一部分。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...