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

问题描述 投票:0回答:3

在提取文本时,是否可以从 pdf 文件中排除

contents of footers and headers of a page
。因为这些内容是最不重要的并且几乎是多余的。

注意:为了从 .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)
python-3.x pdf text nlp pypdf
3个回答
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

希望您觉得这有帮助。


3
投票

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

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

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

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

如何识别页脚的想法


0
投票

同样,我有一个带有页脚的 PDF 文档,我想要操作其中的文本内容。令人烦恼的是,当通过 pypdf 的 extract_text 方法提取时,页脚会出现在文本的顶部。从页面中裁剪页脚不会更改 extract_text 的结果。即使您裁剪原始页面并将其写入新文件,应用于新文件的 extract_text 也会返回页脚以及文本内容。

我确实找到了一个对我有用的黑客。从原件的每一页中裁剪页脚并将其写入新的 PDF,我们将其命名为 TEMP.PDF。使用 Adobe Reader 打开 TEMP.PDF。从视觉上看,页脚丢失了(但如果您尝试在 TEMP.PDF 上提取文本,您会发现它们仍然在返回的内容中)。 “全选”文档 (macOS cmd A) 并复制到剪贴板 (macOS cmd C)。将剪贴板粘贴到新的 MS Word 文档中,瞧,您将获得原始无页脚的所有文本内容。然后,您可以人为地对 MS Word 文档进行分页(手动添加分页符)以与原始 PDF 分页相对应,然后从 MS Word 打印菜单创建一个新的 PDF 文档,将其命名为 PRINT.PDF。

这里我遇到了一个尚未解决的问题;当我在 PRINT.PDF 页面上使用 extract_text 时,文本内容正常,但缺少所有换行符(‘ ’)。它以连续的字母数字流的形式出现,没有任何行格式。我还在研究这个。

© www.soinside.com 2019 - 2024. All rights reserved.