Streaming APIで大量のつぶやきをリアルタイムに保存する方法(cURL編)で述べたように、Ustreamなどで重要な映像が配信されるときには、Twitterなどでその内容をtsudaってくれる人がいます。そうやって生み出される大量のテキストが、映像のメタ情報としてもっと活用されるとうれしい、という話です。
最初に試したいのはキーワードの抽出です。
テキストファイルからキーワードを取り出そうとするとき、多くの学生はまず「形態素解析」を試みます。自然言語処理についてちゃんと学びたいときは、こういうところからじっくり勉強するといいのでしょうが、単に形態素解析するだけではあまりいい結果は得られません。
実際にやってみましょう。
形態素解析システムの使い方は、『入門 自然言語処理』(オライリー, 2010)などで紹介されていますが、環境によってはもう少し簡単です。たとえば、Ubuntuの場合、有名な日本語形態素解析システムMeCabをPythonで使うための準備は、次のようにとても簡単です。
sudo apt-get install python-mecab mecab-jumandic-utf8
インストールが終わったら、Pythonのインタラクティブシェルで動作を確認します。
import MeCab mecab = MeCab.Tagger() sentence = "すもももももももものうち" print mecab.parse(sentence)
実行結果は次の通りです。
す 接頭辞,名詞接頭辞,*,*,す,す,* もも 名詞,普通名詞,*,*,もも,もも,代表表記:股 も 助詞,副助詞,*,*,も,も,* もも 名詞,普通名詞,*,*,もも,もも,代表表記:股 も 助詞,副助詞,*,*,も,も,* もも 名詞,普通名詞,*,*,もも,もも,代表表記:股 の 助詞,接続助詞,*,*,の,の,* うち 名詞,副詞的名詞,*,*,うち,うち,* EOS
というわけで、うまくいってませんが先に進みましょう。形態素ごとに何らかの処理を行う練習です。
node = mecab.parseToNode(sentence) node = node.next while node: print node.surface, node.feature node = node.next
実行結果は先の場合とほとんど同じになります。形態素がnode.surfaceに、その素性がnode.featureに格納されます。
PythonでMeCabを使う方法がわかったので、形態素の出現回数を数えてみましょう。出現回数た多い単語がキーワードであろう、という発想です。対象テキストは、Streaming APIで取得したつぶやきの処理方法で紹介したもの、つまり「#iwakamiyasumi」というハッシュタグで検索し保存したつぶやきのうち、「年末特番 ジャーナリスト休業直前!上杉隆氏ラストインタビュー」の配信時間中(2011年12月30日15:00から17:45)のものです(本文のみ)。そのテキストが、ファイルtweets.txtに格納されていると仮定します。
次のようなコード(wordcounter.py)は、名詞と見なされたものの出現回数を数え、大きいものから順に出力します(ASCII数字のみからなる単語は除く)。
#!/usr/bin/env python # -*- coding: utf-8 -*- import MeCab, sys mecab = MeCab.Tagger() counter = {} for line in sys.stdin: node = mecab.parseToNode(line) node = node.next while node: if node.feature.startswith("名詞,"): if not node.surface.isdigit(): counter[node.surface] = counter.get(node.surface, 0) + 1 node = node.next for surface, count in sorted(counter.items(), key=lambda x:x[1], reverse=True): print count, surface
「cat tweets.txt | python wordcounter.py | head -n 20」などとして、出現回数が多いものから順に20個抽出すると次のようになります。
1509 iwakamiyasumi 1433 t 1406 co 1406 http 1301 live 1301 at 533 上杉 261 隆 157 岩上 121 記者 112 福島 106 ジャーナリスト 81 IWJ 73 クラブ 70 報道 64 uesugitakashi 63 こと 62 w 57 bCljBsCQ 54 ー
というわけで、あまりうまくいっていませんが、形態素解析システムの使い方がわかったので、とりあえずこれでよしとしましょう。
もう少し楽な方法を後で紹介します。