NMecabでユーザ辞書を使う最近、またMecab使ってるんですが、Mecabはそのまま使うと凄く細かく分解されちゃって結構使いにくい。形態素解析したい文章である程度の単語のまとまりのままにしたい場合はユーザー辞書作るのが手っ取り早い。C#でNMecab使う場合を想定。NMecabはNugetでインストール。辞書作るときは、本家のサイトからWindows用をダウンロードしてインスト。したら↓の感じのCSVで登録した単語の一覧を作る。「chacha.csv」っていうファイル名で保存した場合。ジャスミン茶,,,10,名詞,一般,*,*,*,*,独自辞書,ヨミ,ハツオンウーロン茶,,,10,名詞,一般,*,*,*,*,独自辞書,ヨミ,ハツオンフォーマットは↓の感じらしい。自分は原型のところに分かりやすいように自分の辞書っていうのがわかる文字を入れてる。表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音そしたら、↓コマンドでコンパイルして辞書ファイルを作る。フォルダはインストールしたフォルダを適当に。-h」でヘルプ見た方が早い。読み込みのCSVはSJISでいいと思うんだけど、dicファイルの方はUTF8指定しておかないと、プログラム側で読み込むときにエラーになる。あと、CSVファイルの最後は改行入れない方がいい。dicファイルが出来たらプログラム側の適当なフォルダに入れて、↓の感じでMeCabParamを作る。wkList.ToArray();↑はプログラム内でやってるけど、app.configとかで外だしもできるっぽ。やりたい感じには上記でなるんだけど、コストの指定とかもう少し理解したいところ。困ってないのは、大した解析やってないからでしょうし。)2016年01月30日14:07カテゴリプログラムC#でMeCabを使うNuGetにMeCabがあった。テンションあがったので実装を試してみる。NuGetでインストールしたら、using。NMeCab;そしたら↓の感じ。}}実行結果すもも名詞,一般,*,*,*,*,すもも,スモモ,スモモも助詞,係助詞,*,*,*,*,も,モ,モもも名詞,一般,*,*,*,*,もも,モモ,モモも助詞,係助詞,*,*,*,*,も,モ,モもも名詞,一般,*,*,*,*,もも,モモ,モモの助詞,連体化,*,*,*,*,の,ノ,ノうち名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチすばらしい。前はRubyとか使ってゴニョゴニョしてたけど、いろいろできそう。とあるニュース記事一本の文章を10000回解析して、51.34秒。一回あたり、0.0051秒ってところでしょうか。これだけだとアレなので、少し手を加える。戻りのインターフェースがCSV形式の文字列なので、いろいろ扱いにくい。結果を扱いやすくするためのクラスを下の感じで作る。N-Gram解析とかで使いやすくするため。}}こうしておくとどーなるかと言うと、ラムダ式で検索とか出来ちゃうわけです。その2ワードクラウドを作るおおまか手順。テキストを単語にバラし、単語の出現数(率)を集計するRで集計結果を読み込んでwordcloudでプロット単語の出現数を求められればあとはそれをwordcloudに喰わせるだけ。単語をバラすのにMeCabを使う。MeCabをRから呼び出すRMeCabのライブラリを使ってもできる。簡単な文章はよいのだけれども、多少量があるとなんかの制限にかかって動かない。Rubyとかテキトーなスクリプトなりプログラムなりで自分でカウントする方がてっとりばやい。私はMeCabに解析させたいテキストファイルを食わせて結果を取得⇒カウントしてCSVに保存⇒Rで読み込んでプロットしてる。あとで色々使い回したいから、MySqlにMeCabの解析結果をつっこんで、Rubyで拾って集計してる。集計部分はまた今度載せるとして、Rで読み込みプロットする部分。Color)Rでワードクラウド作るのはいい感じなんだけど画像なのがまれに傷。FlashとかJQueryのプラグインとかでなんかかっこいいのないかなーって探してみたけど、グッとくるものがない。JSONとかでデータ渡せると胸が熱くなると思う。作れとか言われそうですが。見た感じはRのこのwordcloudっぽく。ホイールクリクリしたら中まで入っていけたり、文字をクリックでリンクしてみたりとかを夢見てみる。)2015年02月24日01:35カテゴリマイニングMecabをRubyから呼び出すお手軽方法Rubyから呼び出す方法はいくつかあるみたいだけど、設定とかハマりまくった覚えがあるので、お手軽版。膨大なデータを解析するわけじゃなければ気にならない遅さなので十分かと。Mecabをコマンドプロンプトで実行するのと同じ事をRubyで書くだけです。コマンドの文字列作ってopen3で投げる感じ。後はその結果を受け取ってるだけです。wakati」をセットしてあげる。')みたいにして空白でsplitしてあげる。ちなみに、参考にしたサイトではopen3じゃなくて、「IO.popen」を使ってた。')endこれで問題なく動くように見えるけど、数百ファイル以上を処理しようとすると、何故かたまに処理が止まる。調べた感じではバグ?らしい。今は「open3」使えという事らしいので、素直に従って書いてます。あとは、上記の結果の戻りをHashなり配列なりで戻すClassにしておけば、色々使い回せます。