按多个条件从列表中过滤标记
Filtering tokens from a list by multiple conditions
我想根据以下条件从列表中提交一些标记。
1) token长度大于5
2)出现频率(原文)大于100
我使用了下面的代码
#token_list is a list object containing tokenized words from raw text
from collections import Counter
c = Counter(token_list)
selected_tokens = [word for word in token_list if len(word) > 5 and c.item[2] > 100]
selected_tokens
但是好像看不懂。我相信错误来自 'c.item[2]' 但不太了解 'Counter()' 命令背后的机制。
如果有人能启发我,我将不胜感激。
谢谢。
有人说 filter
吗?
selected_tokens = list(filter(lambda x: len(x) > 5 and c[x] > 100, token_list))
此外,您还可以使用 c[...]
访问计数器计数。此外,您可能需要警惕大小写问题(同一个词出现在不同的大小写中)。
如果你想要速度,请改用列表理解:
selected_tokens = [x for x in token_list if len(x) > 5 and c[x] > 100]
如果您希望获得满足您的条件且没有不需要的重复的单词,请使用 set
而不是一组:
token_set = set(token_list)
selected_tokens = [x for x in token_set if if len(x) > 5 and c[x] > 100]
当心,订单丢失了。如果您想要没有重复的订单,请使用 OrderedDict
(python < 3.6 或 dict
(python >= 3.6)。
dict_ = OrderedDict()
for t in token_list:
dict_[t] = None
selected_tokens = [x for x in dict_ if len(x) > 5 and c[x] > 100]
如果 dict
做不到,您可以查看 OrderedSet
配方并实现相同的效果:
token_set = OrderedSet(token_list)
selected_tokens = [x for x in token_set if ...] # as usual
我想根据以下条件从列表中提交一些标记。 1) token长度大于5 2)出现频率(原文)大于100
我使用了下面的代码
#token_list is a list object containing tokenized words from raw text
from collections import Counter
c = Counter(token_list)
selected_tokens = [word for word in token_list if len(word) > 5 and c.item[2] > 100]
selected_tokens
但是好像看不懂。我相信错误来自 'c.item[2]' 但不太了解 'Counter()' 命令背后的机制。
如果有人能启发我,我将不胜感激。
谢谢。
有人说 filter
吗?
selected_tokens = list(filter(lambda x: len(x) > 5 and c[x] > 100, token_list))
此外,您还可以使用 c[...]
访问计数器计数。此外,您可能需要警惕大小写问题(同一个词出现在不同的大小写中)。
如果你想要速度,请改用列表理解:
selected_tokens = [x for x in token_list if len(x) > 5 and c[x] > 100]
如果您希望获得满足您的条件且没有不需要的重复的单词,请使用 set
而不是一组:
token_set = set(token_list)
selected_tokens = [x for x in token_set if if len(x) > 5 and c[x] > 100]
当心,订单丢失了。如果您想要没有重复的订单,请使用 OrderedDict
(python < 3.6 或 dict
(python >= 3.6)。
dict_ = OrderedDict()
for t in token_list:
dict_[t] = None
selected_tokens = [x for x in dict_ if len(x) > 5 and c[x] > 100]
如果 dict
做不到,您可以查看 OrderedSet
配方并实现相同的效果:
token_set = OrderedSet(token_list)
selected_tokens = [x for x in token_set if ...] # as usual