从pdf中提取文本时排除超级脚本

时间:2014-03-28 18:13:53

标签: parsing extract pdfbox superscript sentence

我使用pdfbox逐行从pdf中提取文本,用我的算法按句子处理它。

我通过使用句点(。)后跟一个第一个字母为大写的单词来识别句子。这里的问题是,当一个句子以带有上标的单词结尾时,提取器将其视为普通字符并将其放在句点旁边(。)

例如:表达“2 power 22”当作为句子中的最后一个单词出现时,即带有句点,它被提取为2.22,这使得难以识别句子的结尾。

请建议一个解决方案,摆脱超级脚本或不同的逻辑来识别句子的结尾。

感谢。

1 个答案:

答案 0 :(得分:1)

我正在回答我自己的问题,因为有些人可能会被引导到这里。

我根据@mkl的建议解决了这个问题。在PDFStreamEngine.java中观察了getYScale()的结果后,我得出结论:上标的大小小于8.9663。所以我在创建TextPosition之前在PDFStreamEngine.java中保留了一个条件,TextPosition将由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())
    ));
}

如果我的方法在消除上标方面存在任何缺陷,请告诉我。 感谢。