Borb 阅读 pdf 导致所有字母之间有空格

Borb reading pdf results in spaces between all letters

我正在尝试使用 borb 从 pdf 中提取文本。某些 pdf 效果很好,但是当尝试从某些 pdf 中提取文本时,我在所有字母和 space 之间得到额外的 space。 看起来像:

I N B E T A L N I N G / G I R E R I N G A V 如果我计算 spaces 并注意到比平时多,我可以使用正则表达式以某种方式删除每个地方的 space 吗? 所以它看起来像:

INBETALNING / GIRERING AV

免责声明:我是 borb

的作者

pdf 文档并不真正包含原样的文本。它包含像 Adob​​e Reader 这样的程序将执行的渲染指令。这些指令产生了人类可能解释为文本的东西。

例如:

  • 转到位置 30、50
  • 使用字体 Helvetica
  • 将颜色设置为黑色
  • 渲染字符“你好”
  • 移动到 36、50
  • 渲染字符“世界”

您会注意到“Hello World”中的 space 并没有在渲染指令中明确显示。它可能是。但不必如此。许多 pdf 创建工具选择不插入 space,而是移动绘图光标。

现在这对于文本提取意味着 borb 等软件必须猜测何时插入 space。

它可以判断两个字符的边界框相距多远。

当然如果渲染指令中没有使用space字符,则可能不包含在字体信息中。这叫做font-subsetting。创建专用字体的地方,仅包含实际使用的字符。

发生这种情况时,borb 不知道 space 字符应该有多宽。

borb 将尝试不同的启发式方法:

  • 检查字体是否为单色spaced
  • 检查是否定义了足够多的其他字符(例如“a space 是字符“i”的两倍宽)
  • 恢复为默认值

如果您查看 SimpleTextExtraction 的代码,您将能够看到这个逻辑在起作用。

我建议您将 class 子class 并修改它以允许您(用户)定义可接受的 space 字符宽度。

特别看看this line