Paradigm Shift Design

ISHITOYA Kentaro's blog.

はてなダイアリーの形態素数を数えるクローラー

先週・先々週あたり、TimeMachineBoardの実装で予測変換のための辞書を生成するプログラムを作っていた。長尾先生がこの間、形態素数に関して長尾のブログ2.0: 形態素を数えてみたらというエントリを書いていらっしゃったのだけれども、何かの役に立ちそうな予感がするのと、大き目のデータベースで遊んでみたかったので、はてなダイアリーのエントリーから形態素を抽出するクローラーを作ってみた。


それがなんとなく動いたので、何の意味があるかは分からないけどサマリを出してみます。


項目は以下の通り

項目名 内容
延べ形態素出現数 MeCabを利用して取得できた形態素
形態素の延べ異なり数 延べ形態素数から重複を除いた数
原型形態素の出現数 原型のみの出現数
原型形態素の異なり数 原型のみの形態素


処理は次のようにして行なっています。

  1. ダイアリからエントリを取得
  2. HTMLタグを取り除いたエントリの本文を抽出(タグに含まれるテキストは保持)
  3. MeCabで処理
  4. 記号・助詞・助動詞・アラビア数字のみの形態素を取り除く
  5. 原型のみを抽出
  6. 動詞の原型の読みを取得
  7. DBに突っ込む


とりあえず、比較対象がないと良く分からないと思いますので、青空文庫から夏目漱石の「こころ」・「三四郎」・「坊ちゃん」を持ってきてルビを削除し、TimeMachineBoard用のプログラムで、形態素数を取得してみました。

作品名 延べ形態素出現数 形態素の延べ異なり数 原型形態素の出現数 原型形態素の異なり数
こころ 150,526 61,025 49,742 5,592
三四郎 152,555 70,095 51,677 6,137
坊ちゃん 80,339 30,547 28,218 4,810
三作品合計 389,643 161,667 129,637 10,732


うーん。日本語だけでここまでいけるのはきっとすごいんだな。大体40万形態素って平均3文字として、120万文字とか・・・文筆家ってすごいな。


そして、本題のはてな。とりあえず知ってるidの人を適当に処理してみた。

id エントリ数 原型形態素の出現数 原型形態素の異なり数
id:kent013 343 57,356 10,271
id:mirakui 43 15,702 4,112
id:uzulla 472 62,539 10,881
id:atomoharu 106 7,248 2,408
id:sumi_wakhok 106 11,898 3,327
id:gi-chi 12 1,103 582
id:ono_matope 665 84,594 13,582

原型以外の形態素数が取れていないのは、前処理してからDBに入れているからです。それとエントリの取得の段階でsumi_wakhokさんの場合[Esc]から前のエントリが取れないので*1解析対象が少なくなっています。またRSSからセクションではなくて日付のエントリしか取れない場合、最後のセクションのみが対象になっています。それにgi-chiさんのエントリ数が12ってのもおかしいし、ono_matopeさんとuzullaさんの結果も参考です。
たぶん、僕とatomoharu先生とmirakuiのは正しいと思われます。


こう見ると、1年かけて夏目漱石に比肩するほどの形態素数が!と言いたいところですが。残念。僕の場合「AuthenticationInterceptor」がなぜか感動詞になっていたりするのでコードをエントリに載せている場合は形態素数が大分増えます。純粋に日本語だけで言ったら、ちゃんと処理できれば多分角さんが一番多いのじゃないかと思います。


因みに【ことばをめぐる】(991218)語彙数推計,新明解国語辞典,とっぱらう,舌足らず語彙推定テスト等でもあるように、大学生の日本語語彙力は45,000〜50,000だそうです。読めることと、それを使えることはまた別の話のようです。


で、これ何に使うの?って話ですが例えば、2つ前の僕のエントリで言えば、名詞の上位5位まで挙げてみると「リファクタリング・コード・再利用・オブジェクト指向・生産性」というのが出てきます*2。まぁとりあえず、なんとなくできたので、名詞名詞連結をしたり、特徴後抽出をしてみたり、クラスタリングしてみたり、可視化してみたり、色々と試してみながら、ごにょごにょしようとおもいます。


別に意味はないけど解析されたいという人がいたら手を挙げてください。
因みに・・・全員の感動詞の一位は当然ながら「はてな」でした。


追記:よく考えたら複合語がないから形態素数が少ないのでした。

*1:なぜか前のエントリへのリンクがループしてしまっている

*2:名詞・名詞連結は人間がやりました