从多页扫描的 pdf 中读取文本时,你们中的任何人是否有使用 iTextSharp 准确性的经验?
事情是我尝试使用 adobe 阅读器中的基本搜索功能以及使用 iTextSharp 阅读 pdf。
itextsharp 设法找到大约 50% 的给定单词的出现,而 adobe (我称之为) 100%
[iTextSharp 1000 occ // Adobe Reader >2000]
这是一个已知的“问题”吗?
编辑:我应该补充:在我搜索的时候它已经被 ocr'ed 了。
从多页扫描的 pdf 中读取文本时,你们中的任何人是否有使用 iTextSharp 准确性的经验?
事情是我尝试使用 adobe 阅读器中的基本搜索功能以及使用 iTextSharp 阅读 pdf。
itextsharp 设法找到大约 50% 的给定单词的出现,而 adobe (我称之为) 100%
[iTextSharp 1000 occ // Adobe Reader >2000]
这是一个已知的“问题”吗?
编辑:我应该补充:在我搜索的时候它已经被 ocr'ed 了。
正如@ChrisHaas 已经解释的那样,没有代码和 PDF 样本很难具体说明。
首先,说itextsharp 设法找到大约 50% 的给定单词的出现有点误导,因为 iText(Sharp) 没有直接公开在 PDF 中查找特定文本的方法,因此实际上找到了 0%。它只是提供了一个框架和一些简单的文本提取示例。
使用这个框架来认真搜索给定的单词需要的不仅仅是应用那些简单的示例用法(由 the 提供,SimpleTextExtractionStrategy
并且在LocationTextExtractionStrategy,
使用 时也在后台工作PdfTextExtractor.GetTextFromPage(myReader, pageNum)
)结合一些Contains(word)
调用。你必须:
创建更好的文本提取策略
有更好的算法来识别哪些字形属于哪一行;例如,对于带有 OCR 文本的扫描页面,示例策略可能会完全失败,其中文本行不是 100% 笔直,而是最低限度地上升;
识别穷人的粗体(以非常小的偏移量两次打印相同的字母以获得粗体字符样式的印象)和类似的构造并相应地转换它们;
创建一个文本规范化
解决连字;
统一语义相同或相似字符的替代字形;
规范化提取的文本和您的搜索词,然后才进行搜索。
此外,正如@ChrisHaas 所提到的,必须特别注意文本中的空格。
如果您在考虑这些条件的情况下创建基于 iText 的文本搜索,您肯定会获得可接受的命中率。与 Adobe Reader 一样好是一项艰巨的任务,因为他们已经在此功能上投入了相当多的资源。
为了完整起见,您不仅应该搜索页面内容和从那里引用的所有内容,还应该搜索可能包含相当多文本内容的注释,甚至可能看起来像是页面的一部分,例如在免费的情况下文本注释。
在不了解您的具体情况(有问题的 PDF、使用的代码等)的情况下,我们无法为您提供太多帮助。
但是我可以告诉你,iTextSharp 有更多的文字文本提取器。由于 PDF 中的文本可以并且通常是不连续的和非线性的,因此 iTextSharp 采用任何连续的字符并构建我们认为的单词和句子。然后,它还会尝试组合看起来“几乎在同一行”并且执行相同操作的字符(例如像 OCR 文本通常那样具有小角度的文本)。还有“空格”应该是简单的 ASCII 32 字符,但通常不是。iTextSharp 更加努力并尝试计算两个文本运行是否应该用空格分隔。
Adobe 可能有进一步的启发式方法,能够猜测更多关于文本的信息。我的猜测是他们在组合非线性文本时有一个更大的猜测阈值。