我来自Java / C,并且正在尝试行理解。我有以下代码,但似乎无法获得等效的行理解。
stop_words = set(nltk.corpus.stopwords.words('english'))
tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize(text)
token_map = {}
for token in tokens:
token = token.lower()
if english_dict.check(token):
if token not in stop_words:
if token in token_map:
token_map[token] += 1
else:
token_map[token] = 1
sorted_map = sorted(token_map.items(), key=operator.itemgetter(1))
return sorted_map
答案 0 :(得分:1)
您可以将token_map = {}
之后的所有内容替换为:
return Counter(token for token in map(str.lower, tokens)
if english_dict.check(token)
if token not in stop_words
).most_common()
将此导入添加到文件顶部:
from collections import Counter
答案 1 :(得分:0)
您可以这样做:
tokens = tuple(map(str.lower,tokens))
token_map = {token: tokens.count(token)
for token in set(tokens)
if english_dict.check(token) and token not in stop_words}
sorted_map = sorted(token_map.items(), key=operator.itemgetter(1))
编辑:
我的答案是您想要的,但是如果您想要更快更好的解决方案,请参阅@AlexHall答案。