【C#】MeCab.DotNetで形態素解析!ユーザー辞書の登録も詳しく解説。

当ページのリンクには広告が含まれています。

形態素解析といえば、MeCabが有名ですが、C#からMeCabを扱うためのライブラリとして「NMeCab」がありました。ただし「NMeCab」はここ数年更新されていないため、.Net Frameworkの進化に追従していません。

幸いなことに、その後継として .Net 8.0 に対応した「MeCab.DotNet」が公開されていますので、今回はこちらの使い方を紹介したいと思います。

本記事では、C#を使って「MeCab.DotNet」による形態素解析と、ユーザー辞書の作り方について詳しく解説します。

尚、C# から NMeCab を操作するために便利なクラスを「【C#】NMeCabによる形態素解析とユーザー辞書登録のクラスを作りました」の記事で公開しているので、併せてご一読ください。

あわせて読みたい
【C#】NMeCabによる形態素解析とユーザー辞書登録のクラスを作りました 「【C#】NMeCabで形態素解析!ユーザー辞書の登録も詳しく解説」の記事では、 MeCab をC#で使う方法について解説しました。 今回はC#から簡単に形態素解析とユーザー辞...
目次

MeCab.DotNetとは

形態素とは、「文書の中に登場する、意味を持つ最小限の単位」のことです。言い換えると、「文書を、代名詞、副助詞、名詞、動詞などの品詞に分解した結果の1つ1つ」とも言えます。

たとえば、「今日は私の誕生日です」という文書があるとすると、「今日」「は」「私」「の」「誕生日」「です」という具合に分解されるのです。

英語の場合、品詞はスペースで区切られているため、単純にスペースで分割すれば事が足りるのですが、日本語の場合はそういう訳にはいかないので、形態素解析を使います。

形態素解析を行うツールとして、MeCab、Jumanが最も有名ですが、それぞれが単体のアプリ(コンソールアプリ)として作られているため、C#から呼び出す場合は 、文書を一旦ファイルに出力し、Process.Start() メソッドでMeCabやJumanの実行ファイルを呼び出して形態素解析させた上で、その出力結果を受け取るという方法しか使えませんでした。

今回紹介するMeCab.DotNetは、MeCabのエンジンを直接C#から呼び出せるようにしたライブラリであるため、MeCab.DotNetの引数に解析したいテキストを指定するだけで、メソッドの戻り値として解析結果を受け取れるようになります。

MeCab.DotNetのインストール方法

NuGetの検索欄に下記のキーワードを入れて検索してください。

MeCab.DotNet

"MeCab.DotNet" が見つかるので、これをインストールしてください。このインストールにより、辞書も自動的にインストールされます。

NuGetの詳しい使い方が知りたい方は、「Visual Studio のパッケージ管理機能 NuGetとは?」の記事を合わせてお読みください。

辞書はソリューションの中にリンクで表示されるだけで、実際の辞書は別のところにインストールされています。

プロジェクトにインストールされた辞書

プロジェクトのフォルダ階層

NMeCabによる形態素解析

NMeCabを使う場合、ソースコードの先頭で using を記述する必要があります。

下記は、NMeCabを使った形態素解析のサンプルです。

実行すると、本家のMeCabと同じ解析結果がコンソール出力されます。

キャンバスに描いた似顔絵は限りなく僕に似ていない BOS/EOS,,,,,,,,
キャンバス 名詞,一般,,,,,キャンバス,キャンバス,キャンバス
に 助詞,格助詞,一般,,,,に,ニ,ニ 描い 動詞,自立,,,五段・カ行イ音便,連用タ接続,描く,エガイ,エガイ た 助動詞,,,,特殊・タ,基本形,た,タ,タ
似顔絵 名詞,一般,,,,,似顔絵,ニガオエ,ニガオエ
は 助詞,係助詞,,,,,は,ハ,ワ
限り 名詞,ナイ形容詞語幹,,,,,限り,カギリ,カギリ
なく 助動詞,,,,特殊・ナイ,連用テ接続,ない,ナク,ナク 僕 名詞,代名詞,一般,,,,僕,ボク,ボク
に 助詞,格助詞,一般,,,,に,ニ,ニ 似 動詞,自立,,,一段,連用形,似る,ニ,ニ て 助詞,接続助詞,,,,,て,テ,テ い 動詞,非自立,,,一段,未然形,いる,イ,イ ない 助動詞,,,,特殊・ナイ,基本形,ない,ナイ,ナイ

解析結果は Surfaceプロパティと Feature プロパティで取得可能です。それぞれの内容は次の通りです。

順番内容プロパティ
1表層形(形態素)描いSurface
2品詞動詞Featureをカンマで区切った1個目の要素
3品詞細分類1自立Featureをカンマで区切った2個目の要素
4品詞細分類2Featureをカンマで区切った3個目の要素
5品詞細分類3Featureをカンマで区切った4個目の要素
6活用形五段・カ行イ音便Featureをカンマで区切った5個目の要素
7活用型連用タ接続Featureをカンマで区切った6個目の要素
8原型描くFeatureをカンマで区切った7個目の要素
9読みエガイFeatureをカンマで区切った8個目の要素
10発音エガイFeatureをカンマで区切った9個目の要素

ユーザー辞書の環境準備

残念ながらNMeCabにはユーザー辞書を作成したり、追加する機能はありません。本家のMeCabをインストールして、辞書を作成するコマンド (mecab-dict-index.exe)を呼び出す必要があります。

MeCabのインストール方法

MeCabのインストールは、下記の公式サイトからインストーラーをダウンロードし、実行するだけで完了します。

表示されるページの真ん中あたりに実際のダウンロードリンクがあるのですが、ページが長いためスクロールして探すのが面倒です。そこで、ページの先頭に「ダウンロード」というリンクが張られていますので、これをクリックしましょう。

このリングはページ内リンクであり、公式ページの真ん中あたりにジャンプします。

ここで、 Binary package for MS-Windows という行を見つけ、 「mecab-0.9.9.6.exe ダウンロード」をクリックすると、インストーラーのダウンロードが開始されます。

インストールが完了すると、以下のフォルダが作成されます。使用するのは、赤の点線で囲った mecab-dict-index.exe です。MeCabの直下に dic フォルダがありますが、NMeCabの辞書フォルダは別のところにあるので、こちらは使いません。

辞書の配置場所

プログラムファイル(*.exe)と同じレベルのフォルダ(=プログラム実行フォルダ)の中に、「dic」というフォルダを作成し、さらにその下に「ipadic」というフォルダを作成します。

そして、ユーザー辞書を含むすべての辞書ファイルを、この「ipadic」フォルダに置いてください。

Visual Studioのプロジェクトフォルダの場合、Debug フォルダに実行ファイル(*.exe)が置かれますが、それと同じレベルに存在する dic 配下の辞書が参照されます。

ユーザー辞書の作成方法

ユーザー辞書はCSV形式のファイルを mecab-dict-index.exe の引数に渡すことで作成できます。

mecab-dict-index -d システム辞書のフォルダ -u ユーザー辞書名 -f CSVの文字コード -t 辞書の文字コード CSVファイル名

通常はProgram Files(x86)直下にMeCabがインストールされますので、具体的には次の様になります。

これは、MyDic.csvに記載したCSV形式のファイルから、MyDic.dicというMeCab用辞書を作成するコマンド例です。

"C:\Program Files (x86)\MeCab\bin\mecab-dict-index" "C:\Program Files (x86)\MeCab\dic\ipadic" -u "MyDic.dic" -f shift-jis -t utf-8 "MyDic.csv"

辞書を作るためのCSVは次の様なフォーマットになります。

大半が省略可能なのと、「読み」「発音」はカンマすら入れなくても良いので、最低限のフォーマットとしては次の様になります。

似顔絵,,,10,名詞,一般,*,*,*,*,独自辞書

項目の意味については次の通りです。

スクロールできます
順番内容記述例説明
1表層形(形態素)似顔絵辞書に登録したい単語
2左文脈ID空白ググると「その単語を左から見たときの内部状態ID」という説明がなされているが、詳細は不明。空白にすると自動連番される。
3右文脈ID空白ググると「その単語を右から見たときの内部状態ID」という説明がなされているが、詳細は不明。空白にすると自動連番される。
4コスト10出現頻度を示す数値で、小さいほど出現頻度が高いとみなされる。
似たような単語が合った場合の優先順位として使われるが、シビアな判定が必要でないかぎり、適当な値(10とか)で良い。
5品詞名詞省略する場合は*を指定。形態素解析の結果、品詞で何か判定するのであれば、適切なものを指定しておく。
6品詞細分類1一般省略する場合は*を指定
7品詞細分類2省略する場合は*を指定
8品詞細分類3省略する場合は*を指定
9活用型省略する場合は*を指定
10活用形省略する場合は*を指定
11原形独自辞書何らかの文字を記述しておかないとエラーで辞書が作成できない
12読み空白省略する場合は空白にする
13発音空白省略する場合は空白にする

ユーザー辞書の参照設定

ユーザー辞書を作成したら、次はNMeCabから参照できるようにしましょう。

方法は2通りあります。1つは MeCabParam クラスにユーザー辞書を設定する方法、もう1つは App.config に記述する方法です。

MeCabParamによるユーザー辞書参照

MeCabParamのクラスにある UserDic プロパティでユーザー辞書を指定する方法です。

NMeCabは複数のユーザー辞書を使う事が可能なので、UserDic にも複数の辞書が指定できるよう、文字列配列を渡す仕様になっています。

MeCabTagger.Createの引数に param を渡すことで、ユーザー辞書を利用することができるようになります。

ちなみに、DicDir というプロパティも持っており、全く別のフォルダにあるMeCabの辞書を使いたい場合、そのフォルダへのパスを指定します。

DicDirを特に指定しない場合、デフォルトの値(dic\ipadic)で動作するようになっています。この方法は、環境によってはうまく動作しないがあるようで、私の環境では実行時に例外が発生しました。

App.configによるユーザー辞書参照

App.config でユーザー辞書を参照させる場合、<configSections>タグと、<applicationSettings>タグに次の内容を挿入します。

<configSections>タグについては、次の固定の内容を記述すればOKです。

<applicationSettings>については、以下のタグを張り付ければ良いのですが、<value>~</value>のところに、ユーザー辞書の名前をカンマ区切りで列記して下さい。

例えば、MyDic1.dic、MyDic2.dic を指定する場合、次のようになります。

この<configSections>タグと、<applicationSettings>を App.config に挿入すれば終わりなのですが、おそらく皆さんのプロジェクトごとにApp.conifgの内容が違うと思います。

従って、皆さんの内容に応じて、適切な位置に挿入してください。

皆さんが、App.config を特に何も変更していない場合は、次の位置に挿入してもらえればOKです。

実際の挿入例は次の様になります。

まとめ

今回は NMeCabについて、インストール方法と使い方、辞書の登録方法について解説しました。

形態素解析を行うだけなら NMeCabをインストールするだけで事が足りますが、ユーザー辞書を使いたい場合は、本系の MeCabをインストールして、mecab-dict-index.exe を使ってユーザー辞書を作成してあげる必要があります。

また、MeCabParamクラスのUserDicプロパティを使うか、App.config にタグを記述するかの2通りの方法のどちらかで、ユーザー辞書を指定してあげると、NMeCabからユーザー辞書が使えるようになります。

NMeCabを使うと簡単に形態素

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次