iTextSharp PDF阅读器准确性

时间:2013-03-27 12:30:20

标签: c# itextsharp

从多页扫描的PDF文件中读取文本时,你们中的任何人都有iTextSharp准确度的经验吗?

我试图在adobe reader中使用基本搜索功能读取pdf,并使用iTextSharp。

与adobe(我称之为)100%的adobe相比,itextsharp设法找到大约50%的给定单词出现次数

[iTextSharp 1000 occ // Adobe Reader >2000]

这是一个已知的“问题”吗?

编辑:我应该补充一下:在我搜索的时候它已经被点亮了。

2 个答案:

答案 0 :(得分:1)

正如@ChrisHaas已经解释的那样,没有代码和PDF样本很难具体说明。

首先,说 itextsharp设法找到大约50%的给定单词的出现有点误导,因为iText(夏普)不直接暴露方法来查找特定文本PDF,因此实际上找到0%。它只提供了一个框架和一些简单的文本提取示例。

使用此框架认真搜索给定字词需要的不仅仅是应用这些简单的示例用法(由SimpleTextExtractionStrategy和{{1}提供使用LocationTextExtractionStrategy,)并结合某些PdfTextExtractor.GetTextFromPage(myReader, pageNum)调用时,也可以在幕后工作。你必须:

  • 创建更好的文本提取策略

    • 有更好的算法来识别哪些字形属于哪一行;例如对于带有OCR文本的扫描页面,样本策略可能完全失败,文本行不是100%直的,而是最低限度上升;

    • 识别穷人的粗体(用非常小的偏移打印相同的字母以获得大胆字体样式的印象)和类似的构造并相应地转换它们;

  • 创建文本规范化

    • 解析连字;

    • 统一语义相同或相似字符的替代字形;

  • 对提取的文本和搜索字词进行规范化,然后才进行搜索。

此外,正如@ChrisHaas所提到的,必须特别注意文本中的空格。

如果您根据这些标准创建基于iText的文本搜索,您肯定会获得可接受的点击率。获得与Adobe Reader一样好是一项非常重要的任务,因为他们已经为此功能投入了大量资源。

为了完整起见,您不仅应该搜索页面内容和从那里引用的所有内容,还应该搜索可能具有相当一些文本内容的注释,这些注释甚至可能看起来好像它是页面的一部分,例如在自由文本注释的情况下。

答案 1 :(得分:0)

如果不了解您所处情况的具体情况(使用PDF,使用的代码等),我们无法为您提供太多帮助。

但是我可以告诉你iTextSharp有更多的文字文本提取器。由于PDF中的文本可以且通常是非连续且非线性的,因此iTextSharp会接受任何连续的字符并构建我们认为的单词和句子。然后它还尝试将看起来像是#34;几乎在同一行上的字符组合在一起。并做同样的事情(例如文字在一个微小的角度,因为OCR'文本经常是)。还有"空格"这应该是简单的ASCII 32字符但通常不是。 iTextSharp更加努力,并尝试计算两个文本运行是否应以空格分隔。

Adob​​e可能还有进一步的启发式方法,能够更多地猜测文本。我的猜测是,他们在猜测组合非线性文本方面有更大的门槛。