当我尝试从PDF文件中提取文本时,它似乎在随机插入单词之间插入空格。
我在本页的下载部分中的以下示例文件中使用了pdfbox-app-1.6.0.jar(最新版本): http://www.sheffield.gov.uk/roads/children/parents/6-11/pedestrian-training
我已经尝试了其他几个PDF文件,它似乎在几个页面上都是一样的。
我执行以下操作:
java -jar pdfbox-app-1.6.0.jar ExtractText -force -console~ / Desktop / ped training pdf.pdf
在下载的文件上,您将看到以下空格在控制台上的结果中错误插入: “•如果儿童能够走路 安全地这可以减少 拥塞。 “
“•为以后的生活发展良好的习惯。”
“www.sheff ield.gov.uk”
“提前考虑!,这是基于”
等等。
正如你所看到的,上面几句话之间有空格,我无法理解。
我在ubuntu上运行Sun的JDK 1.6。
我在几个不同的PDF文件上尝试了这个并尝试在论坛上搜索解决方案,但是有类似的错误但似乎都已经解决了。
任何帮助或者如果其他人有同样的问题请评论。这对于正确索引内容以进行搜索造成了很大的问题。
答案 0 :(得分:12)
不幸的是,目前没有简单的解决方案。
内部PDF文档只包含诸如“在X位置放置字符'abc'和将位置字符'def'置于位置Y”之类的指令,并且PDFBox试图判断生成的提取文本是否应为“abc def”或“ abcdef“基于X和Y之间的距离。这些启发式算法通常非常准确,但正如您所看到的,它们并不总能产生正确的结果。
提高提取文本质量的一种方法是尝试对每个提取的单词或标记进行字典查找。如果查找失败,请尝试将令牌与下一个令牌合并。如果组合令牌上的字典查找成功,那么文本提取器很可能错误地在单词内添加了额外的空格。不幸的是,PDFBox中还没有这样的功能。有关为此提交的功能请求,请参阅https://issues.apache.org/jira/browse/PDFBOX-1153。欢迎补丁!
答案 1 :(得分:5)
班级org.apache.pdfbox.util.PDFTextStripper
(pdfbox-1.7.1
)允许修改决定两个字符串是否属于同一个词的倾向。
增加spacingTolerance
会减少插入的空格数。
/**
* Set the space width-based tolerance value that is used
* to estimate where spaces in text should be added. Note that the
* default value for this has been determined from trial and error.
* Setting this value larger will reduce the number of spaces added.
*
* @param spacingToleranceValue tolerance / scaling factor to use
*/
public void setSpacingTolerance(float spacingToleranceValue) {
this.spacingTolerance = spacingToleranceValue;
}