みんなでしりとりする「しりとる」実装にあたって
前回リリースしました「しりとる」の技術的な話をば。
しりとり機能実装のポイント
しりとり機能を実装するにあたって、ポイントは二つです。
文章(名詞以外の複数の品詞)からなる文字列を入力された場合
漢字を入力された場合
もちろん、しりとりの基本的な要素である、1.しりをとる、2.「ん」で終わらない、3.重複禁止、といったものもあるのですが、実装自体は簡単です。難しいポイントは上の2つになります。ではその解説です。
文章(名詞以外の複数の品詞)からなる文字列を入力された場合
しりとりの条件は、もちろん、名詞一つをつなげていくわけですが、入力された文字列が名詞一つとは限りません。
例えば、「り」から始めるときに、「りんごをかじる」と入力された場合、これは弾かなければなりません。(やさしい設計を考えるなら、弾くのではなく「りんご」を拾い上げてやることかもしれませんが。)
りんごをかじる → 不成立
りんご → 成立
では、これをプログラムに、名詞一つではない、と判断させなければなりません。そこで、登場するのがmecabによる形態素解析になります。
形態素解析の簡単な例は、前々回の投稿で作った「形態素解析サービス」で実現できます。
りんご(名詞),を(助詞),かじる(動詞) → 名詞以外の品詞がある! → 不成立
りんご(名詞) → 名詞が一つだけ! → 成立
いやー、このエンジンを作った方は本当にすごいですね。この解析を通すことで、入力された文字列が名詞一つだけなのか否かの判断ができるようになります。
漢字を入力された場合
今回、「しりとる」では、内部的にすべてひらがなで単語を扱っています。
リンゴ → りんご
つまり、ひらがなかカタカナならば問題ないのですが、漢字も入力できたほうが幅が広がりますよね?ひらがなだけだと、「きかい」は一つで終わってしまいますが、「機械」の場合もあれば「機会」の場合もあります。
きかい → いしき → きかい(×重複)
機械 → 意識 → 機会(○)
このように、ひらがなだけだと重複する流れも、漢字を入力できるようにすると選択できる名詞の幅も広がります。
そして、漢字の場合は、その読みをプログラムが認識しないといけないわけです。ここで、再び、mecabの登場です。mecabのインストール時に辞書データも登録しています。その辞書に漢字とその読みが登録されているわけです。それによって、漢字から読みを判断しているわけです。
mecab導入前の話
実は、mecabをインストールする前に、別の環境でこのしりとりサービスを実装していました。そのときは、Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析で形態素解析を行い、よみたんで漢字の読みを取得していました。
それが、mecabをインストールして、すべて自サーバで対応できるようになったわけです。
ほんと、mecab様様ですw
終わりに
あとは・・・メディアパワーが欲しいですねw
なんとか広まらないかしら。てか、その前にデザインをなんとかしろ、とw
Tags: [mecab](/tag/mecab), [しりとり](/tag/%e3%81%97%e3%82%8a%e3%81%a8%e3%82%8a), [形態素解析](/tag/%e5%bd%a2%e6%85%8b%e7%b4%a0%e8%a7%a3%e6%9e%90)
« [みんなでしりとりするサービス「しりとる」リリース](/121/last_and_first)
[「しりとる」微妙にバージョンアップ](/161/shiritoru_ajax) »
[画像未復旧: similar.png](http://blog.playispeace.com/img/similar.png) 関連ありそうなエントリー