如何从特定的二进制文件格式中提取文本?

Posted

技术标签:

【中文标题】如何从特定的二进制文件格式中提取文本?【英文标题】:How can I extract text from specific binary file formats? 【发布时间】:2011-01-05 14:13:55 【问题描述】:

在 .Net 中,从以下几种二进制文件格式中提取所有文本的最佳方法是什么:PDF、Word、Excel 和 PowerPoint。

它不需要格式化,只是文件中文本的大转储。

代码会很棒,但我真的只需要指出一些最佳实践或模式。

【问题讨论】:

我怀疑只有一种方法可以从所有这些中提取文本 - 它们是非常不同的格式。只是一个想法。 使用几个第三方库,并在其周围添加一个漂亮的包装器。 【参考方案1】:

我很惊讶没有人提到IFilters。 IFilters 是 Microsoft 用来在 Windows 中索引文档的工具。您必须进行一些谷歌搜索才能找到您正在寻找的特定格式的 IFilter,但您应该找到大部分您需要的内容。不过需要注意的是,IFilters 并不完美。他们有问题.....

这里有一篇 CodProject 文章可以帮助您入门:http://www.codeproject.com/KB/cs/IFilter.aspx

【讨论】:

旧帖,但谢谢!我找不到从二进制 PDF 中提取文本的有效方法,但 IFilter 可以完美地做到这一点。非常感谢!!!!!!【参考方案2】:

嗯,与任何其他语言/环境相同:充分了解文件格式以提取字符串。

是的,对于许多文件格式,这意味着您应该为格式编写至少一半的解析器。 PDF 特别讨厌,因为它本身没有空格;这只是字形相距多远的约定;此外,PDF 可以包含压缩流,因此仅在文件中搜索可打印字符串不会产生任何价值。

当然,您可以寻找已经执行此操作的库或其他工具。我见过一个文档存储库,它只是通过 pdf2ascii 传递 PDF 文件并将生成的文本提供给 Lucene。

【讨论】:

【参考方案3】:

您可能必须实现不同的方式来处理每种文件类型。有很多示例代码可以读取这些格式,使用 office interop 等。然后您可以编写一个查看前几个字节的方法来确定文档的格式或扩展名并将其发送到特定的该类型文档的阅读器。

【讨论】:

【参考方案4】:

查看Apache Tika。

它支持:

    Microsoft Excel Microsoft Word Microsoft PowerPoint 微软 Visio 微软 Outlook 可移植文档格式 (PDF) 打开文档 纯文本 富文本格式 gzip 压缩 bzip2 压缩 MP3 音频 MIDI 音频 波形音频 XML html Java 类文件 Java jar 档案 tar 存档 ZIP 存档

【讨论】:

【参考方案5】:

查看Office Interop using .Net 以获得Office 的。对于 PDF,请参阅here。

【讨论】:

Office 互操作是否意味着在服务器端使用。我知道 MS 过去对此不以为然。

以上是关于如何从特定的二进制文件格式中提取文本?的主要内容,如果未能解决你的问题,请参考以下文章

VB6.0中如何实现逐行读入文本文件?

JAVA如何将二进制数转换成文件?

golang 读写二进制文件

基础知识-文件格式

如何将文本文件从 DOS 格式转换为 UNIX 格式

php中如何把一个文本内容保存成一个二进制文件?