マイコミジャーナル

知りたい!を刺激する総合専門サイト


  1. エンタープライズ

  2. SE力
  3. コラム
  4. Yet Another 仕事のツール

【コラム】

Yet Another 仕事のツール

45 日本語形態素解析ツール「ChaSen」

2004/11/30

鶴田展之

ITの世界は理系の人間が幅をきかせていると思われがちだが、システムインテグレーションの現場では、意外と文系的な素養が求められることも多い…… などという無理なこじつけはさておき、今回は「日本語」を扱う上で欠かせないツールを紹介しよう。

以前、「MUSASHI」というオープンソースのツールを使って「データマイニング」の基本的な手法を紹介したことがあったが、データはなにもデータベースやXMLとして整理されたものばかりではない。むしろ日本語なら日本語という自然言語で記述されたデータの方が、量的には圧倒的に多いはずだ。例えば、顧客や同僚と毎日のようにやりとりしているメールなどは、データとしてみれば宝の山だし、実際昔のメールを消せずにずっと残しているという人も多いだろう。ただ、日々増え続けていくメールを溜まるがままにしておいても、せいぜいメールソフトの検索機能を使って備忘録にするぐらいしか有効な使い道はない。せっかく溜めたメールなら、もっと徹底的に活用したいではないか。そこで重要になるのが、データマイニングの技術の中でも自然文を分析対象とする「テキストマイニング」の技術だ。

ところが日本語という言語は、ただでさえ文字の種類や数が多くコード化がやっかいなうえ、文法的にもややこしい品詞の「活用」などがあって、単純なルールに則った処理を行いにくい。また、欧米の言語のように単語毎にスペースで区切られることもないので、たかだか文章を単語に分割するだけのことが非常に難しくなってしまう。英語ならスペース区切り毎に文章を分割すれば、「単語毎の出現回数」などの分析は簡単に行える。活用も単数形・複数形、現在形・過去形・過去分詞程度の違いが主なので、正規表現などを使えばかなり高度な処理も簡単に行えるだろう。日本語はそうはいかない。システム屋をやっていると、つくづく因果な言語の国に生まれついてしまった、と我が身の不幸を憂えることも少なくないのだ。

しかし、オープンソースの世界にはそんな悩みも一挙に解決してくれる便利なツールがある。今回取り上げるのは、奈良先端科学技術大学院大学で開発された「茶筌(ChaSen)」というソフトウェアだ。茶筌は、自然文を解析して「それ以上分割できない最小の文字列(形態素)」に分割する、いわゆる「形態素解析」の処理を行うソフトウェアだ。

茶筌は、プログラム(ChaSen)と辞書(ipadic)に分けて配布されている。Debian GNU/Linuxなど一部のLinuxディストリビューションでは、ライセンスの関係でipadicではなくcannadicが利用されることもあったが、それも現在は解決に向かっているようで、基本的にはChaSenとipadicの一組で茶筌というソフトウェアの機能が実現されていると考えて良い。

導入は、一般的な環境なら至って簡単。最新バージョンをWebサイトから取得し、それぞれについてお約束のconfigure、make、make installを実行するだけだ。ただ、ChaSenは辞書の検索に「Darts (Double-ARray Trie System)」というC++テンプレートライブラリを利用しているので、これをあらかじめインストールしておく必要がある。また、いくつかのプラットフォームではコンパイルがうまくいかないことがあるので、ここでは参考として、chasen-2.3.3を利用することを前提に特に注意すべきことをまとめておこう。

1.GCC 3.4

Fedora Core 3で採用されているGCC 3.4は従来よりキャストが厳格になっており、makeが「ISO C++ forbids cast to non-reference type used as lvalue」というエラーで停まってしまう。これを回避するには、lib/dartsdic.cppの180行目あたりを以下のように変更する。

        (const char*)keys[size] = key.data();
                          ↓
        keys[size] = const_cast<char*>(key.data());

2.Mac OS X 10.3

Mac OS X 10.3の場合、configureファイルの8548行目あたりを以下のように変更してから実行する。

ac_cv_lib_iconv_iconv=no
            ↓
ac_cv_lib_iconv_iconv=yes

3.UTF-8環境への適用

Fedora CoreやMac OS Xなど、デフォルトの文字エンコーディングがUTF-8のプラットフォームでは、辞書をUTF-8に変換しておいた方が使い勝手がいいだろう。まず、ipadicの*.dic、*.chaファイルを全てUTF-8に変換する。nkfがインストールされていれば、以下のようなシェルスクリプトで一括して変換するのが楽だ。

#!/bin/sh
for file in $*
do
if [ -f $file ]; then
    nkf --utf8 $file > tmpfile
    mv tmpfile $file
fi
done
exit

UTF-8への変換ができたら、以下のコマンドで辞書を生成する。

# `chasen-config --mkchadic`/makemat -i w
# `chasen-config --mkchadic`/makeda -i w chadic *.dic
# make install

最後に、設定ファイル/usr/local/etc/chasenrcもUTF-8に変換する。

# cd /usr/local/etc
# nkf --utf8 chasenrc > chasenrc.tmp
# mv chasenrc.tmp chasenrc

chasenを実行する際にも、必ず「chasen -i w」として、明示的にUTF-8エンコーディングによる入力を指定しよう。

以上、ChaSenとipadicがインストールできたら、適当な日本語の文章を解析してみよう。

# echo "今回は「日本語」を扱う上で欠かせないツールを紹介しよう。" | chasen -i w
今回      コンカイ    今回      名詞-副詞可能
は       ハ       は       助詞-係助詞
「       「       「       記号-括弧開
日本語     ニホンゴ    日本語     名詞-一般
」       」       」       記号-括弧閉
を       ヲ       を       助詞-格助詞-一般
扱う      アツカウ    扱う      動詞-自立   五段・ワ行促音便        基本形
上       ウエ      上       名詞-非自立-副詞可能
で       デ       で       助詞-格助詞-一般
欠か      カカ      欠く      動詞-自立   五段・カ行イ音便        未然形
せ       セ       せる      動詞-接尾   一段      未然形
ない      ナイ      ない      助動詞     特殊・ナイ   基本形
ツール     ツール     ツール     名詞-一般
を       ヲ       を       助詞-格助詞-一般
紹介      ショウカイ   紹介      名詞-サ変接続
しよ      シヨ      する      動詞-自立   サ変・スル   未然ウ接続
う       ウ       う       助動詞     不変化型    基本形
。       。       。       記号-句点
EOS

自然文が単語ごとにばらばらに分割され、読みや品詞、活用形が表示された。ChaSenの基本的な機能はこのようなものだ。次回は、これを実際の仕事に活かすことを考えてみよう。


特別企画


注目サイト