我有一个标记化文本句子列表(youtube评论):
sample_tok = [['How', 'does', 'it', 'call', 'them', '?', '\xef\xbb\xbf'],
['Thats', 'smart\xef\xbb\xbf'],
... # and sooo on.....
['1:45', ':', 'O', '\xef\xbb\xbf']]
现在我想制作一本字典,其中包含提及它们的次数。
from collections import Counter
d = Counter()
for sent in [sample_tok]:
for words in sent:
d = Counter(words)
不幸的是,这只计算了最后一个子列表......
[(':', 1), ('1:45', 1), ('\xef\xbb\xbf', 1), ('O', 1)]
有没有办法让它计算所有标记化的句子?
答案 0 :(得分:2)
您可以使用Counter实例的update
方法。这会计算传递的值并将它们添加到计数器中。
d = Counter()
for sent in [sample_tok]:
for words in sent:
d.update(words)
或者您可以将旧计数器添加到旧计数器中:
d = Counter()
for sent in [sample_tok]:
for words in sent:
d += Counter(words)
答案 1 :(得分:2)
您替换您的计数器,而不是更新它。每次在循环中生成一个新的Counter()
实例,丢弃以前的副本。
将嵌套生成器表达式中的每个单词传递给Counter()
:
d = Counter(word for sublist in sample_tok for word in sublist)
或者,如果您需要先以某种方式处理每个子列表,请使用Counter.update()
:
d = Counter()
for sent in [sample_tok]:
for words in sent:
d.update(words)