2014-10-07 185 views
0

我的問題是:提取PDF文本

我如何可以提取其列分成的方式,我得到這個列分隔結果的PDF文件中的文本?

背景: 我從事關於文本分析(特別是科學文本)的項目。 這些文本有時會以多列布局發佈,每列都有一個單獨的頁碼。 要通過佈局的頁面編號來提取文本,按列提取文本將非常有用。


我用PDFBOX,並試圖/搜索幾件事情:

  • 我試過PDPage類的getThreadBeads()方法 - >結果:列表0大小
  • 我試過graping的文本與getCharactersByArticle()方法 - >文本沒有分成列
    (我試過這與PDF文件的已發佈文本以及自我創建.doc文件,每個都有一個多colu MN佈局)

的事情是,PDFBOX似乎通過自動列將文本拆分: 如果我設置在真PDFTextStripper一個頁面的所有跡象都在一條線上設置的setSortByPosition()不承認單獨的列。 但是,如果我設置setSortByPosition()爲假脫衣舞師正在做這種劃分。

爲了讓我看看pdfBox源代碼: 關鍵的方法是PDFTextStripper的writePage()方法。 這裏空格(大多數pdf中沒有給出)和換行符顯然計算在內。 但我找不到Stripper是如何計算分欄符的。

所以再次提問:

  • 如何PDFTextStripper計算分欄符?
  • pdfBox API中是否有方法來捕捉這個/按列提取文本?
  • 這可能與其他pdf-api?

在此先感謝

回答

2

如果我設置在真PDFTextStripper一個頁面的所有跡象都在一條線上設置的setSortByPosition()不承認單獨的列。但是如果我將setSortByPosition()設置爲false,剝離器將執行此分割。

[...] PDFTextStripper如何計算列中斷?

不是。

通過設置SortByPositionfalse你告訴PDFBox的到嘗試從頁面內容流的文本塊,但排序,而不是接受他們在他們出現的順序。

在您的文檔中,文本內容似乎是按照閱讀順序繪製的,即逐列顯示。這不適用於所有文檔,爲了處理其他文檔,PDFBox提供了從左到右,從上到下排序文本片段的選項。

在文檔中激活該選項(設置SortByPositiontrue)將返回與列無關的文本。

pdfBox API中有沒有方法可以捕獲這個/按列提取文本?

PDFBox不分析頁面內容以識別列。但是,如果您進行分析,則允許您在將列矩形作​​爲規則提供時逐列提取文本。

+0

謝謝!因此,PDF文檔所依賴的閱讀順序在創建時已被安全保存到PDF文檔中? I.e .:當我將.doc轉換爲pdf時,pdf(通常)以閱讀順序保存文本?如果是:是否有一種方法可以在創建PDF時存儲有關列的信息? – matthiasboesinger 2014-10-07 13:36:33

+1

*當我將.doc轉換爲pdf時,pdf(通常)以閱讀順序保存文本?* - *您的*文檔屬於這種類型。這似乎是一個相當自然的秩序。但我不能說真的有多普通。無論如何,你必須檢查你的PDF源,因爲它們可能不尋常......;) – mkl 2014-10-07 13:40:20

+2

*有沒有一種方法可以在創建PDF時存儲有關列的信息? - 是的,但似乎沒有被使用過在你的示例文檔中,否則你對'getThreadBeads'和'getCharactersByArticle'的實驗會更加成功。 – mkl 2014-10-07 13:41:49