2014-03-28 37 views
1

我已經從pdf中逐行使用pdfbox提取文本,以便用句子處理我的算法。從pdf中提取文本時不包括超級腳本

我是通過使用句點(。),然後是首字母爲大寫的單詞來識別句子。這裏的問題是,當一個句子以帶有上標的詞結尾時,提取器將其視爲正常字符並將其放在句點(。)旁邊

例如:表達式「2 power 22」當作爲最後一個出現時在一個句子中,即一個句子,它被提取爲2.22,這使得很難識別句子的結尾。

請建議一個解決方案來擺脫超級腳本或不同的邏輯來識別句子的結尾。

謝謝。

+0

上標最有可能使用較小的字體。從'PdfTextStripper'派生一個類,它以小字體放置文本。 – mkl

+0

@mkl:謝謝,你的建議很有幫助。 – user1830284

回答

1

我在回答我自己的問題,因爲有些人可能會在這裏指示。

我已經根據@mkl的建議解決了這個問題。在觀察PDFStreamEngine.java中getYScale()的結果後,我得出結論:上標的大小小於8.9663。所以在創建一個TextPosition之前,我在PDFStreamEngine.java中保留了一個條件,該文本將由PDFTextStripper.java進行處理。代碼如下:


if(textXctm.getYScale()>=8.9663) { 
    processTextPosition(
     new TextPosition(
      pageRotation, 
      pageWidth, 
      pageHeight, 
      textMatrixStart, 
      endXPosition, 
      endYPosition, 
      totalVerticalDisplacementDisp, 
      widthText, 
      spaceWidthDisp, 
      c, 
      codePoints, 
      font, 
      fontSizeText, 
      (int)(fontSizeText * textMatrix.getXScale()) 
    )); 
} 

讓我知道如果我的做法有隻消除標任何瑕疵。 謝謝。