2013-03-13

Pythonで文章に出現する個々のキーワードの出現回数を調べる方法

キーワード出現頻度とかを調べる時に、ある文章中に特定の単語が何回出現するかというのを調べたい時はよくあります。

Pythonで個々の単語の出現回数を調べる方法は主に3つあります。

  1. for文で1つずつ調べて行く方法
  2. for文で辞書のgetメソッドを使う方法
  3. nltkを使う方法

3つの方法で実際に書いてみました。サンプルの文章はWall Street Journalのトップニュースから引用させていただきました。

def version1(line):
    for word in line.split():
        if word in wordcount:
            wordcount[word] = wordcount[word] + 1
        else:
            wordcount[word] = 1
    print wordcount

def version2(line):
    for word in line.split():
        wordcount[word] = wordcount.get(word, 0) + 1
    print wordcount

def version3(line):
    import nltk
    tokens = nltk.word_tokenize(line)
    text = nltk.Text(tokens)
    wordcount = nltk.FreqDist(text)
    print wordcount.items()

if __name__ == '__main__':
    line = "These changes, almost all of which the White House and Democrats have said they oppose, would combine with January's tax increases to eliminate the government's budget deficit in 2023, a top GOP goal, says Mr. Ryan, chairman of the House Budget Committee. Prior House GOP budget resolutions called for changes that would have taken several decades to eliminate the deficit."
    wordcount = {}
    version1(line)
    version2(line)
    version3(line)

一番分かりやすいのが1番の方法(version1)で、1つずつ単語を取り出して、その単語が辞書に既に登録されていれば1を足して、登録されていなければ1を代入するのを繰り返します。

もう少し簡単に書けるのが2番の方法(version2)で、辞書のgetメソッドを使います。引数の1つ目はキーを、2つ目はキーが存在しない場合のデフォルト値を渡します。

キーが存在すればそれに1を足す事になり、キーが存在しなければ0を代入するという事になります。

もっと便利なのが3番の方法(version3)のnltkを使うやり方です。nltkは標準で入ってないので別途インストールする必要があります。

FreqDistっていうのは、単語の出現回数の順番に並べてくれていますので、出現回数の上位10個だけを取り出したい時には以下のように最後に[:10]と書けばいいだけです。NLTKは面白い。

    print wordcount.items()[:10]

調査したいライバルサイト、ライバルサイトのバックリンクサイトなどのキーワード出現回数とかを調べたい時に便利です。NLTKを使えば最近のSEOで大事な共起語なんかの分析も簡単にできます。

日本語みたいに単語をスペースで区切らない言語の場合はMeCabなどで単語に分割したり形態素解析する手間も必要になります。

0 件のコメント:

コメントを投稿