Понимание списка Python для словарей - PullRequest
0 голосов
/ 02 июля 2018

Я прихожу из 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

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Вы можете сделать это как:

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))

Edit:

Мой ответ был о том, что вы хотите, но если вы хотите более быстрое и лучшее решение, смотрите ответ @AlexHall.

0 голосов
/ 02 июля 2018

Вы можете заменить все, начиная с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...