Récemment, mon responsable m'a confié la tâche de compter le nombre d'occurrences de chaque mot dans un fichier et de répertorier les cinq mots les plus fréquents. Cet article vous apporte une analyse de l'idée de compter le nombre de mots en Python. Les amis qui en ont besoin peuvent s'y référer
1. Écrire des fichiers
Pour lire et écrire des fichiers en python, vous pouvez utiliser la fonction intégrée open(), et la fonction open présente certaines différences entre python2 et python3. Par exemple, en Python, vous. peut spécifier le format d'encodage pour la lecture et l'écriture des fichiers. Cela n'est pas possible avec Python. Afin d'être compatible avec 2 et 3, nous utilisons généralement la fonction open sous le module io. entre eux, et cultiver les capacités d’apprentissage actif et l’habitude de vérifier les informations. Un autre point est que le descripteur de fichier doit être fermé après la lecture et l'écriture du fichier. En plus d'utiliser la syntaxe try...sauf...finally, nous pouvons également utiliser la syntaxe plus élégante with.. .as syntaxe pour fermer automatiquement le fichier.2. Comment trier les données
La fonction triée est une fonction intégrée fréquemment utilisée, et son utilisation est également très puissante car elle peut spécifier des paramètres clés pour effectuer un tri personnalisé, ce qui signifie que vous pouvez non seulement trier les chiffres et les lettres, mais également trier les listes, les dictionnaires et les objets personnalisés. Il vous suffit d'indiquer à la fonction triée quelles sont les règles de tri, par exemple Pour un objet personne, je peux. triez-le par âge ou par taille et poids, cette fonction est donc très flexible. De plus, il existe une méthode de tri intégrée pour les objets de liste. Si vous pouvez clairement distinguer la différence entre list.sort et sorted, cela signifie que vous pouvez déjà l'utiliser. avec souplesse.3. Utilisation du type de données du dictionnaire
Pour faire des statistiques de fréquence des mots, l'utilisation d'un dictionnaire est sans aucun doute le type de données le plus approprié. Les mots sont utilisés comme clés du. dictionnaire, et le nombre de fois qu'un mot apparaît est utilisé comme valeur. Le dictionnaire enregistre commodément la fréquence de chaque mot. Le dictionnaire ressemble beaucoup à notre annuaire téléphonique, chaque nom étant associé à un numéro de téléphone. De plus, la plus grande caractéristique du dictionnaire est que sa vitesse de requête est très rapide. Idéalement, la complexité temporelle est O(1), je veux dire idéalement. Si vous souhaitez en savoir plus sur les dictionnaires, je vous recommande de lire cet article https://www.laurentluce.com/posts/python-dictionary-implementation/.
4. Application des expressions régulières
Pour le traitement de texte et de chaînes, les expressions régulières sont simplement un artefact. Elles sont largement utilisées, que ce soit pour l'exploration ou le nettoyage de données. Bien sûr, les expressions régulières ne sont pas uniques à Python, elles sont prises en charge par tous les langages de programmation. Ce que nous devons faire est non seulement d'apprendre les expressions régulières mais aussi son API. Ce n'est que lorsque nous sommes familiers avec l'API que nous pouvons l'appliquer à des scénarios réels. Je recommande un article sur les expressions régulières : http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html De plus, j'ai également découvert que certains étudiants avaient présenté la bibliothèque de segmentation de mots jieba. La bibliothèque fait la segmentation des mots chinois, c'est très utile. Si vous êtes intéressé, vous pouvez en apprendre davantage.# -*- coding:utf-8 -*- import io import re class Counter: def __init__(self, path): """ :param path: 文件路径 """ self.mapping = dict() with io.open(path, encoding="utf-8") as f: data = f.read() words = [s.lower() for s in re.findall("\w+", data)] for word in words: self.mapping[word] = self.mapping.get(word, 0) + 1 def most_common(self, n): assert n > 0, "n should be large than 0" return sorted(self.mapping.items(), key=lambda item: item[1], reverse=True)[:n] if __name__ == '__main__': most_common_5 = Counter("importthis.txt").most_common(5) for item in most_common_5: print(item)
('est', 10)('mieux', 8)
('que', 8)
('le', 6)
('à', 5)
Résumé
Quand je regarde votre code, de nombreux codes ont encore des noms irréguliers (il est recommandé de lire PEP8), et la disposition du code prête à confusion (il est difficile à lire, il est recommandé de utilisez Pycharm pour le formatage). Il existe également de nombreux codes dont les méthodes d'implémentation semblent très compliquées (plus le code est complexe, plus il contient généralement de bugs). Bien entendu, la méthode de mise en œuvre n’est pas la seule.Par exemple, le module Python lui-même fournit une classe collections.Counter, qui hérite de la classe dict et est utilisée pour les statistiques. J'ai découvert que certains étudiants utilisent cette classe pour l'implémenter. Si vous faites attention, vous la trouverez peut-être. . , le compteur que j'ai implémenté est très similaire au compteur sous collections. En fait, il s'agit d'une création de roues qui peut exercer notre réflexion en matière de programmation. Bien sûr, s'il y a des choses toutes faites au travail, ce n'est pas nécessaire. fabriquer des roues vous-même, à moins que vous ayez la confiance nécessaire pour le faire mieux. Vous pouvez également réfléchir à ce que vous feriez si Python ne fournissait pas l'outil Counter.
De plus, ce module fournit également un objet dictionnaire ordonné OrderedDict, qui peut nous éviter des opérations de tri manuel. Enfin, je vous recommande d’étudier et de résumer tout le contenu que j’ai mentionné ci-dessus. Si vous pouvez persister pendant 100 jours, je pense que vous maîtriserez bien Python.
Recommandations associées :
Python implémente la sortie d'un tableau bidimensionnel en tant que Picture_python
python implémente les attributs d'instance de typage Vérifiez
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!