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 文档并不真正包含原样的文本。它包含像 Adobe 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。
我正在尝试使用 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 文档并不真正包含原样的文本。它包含像 Adobe 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。