0

我有这段代码,想知道是否有任何内置方法可以更快地完成它?

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
4

5 回答 5

4

是否freq_unigrams.keys()返回列表?如果是这样,以下情况如何:

unigram_list = freq_unigrams.keys()[:1000]

这为您提供了一个包含 的前 1000 个元素的列表freq_unigrams.keys(),没有循环。

于 2012-11-22T01:57:42.657 回答
1

我建议:

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)
于 2012-11-22T02:53:27.013 回答
1

如果您的意图是获得列表中最常见的 1000 个单词,words您可以尝试:

import collections

# get top words and their frequencies
most_common = collections.Counter(words).most_common(1000)
于 2012-11-22T03:26:35.663 回答
1

这在理论上更有效:

import itertools
unigram_list = list(itertools.islice(freq_unigrams.iterkeys(), 1000))

...而不是工作freq_unigrams.keys(),因为您只对top 1000感兴趣,而不是剩余的x, usingfreq_unigrams.keys()也需要在中间填充list

于 2012-11-22T03:42:17.937 回答
0

**有一点晚...

获取字典中的前 1000 个键并将它们分配给一个新列表:

unigram_list = freq_unigrams.keys()[:1000]
于 2012-11-22T02:02:21.890 回答