[〜#〜] nltk [〜#〜]in pythonは関数 FreqDist =テキスト内の単語の頻度を示します。テキストを引数として渡そうとしていますが、結果は次の形式になります。
[' ', 'e', 'a', 'o', 'n', 'i', 't', 'r', 's', 'l', 'd', 'h', 'c', 'y', 'b', 'u', 'g', '\n', 'm', 'p', 'w', 'f', ',', 'v', '.', "'", 'k', 'B', '"', 'M', 'H', '9', 'C', '-', 'N', 'S', '1', 'A', 'G', 'P', 'T', 'W', '[', ']', '(', ')', '0', '7', 'E', 'J', 'O', 'R', 'j', 'x']
一方、[〜#〜] nltk [〜#〜]Webサイトの例では、結果は文字だけでなく単語全体でした。この方法でやっています:
file_y = open(fileurl)
p = file_y.read()
fdist = FreqDist(p)
vocab = fdist.keys()
vocab[:100]
私が間違っているplsを知っていますか?ありがとう!
FreqDist
は、反復可能なトークンを想定しています。文字列は反復可能です---反復子はすべての文字を生成します。
最初にテキストをトークナイザーに渡し、トークンをFreqDist
に渡します。
FreqDistは、トークンの配列で実行されます。最初に入力をトークン化する必要がある文字の配列(文字列)を送信しています。
words = nltk.tokenize.Word_tokenize(p)
fdist = FreqDist(words)
NLTKのFreqDist
は、反復可能なものを受け入れます。文字列は文字ごとに繰り返されるため、あなたが経験している方法で物事を引き離します。
単語を数えるには、FreqDist
単語を入力する必要があります。どうやって?まあ、あなたは(他の人があなたの質問への答えで提案したように)ファイル全体をnltk.tokenize.Word_tokenize
。
>>> # first, let's import the dependencies
>>> import nltk
>>> from nltk.probability import FreqDist
>>> # wrong :(
>>> words = nltk.tokenize.Word_tokenize(p)
>>> fdist = FreqDist(words)
Word_tokenize
文からWordモデルを構築します。各文を1つずつフィードする必要があります。段落全体または文書さえ与えられたとき、それは比較的悪い仕事をします。
じゃあ何をすればいいの?簡単に、文章トークナイザーを追加してください!
>>> fdist = FreqDist()
>>> for sentence in nltk.tokenize.sent_tokenize(p):
... for Word in nltk.tokenize.Word_tokenize(sentence):
>>> fdist[Word] += 1
心に留めておくべきことの1つは、テキストをトークン化する方法がたくさんあるということです。モジュールnltk.tokenize.sent_tokenize
およびnltk.tokenize.Word_tokenize
は、比較的きれいな英語のテキストに適切なデフォルトを選択するだけです。選択できる他のオプションがいくつかあります。これらは APIドキュメント で読むことができます。
次のように使用するだけです。
import nltk
from nltk.probability import FreqDist
sentence='''This is my sentence'''
tokens = nltk.tokenize.Word_tokenize(sentence)
fdist=FreqDist(tokens)
変数fdistのタイプは「class 'nltk.probability.FreqDist」であり、単語の頻度分布が含まれています。