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



在从中提取文本时,是否可以从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)

由于 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

希望对您有所帮助。

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

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

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

旁注:我是 pypdf 和 PyPDF2 的维护者,我认为这永远不会出现在 pypdf 中。原因是它不能可靠地完成。您需要一些上下文知识。这使得它非常适合机器学习,但不适合库。如果它只在 80% 的时间内工作,人们不会高兴 + 我们将不得不不断扩展它。

如何识别页脚的想法

  • 按位置走。只需定义一个阈值,您假定页脚低于该阈值。然后您可以使用访客功能:https://pypdf2.readthedocs.io/en/3.0.0/user/extract-text.html#using-a-visitor
  • 尝试在底部的每个页面上找到文本模式。

最新更新