Python和pyPdf - 如何从页面提取文本并在行间添加空格

5 投票
1 回答
5347 浏览
提问于 2025-04-15 15:39

目前,如果我用pyPdf创建一个PDF页面的对象,并使用extractText()提取文本,结果是所有的行都连在一起了。比如,页面的第一行是“hello”,第二行是“world”,那么extractText()返回的结果就是“helloworld”,而不是“hello world”。有没有人知道怎么解决这个问题,或者有什么替代的方法?我真的需要文本行之间有空格,因为我正在对这个PDF的文本进行数据挖掘,如果行之间没有空格,那就没法用了……

1 个回答

2

这是一个常见的PDF解析问题。在某些情况下,你可能还会遇到多余的破折号,这些也需要你去修复。我在我的一个项目中找到了一种解决方法,下面我会简单描述一下:

我使用了pdfminer来从PDF中提取XML,结果发现XML中有一些单词是连在一起的。我还将同一个PDF提取成了HTML格式,HTML的结构可以用以下的正则表达式来描述:

<span style="position:absolute; writing-mode:lr-tb; left:[0-9]+px; top:([0-9]+)px; font-size:[0-9]+px;">([^<]*)</span>

这些文本块的位置是绝对定位的,并且有一个顶部样式,你可以用它来判断是否发生了换行。如果发生了换行,并且最后一行的最后一个单词没有多余的破折号,那么你就可以把最后一行的最后一个单词和当前行的第一个单词分开。虽然在细节上可能会有点复杂,但你可能能够修复几乎所有的文本解析错误。

另外,你可能还想用像enchant这样的词典库来检查你的文本,找出错误。如果词典给出的修正建议和错误单词很像,只是中间有个空格,那么这个错误单词很可能是解析错误,可以用词典的建议来修复。

解析PDF确实很麻烦,如果你找到更好的数据源,尽量使用它。

撰写回答