从PDF提取标题/识别

时间:2019-03-22 17:23:33

标签: python pdf nlp ocr pdf-scraping

我有许多不同格式的pdf。除其他外,我需要提取其标题(不是文档名称,而是文本中的标题)。由于格式的范围,标题在pdf中的位置不同。此外,有些pdf实际上是扫描的图像(我需要在它们上使用OCR /光学字符识别)。标题有时是一行,有时是2行。它们往往没有相同的单词集。在标题通常显示的物理位置范围内,通常还会有其他词语(即,如果doc 1在x1,y1处具有标题1,doc 2在x2,y2处可能具有标题2,但在x1 y1处具有其他非标题文本)。此外,在极少数情况下,pdf没有标题。

到目前为止,我可以使用pdftotext在给定的边界框中提取文本,并将其转换为文本文件。如果有标题,这可以让我捕获标题,但通常会包含其他多余的单词。这也仅适用于非图像pdf。我想知道是否a)有一种从我为文档提取的所有单词中识别标题的好方法(因为通常有无关紧要的单词),理想情况下是一种识别不存在标题的好方法,并且b)如果有任何等效于pdftotext的工具也可以在扫描的图像上使用(我确实有一个ocr脚本在工作,但它确实在整个图像而不是整个图像的ocr上起作用)。

某种程度上解决标题难题的方法是提取边界框中的单词,使用文档的其余部分来确定哪些边界框单词是文档的关键字,然后从这些关键字构造标题。这不会提取实际标题,但可能会给出可以构成合理替代词的单词。我已经在提取项目其他部分的关键字,但是我绝对希望提取实际标题,因为人们可能会使用逐字标题进行查找。

如果不清楚,请进一步注意-我正在尝试使用开放源代码/免费工具(最好在Python中)以编程方式进行此操作,并且我将拥有大量文档(超过10,000个)。

2 个答案:

答案 0 :(得分:1)

您可以利用单词字体大小信息来提取标题单词。 从您的问题中,我在这里理解的是我打算提取标题词的内容:

使用任何开放源代码模块,例如pdf2image将pdf文档转换为图像,然后将tesseract用于OCR。从OCR输出中,您可以获得文本数据及其尺寸信息,即。单个单词的宽度和高度。

对单词的高度进行一些统计分析(直方图),看看是否可以使用高度分布来识别标题单词。 您可以根据启发式信息使用固定阈值值,也可以根据高度分布使用一些自适应阈值并使用此阈值来识别标题词。

答案 1 :(得分:0)

对于以后遇到此问题的人,我将提供我已决定要做什么的快速更新(尽管我尚未测试准确性,所以我不知道这种方法是否真的有用) 。

我将使用的总体方法是通过神经网络进行机器学习(一旦掌握准确度,我就会报告准确性)。我实际上是从文档的前200个单词开始,并生成4-20个连续单词的n-gram(所以〜16 * 200 n-grams单词; 4 bc我的标题都没有更短,20个相同但更长) 。然后,我从每个n-gram生成一个唯一的特征向量,我决定使用的特征部分取决于我的文本,但有些特征更笼统,例如“ n-gram中第一个单词的首字母大写吗?”。知道正确的标题后,我可以将它们转换为等效的向量。因此,如果vec(n_gram)= vec(correct_title),则输出1,否则输出0。我正在使用它来训练ML模型。目前,这不能解决我的扫描图像pdf的问题,除非先将它们转换为文本文档。它还假定当pdf转换为n-gram时,标题词中的词序得以保留。我注意到非标题词的顺序并不总是通过转换来保留,但这是一个罕见的问题,并且仅在换行时出现,然后整行都不合适(因此它不应该影响标题)希望)。