15

我需要一个 .NET 库,以便使用它从 PDF、Excel 和 Word 文件中提取文本数据。

理想情况下,一个免费的工具!

你会推荐任何吗?

非常感谢,

4

6 回答 6

32

作为一个花了很多天时间寻找(几乎)这个确切问题的免费解决方案的人,我可以很诚实地告诉你,你不会找到一个能够很好地从所有这些格式中提取文本的免费库。我知道的唯一一个在所有这些格式(以及更多)方面都做得很好的库是一个商业库,它实际上并不是 .NET 的原生库,它是一个 C++/COM 库,带有一个 C++/CLI 。 NET 包装器。

有哪些选择?

  • iTextSharp——这一款在从 PDF 中提取文本方面非常棒。虽然这个库的更高版本是商业友好的(LGPL),但作者决定改为对软件收费,所以他们改为在 AGPL 下发布它,所以除非你想发布所有源代码,您可能不想使用其中一个版本。但是,根据 LGPL 许可的最新版本 (4.1.6) 可以在整个 Internet 上找到。这个 SO question有一个链接到 LGPL 下的版本。

  • PdfBox -- 另一个 PDF 库。这个,IMO,更好,因为它在 Apache 2.0 许可下。它有一些问题,因为它有时(可能很少)不会像 iTextSharp 那样做得好。我将此更多地归因于它是一个比其他任何东西都更新的库。 但是,我对这个库的体验是几个月前的事了。这个项目正在积极开发中,仅在上个月,就解决了 52 个问题。我会密切关注这个。请注意,这是一个 java 库。(请继续阅读下文,了解有关我为何包含此内容的更多信息。)

  • POINPOI——这些是专门为 Microsoft Office 文档编写的库,尤其是 2007 年之前的格式、OLE 二进制文件格式。它确实支持较新的 OpenXML 格式,但我不确定该库的那部分是否成熟。POI 是 java 版本(请继续阅读下文,了解有关我为何包含此内容的更多信息。),其中 NPOI 是本机 .NET 版本。但是,NPOI 只支持 excel 文档,其中 POI 可以对更多类型进行文本提取。

  • Open XML SDK 2.0 -- 一个用于读取/修改 office 2007+(未加密的 OpenXML)文档的库,是我自己创建的 Microsoft!这是一个用于处理此类文档的惊人库。但是,它是一个较低级别的库,因此实际上(据我所知)并没有一个它可以完成所有文本提取类。有一个相当好的例子,(我不确定它是否涵盖某些情况,如表格中的文本等),从这个 SO 答案的 word 文档中提取文本

  • Tika -- 再一次,另一个 Java 库(我不会无缘无故地告诉您有关 Java 库的内容。继续阅读!:)),这将尽可能接近用于文本提取的“一个库”。Tika 可以使用现有的解析库从许多不同类型的文件中提取元数据和结构化文本内容。它实际上在后台使用 POI 和 PdfBox 来处理办公室和 PDF 文档。

非商业

  • dtSearch——这是一个我非常熟悉的库。它做得很棒,并且可以解析大量的文件格式。但是,它要花钱,而且对于您需要的东西来说可能是多余的。它实际上正是我们所需要的,但我们正试图自己摆脱它,因为我们只使用它进行解析(它实际上是一个全文搜索引擎),并且有很多解析库可供我们使用或修改以满足我们的需要,但它确实将所有这些其他库从水中吹了出来。正如我之前提到的,它也不是本机 .NET 代码。C++/CLI 包装器用于在 DLL 和 .NET 运行时之间进行交互。

可以使用 iFilter,并且在其他几个针对不同问题的 SO 答案中也提到过,但是您将得到的文本是非结构化的。有时这很糟糕……至少对人类来说是不可读的。我相信 iFilter 也已被弃用,并且根据许可证问题,您可能无法重新分发它们。


为什么我提到所有这些 Java 库?嗯,有两个原因。首先,没有与这些 Java 库的质量相近的免费.NET 等价物。其次,您可以使用IKVM在 .NET 中使用这些库(我亲自使用这些库完成了这项工作,因此我至少可以保证这一点)。它是 .NET 内部的 Java 实现。 这是使用 IKVM 将 Tika 转换为可在您的项目中使用的 .NET 程序集的一个很好的示例。也许 IKVM 最可怕的地方在于它可以正常工作!

编辑:我忘记了那个博客的作者实际上已经在github 项目上发布了代码和转换的库。因此,如果您想快速检查它,可以在那里进行。但是,它是 Tika 的较旧版本,并且已有一年多的历史。如果结果不符合您的预期,我建议您自己尝试使用最新版本。

于 2012-06-11T16:05:24.193 回答
7

你可以看看toxy.codeplex.com。Toxy 是一个纯 .NET 文本提取框架。

使用 Toxy 非常简单。例如,要提取一个名为 test.xlsx 的 Excel 电子表格文件。

ParserContext context = new ParserContext("test.xlsx");
ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);
ToxySpreadsheet ss = parser.Parse();
//then you can start handle the result - a ToxySpreadsheet object
于 2014-11-27T16:00:39.743 回答
2

这是从word文档中提取的链接:

如何在 C# 中从 MS Office 文档中提取文本

对于 pdf,我会使用 PDFsharp,它是开源的,并且在他们的网站上有一些很好的例子等:

http://pdfsharp.com/PDFsharp/

于 2012-06-11T14:38:11.637 回答
1

我会为此推荐 Aspose Total。几年前,我做了一个项目,几乎完全按照您的要求做,并与在不同版本的 Office(更改为 XML 之前)之间使用 Office Interop 的东西进行比较,Aspose 是最强大的库。您可能还必须根据您所谈论的内容进行一些 OCR。 它并不便宜,但我发现他们的 API 非常可靠,它适用于您所询问的大多数文件类型版本。您应该可以使用免费试用版来查看它是否适合您的项目。除了我在生产环境中使用他们的工具外,我与 Aspose 没有任何关系。

假设总计

于 2012-06-11T17:54:23.110 回答
1

对于从 pdf itextsharp中提取的文本来说非常棒。它是免费和开源的。

从 pdf 读取文本很容易使用这个库。

于 2012-06-11T15:13:17.837 回答
0

如果您只需要文本,那么您可以使用 iFilter。它不是单一产品,但它是免费的。iFilter 用于提取文本以支持 Microsoft 索引服务。在 iFilter .NET C# 上搜索有关如何使用它的示例。如果您需要格式化文本,则不是正确的工具。它仅提取带有大量换行符的原始文本。

于 2012-06-11T14:48:03.730 回答