PDF 中的标题 Extraction/Identification

Title Extraction/Identification from PDFs

我有大量不同格式的 pdf。除其他外,我需要提取他们的标题(不是文档名称,而是文本中的标题)。由于格式的范围,标题不在 pdf 中的相同位置。此外,一些 pdf 实际上是扫描图像(我需要对它们使用 OCR/Optical 字符识别)。标题有时是一行,有时是两行。它们往往不会使用相同的词组。在标题通常出现的物理位置范围内,通常还有其他词(即,如果文档 1 在 x1、y1 处有标题 1,则文档 2 可能在 x2、y2 处有标题 2,但在处有其他 non-title 文本x1 y1).此外,在极少数情况下,pdf 没有标题。

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

一种解决标题困境的方法是提取边界框中的词,使用文档的其余部分来识别哪些边界框词是文档的关键字,并从关键字构建标题.这不会提取实际标题,但可能会给出可以构成合理替代方案的词。我已经在为项目的其他部分提取关键字,但我肯定更愿意提取实际标题,因为人们可能会使用逐字标题进行查找。

如果不清楚,请进一步注意 - 我正在尝试使用开放的 source/free 工具以编程方式执行此操作,最好是在 Python 中,并且我将拥有大量文档(10,000 +).

对于后来遇到这个问题的人,我会提供一个关于我决定做什么的快速更新(尽管我没有测试准确性所以我不知道这种方法是否真的有任何好的)。

我将使用的总体方法是通过神经网络进行机器学习(一旦我掌握了它,我会报告准确度)。我实际上是在获取文档的前 200 个单词,并生成 4-20 个连续单词的 n-grams(所以 ~16*200 n-grams 个单词;4 b.c。none 我的标题较短,20 个相同但更长)。然后我从每个 n-gram 生成一个独特的特征向量,我决定使用的特征部分取决于我的文本,但有些更通用,如 "Is the first letter of the first word in the n-gram capitalized?"。知道正确的标题后,我可以将它们转换为等效向量。所以如果 vec(n_gram) = vec(correct_title) 那么输出 1,否则输出 0。我用它来训练 ML 模型。目前这并不能解决我的扫描图像 pdf 问题,除非它们首先被转换成文本文档。它还假设当 pdf 转换为 n-grams 时,标题词中的词序被保留。我注意到 non-title 单词的顺序并不总是通过转换来保留,但这是一个非常罕见的问题,并且似乎只在出现换行符然后整行不合适时才会发生(所以它不应该影响希望标题)。

可以利用词font-size信息提取标题词。 根据你的问题,我在这里的理解是我提议提取标题词的内容:

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

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