VB9 (VS2008) と Lucene.NET を使用してデスクトップ検索エンジンを開発しています。Lucene.NET のインデクサーは生のテキスト データのみを受け入れ、Microsoft Office (DOC、DOCX、PPT、PPTX) および PDF ドキュメントから生のテキストを直接抽出することはできません。そのようなファイルから生のテキスト データを抽出する最良の方法は何ですか?
3 に答える
Windows デスクトップ サーチと同様に、IFilter インターフェイスを実装するコンポーネントを使用できます。
ここでは、MS Office ドキュメントについてのみ説明できます。これを行うにはいくつかの方法があります。
- COM オートメーションの使用
- よりアクセスしやすい形式でドキュメントを出力するコンバーターの使用
- サードパーティ ライブラリの使用
- Microsoft の OpenXML SDK を使用する
COM オートメーションには、常に信頼できるとは限らないという欠点があります。これは主に、モーダル ポップアップ ダイアログが原因でアプリケーションがハングする傾向があるためです。
Word 用のコンバーターが用意されています。Microsoft から入手できる Text Converter SDK をチェックアウトすると、スタンドアロン アプリケーションで Word に付属するドキュメント コンバーターを使用できるようになります。一部の C コーディングが必要ですが、Office と同じ変換エンジンを使用しているため、忠実度の高い結果が得られます。SDK はhttp://support.microsoft.com/kb/111716から入手できます。
サード パーティのライブラリを使用する 3 つ目のオプションについては、Apache POI または SourceForge のb2xtranslator プロジェクトを参照してください。後者は、バイナリ Word ドキュメントからテキストを抽出できる C# ライブラリを提供します。PowerPoint の開発はまだ初期段階ですが、テキスト抽出は既に機能しているはずです。
最後のオプションは、Microsoft の OpenXML SDK を使用することです。これは、好ましい/最も簡単な方法かもしれません。Google でサンプルを検索します。Office Compatibility Pack (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>
PDF の場合、テキスト抽出機能を備えた私の会社の.NET PDF Readerコンポーネントを使用できます。
これはまさに、PDF からテキストを抽出するために作成したコードです。
public String ReadTextFromPages(Stream s)
{
using (PdfTextDocument doc = new PdfTextDocument(s))
{
PdfTextReader rdr = doc.GetPdfTextReader();
return rdr.ReadToEnd();
}
}