日本語形態素データとキーワード出現回数 : ぺたっとPHPサンプルソースコード |
半ば趣味でテキストデータのキーワード出現回数を調べるものを作ってみようと思いました。
そこで必須となるのが日本語の単語データです。
少し調べてみると、それは「日本語の形態素」というものらしく、
YahooデベロッパーのAPIで公開されていたりします。
始めは自分が必要とする単語だけをある程度抽出して辞書化しようとも思ったのですが、 茶筌(ちゃせん、奈良先端科学技術大学院大学)というフリーデータがあるらしく、 ローカル環境でも使える茶筌 for Windowsというフリーソフトがありました。 さすが大学です。
形態素データはこれでなんとかなったので、 次に出現回数を数えるソフトを作らないといけないのですが、 VBもCも当分離れているので、まだ身近なJavaScriptでやってみることにしました。
内容自体は簡単なものなのですが、 出現回数が多い物順にソートするための関数、sortがPHPと違って1種類?しかないようで、 簡単にふたつの配列を同時にソートするものが用意されていないようです。
手作業で書くかと思っていたのですが、
割とややこしく、考えもまとまらないため安直に探してみたところ、
JavaScriptで、一つの配列をソートした結果に従って他の配列もソートするというそのままな物を書いている人がいました。
しかも良くある「一部だけ」というものではなく、当サイトの主旨と同じように、丸々コピペで動く物です。
せっかくなので感謝しつつお借りしてやってみたところ、うまく行きました。
ただ、値が文字列としてソートされるため、同ページの「数値比較する場合の比較関数」部分を追加し、
さらに昇順でソートされるので、reversで降順にした、というところです。
しかし元の形態素データが「に」や「は」などの助詞、助動詞などに分かれているため、
個数が物凄く多くなってしまいます。
始めは茶筌で品詞オプションを入れて出力し、
JavaScript側で助詞や助動詞を削除するものを作ってみたのですが、
今度は結果が「○○,動詞-非自立」と必要の無い物まで表示されるので見難く、
データにカンマがあるのでそこまでの文字列を抽出、とも考えたのですがそれも中途半端にしかなりませんでした。
結局それ自体はやめて、五十音あ〜んまで全ての一文字を出力しないというようにしてみたところ、
個数も大幅に減り、なおかつ出力結果も見やすいためひとまずの完成というところです。
この部分は配列に「あ〜ん」を入れるようにしているだけなので、
後からでもその配列データのみを追加すれば良いようにしました。
とりあえず記号を途中まで入れたのですが、面倒になってやめてます。
ただここまで作って思ったのは
「日本語辞書は自分で作ったものでかまわない」
ということでした。
どうせ数えるのは名詞や用語ばかりなので、
その中の自分が必要な単語だけなら数も知れています。
それなら茶筌を使う必要も無く、全てJavaScriptやPHPで作れるし、そちらの方が簡単そうです。
最終的に作り終えて満足しただけで、それを何かに使うこともなく、 ほんとに趣味で「作っただけ」で終わりました。
蛇足ですが、こういったものはYahooやGoogleのページ解析に恐らく使われているのでしょう。
日本語データセットがなければ実現不可能ですもんね。
それ以外の用途は、恐らく書籍の索引もそうなのでしょう。
前々から索引はどうやって作っているのか不思議に思っていたんですよね。
例えばプログラミングの書籍なら、索引のifの項を見てみると、
ifが書かれたページのいくつかが載っています。
これを読みながら出てきたところをチェック、なんて手間をかけているとは思えません。
つまり書籍のテキストデータ(元が紙媒体ならOCRして)の形態素解析をして、
なおかつ出現箇所のページ数を返すようにすればあっという間に索引ができるわけです。
そういった関係のことなど全然知らないのですが、
何十年も前からされていることなのでしょうね。
当サイト「ぺたっとPHPサンプルソースコード」は、初めてPHPを触る初心者でもすぐにPHPプログラミングができる・分かるサイトです。
PHPのサンプル
0から始めるPHP
日記