Chr*_*ens 29
作为一个花了很多天寻找(几乎)这个确切问题的免费解决方案的人,我可以相当诚实地告诉你,你将找不到一个能够很好地从所有这些格式中提取文本的免费库.我所知道的唯一一个对所有这些格式都做得很好的库(以及更多)是一个商业库,它实际上不是.NET本机,它是一个C++/COM库,带有C++/CLI. NET包装器.
有哪些选择?
iTextSharp - 这个从PDF中提取文本非常棒.虽然这个库的后期版本是商业友好的(LGPL),但作者已经决定他们想要为软件收费,所以他们反而在AGPL下发布它,所以除非你想要发布你的所有源代码,你可能不想使用其中一个版本.但是,LGPL许可的最新版本(4.1.6)可以在互联网上找到.这个SO问题链接到LGPL下的版本.
PdfBox - 另一个PDF库.这个,IMO,更好,因为它是在Apache 2.0许可下.它有一些问题,因为它有时(或许很少)不会像iTextSharp那样做得好.我更多地将其归因于它是一个比其他任何东西更新的库. 但是,我对这个库的经验来自几个月前.该项目积极开发,就在上个月,已经解决了52个问题.我会留意这个.请注意这是一个java库.(请继续阅读以下内容,了解有关我为何包含此内容的详细信息.)
POI或NPOI - 这些是专门为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可以使用现有的解析库从许多不同类型的文件中提取元数据和结构化文本内容.它实际上在办公室和PDF文档的引擎盖下使用POI和PdfBox.
非商业
可以使用iFilters,并在不同问题的其他几个SO答案中提及,但您将获得的文本是非结构化的.有时它只是坏...至少对人类来说是不可读的.我相信iFilters也已被弃用,并且根据许可证问题,您可能无法重新分发它们.
为什么我提到所有这些Java库?好吧,有两个原因.首先,没有免费的 .NET等价物接近这些Java库的质量.其次,您可以在.NET中使用这些库(我亲自使用这些库完成了这些库,因此我至少可以保证使用IKVM).它是.NET内部的Java实现. 以下是使用IKVM将Tika转换为可在项目中使用的.NET程序集的一个很好的示例.也许IKVM最可怕的事情就是它才有效!
编辑:我忘记了该博客的作者实际上已经在github项目上发布了代码并转换了库.所以,如果你想快速查看它,你可以在那里.然而,这是一个更老的Tika版本,已有一年多了.如果结果不符合您的预期,我建议您自己尝试使用最新版本.
你可以看看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
Run Code Online (Sandbox Code Playgroud)