2
votes

Comment compter les 10 mots les plus courants dans plusieurs listes de mots tokenisés

J'ai un ensemble de données avec beaucoup de listes de listes de mots symboliques. par exemple:

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

J'ai environ 40 000 listes comme celles-ci, et je veux compter les 10 mots les plus courants de toutes les 40 000 listes ensemble.

Tout le monde en a idée?


0 commentaires

3 Réponses :


4
votes

Vous pouvez aplatir la liste imbriquée avec itertools.chain et prenez les mots les plus courants en utilisant Counter et sa méthode 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 commentaires

0
votes

une solution utilisant le dictionnaire

[('tomato', 2), ('apple', 1), ('banana', 1), ('tree', 1), ('pikachu', 1)]

Sortie

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


1 commentaires

l'utilisation d'un defaultdict (int) pourrait rendre cela un peu plus facile aussi (voir 3ème exemple)



0
votes

Je suggère de fusionner vos listes en une seule liste, par exemple

from collections import Counter
counter_of_flat_list = Counter(flat_list)

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

Ensuite, utilisez Counter pour calculer vos jetons et ne choisissez que les 10 premiers

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

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

[('tomate', 2), ('pomme', 1), ('banane', 1), ('arbre', 1), ('pikachu', 1)]

p>


0 commentaires