can*_*ero 1 java itext pdftotext
我使用的是iText的转换PDF文本文件,它的工作原理其实不错,但对于一些的话它做以下事情:例如,在PDF有像"提出的主要思路"这句话,但iText的创造像"presentthemainideas"的输出.反正有没有纠正这种行为?
String pdf="/home/can/Downloads/NLP/textSummarization/A New Approach for Multi-Document Update Summarization.pdf";
String txt="/home/can/myWorkSpace/PDFConverterProject/outputs/bb.txt";
StringBuffer text=new StringBuffer() ;
String resultText="";
PdfReader reader;
try {
reader = new PdfReader(pdf);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
PrintWriter out = new PrintWriter(new FileOutputStream(txt));
TextExtractionStrategy strategy;
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
text.append(strategy.getResultantText());
}
resultText=text.toString();
resultText = resultText.replaceAll("-\n", "");
out.println("-->"+resultText);
StringTokenizer stringTokenizer=new StringTokenizer(resultText, "\n");
PrintWriter lineWriter = new PrintWriter(new FileOutputStream("/home/can/myWorkSpace/PDFConverterProject/outputs/line.txt"));
while (stringTokenizer.hasMoreTokens()){
String curToken = stringTokenizer.nextToken();
lineWriter.println("line-->"+curToken);
}
lineWriter.flush();
lineWriter.close();
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
缺少空格字符的原因是您在渲染的PDF中看到的空间不一定对应于PDF的页面内容描述中的空格字符.相反,您经常在PDF中找到一个操作,在渲染一个单词后,将当前位置稍微向右移动,然后再渲染下一个单词.
不幸的是,相同的机制也被用于增强相邻字形的外观:在一些字母组合中,为了良好的外观和阅读体验,字形应该彼此更接近地打印或者彼此之间的距离比默认情况下更远.这是使用与上面相同的操作在PDF中完成的.
因此,在这种情况下,PDF解析器必须使用启发式方法来判断这种转换是否意味着暗示空间字符,或者它是否仅仅意味着使字母组看起来很好.启发式可能会失败.
您SimpleTextExtractionStrategy用作文本提取策略.这种情况下的启发式实现如下(当前在iText SVN中继的SimpleTextExtractionStrategy.java中的renderText方法中):
float spacing = lastEnd.subtract(start).length();
if (spacing > renderInfo.getSingleSpaceWidth()/2f)
{
result.append(' ');
}
Run Code Online (Sandbox Code Playgroud)
因此,至少是空间字符的当前宽度的一半宽的间隙被转换成空格字符.
这通常听起来很明智.但是,对于仅使用水平移位来分隔单词的文档,实际空格字符的当前宽度可能不是启发式的良好度量.
因此,您可以做的是尝试改进文本提取策略中的启发式方法.复制现有的,操作它,并在您的代码中使用它.
如果您为您的问题提供示例PDF,我们可能会提供一些帮助.
| 归档时间: |
|
| 查看次数: |
7398 次 |
| 最近记录: |