Fréquence de comptage des mots dans une liste et de les trier par fréquence
Je suis à l'aide de Python 3.3
J'ai besoin de créer deux listes, l'une pour les mots et l'autre pour les fréquences de la parole.
Je dois l'unique liste de mots basé sur les fréquences de la liste, de sorte que la parole avec la fréquence la plus élevée est le premier dans la liste.
J'ai de la conception dans le texte, mais je suis pas sûr de savoir comment l'implémenter en Python.
Les méthodes que j'ai trouvé jusqu'à présent d'utiliser soit Counter
ou les dictionnaires que nous n'avons pas appris. J'ai déjà créé la liste à partir du fichier contenant tous les mots, mais ne savez pas comment trouver la fréquence de chaque mot dans la liste. Je sais que j'ai besoin d'une boucle pour le faire, mais ne peut pas le comprendre.
Voici le dessin de base:
original list = ["the", "car",....]
newlst = []
frequency = []
for word in the original list
if word not in newlst:
newlst.append(word)
set frequency = 1
else
increase the frequency
sort newlst based on frequency list
- il est difficile pour nous de savoir ce que vous savez. Avez-vous appris
set
? lecount
méthode de listes? etc. Lié le problème dans les termes significatifs. - Pourquoi n'êtes-vous pas autorisés à utiliser des choses que vous n'avez pas été enseigné? Est d'apprendre à l'avance découragé ces jours-ci?
- Trie serait assez alternative efficace. Vous pouvez en construire un avec des listes
- Veuillez envisager d'accepter une réponse.
Vous devez vous connecter pour publier un commentaire.
utiliser cette
Vous pouvez utiliser
Il prend en charge Python 2.7,lire plus d'informations ici
1.
utiliser dict
Mais, Vous avez qu'à lire le premier fichier, et converti dict.
2.
c'est le python docs exemple,l'utilisation de re et de Contre
Counter
. Vous jeter inutilement loin du compte quand vous neset(words)
, alors à chaque fois que vous en avez besoin le nombre de comptes que vous avez à regarder avecwords.count(word)
, qui sera inefficace esp. pour les grands textes.Vous pouvez utiliser de réduire() - Une façon fonctionnelle.
retourne:
Encore une autre solution avec un autre algorithme, sans l'aide de collections:
Un autre moyen serait de faire une liste de listes, chaque sous-liste dans la nouvelle liste contenant un mot et un count:
Ou, de manière plus efficace:
Ce serait moins efficace que l'utilisation d'un dictionnaire, mais il utilise des concepts plus fondamentaux.
À l'aide de Compteur serait le meilleur moyen, mais si vous ne voulez pas le faire, vous pouvez la mettre en œuvre vous-même de cette façon.
freq va se retrouver avec la fréquence de chaque mot dans la liste que vous avez déjà.
Vous avez besoin
float
là-bas pour convertir l'une des entiers d'un flotteur, de sorte que la valeur résultante sera un flotteur.Edit:
Si vous ne pouvez pas utiliser un dictionnaire ou d'un ensemble, voici une autre voie moins efficace:
La indicies de
unique_words
etword_frequencies
sera à la hauteur.L'idéal est d'utiliser un dictionnaire de cartes en un mot, c'est compter. Mais si vous ne pouvez pas l'utiliser, vous pouvez utiliser les 2 listes - 1 de stocker les mots, et de l'autre un stockage des comtes de mots. Notez que l'ordre des mots et compte les questions ici. La mise en œuvre de ce serait dur et pas très efficace.
Pandas réponse:
Si vous voulait dans l'ordre croissant au lieu de cela, c'est aussi simple que:
Essayez ceci:
Voici le code à votre question
is_char() case pour valider la chaîne de compter ces chaînes seul, Hashmap est dictionnaire en python
la meilleure chose à faire est de :
puis essayez de :
wordListToFreqDict(originallist)