LoginSignup
1
1

More than 3 years have passed since last update.

NLTKを使って高頻度単語を抽出してみる(python)

Posted at

NLTK(Natural Language Toolkit)の公式ドキュメントを読みながら、文書の中でよく使われている単語を抽出してみました。とりあえず、サンプルデータから頻出度の高いキーワードを上から3つ順番に表示するところまでやってみましたので、メモがてらに残しておきます。

開発環境

  • Python
  • NLTK

NLTKのインストール

他のライブラリをしてくのとお馴染みで、まずはpip installします。

$ pip install nltk

高頻度単語を抽出していく

大まかな流れとしては、まず 1) 分かち書きと、品詞を取得する機能をそれぞれダウンロードしたあとに、2) サンプルテキストを読み込んで、読み込んだテキストを分かち書きに変換し、3) 品詞を取得した後に、名詞の単語だけに絞り、最後に、4) 最も使われている上位の単語を3つだけ表示します。

必要な機能のダウンロード

nltk_test.py
import nltk

nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

nltkをインポートした後に、分かち書きと、品詞分けをしてくれる機能を公式からダウンロードします。一度環境でダウウンロードすれば、それ以降はダウンロードの必要がありません。ダウンロードしようとすると、Package punkt is already up-to-date!ってな具合でアラートが出ます。

サンプルテキストを取得して、分かち書きへ変換

nltk_test.py
raw = open('sample.txt').read()
tokens = nltk.word_tokenize(raw)
text = nltk.Text(tokens)

tokens_l = [w.lower() for w in tokens]

事前に英語のエッセイ、長文を用意します。(sample.txt)これを読み込んだ後に、word_tokenize()で分かち書きに変換します。その後に、一応小文字、大文字の違いがある場合は同じと認識させる為に、全部小文字にして同じものは同一と認識するようにしています。

品詞を取得した後に名詞のみを抽出

nltk_test.py
only_nn = [x for (x,y) in pos if y in ('NN')]

freq = nltk.FreqDist(only_nn)

NN(名詞)に該当する品詞のみを抽出して、頻度分布を計算shてくれるFreDistを使って、頻出回数を数えていきます。

上位3つを表示

nltk_test.py
print(freq.most_common(3))

Pythonの出現回数をカウントして、多い方から表示する関数most_common()を使って表示完了です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1