提取文本时排除 PDF 文件页面的页眉和页脚内容?

Mis*_*a S 5 pdf text nlp pypdf python-3.x

是否可以contents of footers and headers of a page在从中提取文本时从 pdf 文件中排除 。因为这些内容是最不重要的并且几乎是多余的。

注意:为了从 .pdf 文件中提取文本,我在 python 版本 = 3.7 上使用 PyPDF2 包。

如何在 PyPDF2 中排除页脚和页眉的内容。任何帮助表示赞赏。

代码片段如下:

import PyPDF2

def Read(startPage, endPage):
    global text
    text = []
    cleanText = " "
    pdfFileObj = open('C:\\Users\\Rocky\\Desktop\\req\\req\\0000 - gamma j.pdf', 'rb')
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    num_pages = pdfReader.numPages
    print(num_pages)
    while (startPage <= endPage):
        pageObj = pdfReader.getPage(startPage)
        text += pageObj.extractText()
        startPage += 1
    pdfFileObj.close()
    for myWord in text:
        if myWord != '\n':
           cleanText += myWord
    text = cleanText.strip().split()
    print(text)

Read(1, 1)
Run Code Online (Sandbox Code Playgroud)

小智 5

由于 PyPDF2 没有正式提供任何功能,因此我编写了自己的函数来排除 pdf 页面中的页眉和页脚,该函数非常适合我的用例。您可以在变量中添加自己的正则表达式模式page_format_pattern 。在这里,我仅检查文本列表的第一个和最后一个元素。您可以为每个页面运行此函数。

def remove_header_footer(self,pdf_extracted_text):
        page_format_pattern = r'([page]+[\d]+)'
        pdf_extracted_text = pdf_extracted_text.lower().split("\n")
        header = pdf_extracted_text[0].strip()
        footer = pdf_extracted_text[-1].strip()
        if re.search(page_format_pattern, header) or header.isnumeric():
            pdf_extracted_text = pdf_extracted_text[1:]
        if re.search(page_format_pattern, footer) or footer.isnumeric():
            pdf_extracted_text = pdf_extracted_text[:-1]
        pdf_extracted_text = "\n".join(pdf_extracted_text)
        return pdf_extracted_text
Run Code Online (Sandbox Code Playgroud)

希望您觉得这有帮助。


Mar*_*oma 3

目前,pypdf(以及已弃用的 PyPDF2)不提供此功能。也不清楚如何做好,因为这些在 pdf 中没有语义表示

作为一种启发式方法,您可以在提取的页面文本的顶部/底部搜索重复项。这可能适用于长文档,但不适用于一页文档

您需要考虑到前几页可能没有标题或与其他页面不同的标题。此外,章节和偶数/奇数页之间可能存在差异

旁注:我是 pypdf 和 PyPDF2 的维护者,我认为这永远不会出现在 pypdf 中。原因是它无法可靠地完成。您需要一些背景知识。这使得它非常适合机器学习,但不太适合图书馆。如果它只在 80% 的时间内有效,人们不会高兴+我们必须不断扩展它。

如何识别页脚的想法