Python を使用して WordNet または NLTK を使用して、英語で単語の使用頻度を見つける方法はありますか?
注: 特定の入力ファイル内の単語の頻度カウントは必要ありません。今日の使用状況に基づいて、一般的な単語の頻度カウントが必要です。
WordNet では、すべての Lemma に頻度カウントがあり、メソッドによって返され
lemma.count()
、ファイルに保存されますnltk_data/corpora/wordnet/cntlist.rev
。
コード例:
from nltk.corpus import wordnet
syns = wordnet.synsets('stack')
for s in syns:
for l in s.lemmas():
print l.name + " " + str(l.count())
結果:
stack 2
batch 0
deal 1
flock 1
good_deal 13
great_deal 10
hatful 0
heap 2
lot 13
mass 14
mess 0
...
ただし、多くのカウントはゼロであり、ソース ファイルやドキュメントには、このデータの作成に使用されたコーパスに関する情報はありません。Daniel Jurafsky と James H. Martinの著書Speech and Language Processingによると、感覚周波数は、すでに小さくて時代遅れの Brown Corpus のサブセットであるSemCorコーパスから来ています。
したがって、クリストファーが提案したように、アプリケーションに最適なコーパスを選択し、自分でデータを作成するのがおそらく最善です。
この Python3.x と互換性を持たせるには、次のようにします。
コード例:
from nltk.corpus import wordnet
syns = wordnet.synsets('stack')
for s in syns:
for l in s.lemmas():
print( l.name() + " " + str(l.count()))
茶色のコーパスを使ってそれを行うことができますが、それは古くなっています (最終改訂は 1979 年) ため、多くの最新の単語が欠落しています。
import nltk
from nltk.corpus import brown
from nltk.probability import *
words = FreqDist()
for sentence in brown.sents():
for word in sentence:
words.inc(word.lower())
print words["and"]
print words.freq("and")
その後cpickle
、FreqDist をファイルにオフにして、後で読み込みを高速化できます。
コーパスは基本的に、1 行に 1 文の文章でいっぱいのファイルであり、他にもたくさんのコーパスがあるので、目的に合ったものを見つけることができるでしょう。より最新のコーパスの他のいくつかのソース: Google、American National Corpus。
また、現代アメリカ英語コーパスから上位 60,000 語とその頻度の現在のリストを取得することもできます。
http://wn-similarity.sourceforge.net/にあるWordnet類似性プロジェクトの情報コンテンツセクションをご覧ください。そこには、いくつかの異なるコーパスから計算された、Wordnetの見出語の単語頻度(または、単語頻度から派生した情報コンテンツ)のデータベースがあります。ソースコードはPerlですが、データベースは独立して提供されており、NLTKで簡単に使用できます。
コンテキストに大きく依存するため、実際にはこれを行うことはできません。それだけでなく、頻度の低い単語の場合、頻度はサンプルに大きく依存します。
あなたの最善の策は、おそらく、特定のジャンルのテキストの大規模なコーパスを見つけて (たとえば、Project Gutenbergから 100 冊の本をダウンロードするなど)、自分で単語を数えることです。
ウィクショナリー プロジェクトには、TV スクリプトとプロジェクト グーテンベルクに基づく頻度リストがいくつかありますが、それらの形式は解析にはあまり適していません。