我使用pdfbox逐行从pdf中提取文本,用我的算法按句子处理它。
我通过使用句点(。)后跟一个第一个字母为大写的单词来识别句子。这里的问题是,当一个句子以带有上标的单词结尾时,提取器将其视为普通字符并将其放在句点旁边(。)
例如:表达“2 power 22”当作为句子中的最后一个单词出现时,即带有句点,它被提取为2.22,这使得难以识别句子的结尾。
请建议一个解决方案,摆脱超级脚本或不同的逻辑来识别句子的结尾。
感谢。
答案 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())
));
}
如果我的方法在消除上标方面存在任何缺陷,请告诉我。 感谢。