我想從pdf文檔中提取文本。我已經測試了幾個工具,如PDFBox
,TET
,PDFTextStream
等,但它們都不適合提取波斯多列pdf文檔的文本。PDFBox如何檢測列?
目前我正試圖結合這些工具的優秀特性並在其上使用一些技巧。現在我想知道如何檢測頁面的列數以及如何拆分這些列的文本。
特別我想知道PDFBox
或PDFTextStream
是哪一類負責列檢測以及它是如何工作的。
我想從pdf文檔中提取文本。我已經測試了幾個工具,如PDFBox
,TET
,PDFTextStream
等,但它們都不適合提取波斯多列pdf文檔的文本。PDFBox如何檢測列?
目前我正試圖結合這些工具的優秀特性並在其上使用一些技巧。現在我想知道如何檢測頁面的列數以及如何拆分這些列的文本。
特別我想知道PDFBox
或PDFTextStream
是哪一類負責列檢測以及它是如何工作的。
我只能說PDFTextStream
,但爲了理解它是如何工作的,大致需要了解PDFTextStream
如何查看PDF文檔。
每個文檔都由Pages
組成,它們由Blocks
(其中可以有多個嵌套)組成。 Blocks
最終將包含Lines
,其中將包含TextUnits
。
這些單位中的每一個都有一個x
,y
,width
和height
屬性。所有PDF都是基於它們的座標佈置的這些基本單元。當您要求PDFTextStream
「讀取」一個頁面或一個區域時,它會查看這些對象以及它們在X,Y平面上的佈局,並使用近似的方式來翻譯文本。這就是爲什麼你會得到錯誤,因爲沒有100%的萬無一失的方法來把這個結構變成機器可讀的結構化數據。
在PDFTextStream
,你應該看看getRegionText
function and example。 PDFTextStream是專有的(我之所以轉向使用PDFBox),所以我不能告訴你有關用於獲取文本的算法的細節,但它們基於上述過於簡單化。
祝你好運。
「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