この記事は公開から2年以上経過しています。
機械学習における形態素解析といえばMeCabやJuman++などが主流ですが、今回はatilika(アティリカ)社のOSSライブラリKuromoji
の.NETポート版であるApache LuceneのLucene.Net.Analysis.Kuromoji
を使い、.NET 6とC#で形態素解析を行う方法を紹介します。
ちなみに当該ライブラリは2022.9現在では.NET Framework 4.5以降でも利用可能です。
サンプルソースコード(.NET 6/C#)
予めNuGetでLucene.Net.Analysis.Kuromoji
パッケージをインストールしておく必要があります。
Lucene.Net.Analysis.Kuromoji
パッケージは現在プレリリース版のため、NuGetで検索する際はプレリリース版を許可してください。
KuromojiTest220919.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Lucene.Net.Analysis.Kuromoji" Version="4.8.0-beta00016" />
</ItemGroup>
</Project>
Program.cs
using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Ja;
using Lucene.Net.Analysis.Ja.Dict;
using Lucene.Net.Analysis.Ja.TokenAttributes;
using Lucene.Net.Analysis.TokenAttributes;
// 解析対象文
const string text = ".NETの機械学習もかなり実用的になってきた";
using var reader = new StringReader(text);
using var tokenizer = new JapaneseTokenizer(reader, GetUserDictionary(), false, JapaneseTokenizerMode.NORMAL);
var tsc = new TokenStreamComponents(tokenizer);
var ts = tsc.TokenStream;
ts.Reset();
while (ts.IncrementToken())
{
// 用語
var term = ts.GetAttribute<ICharTermAttribute>();
// 品詞
var partOfSpeech = ts.AddAttribute<IPartOfSpeechAttribute>();
// 読み
var reading = ts.AddAttribute<IReadingAttribute>();
Console.WriteLine($"{term.ToString()} {reading.GetReading()} {partOfSpeech.GetPartOfSpeech()}");
}
// ユーザー辞書作成
static UserDictionary GetUserDictionary()
{
const string dic =
@"
.NET,.NET,ドットネット,カスタム名詞
機械学習,機械学習,キカイガクシュウ,カスタム名詞
";
using var reader = new StringReader(dic);
return new UserDictionary(reader);
}
実行結果
入力:
.NETの機械学習もかなり実用的になってきた。
結果:
.NET ドットネット カスタム名詞
の ノ 助詞-連体化
機械学習 キカイガクシュウ カスタム名詞
も モ 助詞-係助詞
かなり カナリ 副詞-一般
実用 ジツヨウ 名詞-サ変接続
的 テキ 名詞-接尾-形容動詞語幹
に ニ 助詞-副詞化
なっ ナッ 動詞-自立
て テ 助詞-接続助詞
き キ 動詞-非自立
た タ 助動詞
。 。 記号-句点
ユーザー辞書を使うことで複合名詞的な名詞についても解析できていることが確認できます。
ライブラリの使い方の詳細については、参考ウェブサイトの公式ドキュメントをご参照ください。
参考ウェブサイトなど
-
GitHub
apache/lucenenet -
LUCENE.net
Docs -
GitHub
atilika/kuromoji
以上です。