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)
希望您觉得这有帮助。
目前,pypdf(以及已弃用的 PyPDF2)不提供此功能。也不清楚如何做好,因为这些在 pdf 中没有语义表示
作为一种启发式方法,您可以在提取的页面文本的顶部/底部搜索重复项。这可能适用于长文档,但不适用于一页文档
您需要考虑到前几页可能没有标题或与其他页面不同的标题。此外,章节和偶数/奇数页之间可能存在差异
旁注:我是 pypdf 和 PyPDF2 的维护者,我认为这永远不会出现在 pypdf 中。原因是它无法可靠地完成。您需要一些背景知识。这使得它非常适合机器学习,但不太适合图书馆。如果它只在 80% 的时间内有效,人们不会高兴+我们必须不断扩展它。