日本語形態素データとキーワード出現回数

 2014年 7月

半ば趣味でテキストデータのキーワード出現回数を調べるものを作ってみようと思いました。

そこで必須となるのが日本語の単語データです。
少し調べてみると、それは「日本語の形態素」というものらしく、 YahooデベロッパーのAPIで公開されていたりします。

始めは自分が必要とする単語だけをある程度抽出して辞書化しようとも思ったのですが、 茶筌(ちゃせん、奈良先端科学技術大学院大学)というフリーデータがあるらしく、 ローカル環境でも使える茶筌 for Windowsというフリーソフトがありました。 さすが大学です。

形態素データはこれでなんとかなったので、 次に出現回数を数えるソフトを作らないといけないのですが、 VBもCも当分離れているので、まだ身近なJavaScriptでやってみることにしました。

内容自体は簡単なものなのですが、 出現回数が多い物順にソートするための関数、sortがPHPと違って1種類?しかないようで、 簡単にふたつの配列を同時にソートするものが用意されていないようです。

手作業で書くかと思っていたのですが、 割とややこしく、考えもまとまらないため安直に探してみたところ、 JavaScriptで、一つの配列をソートした結果に従って他の配列もソートするというそのままな物を書いている人がいました。
しかも良くある「一部だけ」というものではなく、当サイトの主旨と同じように、丸々コピペで動く物です。

せっかくなので感謝しつつお借りしてやってみたところ、うまく行きました。
ただ、値が文字列としてソートされるため、同ページの「数値比較する場合の比較関数」部分を追加し、 さらに昇順でソートされるので、reversで降順にした、というところです。

しかし元の形態素データが「に」や「は」などの助詞、助動詞などに分かれているため、 個数が物凄く多くなってしまいます。
始めは茶筌で品詞オプションを入れて出力し、 JavaScript側で助詞や助動詞を削除するものを作ってみたのですが、 今度は結果が「○○,動詞-非自立」と必要の無い物まで表示されるので見難く、 データにカンマがあるのでそこまでの文字列を抽出、とも考えたのですがそれも中途半端にしかなりませんでした。

結局それ自体はやめて、五十音あ〜んまで全ての一文字を出力しないというようにしてみたところ、 個数も大幅に減り、なおかつ出力結果も見やすいためひとまずの完成というところです。
この部分は配列に「あ〜ん」を入れるようにしているだけなので、 後からでもその配列データのみを追加すれば良いようにしました。
とりあえず記号を途中まで入れたのですが、面倒になってやめてます。

ただここまで作って思ったのは
「日本語辞書は自分で作ったものでかまわない」
ということでした。
どうせ数えるのは名詞や用語ばかりなので、 その中の自分が必要な単語だけなら数も知れています。
それなら茶筌を使う必要も無く、全てJavaScriptやPHPで作れるし、そちらの方が簡単そうです。

最終的に作り終えて満足しただけで、それを何かに使うこともなく、 ほんとに趣味で「作っただけ」で終わりました。

蛇足ですが、こういったものはYahooやGoogleのページ解析に恐らく使われているのでしょう。
日本語データセットがなければ実現不可能ですもんね。
それ以外の用途は、恐らく書籍の索引もそうなのでしょう。
前々から索引はどうやって作っているのか不思議に思っていたんですよね。
例えばプログラミングの書籍なら、索引のifの項を見てみると、 ifが書かれたページのいくつかが載っています。
これを読みながら出てきたところをチェック、なんて手間をかけているとは思えません。
つまり書籍のテキストデータ(元が紙媒体ならOCRして)の形態素解析をして、 なおかつ出現箇所のページ数を返すようにすればあっという間に索引ができるわけです。
そういった関係のことなど全然知らないのですが、 何十年も前からされていることなのでしょうね。



サンプル

著作権について
ファイルからデータの読み込み
ファイルへのデータの書き込み
フォルダ内のファイル名取得
アクセスカウンターの作り方
アンケートの作り方
フォームからのデータの取得
フォーム以外のページからのデータの取得
ファイル内、文章内の文字列の検索
パスワード認証の方法と作り方

0から始めるPHP

PHPのすすめ(これ飛ばしてもいい)
必要な環境とPHPへのアクセス
開発に使うもの
初めての方への注意点
PHPの基本(何らかの言語経験者向け)
PHPの基本(初めての人向け)
書き方
ファイルの読み込み

プログラミング講座
文字などの出力
PHPにおける変数
ifによる条件比較
forによる繰り返し処理
PHPにおける配列
これまでとこれからの学び方

PHPの使える
おすすめレンタルサーバー

スタードメイン

レンタルサーバーの選び方


その他

プログラミングのコツ
プログラマーと年齢
誰でも簡単にできるサーバー負荷対策
社内や自宅サーバーのグローバルIPアドレスが変わってもアクセスできるようにする

日記

2014年
日本語形態素データとキーワード出現回数
Androidベースのゲーム機に期待
4月末に判明したIEの脆弱性について
フラッシュプレーヤーの製作
ホームページとウェブサイトの違い
WIFIなどの用語は正しく使いたい
国産ゲーム会社のサイトについて
検索エンジンの開発について
プレインストールWindowsからの脱却
Android・iPhoneとアプリ開発
Windows8、スタートボタンはもういらない?
サイトの作成とやるやらないは別
あの人は詳しいと言う人と言われる人
index.htmlと/の正規化について
AndroidOSとLinuxOS
モバイル端末で必ず見るもの
ユーザー参加型市民アプリ

2013年2月
2013年1月
2012年12月
2012年11月
2012年10月
2012年9月