Python中的堆法则

Python中的堆法则,python,Python,我试图为给定的文本绘制堆定律(它显示了词汇大小随文本长度的增长)。也就是说,对于每个标记,我需要文本的长度和给定标记的词汇表大小 我已经标记了我的文本,但是我被卡住了,因为我不知道如何迭代文本中的所有单词 tokens=nltk.wordpunct_tokenize(text) it=len(tokens) i=1 for word in tokens: print len(tokens), len(set(tokens)) i=i+1 if i>it:

我试图为给定的文本绘制堆定律(它显示了词汇大小随文本长度的增长)。也就是说,对于每个标记,我需要文本的长度和给定标记的词汇表大小

我已经标记了我的文本,但是我被卡住了,因为我不知道如何迭代文本中的所有单词

tokens=nltk.wordpunct_tokenize(text)
it=len(tokens)
i=1
for word in tokens:
    print len(tokens), len(set(tokens))
    i=i+1
    if i>it:
        break
我基本上需要在每次迭代中使文本增长1个标记。
谢谢你的帮助

令牌
是一个由NLTK填充一次的数组。它不会随着迭代而增长,因此
len(令牌)
在每次迭代中都是相同的。因为您已经在
i
中累积了计数。用它代替
len(代币)

对于唯一计数,您也有相同的问题<代码>集合(令牌)始终是完整的集合,而不是您到目前为止所遍历的集合。您需要在运行时积累一组已知单词:

i = 0
words = set()
for word in tokens:
    words.add(word)
    i += 1
    print i, len(words)

编辑:傻,我忘了枚举。请参阅Dvir Volk的答案,了解如何避免显式计算
i

令牌是一个由NLTK填充一次的数组。它不会随着迭代而增长,因此
len(令牌)
在每次迭代中都是相同的。因为您已经在
i
中累积了计数。用它代替
len(代币)

对于唯一计数,您也有相同的问题<代码>集合(令牌)
始终是完整的集合,而不是您到目前为止所遍历的集合。您需要在运行时积累一组已知单词:

i = 0
words = set()
for word in tokens:
    words.add(word)
    i += 1
    print i, len(words)

编辑:傻,我忘了枚举。请参阅Dvir Volk的答案,了解如何避免显式计算
i

有关令牌中的单词:
满足您的所有需要。您不需要计数和中断-循环将在所有令牌用完后终止。
在循环内部,您应该检查
word
变量,并执行您想要的任何计数操作。

如果要计算不同的单词,可以使用
set(tokens)


一个集合只能包含同一个单词一次,因此
len(set(tokens))
是不同单词的数量。您也可以在集合上创建(
用于集合中的word(令牌):

用于集合中的word:
完成所有需要的操作。您不需要计数和中断-循环将在所有令牌耗尽后终止。
在循环内部,您应该检查
word
变量,并执行您想要的任何计数操作。

如果要计算不同的单词,可以使用
set(tokens)


一个集合可以只包含同一个单词一次,因此
len(set(tokens))
是不同单词的数量。您也可以在集合上创建(
对于集合中的单词(tokens):

您可以使用
枚举
避免增加计数器:

uniq = set()

for i, token in enumerate(tokens):
    uniq.add(token)
    print "%d => %d" % (i, len(uniq))

您可以使用
枚举
来避免增加计数器:

uniq = set()

for i, token in enumerate(tokens):
    uniq.add(token)
    print "%d => %d" % (i, len(uniq))