我已经完成了大多数常用单词的计数器,只按顺序保留列表中最常用的128个单词:
words = my_list
mcommon_words = [word for word, word_count in Counter(words).most_common(128)]
my_list = [x for x in my_list if x in mcommon_words]
my_list = OrderedDict.fromkeys(my_list)
my_list = list(my_list.keys())
但现在我想以同样的方式计算128个不常见的单词。更快的解决方案也会对我有所帮助
答案 0 :(得分:2)
most_common
将单词及其计数作为元组列表返回。此外,if no argument is given, it returns all the words。
该方法返回列表这一事实意味着您可以使用切片来获取第一个和最后一个n
元素。
演示:
l = list("asadfabsdfasodfjoasdffsafdsa")
sorted_items = [w for w, _ in Counter(l).most_common()]
print(sorted_items[:2]) ## Print top 2 items
print(sorted_items[-2:]) ## Print last 2 items
答案 1 :(得分:1)
您可以尝试以下方法:
from collections import Counter
def common_words(words, number_of_words, reverse=False):
counter = Counter(words)
return sorted(counter, key = counter.get, reverse=reverse)[:number_of_words]
这里我们确保Counter字典按其值排序。排序后,我们返回最少的单词。这是一个测试示例:
words = []
for i,num in enumerate('one two three four five six seven eight nine ten'.split()):
words.extend([num]*(i+1))
print(common_words(words,5))
此示例从您的单词列表中获得了5个最常用的单词。
结果:
['one', 'two', 'three', 'four', 'five']
我们也可以得到最常用的词语:
print(common_words(words,5, reverse=True))
结果:
['ten', 'nine', 'eight', 'seven', 'six']