获取大于1的值在字典中出现的次数



我正在使用字典,试图找到1以上的所有值(文本中单词的重复),并使用此函数将它们存储到列表中:

def get_repetitions(text):
n_grams_lengths = [1,2,3,4,5,6]
ngrams_count = {}
for n in n_grams_lengths:
ngrams = tuple(nltk.ngrams(text.split(' '), n=n))
ngrams_count.update({' '.join(i) : ngrams.count(i) for i in ngrams})
reps_list = []            
reps_variables = {values for (values) in ngrams_count.values() if values > 1}
reps_list.append(reps_variables)
return reps_list

然而,当我这样做时,我得到的是在字典中找到的值的列表,而不是它们出现的次数。我要怎么得到这个?同时,输入值"2"在字典中出现了3次,而值"5"出现了4次,有没有办法得到这样的东西:2,2,2,5,5,5,5?

如果'text'被设置为某个str值,包含一些文本,则:

text=text.split()
result={i:text.count(i) for i in text if text.count(i)>1}

但是,默认情况下str.split()将用任何空白字符分隔字符串。根据文本的不同,这可能不像人们希望的那样准确。

如果您有一个字典,其中单词作为键,其出现次数的数字作为值,则第二个问题的解决方案可以如下所示:

result=' '.join(word for word in dictionary for _ in range(dictionary[word]))

您的问题是您已经有了一个包含单词及其频率的字典,但是您只是提取单词本身,而忽略了频率。相反,你只需要过滤ngrams_count:

ngrams_count = {"car": 5, "bob": 1, "foo": 3}
reps_variables = dict(filter(lambda elem: elem[1] > 1, ngrams_count.items()))
reps_variables
>>> {"car": 5, "foo": 3}

那么,对于你问题的第二部分,我们可以这样做:

frequencies = itertools.chain(*[[k] * v for k, v in reps_variables.items()])
frequencies
>>> ["car", "car", "car", "car", "car", "foo", "foo", "foo"]

相关内容

  • 没有找到相关文章

最新更新