無能君の機能のひとつとして会話内容を拾いたかった。
そこでいろいろ調べると形態素解析とかあるとわかったが、サーバーによっては導入できないとかあって断念。
したんだけど、やっぱり何か欲しいと思って本職の人からみたらゴミに見えるかもしれないけどそんな感じのものをつくってみた。
今のところはこんな感じです。
仕組みとしてはシンプル。
いくつかのフィルターを作成し、それらを組み合わせることでなんちゃって形態素解析っぽいものを実現してみました。
フィルターはいくつかあり
句読点
助詞
ひらがな
カタカナ
英数字
漢字
単語・フレーズ
といったもので成り立っています。
それぞれが関数として独立した感じになっていますので、同じ文章でもフィルターを通す順番を変えると結果が変わります。
とりあえず
句読点
カタカナ
英数字
辞書
の順番で処理するとそれっぽい感じにはなってます。
もちろん本職の素解析からみればゴミみたいなもんですがある程度わかればいいので良しとします。
どうでもいいことですが一番苦労したのは辞書の作成と処理の部分で、フリーの辞書とか外国人の方のための日本語教材なんかから1万語ほど抜き出して整理しました。
それでもこの精度の低さには驚愕ではありますが、一致するかどうかしか見てないのでまぁこんなもんかと。
接頭語・接尾語なんかも考慮できたら精度はあがるんでしょうけど、そうなると一気に複雑になりそうなので保留にしました。
そんでもって一致させる部分ですが、面倒だったので1万語ほどをpreg_matchに突っ込んでやろうと思ったんですが、速攻でエラーになりました。
エラー内容は先日も書いた内容そのままです。
img/blog/201303081035-0.jpg rel=lightbox>仕組みとしてはシンプル。
いくつかのフィルターを作成し、それらを組み合わせることでなんちゃって形態素解析っぽいものを実現してみました。
フィルターはいくつかあり
句読点
助詞
ひらがな
カタカナ
英数字
漢字
単語・フレーズ
といったもので成り立っています。
それぞれが関数として独立した感じになっていますので、同じ文章でもフィルターを通す順番を変えると結果が変わります。
とりあえず
句読点
カタカナ
英数字
辞書
の順番で処理するとそれっぽい感じにはなってます。
もちろん本職の素解析からみればゴミみたいなもんですがある程度わかればいいので良しとします。
どうでもいいことですが一番苦労したのは辞書の作成と処理の部分で、フリーの辞書とか外国人の方のための日本語教材なんかから1万語ほど抜き出して整理しました。
それでもこの精度の低さには驚愕ではありますが、一致するかどうかしか見てないのでまぁこんなもんかと。
接頭語・接尾語なんかも考慮できたら精度はあがるんでしょうけど、そうなると一気に複雑になりそうなので保留にしました。
そんでもって一致させる部分ですが、面倒だったので1万語ほどをpreg
matchに突っ込んでやろうと思ったんですが、速攻でエラーになりました。
エラー内容は先日も書いた内容そのままです。
また仮にこれが出来たとしても(htaccessでRCREの上限を上げてやってみた)実は精度がよくないので、単語やフレーズをさらにいくつかのカテゴリーにわけて、最長一致を順次行っていくように変更しました。
単語部分の処理は
6文字以上のカテゴリーで検索
4~5文字のカテゴリーで検索
3文字のカテゴリーで検索
2文字のカテゴリーで検索
1文字のカテゴリーで検索
という風に変更することで、pregmatchにおけるPCREの上限回避と精度の向上を行いました。
それにしてもプログラムをやっててよく
数学とかもっとちゃんとやっとけばよかったな~
というのはよくあったのですが、今回ほど国語をちゃんとやっとけばよかったな~と思うことはありませんでした。
助詞とか助動詞とかはいいんですが、格助詞とか副助詞とかもうそんなの習ったっけ?みたいなのがあってWikipedia先生にはとてもお世話になりました。
車輪の再発明にすらなっていませんが、やっぱりこういうのつくるのは面白いもんです。
次はこのへんを踏まえてとてもくだらない無能君を作れたらな~と思ってます。
PHP