7

我正在使用 VB9 (VS2008) 和 Lucene.NET 开发桌面搜索引擎。Lucene.NET 中的索引器仅接受原始文本数据,无法直接从 Microsoft Office(DOC、DOCX、PPT、PPTX)和 PDF 文档中提取原始文本。从此类文件中提取原始文本数据的最佳方法是什么?

4

3 回答 3

6

您可以像 Windows 桌面搜索一样使用实现 IFilter 接口的组件。

于 2009-01-21T13:47:34.317 回答
2

我这里只能谈 MS Office 文档。做这件事有很多种方法:

  • 使用 COM 自动化
  • 使用以更易于访问的格式输出文档的转换器
  • 使用第三方库
  • 使用微软的 OpenXML SDK

COM 自动化具有并不总是可靠的缺点,主要是因为应用程序往往会由于模式弹出对话框而挂起。

转换器可用于 Word。您可以查看 Microsoft 提供的 Text Converter SDK,它允许您在独立应用程序中使用 Word 附带的文档转换器。需要一些 C 编码,但由于您使用与 Office 相同的转换引擎,您将获得高保真结果。SDK 可以从http://support.microsoft.com/kb/111716获得。

对于使用第三方库的第三个选项,您可能需要查看 Apache POI 或 SourceForge 上的b2xtranslator 项目。后者提供了一个 C# 库,允许您从二进制 Word 文档中提取文本。PowerPoint 开发仍处于早期阶段,但文本提取应该已经开始工作。

最后一个选项是使用 Microsoft 的 OpenXML SDK。这可能是首选/最简单的方式。在 Google 上搜索示例。您还可以通过首先使用 Office 兼容包(从 Microsoft 下载和安装)转换二进制文档来处理二进制文档:

单词:

"C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme <input file> <output file>

电子表格:

"C:\Program Files\Microsoft Office\Office12\excelcnv.exe" -oice <input file> <output file>

微软幻灯片软件:

"C:\Program Files\Microsoft Office\Office12\ppcnvcom.exe" -oice <input file> <output file>
于 2009-01-21T13:53:39.903 回答
2

对于 PDF,您可以使用我公司的具有文本提取功能的.NET PDF 阅读器组件。

这正是您为从 PDF 中提取文本而编写的代码:

public String ReadTextFromPages(Stream s)
{
    using (PdfTextDocument doc = new PdfTextDocument(s))
    {
        PdfTextReader rdr = doc.GetPdfTextReader();
        return rdr.ReadToEnd();
     }
}
于 2009-01-21T13:55:46.983 回答