我正在使用VB9(VS2008)和Lucene.NET开发桌面搜索引擎。 Lucene.NET中的Indexer仅接受原始文本数据,因此无法直接从Microsoft Office(DOC,DOCX,PPT,PPTX)和PDF文档中提取原始文本。 从这些文件中提取原始文本数据的最佳方法是什么?
答案 0 :(得分:6)
您可以像Windows桌面搜索一样使用实现IFilter界面的组件。
答案 1 :(得分:2)
我只能在这里谈论MS Office文档。有几种方法可以做到这一点:
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();
}
}