wikipedia辞書に例文とDBづくりに必要な素材は揃った。
しかし、ユーザ辞書をC#で使うのに時間を取られてしまったのでやり方を書いておく。
さて、辞書を追加した後にはC#側でコードを書いていなかったのだが、同じプログラムのはずなのにいきなり動かなくなった。
エラーの内容は
System.AccessViolationException はハンドルされませんでした。
Message=”保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。”
というもの。
どうやら
1 |
IntPtr MeCab = mecab_new2(""); |
で、初期化に失敗しているようだ。
とりあえず、例外を投げておく。
1 2 3 |
IntPtr MeCab = mecab_new2(""); if (MeCab == IntPtr.Zero) throw new Exception("初期化に失敗しました。"); |
プログラム以外で変更した点を洗い出したところ、mecabrcに追加した次の一文をなくすことで動作した。
userdic = ./wikipedia.dic
動いたのに満足して、C#側でユーザー辞書を追加してみる。
Debugディレクトリにwikipedia.dicをおいて次のコードを試した。
1 |
IntPtr MeCab = mecab_new2("-u wikipedia.dic"); |
しかし失敗。
C:\Program Files (x86)\MeCab
以下のフォルダにwikipedia.dicを置いても失敗。
“”で囲んだフルパスを渡しても失敗。
どうやら、mecabrcのuserdicにおいては「C:\」という文字が使えないらしい。
1 |
IntPtr MeCab = mecab_new2("-u \\wikipedia.dic"); |
として、ルートである「C:\」にwikipedia.dicを置いたら成功した。
試行錯誤に時間を取られた。
“ラーメン食べに行こうぜラーメン”の解析結果
ラーメン 名詞,一般,*,*,*,*,*,*,*,wikipedia
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
行こ 動詞,自立,*,*,五段・カ行促音便,未然ウ接続,行く,イコ,イコ
う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
ぜ 助詞,終助詞,*,*,*,*,ぜ,ゼ,ゼ
ラーメン 名詞,一般,*,*,*,*,*,*,*,wikipedia
EOS