Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.

J'ai joué avec Mecab et je l'ai trouvé quand je pensais que ça allait, alors prenez une note.

Cela peut être du texte ou CSV, mais je pense qu'il est rare que vous souhaitiez écrire du code qui compte la fréquence d'occurrence de chaque élément dans une liste qui a des doublons. Si vous l'implémentez docilement à l'aide d'un dictionnaire


data = ['aaa', 'bbb', 'ccc', 'aaa', 'ddd']

word_and_counts = {}
for word in data:
    if word_and_counts.has_key(word):
        word_and_counts[word] += 1
    else:
        word_and_counts[word] = 1
for w, c in sorted(word_and_counts.iteritems(), key=lambda x: x[1], reverse=True):
    print w, c  # =>
                #   aaa 2
                #   bbb 1
                #   ccc 1
                #   ddd 1

Je pense que ce sera comme ça.

Dans un tel cas, le module collections est pratique. Réimplémentez-le donc à l'aide de collections.Counter.

from collections import Counter

data = ['aaa', 'bbb', 'ccc', 'aaa', 'ddd']
counter = Counter(data)
for word, cnt in counter.most_common():
    print word, cnt # =>
                    #   aaa 2
                    #   bbb 1
                    #   ccc 1
                    #   ddd 1

J'ai pu le mettre en œuvre de manière concise. De plus, il semble être tôt car il est intégré. En outre, Counter a divers autres opérateurs et méthodes pratiques.

from collections import Counter

dataA = ['aaa', 'bbb', 'ccc', 'aaa', 'ddd']
dataB = ['aaa', 'bbb', 'bbb', 'bbb', 'abc']

counterA = Counter(dataA)
counterB = Counter(dataB)

counter = counterA + counterB  #La fréquence peut être ajoutée
counterA.subtract(counterB)  #Faire la différence entre les éléments (méthode destructive)
counter.most_common(3)  #Obtenez les 3 premiers éléments (comme dans l'exemple ci-dessus, si vous omettez l'omission de l'argument n, vous obtenez tous les éléments dans l'ordre décroissant)
#Quelques autres

Tout objet qui peut être haché est bien, alors peut-être y a-t-il d'autres bonnes utilisations?

En outre, le module collections a quelques classes utiles qui semblent bonnes, donc je pense qu'il est parfois utile de le lire une fois.

Enfin, en utilisant Counter, le code que j'ai essayé Mecab dans l'historique des tweets du Twitter téléchargé ressemble à ce qui suit.

# -*- coding: utf-8 -*-

from collections import Counter
import codecs
import json

import MeCab


#J'ai le sentiment d'un mauvais savoir-faire, mais je souhaite rediriger le résultat de sortie
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

#codecs renvoie unicode
#Il y a une description supplémentaire sur la première ligne et c'est un code de test fastidieux et c'est gênant alors supprimons-le à l'avance
_tweetfile = codecs.open('./data/js/tweets/2013_09.js', 'r', 'sjis')
tweets = json.load(_tweetfile)
#Mecab n'accepte que le type str, donc encodez
texts = (tw['text'].encode('utf-8') for tw in tweets)

tagger = MeCab.Tagger('-Ochasen')
counter = Counter()
for text in texts:
    nodes = tagger.parseToNode(text)
    while nodes:
        if nodes.feature.split(',')[0] == 'nom':
            word = nodes.surface.decode('utf-8')
            counter[word] += 1
        nodes = nodes.next
for word, cnt in counter.most_common():
    print word, cnt

La partie qui distingue s'il s'agit d'une nomenclature est terne, ou le symbole est inséré, mais il est passé à un bon sentiment pour le moment. Je suis heureux.


J'ai rassemblé ces astuces, donc si cela ne vous dérange pas, s'il vous plaît (Idiomes fréquents qui rendent le code Python un peu plus propre juste en s'en souvenant)

Recommended Posts

Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
Si vous souhaitez affecter une exportation csv à une variable en python
Que faire si vous ne pouvez pas utiliser la recherche de grille de sklearn en Python
Utilisez PIL en Python pour extraire uniquement les données souhaitées d'Exif
Si vous voulez créer un bot discord avec python, utilisons un framework
Si vous souhaitez utiliser Cython, incluez également python-dev
Je veux utiliser le jeu de données R avec python
[Route vers Python intermédiaire] Utiliser l'instruction if dans la notation d'inclusion de liste
Si vous souhaitez que vos collègues utilisent la même langue
Un mémo de fonction utile lorsque vous souhaitez entrer dans le débogueur si une erreur se produit lorsque vous exécutez un script Python.
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
Voulez-vous attendre un usage général avec Python Selenium?
N'écrivez pas Python si vous voulez l'accélérer avec Python
Que faire si vous obtenez moins zéro en Python
Je veux savoir si vous installez Python sur Mac ・ Iroha
Indispensable si vous utilisez Python! Comment utiliser Numpy pour accélérer les calculs!
Vérifiez si vous pouvez vous connecter à un port TCP en Python
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Si vous écrivez un test piloté par table go en python, il peut être préférable d'utiliser subTest
[Introduction à Python] Comment utiliser la classe en Python?
Je veux utiliser jar de python
Un moyen simple d'utiliser Wikipedia avec Python
Comment utiliser __slots__ dans la classe Python
Comment utiliser les expressions régulières en Python
Comment utiliser is et == en Python
Si vous voulez un singleton en python, considérez le module comme un singleton
Si vous souhaitez inclure awsebcli dans CircleCI, spécifiez la version de python
Si vous souhaitez utiliser NumPy, Pandas, Matplotlib, IPython, SciPy sous Windows
[Python] Si vous souhaitez dessiner un diagramme de dispersion de plusieurs clusters
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
Ajouter des mots au dictionnaire utilisateur de MeCab sur Ubuntu pour une utilisation en Python
Comment utiliser la bibliothèque C en Python
Je veux faire le test de Dunnett en Python
Comment créer un environnement lorsque vous souhaitez utiliser python2.7 après l'installation d'Anaconda3
Je veux utiliser MATLAB feval avec python
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je veux créer une fenêtre avec Python
Comment utiliser la bibliothèque d'images Python dans la série python3
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Si vous souhaitez créer Word Cloud.
Résumé de l'utilisation de MNIST avec Python
Il est pratique d'utiliser stac_info et exc_info lorsque vous souhaitez afficher la traceback dans la sortie du journal par journalisation.
Je veux fusionner des dictionnaires imbriqués en Python
Utilisez un module de cryptographie qui gère OpenSSL en Python
Je souhaite utiliser le répertoire temporaire avec Python2
Je veux utiliser le solveur ceres de python
Comment utiliser tkinter avec python dans pyenv
Que faire si vous obtenez «Python non configuré». Utilisation de PyDev dans Eclipse
Si vous utilisez la fonction de tracé de Pandas en Python, elle est vraiment transparente du traitement des données à la création de graphiques
Je veux afficher la progression en Python!
Vous devez savoir si vous utilisez Python! 10 bibliothèques utiles
Utilisez os.getenv pour obtenir des variables d'environnement en Python
Que faire quand "Aucun noyau pour le langage python trouvé" apparaît dans Hydrogen
Je souhaite utiliser une source de données python dans Re: Dash pour obtenir les résultats de la requête.