解析Microsoft Office和PDF文档的最佳方法是什么?

时间:2009-01-21 13:33:14

标签: vb.net pdf ms-office parsing lucene.net

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

我只能在这里谈论MS Office文档。有几种方法可以做到这一点:

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

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

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

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

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

词语:

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

Excel中:

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

的PowerPoint:

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

答案 2 :(得分:2)

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

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

public String ReadTextFromPages(Stream s)
{
    using (PdfTextDocument doc = new PdfTextDocument(s))
    {
        PdfTextReader rdr = doc.GetPdfTextReader();
        return rdr.ReadToEnd();
     }
}