[PC] .NET用Luceneのユーザー辞書~FlexLucene v6.3.0及びLucene.Net v4.8 beta~
ユーザー辞書の利用
以前、.NET(C#)でLuceneを使用する方法として、FlexLuceneを使う方法と、Lucene.Netを使う方法とがあることを紹介しました。そして実際に使ってみると既定の辞書では少し物足りなさを感じてしまいました。そこで今回は、ユーザー定義辞書の追加を検討してみました。以下のページを参考にしてみたのですが、何分scalaが全く分からないので困ってしまいました。
参考URL: LuceneのKuromoji(JapaneseAnalyzer)に、ユーザ定義辞書を適用してみる
名前空間
ユーザー辞書に必要な型を簡単に使えるように、FlexLucene及びLucene.Netでは、以下のような名前空間を記載しておきます。
using FlexLucene.Analysis.Ja.Dict; using Lucene.Net.Analysis.Ja.Dict;
FlexLucene
次にUserDictionaryの定義です。FlexLuceneは、辞書を開くためにJavaのIOのReaderを使うため、java.io.FileReader()関数を呼び出します。UserDictionary.Open()関数を使って、UserDictionaryを作成します。
// ユーザー辞書 java.io.Reader treader = new java.io.FileReader(MYDICTSRC); UserDictionary mydict = UserDictionary.Open(treader); // テキストの解析方法(アナライザー)を定義 JapaneseAnalyzer ja = new JapaneseAnalyzer(mydict, JapaneseTokenizerMode.NORMAL, JapaneseAnalyzer.GetDefaultStopSet(), JapaneseAnalyzer.GetDefaultStopTags());
Lucene.Net
Lucene.Netは、Javaから移植されているので、java.ioなんてクラスがないため、C#のクラスが使えます。ここで、違いが生じます。エンコードの関数を付けて読み込めば、OKです。
// ユーザー辞書 TextReader treader = new StreamReader(MYDICTSRC, Encoding.GetEncoding("Shift_JIS")); UserDictionary dict = new UserDictionary(treader); // テキストの解析方法(アナライザー)を定義 JapaneseAnalyzer analyzer = new JapaneseAnalyzer(LuceneVersion.LUCENE_48, dict, JapaneseTokenizerMode.NORMAL, JapaneseAnalyzer.GetDefaultStopSet(), JapaneseAnalyzer.GetDefaultStopTags());
辞書
順番が、逆になってしまいましたが、読み込ませる辞書は、こんな感じです。
# 単語,形態素解析後の単語,読み,品詞 特許出願ココ,特許出願ココ,トッキョシュツガンココ,カスタム名詞 しげる,しげる,シゲル,カスタム人名
まとめ
今回は、ユーザー辞書をKuromojiであるJapaneseAnalyzerに渡す処理を追加してみました。検証は、Lukeでやってみたのですが、どうやら動いているようです。FlexLuceneとLucene.Netでやっていることに意義があるかな?! 参考になれば幸いです。