tgoop.com/synctoai/1304
Last Update:
Marginalia 探讨了从 PDF 文件中提取文本信息的复杂性以及为搜索引擎优化文本提取的方法。团队指出,PDF 文件本质上是一种图形格式而非文本格式,其内容是字符映射到纸张上的坐标,字符可能旋转、重叠且顺序混乱,缺乏语义信息,这使得提取文本变得极具挑战性。尽管如此,用户仍能在 PDF 查看器中使用搜索功能,这本身就是一个值得惊叹的成就。
搜索引擎更倾向于接收干净的 HTML 格式输入,而目前最佳的 PDF 转文本方法可能是基于视觉的机器学习模型,但这种方法难以在没有 GPU 的单服务器上处理数百 GB 的 PDF 文件。因此,团队选择从 Apache PDFBox 的 PDFTextStripper 类入手,虽然该类能够提取 PDF 中的文本,但存在诸多限制,例如无法识别标题等语义信息,而这些信息对于搜索引擎来说至关重要。
为了使 PDF 转文本提取更适合搜索引擎的需求,团队进行了多项改进。在识别标题方面,一种简单的方法是寻找半粗体或更粗的文本行,但并非所有标题都使用加粗字体,许多标题依赖于字体大小来区分。由于不同文档的字体大小差异较大,因此无法找到一个全局的断点来区分标题和正文,而是需要针对每页构建字体大小统计信息。通过分析页面的字体大小分布,可以发现每页通常有一个主导字体大小,即正文文本的字体大小。在提取标题时,将页面中位数字体大小的 20% 作为因子,能够较为可靠地识别标题,尽管存在一些例外情况。
此外,标题有时会分成多行,团队尝试将连续的标题行合并为一行,但这一操作的决策较为复杂。例如,某些标题可能右对齐,或者标题下方紧跟着作者姓名等其他加粗文本,这些情况都增加了合并标题的难度。尽管如此,将具有相同字体大小和权重的连续标题行合并通常能够取得较好的效果,但也会产生一些不理想的结果。
在识别段落方面,PDFTextStripper 在识别段落方面表现不错,它通过分析行间距和缩进来判断何时分段,但其行间距逻辑仍有改进空间。该工具使用固定的行间距断点,未考虑不同文档的行间距差异,尤其是在学术草稿和预印本中,1.5 至 2 倍的行间距较为常见。如果行间距值过大,可能会干扰标题识别,导致某些标题被误归入正文段落。为解决这一问题,团队再次采用与字体大小类似的统计方法。通过分析页面文本的行间距分布,可以发现中位数行间距正是正文文本所使用的行间距,因此可以在此基础上添加一个因子,从而得到一种能够适应任何行间距的段落分隔启发式方法。
从 PDF 中提取文本永远不会完美无缺,因为该格式并非为提取文本而设计,且在选择“足够好”的解决方案时需要权衡利弊。搜索引擎主要关注相关性信号,例如标题,如果能够识别摘要并大致理解剩余文本的结构,就可以认为这是一种相对优雅的解决方案。
#PDF #实践
https://www.marginalia.nu/log/a_119_pdf/
BY Levix 空间站
Share with your friend now:
tgoop.com/synctoai/1304