次のコードは、度数分布 (nltk.FreqDist) の新しい (変更された) バージョンを作成することになっています。両方の変数は同じ長さでなければなりません。
WebText の単一のインスタンスが作成されると、正常に機能します。しかし、複数の WebText インスタンスが作成されると、新しい変数はすべてのオブジェクトで共有されているように見えます。
例えば:
import nltk
from operator import itemgetter
class WebText:
freq_dist_weighted = {}
def __init__(self, text):
tokens = nltk.wordpunct_tokenize(text) #tokenize
word_count = len(tokens)
freq_dist = nltk.FreqDist(tokens)
for word,frequency in freq_dist.iteritems():
self.freq_dist_weighted[word] = frequency/word_count*frequency
print len(freq_dist), len(self.freq_dist_weighted)
text1 = WebText("this is a test")
text2 = WebText("this is another test")
text3 = WebText("a final sentence")
結果は
4 4
4 5
3 7
これは正しくありません。値を転置して変更しているだけなので、各列には同じ数値が含まれているはずです。ループの直前に freq_dist_weighted をリセットすると、正常に動作します。
import nltk
from operator import itemgetter
class WebText:
freq_dist_weighted = {}
def __init__(self, text):
tokens = nltk.wordpunct_tokenize(text) #tokenize
word_count = len(tokens)
freq_dist = nltk.FreqDist(tokens)
self.freq_dist_weighted = {}
for word,frequency in freq_dist.iteritems():
self.freq_dist_weighted[word] = frequency/word_count*frequency
print len(freq_dist), len(self.freq_dist_weighted)
text1 = WebText("this is a test")
text2 = WebText("this is another test")
text3 = WebText("a final sentence")
結果は(正しい):
4 4
4 4
3 3
これは私には意味がありません。
オブジェクト内で分離されているため、リセットする必要がある理由がわかりません。私は何か間違ったことをしていますか?