我已经使用pdfbox逐行从pdf中提取文本,并使用我的算法按句子处理它。
我通过使用句点(.)和首字母为大写的单词来识别句子。这里的问题是,当一个句子以带有上标的单词结尾时,提取器将其视为正常字符并将其放在句点(.)旁边
例如:表达式"2 power 22"作为句子的最后一个单词出现,即带句号,它被提取为2.22,这使得很难识别句子的结尾。
请建议一个解决方案,以摆脱上标或不同的逻辑来识别句尾。
谢谢。
我在回答我自己的问题,因为有些人可能会在这里被引导。
我已经根据@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())
));
}
让我知道如果我的方法有任何缺陷,只消除上标。谢谢。