Как подсчитать 10 самых распространенных слов в нескольких списках токенизированных слов - PullRequest
2 голосов
/ 15 мая 2019

У меня есть набор данных с большим количеством списков списков токенизированных слов. например:

['apple','banana','tomato']
['tomato','tree','pikachu']

У меня около 40 тыс. Списков, подобных этим, и я хочу сосчитать 10 самых распространенных слов из всех 40 тыс. Списков вместе.

У кого-нибудь есть идеи?

Ответы [ 3 ]

4 голосов
/ 15 мая 2019

Вы можете сгладить вложенный список с помощью itertools.chain и взять самые распространенные слова, используя Counter и метод most_common:

from itertools import chain
from collections import Counter

l = ['apple','banana','tomato'],['tomato','tree','pikachu']

Counter(chain(*l)).most_common(10)
# [('tomato', 2), ('apple', 1), ('banana', 1), ('tree', 1), ('pikachu', 1)]
0 голосов
/ 15 мая 2019

Я предлагаю объединить ваши списки в один список, например

list_of_lists = [['apple','banana','tomato'],['tomato','tree','pikachu']]

import itertools
flat_list = list(itertools.chain(*list_of_lists))

Затем используйте Счетчик, чтобы вычислить ваши токены и выбрать только 10

.
from collections import Counter
counter_of_flat_list = Counter(flat_list)

print(counter_of_flat_list.most_common(10)) # print top 10

[(«помидор», 2), («яблоко», 1), («банан», 1), («дерево», 1), («пикачу», 1)]

0 голосов
/ 15 мая 2019

решение с использованием словаря

arrays = [['apple','banana','tomato'],['tomato','tree','pikachu']]
d = dict()
for array in arrays:
    for item in array:
        if item in d:
            d[item] += 1
        else:
            d[item] = 1
print(sorted( ((v,k) for k,v in d.items()), reverse=True)[:10])

выход

[('tomato', 2), ('apple', 1), ('banana', 1), ('tree', 1), ('pikachu', 1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...