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]

freq_unigrams.keys()これにより、ループなしで の最初の 1000 個の要素を含むリストが得られます。

于 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))

...作業中よりも、上位 1000freq_unigrams.keys()のみに関心があり、残りのxには関心がないため、中間に入力する必要もあります。freq_unigrams.keys()list

于 2012-11-22T03:42:17.937 に答える
0

**少し遅れて...

辞書の最初の 1000 個のキーを取得して新しいリストに割り当てるには:

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