我正在尝试比较 PDF 文档的两个版本之间的文本。我能够使用 和 来创建差异,并pdftotext
格式化一些替换。perl
colordiff
这会输出很多差异,但其中许多是相同的段落,但有一个段落在开头有一个小变化,导致其余段落有不同的换行符。
有人对如何有效比较文档有什么建议吗?
编辑:pdf 是数字创建的,包含文本信息,pdf 不是扫描图像。
答案1
恐怕pdftotext
目前还不足以解决这个问题。
看看实际的 OCR 软件(它没有在文档中准备好文本信息)是如何进行的:
- 创建文档的缩小版本,其中“缩小”是通过保留原始图像的每 N×N 块的最暗像素来完成的
- 找到最大的空格分隔的方块,将其理解为段落
- 对这些段落的顺序进行有根据的猜测(例如,如果页面顶部有一个正方形,其跨度超过页面宽度的 80%,那么下面有两个相似宽度、高度大致相同的块即,您的第一个块是标题,然后是文本主体,从左侧块开始并继续右侧)
- 对于每个方块,用较小的块做类似的事情来找到文本行
- 分割成单词,如果需要的话,分割成字母,并基于句子中可能出现的内容的内部模型,以及这些字母和单词与存储的参考字母的相似性,将这些像素转换为文本。
显然,第三步之后你就完成了。而且自己实现并不难!
因此,您首先将图像转换为稍微高分辨率的图像(300dpi),例如使用`mutool draw -r 300 -c grey -o 'rastered_%03d.png'(基本上,上面的步骤0,扫描您的文件)。
然后,对于每个结果rastered_${pagenumber}.png
,进行缩小(步骤 1)和段落分割(步骤 2)。然后可能简单地按左上角排序(首先是 y,然后是 x)(步骤 3)。
第三步之后,您只需使用带有 的方块的坐标即可pdftotext -x ${top_left_x} -y ${top_left_y} -W ${width} -H ${height}
。然后以正确的顺序连接生成的文本:)