2011-10-31 70 views
11

當我嘗試從我的PDF文件中提取文本時,它似乎隨機地在單詞之間插入空格。PDFBox在單詞內添加空格

我在這個頁面的下載部分下面的示例文件中使用PDFBOX-APP-1.6.0.jar(最新版本): http://www.sheffield.gov.uk/roads/children/parents/6-11/pedestrian-training

我和其他幾個PDF文件嘗試,它似乎在幾頁上做同樣的事情。

我做到以下幾點:

Java的罐子PDFBOX-APP-1.6.0.jar ExtractText -force -console〜/桌面/ PED培訓pdf.pdf

上下載的文件,你會看到下面的控制檯上,結果錯誤地被插入空格: 「•如果CH ildren能夠步行到 schoo升放心,這可能減少 擁堵」

「•開發爲以後的生活好HAB它。」

「www.sheff ield.gov.uk」

「超前思考!WH ICH是基於」

等等等等

正如你可以看到幾個上面有字他們之間的空白無緣無故我可以理解。

我在ubuntu上運行Sun的JDK 1.6。

我已經嘗試了這幾個不同的PDF文件,並嘗試搜索論壇上的解決方案,也有類似的錯誤,但似乎都已解決。

任何幫助或如果任何人有同樣的問題,請評論。這對索引正確搜索內容造成了很大的問題。

回答

11

不幸的是,目前還沒有簡單的解決方案。

內部PDF文檔只包含「位置X處放置字符'abc'位置和位置Y處放置字符'def'等指令,並且PDFBox會嘗試推斷生成的提取文本是否應爲」abc def「或「abcdef」基於X和Y之間的距離等事物。這些啓發式法通常相當準確,但正如您所看到的,它們並不總是產生正確的結果。

提高提取文本質量的一種方法是嘗試對每個提取的詞或標記進行詞典查找。如果查找失敗,請嘗試將該令牌與下一個令牌相結合。如果組合標記的字典查找成功,那麼很可能文本提取器錯誤地在單詞內部添加了額外的空間。不幸的是,這種功能在PDFBox中尚不存在。請參閱https://issues.apache.org/jira/browse/PDFBOX-1153瞭解爲此提交的功能請求。修補程序歡迎!

+1

感謝Jukka,有時只是理解爲什麼某些東西不能按預期工作,並且我沒有做任何導致問題的事情。 –

+0

下面是如何使用Lucene構建這樣一個詞典的例子。 [如何在Lucene中提取文檔術語向量](http://stackoverflow.com/a/8901758/165085) –

5

該類org.apache.pdfbox.util.PDFTextStripperpdfbox-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; 
}