【问题标题】:How to extract/recognize text from documents?如何从文档中提取/识别文本?
【发布时间】:2011-12-22 19:54:56
【问题描述】:

我需要从上传的文档中提取纯文本以使其可搜索。文档可以是 MS Word 或 pdf(扫描或包含文本)。有问题的应用程序在 LAMP 堆栈上运行,但可以选择安装其他软件。您可以推荐任何工具、服务、库或它们的组合来完成此任务吗?

【问题讨论】:

  • 对于扫描的文档,我认为您需要一些 OCR
  • 从旧式 .doc 文件中提取文本是一件非常痛苦的事情。它们并不意味着易于解析。 .docx 稍微容易一些,因为它们大部分只是压缩的 .xml 文件。
  • @BlotClock 我知道。我没有明确提到它,因为我认为这是显而易见的。

标签: php pdf ms-word ocr lamp


【解决方案1】:

您可以使用 shell 实用程序的组合,例如 pdftotext 用于 PDF,wvWare 用于 DOC,docx2txt.pl 用于 DOCX,就像 textractor ruby​​gem 一样。

# on Ubuntu
apt-get install wv xpdf-utils links

还有用于提取PDFdocx 的原生php 类。

另一个 ruby​​gem 是 docsplit,它甚至可以通过 Tesseract 为您进行 OCR。

考虑使用Solr 进行索引和搜索可能是个好主意。您可以使用Solr Cell 插件来索引和搜索 Word 文档、PDF 等。我在我的一个项目中成功使用了它。 Solr Cell 基于多个项目,例如 Apache POITikaPDFBox

棘手的部分是设置所有依赖于单元格的 jar 和 solr 模式,并找出索引请求参数,但所有这些都可以从 wiki 文档中考虑。 Here's 我的罐子和架构让您开始,架构的相关部分是包含“附件”的行。

不过,Solr Cell 不进行 OCR。您必须先使用 OCR 引擎才能使其可搜索。

对于 OCR,您可以使用由 Google 开发的 OpenSource Engine Tesseract,或者您可能想看看商业引擎 Abbyy。两者都是命令行工具,你可以从你的 php 脚本中运行。要从 Tesseract 获得与 Abbyy 类似的结果,您必须进行一些预处理和后处理 1。还有云服务,这可能是一个更简单的选择。例如,WisetrendAbbyy Cloud。后者目前处于测试阶段,因此它是免费的,并且可以随时使用PHP code samples

【讨论】:

  • Solr Cell 是否有 OCR 从扫描的 PDF 中提取文本?
  • 我完全不确定,但我认为不会。我认为 OCR 应该在管道中进一步完成,我听说 tesseract 是一个很棒的免费工具。
  • 那么它就不适用于扫描的 PDF。一些 OCR 软件应首先将它们转换为可搜索的 PDF(添加了文本层)。
  • 谢谢!您的回答是最有帮助的。我意识到这个问题有点宽泛,所以没有真正的明确答案。我编辑了一些关于 OCR 的信息并将其作为一个答案 wiki,因此其他人也可以贡献内容。
【解决方案2】:

就我而言,在 PHP 上使用 OCR 可以做的事情并不多。最好的解决方案是使用云服务 - 一种网络 API,可让您上传图像并将 OCR 数据发回给您。试试www.ocrsdk.com,它是ABBYY最近推出的基于云的OCR SDK。它现在处于测试阶段,因此完全免费使用,并且可以使用 PHP code samples。免责声明:我在@ABBYY 工作

【讨论】:

  • 有趣!不过,由于这只是解决方案的一部分,因此我编辑了另一个答案(编辑仍在等待中)。希望你能原谅我。
【解决方案3】:

我不知道有任何将 PDF 转换为文本的软件,但对于 MS Word 部分,您可以使用 Apache POI:http://poi.apache.org/,它内置在 JAVA 中,因此您必须从 PHP 执行二进制文件文件使其工作。

另一种选择是使用 JODConverter(我目前正在为此目的使用)http://code.google.com/p/jodconverter/ 因此,如果 Apache POI 不起作用,我知道 jodconverter 会起作用。我正在使用 3.0 测试版。

在我的 PHP 代码中,我保存上传文件并在 tmp 目录中的文件上执行转换器二进制文件,这将在 tmp 目录中创建一个新文件,并从新文件中提取纯文本。

【讨论】:

  • 注意:通过标准输入输入文件可能效率更高,因此您不必先将其保存到磁盘。如果有问题的实用程序没有为此提供 cli 开关,您可以在 Linux 下使用 /dev/stdin。
猜你喜欢
  • 2010-11-12
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多