-1

我来自 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
4

2 回答 2

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
于 2018-07-02T09:30:49.770 回答
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 答案。

于 2018-07-02T09:34:04.867 回答