我有这段代码,想知道是否有任何内置方法可以更快地完成它?
Words 有一个简单的标记化字符串输入。
freq_unigrams = nltk.FreqDist(words)
unigram_list = []
count = 0
for x in freq_unigrams.keys():
unigram_list.append(x)
count+=1
if count >= 1000:
break
我有这段代码,想知道是否有任何内置方法可以更快地完成它?
Words 有一个简单的标记化字符串输入。
freq_unigrams = nltk.FreqDist(words)
unigram_list = []
count = 0
for x in freq_unigrams.keys():
unigram_list.append(x)
count+=1
if count >= 1000:
break
是否freq_unigrams.keys()
返回列表?如果是这样,以下情况如何:
unigram_list = freq_unigrams.keys()[:1000]
这为您提供了一个包含 的前 1000 个元素的列表freq_unigrams.keys()
,没有循环。
我建议:
unigram_list = freq_unigrams.keys()
unigram_list[:] = unigram_list[:1000]
这不会使副本:unigram_list = freq_unigrams.keys()[:1000]
确实。
尽管使用迭代器可能会更好:
from itertools import islice
unigram_list[:] = islice(freq_unigrams.iterkeys(),1000)
如果您的意图是获得列表中最常见的 1000 个单词,words
您可以尝试:
import collections
# get top words and their frequencies
most_common = collections.Counter(words).most_common(1000)
这在理论上更有效:
import itertools
unigram_list = list(itertools.islice(freq_unigrams.iterkeys(), 1000))
...而不是工作freq_unigrams.keys()
,因为您只对top 1000感兴趣,而不是剩余的x, usingfreq_unigrams.keys()
也需要在中间填充list
。
**有一点晚...
获取字典中的前 1000 个键并将它们分配给一个新列表:
unigram_list = freq_unigrams.keys()[:1000]