您在列表中附加了一个元组:
list_words.append(("foo", "bar", "tiger"))
因为您拆分text
为单个单词,所以永远不会有一个包含三个单词的元组words
for which w in list_words
is True
。因此,您声称您的计数达到 70.000 的说法是不正确的,如图所示,代码只会给您一个空list_words2
字典。
直接定义列表即可:
list_words = ["foo", "bar", "tiger"]
或者更好的是,使用 aset
进行快速成员资格测试:
set_words = {"foo", "bar", "tiger"}
如果您改用以下代码,您的代码将更容易阅读collections.Counter()
:
from collections import Counter
set_words = {"foo", "bar", "tiger"}
for text in posts:
list_words2 = Counter(word for word in text.split() if word in set_words)
print list_words2
使用真实代码更新您更改的问题:
您正在tags3
使用新的标记词更新列表,方法是在不清除列表的情况下附加它们。随着你的每一次text
处理,你都会tags3
增长,但是你会tags3
从一开始就处理你循环中的每次迭代。你的 70.000 是一个阶乘数;首先你处理 400 个标记,然后你处理另外 300 个标签,总共 700 个,然后你处理 100 个额外的单词,所以现在你循环超过tags
800 次,等等。
清楚,tags3
为了避免这个问题(例如tags3 = []
在循环内),或者更好的是,直接循环tags
并且根本不附加:
for text in posts:
words = wordpunct_tokenize (text)
tags = nltk.pos_tag (words)
list_tags = Counter(b for a, b in tags if b in tags_list)
print list_tags
请确保它tags_list
确实是一个集合,否则b in tags_list
测试必须循环遍历tags_list
每个标签的元素。