MeCab辞書、MS-Windowsでコンパイル

 実はここのところめちゃくちゃな量のコードを書いている。
(更新がとどこおっていたのもそのため。)
 さりげなくpingを呼び出したり、リモートデスクトップにログインしたり、もちろんログイン前に誰か接続してないかノックする程度の礼儀はわきまえている。

 しかしメインはテキスト処理である。こないだビッグデータをテキストマイニング処理してシステム開発の隠れた進捗状況を洗い出す(トラブルが起こっているのも何となくわかるし、個人に負荷が集中してたりするのも時間かければある程度判明するよ)、という論文書いて賞もらったのだが、そのとき痛い目にあった条件反射が都度引き起こされて当初からは考えられないほどの大部になってしまった。
 現在はやっているコンピュータ技術の例にもれずテキストマイニングは、結果出てくる人目を惹く図は提示されるが、そこに至るまでの人手による前処理は残念ながら公開された例を知らないので自分でやってみたらノウハウとツールがたまっていた、ということだ。

 今回、何のためにそんなことをやっているか、は今のところ伏せるとして、今回引っかかったのは形態素分析。ようするに指定した単語で元の文を分けてくれないと不都合が生ずる、ということだ。こないだ書いた論文は、最終のマイニング処理の強制切り出し語として指定すればよかったので、元の文から使いそうな用語候補を頻度順に切り出して、同じ「仕様」でも「テスト仕様」「データ仕様」という部分一致のバリエーションがあればそれを並べて表示し、切り出しの優先順位をつける、という手作業で済んだ。まあ100万行ちょっとだったし。  あ、表記ゆれ統一ツールも書いたんだよ。作った後「これ、売りもんになるんちゃうか?」と思ったら売っているところがあった。うれんやろなあ。なんとなくあたしの作っているほうが高機能のような気がものすごくするのだが、たぶんそっちのほうが速いんだろう。たぶん、たぶん。

 こういったツールを作った経験をもとに、似たようだが大幅に違うものを(似てそうだと思って書き始めたら、実は大幅に違ったのであてが外れたがいまさらできませんとは言えず結果的に)イチから書き始めたのだが、それはさておき、形態素分析でつまづいた話を。

 つまり、単語別に切ろうとしたが、複合語は一語として切り出してくれないのだよね。さきほどの例で言うと「仕様」は切り出してくれるが、「テスト仕様」は「テスト」と「仕様」に分けてしまうということ。文章を単語別に切るのはMeCabをCallしてお任せだっただが、船場の問屋はそう甘もうなかった、っちゅうこっちゃ。(「船場」は何となく流れから出てきたもので他意はありません。)

 でもって、絶対に分けてもろうてほしゅうない単語が200ほどある。ようはこれがMeCabがつこうとる辞書に含まれとるかというこっちゃ。まあこの200語をつかって例文を作り、ちゃんと分けてくれるか、というのを見るんもアリなんやろうけど、それはそれで面倒なんで、単語が辞書にあるかどうか、を確認するプログラムを書いた、というわけ。

 ちょっと悩んだけど、コンパイルする前のテキストを見ることにした。MeCabインストール直後の初期値だからこちらのほうが確実。
 ふむ。やはり登録されてない単語があった。

 というわけで、今度は単語を加えて辞書を再作成に挑戦。
 UNIX系のやりかたはそこそこ見つかったが、Windows系を見つけるのに少々手間取った。うちの子のLinux借りようかと思ったがもう遅い時間だしなあ。
 とりあえず、親切なページが見つかった。こんなふうに、いつの間にかパスが通っているのを前提とせずに、ファイルの位置から指定して書いてくれるとできそうな気がしてくるのだ。
 求められているのはUnicodeの辞書なので、辞書ファイルと言われたものをアクセス権のある別フォルダに持って行って書いてある手順で一気にUnicode化。便利なツールもあるものだと感心してからコンパイル。
 しかしながら、"dicrc"がない、と拗ねて動いてくれなかった。なんだ。これも必要だったのか、そー書いといてくれるとうれしいんだけどなあ、と思いつつ再実行。
 こんどはフォーマットが違うと怒られたの。追加で登録する単語の辞書、手打ちだったので間違えたのかなあ、と悩むもどうやら正しい。
 ここでさきほど"dicrc"を忘れたのが役に立った。追加したこいつ(つまり辞書ファイル以外)になんらかの原因がある可能性が高い!と開いて観察すると。
config-charset = SHIFT-JIS
とあるではないですか。
そこで
config-charset = UTF-8
と書き換えましたら、エラーも出さずに終わりました。
が、
辞書ファイルはできてません。

 しばらく悩みまして、
ひょっとして、
コンパイラのあるフォルダに辞書はできるはずだったが、そのフォルダである
C:\Program Files (x86)\MeCab\bin
が管理者権限でしか書き込みができないところだったので、コンパイラも先ほど辞書を収めたアクセス権のある別フォルダに移動させて実行した。

 できた!
 これをつかって、該当複合語のある文がキレイに分割されたのを確認したときは、うれしいというよりほっとした。

 しかしいつも思うのだけども、MeCabってどうしてあんなに早く処理が終わるの?

コンピュータネタ、目次
ホーム