我只想从一个“富”pdf文档中提取核心文本,这意味着它有很多我不感兴趣的表格、图表、框、页脚等等。
我尝试使用一些常见的python包,如PyPDF2、pdfplumber或pdfreader.The,显然它们提取了pdf中所有的文本,包括上面列出的那些我不感兴趣的部分。
例如:
from PyPDF2 import PdfReader
file = PdfReader(file)
page = file.pages[10]
text = page.extract_text()
这段代码将为我从第11页获得整个文本,包括页脚、框、表格中的文本和页面的编号,而我想要的只是核心文本。
不幸的是,到目前为止,我找到的唯一解决方案是将粘贴到另一个文件中,即核心文本。
是否有任何方法/包可以自动识别主文本从pdf的其他部分,并只返回给我?
谢谢你的帮助!
发布于 2022-11-21 21:00:12
根据D.L的评论,请添加一些可重复的代码,最好是一个可使用的pdf。
不过,我想我至少可以回答你的部分问题。杰斯文的水管工是一个非常健壮的python处理包。水管工包含一个包围盒功能,允许您从内部(.within_bbox(...)
)或外部(.outside_bbox
)提取在Page
对象上划定的‘边界框’(或地理区域)上的文本。从页面中提取的每个字符对象都包含位置信息,如y1 - Distance of top of character from bottom of page
和Distance of left side of character from left side of page
。如果您试图从.pdf
中提取的大多数页面都包含脚注,我建议只提取y1
值之上的文本。考虑到脚注通常远低于页面的末尾,除了使用芝加哥风格引用的学术论文之外,您仍然应该能够为要提取文本的地方设置一个标准的.bbox
(在不包括脚注的集合.bbox
中,或者在不包含脚注的集合.bbox
中)。
对于你关于桌子的问题,这是一个更棘手的问题。到目前为止,表是最难检测和/或从中提取的东西。据我所知,水管工提供了最健壮的开源表检测/提取功能。要提取表外的区域,我将调用每个.find_tables(...)
对象上的Page
函数,以返回表的.bbox
,并在表周围提取。然而, --这并不完美。--它并不总是能够检测表。
关于您的第三个问题,如何排除框,您指的是文本框吗?请提供进一步的澄清!
最后--重申我的第一点-- 水管工是一个非常健壮的包。也就是说,从.pdf
文件中提取文本是非常困难的。祝你好运--请提供更多的信息,我很乐意尽我所能帮助你。
https://stackoverflow.com/questions/74344614
复制相似问题