下面的代码应该创建一个频率分布(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
这是没有道理给我。
我不明白为什么我会重置它,因为它的对象中分离出来。 难道我做错了什么?