1

我想從pdf文檔中提取文本。我已經測試了幾個工具,如PDFBox,TET,PDFTextStream等,但它們都不適合提取波斯多列pdf文檔的文本。PDFBox如何檢測列?

目前我正試圖結合這些工具的優秀特性並在其上使用一些技巧。現在我想知道如何檢測頁面的列數以及如何拆分這些列的文本。

特別我想知道PDFBoxPDFTextStream是哪一類負責列檢測以及它是如何工作的。

回答

2

我只能說PDFTextStream,但爲了理解它是如何工作的,大致需要了解PDFTextStream如何查看PDF文檔。

每個文檔都由Pages組成,它們由Blocks(其中可以有多個嵌套)組成。 Blocks最終將包含Lines,其中將包含TextUnits

這些單位中的每一個都有一個x,y,widthheight屬性。所有PDF都是基於它們的座標佈置的這些基本單元。當您要求PDFTextStream「讀取」一個頁面或一個區域時,它會查看這些對象以及它們在X,Y平面上的佈局,並使用近似的方式來翻譯文本。這就是爲什麼你會得到錯誤,因爲沒有100%的萬無一失的方法來把這個結構變成機器可讀的結構化數據。

PDFTextStream,你應該看看getRegionTextfunction and example。 PDFTextStream是專有的(我之所以轉向使用PDFBox),所以我不能告訴你有關用於獲取文本的算法的細節,但它們基於上述過於簡單化。

祝你好運。

+0

「PDFTextStream」與您所描述的一樣。我深入瞭解了這些對象的主要對象和[接口](http://downloads.snowtide.com/javadoc/PDFTextStream/2.3.2/com/snowtide/pdf/PDFTextStream.html)。我認爲它的API非常簡單。但是'PDFTextStream'的主要缺陷是它不支持'從右到左'腳本(比如波斯語,阿拉伯語和希伯來語)。所以我也轉到了'PDFBox'!但是'PDFBox'在RTL' pdf文檔的文本提取方面存在缺陷,但是它支持它們。我認爲它有'工作流程'架構,因此很難調試。不管怎樣,謝謝你。 – user2041057 2013-09-19 08:17:00