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