[PC] TikaOnDotNetでテキスト抽出〜Apache Tikaを.NET Frameworkで使ってみる〜
TikaOnDotNet
FlexLuceneの活用方法を探してLuceneのホームページを見ていたらTikaという文書テキスト抽出ソフトがあることに気づきました。どうやらTikaは、Luceneを使っている人には有名のようです。検索するといろいろ出てきます。私は、現在、xdoc2txtというソフトを使ってテキスト抽出をしていますが、少し気になったので試してみました。
TikaOnDotNet
TikaOnDotNetは、名前からおわかりのようにTikaの.NETへの移植版です。Tikaは、Javaで記載されたプログラムなのですが、それをC# (.NET Framework)で使えるようにIKVMを使って移植されたものです。Tika及びTikaOnDotNetは、Lucene及びFlexLuceneの関係と同じです。
環境設定(nuget)
使い方は簡単です。セットアップしてみます。まずは、.NET Frameworkのプロジェクトを作成します。試すだけなのでコンソールアプリケーションにしました。
次は、nugetを使ったTikaOnDotNetの組み込みです。Visual Studio 2017の[ツール] > [Nugetパッケージマネージャー] > [ソリューションのNugetパッケージ管理]からNugetの管理画面にいきます。
TikaOnDotNetと入力して検索します。すると、TikaOnDotNetとTikaOnDotNet.TextExtractorというのが引っかかりますので、後者を選択し、パッケージをインストールします。
Javaの仮想環境のIKVMとTikaOnDotNetとを含めますかと確認画面が表示されるので[OK]をクリックして進みます。
C#での実装
実装というほどのものではないのですが、数行でテストができるのでやってみました。usingでTikaOnDotNetを宣言します。
using System; using TikaOnDotNet.TextExtraction; namespace TestExtract { class Program { static void Main(string[] args) { TextExtractor txtExt = new TextExtractor(); var wordDocContents = txtExt.Extract(@"c:\temp\文書1.docx"); System.Console.WriteLine(wordDocContents.Text); var webPageContents = txtExt.Extract(new Uri("https://ichigo.hopto.org")); System.Console.WriteLine(webPageContents.Text); } } }
あとは、実行するだけです。参考に以下のようなWord文書を用意してみました。表もどのように抽出されるのか気になったので、作ってみました。
抽出結果は、以下のような感じ。表も改行されて、しかもインデックスされて表示されていました。
まとめ
非常に簡単ではありますが、C#でテキスト抽出が簡単にできました。所感としては、若干動作が遅い気がします。Javaからの移植版だからかもしれません。今後ちょっとスピードを測っていきたいと思います。現状だとxdoc2txtのまま使用するかもしれません。