【コラム】

Yet Another 仕事のツール

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

45/112

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の基本的な機能はこのようなものだ。次回は、これを実際の仕事に活かすことを考えてみよう。

45/112

インデックス

連載目次
第112回 TYPO3とHTMLテンプレート
第111回 TYPO3とデザイン変更
第110回 エクステンションでTYPO3の機能を向上
第109回 TYPO3コンテンツの作成
第108回 いよいよWebサイトを構築
第107回 TYPO3の文字化けを解消
第106回 超高機能CMS TYPO3を使いこなしてみよう(3)
第105回 超高機能CMS TYPO3を使いこなしてみよう(2) - インストール、環境設定
第104回 超高機能CMS TYPO3を使いこなしてみよう(1)
第103回 OSSのナレッジベースaphpkbを活用してみる
第102回 ナレッジツール「aphpkb」で知識共有
第101回 PHProjektの文字化け対策
第100回 LAMPプロジェクト管理ツール - PHProjekt
第99回 プロジェクト管理を効率化しよう - JProjectTimerとGanttPV
第98回 プロジェクト管理を効率化しよう - GanttProject
第97回 EclipseでBusiness Intelligence - BIRTを使ってみよう(3)
第96回 EclipseでBusiness Intelligence - BIRTを使ってみよう(2)
第95回 EclipseでBusiness Intelligence - BIRTを使ってみよう(1)
第94回 Olutで販売在庫管理
第93回 オープンソースのSNS - OpenPNEを試してみる
第92回 SugarCRMの不具合を修正する
第91回 Synergyでキーボード、マウスを共有する
第90回 SugarCRMへのデータ登録を省力化する
第89回 SugarCRMの用語を理解する
第88回 SugarCRM - オープンソースで「ほう・れん・そう」
第87回 Oracle XE - HTML DBでアプリケーションをつくる
第86回 無料のOracle Database XEを試す
第85回 OpenOffce.org 2.0「Base」を使ってみる
第84回 JpGraphでSNMPデータからグラフを生成
第83回 SNMPの活用(4) - ホスト情報をMySQLに自動蓄積~グラフの生成
第82回 SNMP InformantによるWindowsサーバのSNMPエージェント
第81回 SNMPを活用する(3) - マシンから収集した情報を活用~MIBの基本
第80回 SNMPを活用する(2) - Net-SNMPの導入
第79回 SNMPを活用する(1) - サーバの状態を監視~SNMPとは
第78回 Nagios Pluginを使ってサーバをチェック
第77回 Nagiosに監視対象を追加する
第76回 Nagiosにプラグインを導入する
第75回 Nagiosでネットワークを監視する
第74回 DrupalをBlogとして使う
第73回 Drupalを日本語化 - 翻訳ファイルのインポート~設定
第72回 XOOPS、Ploneに続け! - YetAnotherなCMS"Drupal"の導入
第71回 EpozでPloneのコンテンツを編集する
第70回 OpenSolarisをビルドしてみる(2)
第69回 OpenSolarisをビルドしてみる(1)
第68回 ZMIの日本語化とデザインのカスタマイズ
第67回 Zope + CMFのCMS"Plone"を使ってみよう - 基本的なコンテンツの編集
第66回 Zope + CMFのCMS"Plone"を使ってみよう - 導入
第65回 phpCollabでプロジェクト管理(5) - ガントチャートを日本語化
第64回 phpCollabでプロジェクト管理(4) メール送信の文字化けを解消する
第63回 phpCollabでプロジェクト管理(3) phpCollabの不具合を修正
第62回 phpCollabでプロジェクト管理(2) phpCollabの導入
第61回 phpCollabでプロジェクト管理(1)
第60回 osCommerceでショップを構築(7) お勧め商品を表示
第59回 osCommerceでショップを構築(6) MySQLにデータをロード
第58回 osCommerceでショップを構築(6) 分析スクリプト
第57回 osCommerceでショップを構築(5) PHP CLIスクリプト
第56回 osCommerceでショップを構築(4) 処理の手順を考える
第55回 osCommerceでショップを構築(3) 注文データ
第54回 osCommerceでショップを構築(2) - データベース構造
第53回 osCommerceでショップを構築(1) - 導入
第52回 PostgreSQLとMySQLのベンチマークテスト(2) - mysqlbench
第51回 PostgreSQLとMySQLのベンチマークテスト(1) - pgbench
第50回 KH Coderとコーディング・ルール
第49回 茶筌を利用するソフトウェア「KH Coder」
第48回 MySQL 4.0から4.1へのアップグレード 、トラブってませんか?
第47回 茶筌の辞書に単語を登録する
第46回 茶筌とMUSASHIで純和風テキストマイニング
第45回 日本語形態素解析ツール「ChaSen」
第44回 PostgreSQLレプリケーションのまとめ
第43回 PGCluster - 部分レプリケーション
第42回 ロードバランサの冗長構成
第41回 レプリケーションサーバを冗長化する
第40回 システムの急所、SPOFを無くすための考察
第39回 PGCluster データベースクラスタの障害からの復旧(2)
第38回 PGCluster データベースクラスタの障害からの復旧(1)
第37回 PGClusterの動作確認とDBクラスタの障害検出
第36回 1台のホストでPGClusterを試す(2)
第35回 1台のホストでPGClusterを試す
第34回 PGClusterの導入
第33回 PGClusterの特徴
第32回 Slony-Iのslonikコマンドラインユーティリティ
第31回 Slony-Iでデータベースをレプリケーション
第30回 レプリケーションシステム「Slony-I」の導入
第29回 pgpoolの障害復旧手順(2)
第28回 pgpoolの障害復旧手順(1)
第27回 pgpoolの障害検出と縮退運転
第26回 pgpoolでデータベースのレプリケーション
第25回 SQLrelayとpgpoolの効能を試す
第24回 SQLrelayとpgpoolのアプリケーションへの適用範囲
第23回 汎用コネクションプーリングサーバ「SQLrelay」 - 導入編
第22回 pgpoolの導入と設定
第21回 PostgreSQLと可用性(1)
第20回 TEAMSPEAKサーバをMySQLと連携させる
第19回 TEAMSPEAKクライアントの使い方
第18回 TeamSpeakサーバの設定とクライアントからの接続
第17回 TeamSpeakで音声通話 - TeamSpeakサーバのインストール
第16回 データマイニングツール MUSASHI(5) MUSASHIとWEKA
第15回 データマイニングツール MUSASHI(5) 出力のカスタマイズ
第14回 データマイニングツール MUSASHI(4)
第13回 データマイニングツール MUSASHI(3)
第12回 データマイニングツール MUSASHI(2)
第11回 データマイニングツール MUSASHI(1)
第10回 KNOPPIXを利用した手軽な"LAMP"環境
第9回 高機能CMS XOOPS(4) XOOPSを手軽に使うために
第8回 高機能CMS XOOPS(3) 標準以外のモジュールで仕事をスムーズに
第7回 高機能CMS XOOPS(2)Webサイトの構築
第6回 高機能CMS XOOPS(1)導入
第5回 MySQLデータベースを使う
第4回 VMware Workstationでテスト環境を整える
第3回 Linuxデスクトップの実力(2)
第2回 Linuxデスクトップの実力(1)
第1回 仕事の道具、オープンソースという選択

もっと見る



転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事

求人情報