tfidfでお手軽キーワード抽出(2)

前回:tfidfでキーワード抽出
これと同じことをnltk.TextCollectionを使ってやってみました。 非常に簡単に書けました。前回の記事で時間と空間のトレードオフとか言ってましたが、実は全然メモり削減できてませんでしたね…
環境:
OSX 10.8.4
Python 2.7.2

Implementation

# -*- coding: utf-8 -*-
from nltk.corpus import reuters
import nltk
import math

if __name__ == '__main__':

    target_class = "acq"
    N = 200
    docs = [reuters.words(fileid) for fileid in reuters.fileids(categories=target_class)]
    docs = docs[:N]
    doc = docs[0]
    collection = nltk.TextCollection(docs)
    candidates = set(doc)
    for candidate in sorted(candidates, key=lambda x:collection.tf_idf(x, doc), reverse=True)[:20]:
        print "%s: %f" % (candidate, collection.tf_idf(candidate, doc))




Result

Sumitomo: 0.091463
Komatsu: 0.058798
bank: 0.032187
Sogo: 0.026132
Heiwa: 0.026132
business: 0.023753
securities: 0.019674
We: 0.018469
": 0.018430
,": 0.017610
will: 0.017266
But: 0.016395
analysts: 0.014775
Gottardo: 0.013066
cases: 0.013066
network: 0.013066
Smithson: 0.013066
deregulation: 0.013066
quickly: 0.013066
Kleinwort: 0.013066

Summary

nltk.TextCollectionを使えば簡単にtfidfを求めることができることがわかった。
しかし、扱う文書を増やすとToo many open filesというエラーが出るのは解決していない。
というわけでこれを解決したいと思う。もう少しロイターコーパスで遊ぶ。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中