Maison  >  Article  >  développement back-end  >  Explication détaillée de l'idée de compter le nombre de mots en Python

Explication détaillée de l'idée de compter le nombre de mots en Python

不言
不言original
2018-05-08 16:18:492847parcourir

Cet article présente principalement l'idée détaillée du comptage des mots en Python. L'article vous propose également une solution sans utiliser de modules tiers. Les amis intéressés devraient y jeter un œil

Description du problème :

Utilisez Python pour implémenter la fonction count_words(). Cette fonction saisit une chaîne s et un nombre n, et renvoie les n mots les plus fréquents dans s. . La valeur de retour est une liste de tuples, comprenant les n mots avec les occurrences les plus élevées et leurs heures, c'est-à-dire [(526bd08d921791a57cc4975b68bc9b5b, d064a418e389bbbe138fcf45855a2e14), (dc99e17c04fc532c477fbce6fb3db942,

Vous pouvez supposer que toutes les entrées sont en minuscules et ne contiennent aucun signe de ponctuation ou autre caractère (juste des lettres et un seul espace). S'il y a le même nombre d'occurrences, elles sont classées par ordre alphabétique.

Par exemple :

print count_words("betty bought a bit of butter but the butter was bitter",3)

Sortie :

[('beurre', 2), ( 'a', 1), ('betty', 1)]

Idées pour résoudre le problème :

1 . La chaîne s est divisée par des espaces pour obtenir toutes les listes de mots split_s, telles que : ['betty', 'buyed', 'a', 'bit', 'of', 'butter', 'but', 'the. ', 'butter', 'was', 'bitter']

2. Créez une maplist et convertissez les split_s en une liste de tuples, tels que : [('betty', 1), ('buyed' , 1), ('un', 1), ('un peu', 1), ('de', 1), ('beurre', 1), ('mais', 1), ('le', 1 ) , ('butter', 1), ('was', 1), ('bitter', 1)]

3. Fusionner les éléments de la maplist Si la première valeur d'index du tuple est. la même chose, puis sa deuxième valeur d'indice est ajoutée.

// Remarque : Préparez-vous à utiliser defaultdict. Les données obtenues sont les suivantes : {'betty' : 1, 'acheté' : 1, 'a' : 1, 'bit' : 1, 'of' : 1, 'butter' : 2, 'but' : 1, 'the' : 1, 'was' : 1, 'amer' : 1}

4. Triez par ordre alphabétique par clé et obtenez ce qui suit : [('a', 1), ('betty', 1. ), ('bit', 1), ('amer', 1), ('acheté', 1), ('mais', 1), ('beurre', 2), ('de', 1) , ('le', 1), ('était', 1)]

5. Effectuez un tri secondaire, triez par valeur et obtenez ce qui suit : [('beurre', 2), ('a ' , 1), ('betty', 1), ('bit', 1), ('amer', 1), ('acheté', 1), ('mais', 1), ('de', 1 ), ('the', 1), ('was', 1)]

6. Utilisez le découpage pour extraire des *groupes de données avec une fréquence plus élevée

Résumé : Non disponible sur python3 The les résultats du tri de defaultdict sont également corrects, mais pas corrects sur python2. defaultdict lui-même n'a pas d'ordre pour distinguer la liste, elle doit être triée.

Vous pouvez également essayer de l'écrire vous-même sans utiliser de modules tiers

Solution 1 (utiliser defaultdict) :

from collections import defaultdict
"""Count words."""
def count_words(s, n):
  """Return the n most frequently occuring words in s."""
  split_s = s.split()
  map_list = [(k,1) for k in split_s]
  output = defaultdict(int)
  for d in map_list:
    output[d[0]] += d[1]
  output1 = dict(output)
  top_n = sorted(output1.items(), key=lambda pair:pair[0], reverse=False)
  top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
  return top_n[:n]
def test_run():
  """Test count_words() with some inputs."""
  print(count_words("cat bat mat cat bat cat", 3))
  print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
  test_run()

Solution 2 (Utiliser le compteur)

from collections import Counter
"""Count words."""
def count_words(s, n):
  """Return the n most frequently occuring words in s."""
  split_s = s.split()
  split_s = Counter(name for name in split_s)
  print(split_s)
  top_n = sorted(split_s.items(), key=lambda pair:pair[0], reverse=False)
  print(top_n)
  top_n = sorted(top_n, key=lambda pair:pair[1], reverse=True)
  print(top_n)
  return top_n[:n]
def test_run():
  """Test count_words() with some inputs."""
  print(count_words("cat bat mat cat bat cat", 3))
  print(count_words("betty bought a bit of butter but the butter was bitter", 4))
if __name__ == '__main__':
  test_run()

Recommandations associées :


Implémentation de Python pour calculer pi Exemple de méthode pour transférer la valeur vers n'importe quel bit

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn