您附加一個元組到您的列表:
list_words.append(("foo", "bar", "tiger"))
因爲拆分text
爲單個單詞,就會有永遠在words
用三個詞的元組針對w in list_words
是True
。因此,您聲稱您的計數高達70.000不能成立,代碼(如圖所示)只會給您一個空的list_words2
字典。
只需直接定義列表:
list_words = ["foo", "bar", "tiger"]
或者更好的是,使用set
快速成員測試:
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
eleme每個標籤都有自己的標籤。
所以神祕的是它是如何計數70000次發生的 –
+1只是因爲我沒有意識到'collections.Counter'。 – zwol
@gnibbler:到那裏,表明有問題的代碼不能**可能**添加一個計數器達70,000。 –