このサイトで使用している namazuという全文検索システム は、kakasi という外部プログラムを補助的に使用している。だが、こいつはなかなかの曲者である。そもそもの kakasi の目的と、namazu での使われ方がちょっと違うかららしい。
全文検索システムというものは、漫然と全てのテキストを頭から順番に眺めていくのではない。ものすごく大雑把に言えば、どこにどういう言葉があるかを記した“地図”のようなものを眺めて、ユーザの入力と一致する言葉を探し出すという作業をこなしている。で、このシステムの一番の問題は、“地図”に載せる言葉をどうやって選ぶかという点にある。全文検索システムは、延々と続く文章を適当にぶった切って、地図に載せる言葉を決めなければならない。単語と単語が空白で切れている英語だと、このぶった切るという作業は考えるまでもないくらい簡単なのだが、そういうルールが無い日本語では、単純に切れ目を入れるだけでもかなり厄介だ。namazu の補助をしている kakasi は、この「どこで切ったらよいのか分からない日本語に切れ目を入れて、“地図”に載せるべき言葉を切り出す」、分かち書きと呼ばれる作業を担っているのだが、さっきも言ったように、それは kakasi の本業ではないようだ。kakasi はもともと、漢字とかなの混じった文章を、ひらがなやローマ字に変換するためのプログラムなのだ。
namazu + kakasi の有名なトラブルに、「お知らせ問題」というのがある。例えば、「学校からのお知らせ」を kakasi にかけると、「学校」「からのお」「知らせ」と分割してしまうので、namazu から「お知らせ」を検索してもヒットしないという事態が起きてしまう。なぜそんな奇怪な分割をするかというと、辞書に載ってない連続するひらがなを認識出来ないからである。では、「お知らせ」を 1 単語として辞書登録してしまえばいいじゃないかと誰でも考えるわけだが、なんと kakasi には、ひらがなから始まる単語や英数字を含む語は登録出来ないという、身の毛もよだつ恐ろしい仕様があるのである。ユーザに「『知らせ』で検索しろ」というのはかなりムリがある。つまり、この問題は、製作者自身も早い内から気付いていたにも関わらず、未だ根本的に解決不能なのだ。同様の原因による「『プロ野球チームをつくろう』問題」というのもあった。「をつくろう」が 1 単語と扱われるわけだ。
ただ、kakasi は補助的な外部プログラムだから、他にも選択肢はある。それが chasen というプログラムである。高度な日本語処理なら chasen だなどという煽りをどこかで読んだ記憶があったので、一応試してみることにした。で、いじってみたわけなのだが、しかし、こいつはこいつで kakasi よりもっと癖があった。というか辛い。「お知らせ問題」だけは解決してるけど。
例えば「もじうめ」という固有名詞は、「もじ」と「うめ」に分割できてしまうので、「もじうめ」は複合語扱いになり、そのまま検索してもヒットしない。「もじうめ」のページをヒットさせるには、「もじ うめ」とスペースを挟んだり、「"もじ うめ"」と囲ったり、「*うめ」などで検索することになる。アヒャヒャ。固有名詞の検索のために、AND 検索ならまだしもフレーズ検索や前方・後方一致などを使いこなしてもらうなんてミジンコも考えられない。そんなもん、普通の人は「何それ?」状態だし、ワイルドカードもクオテーションも縁遠い人たちは、教えても恐らく一瞬で使い方を忘れる。それに、デフォルトだと口語を扱うのはほとんどムリなようだ。試しているうちに、どうやら、辞書に載ってるメジャーな単語で切る他は、かなや記号と漢字との切れ目で判断するらしい kakasi の単純なアプローチの方が、意外に汎用性がありそうだ、と思い至った。
kakasi で分かち書きをする場合には、上記のようにひらがなで始まる単語の認識に失敗しまくるという難点はあるが、それは文章の中でいきなり使用した場合のことで、どうしても認識させたいひらがなで始まる単語は、前後を句読点で切ったりカッコでくくるなどして明確に切れ目を与えておけば、kakasi は辞書に載って無くてもそこで分割し、インデックスできるのだ。例えば、「分かりやすいもじうめの使い方」と書いてしまうと、「りやすいもじうめの」が1単語扱いになるが、「分かりやすい『もじうめ』の使い方」と書けば、「もじうめ」を固有名詞とは判断できなくとも1単語として扱われるため、検索ができる。しかし、chasen は日本語の形態素解析がその目的なので、カギカッコの中の平仮名でも、さらに頑張って細かく切ってしまう。つまり、「もじうめ」のような未登録のひらがな固有名詞(特に人名)は全滅する可能性が高い。
すなわち、namazu を使うのなら「お知らせ問題」の解決は諦めて kakasi で行くか、辞書をチューンしまくって chasen で行くか、の二択である。正直、chasen 辛すぎ。禿しくムリ。デフォルトだとひらがな固有名詞や複合語が本当に見事なくらい全滅する以上、使う前には考えられる限りのキーワードを叩き込んでおかなきゃならない。ムリ。もしかしたら解決法があるのかもしれないけど、ぐぐってる限りではなさげ。なんでみんなが kakasi ばかり使って chasen はあまり使われないのかという理由の 1 つが見えた気がする。
著作者 : 未識 魚
最終更新日 : 2006-09-27 00:18:42