iTextSharp PDF阅读器准确性

本文关键字:准确性 PDF iTextSharp | 更新日期: 2023-09-27 18:06:10

你们中有人在阅读多页扫描的pdf文本时使用过iTextSharp的准确性吗?

问题是我试过用adobe reader的基本搜索功能和iTextSharp来阅读pdf。

itextsharp能找到给定单词出现的大约50%,而adobe

能找到(我称之为)100%
[iTextSharp 1000 occ // Adobe Reader >2000]

这是一个已知的"问题"吗?

编辑:我应该补充:在我搜索的时候它已经被删除了

iTextSharp PDF阅读器准确性

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

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

使用这个框架来认真搜索给定的单词需要的不仅仅是应用那些简单的示例用法(由SimpleTextExtractionStrategyLocationTextExtractionStrategy,提供,当使用PdfTextExtractor.GetTextFromPage(myReader, pageNum)时也在底层工作)并结合一些Contains(word)调用。你必须:

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

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

    • 识别穷人的粗体(将同一个字母以很小的偏移量打印两次以获得粗体字符风格的印象)和类似的结构并相应地转换它们;

  • 创建一个文本规范化

    • 解决绑扎;

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

  • 将提取的文本和搜索词进行规范化,然后再进行搜索。

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

如果您根据这些条件创建一个基于ittext的文本搜索,您肯定会得到一个可接受的命中率。要达到adobereader的水平是一项相当艰巨的任务,因为他们已经在这个功能上投入了相当多的资源。

为了完整起见,您不仅应该搜索页面内容和从那里引用的所有内容,还应该搜索注释,这些注释也可能包含相当多的文本内容,甚至可能显示为页面的一部分,例如,在免费文本注释的情况下。

如果不知道您的具体情况(PDF,使用的代码等),我们无法帮助您太多。

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

Adobe可能有进一步的启发,能够猜测更多的文本。我的猜测是,他们在组合非线性文本时有更大的猜测阈值。