Aller au contenu

Nirvana

Utilisateur
  • Compteur de contenus

    8 971
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Nirvana

  1. http://io9.com/5973420/new-edition-of-1984-will-feature-a-censored-blacked-out-cover
  2. Les gars... Putain... ... ....... J'ai réussi ! Il m'a fallu chercher longtemps sur Internet et faire énormément de trial & error, donc si ça se trouve, j'ai codé ça comme un cochon (c'est du Java, vous me direz), mais au moins la consigne est respectée (sauf étourderie). package fr.crim.a2012.freqlist; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class TMFreqList extends AbstractFreqlist{ // Table de hachage contenant mots et fréquences Map<String, Integer> lesTermesFreq = new HashMap<String, Integer>(); // Liste contenant les mots et les fréquences sous forme d'objet MotFreq List<MotFreq> motfreq = new ArrayList<MotFreq>(); public TMFreqList() throws IOException { // Appel du constructeur de la classe abstraite super(); } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { AbstractFreqlist.test(new TMFreqList()); } @Override public void afficheTetes(int n) { //Convertit la table de hachage en liste d'objets MotFreq hashToList(lesTermesFreq); // Tri de la liste MotFreq par les fréquences Collections.sort(motfreq); // Réduction de la taille de la liste for(int i=0; i<n; i++) { MotFreq resultat = motfreq.get(i); System.out.println(resultat); } } // Réécriture ("surcharge") de la méthode mot de la classe abstraite @Override public void mot(String mot) { // Affichage du mot // System.out.println(mot); // Incrémentation de sa fréquence dans la table de hachage ajoutemot(mot); } /** * Ajoute un mot à une table de hachage ou incrémente sa valeur * @param mot */ public void ajoutemot(String mot2) { // Si le mot existe dans la liste if (lesTermesFreq.containsKey(mot2)) { // On récupère son indice (la fréquence du mot) int tempFreq = lesTermesFreq.get(mot2); // On augmente la fréquence de 1 tempFreq++; // On met à jour la valeur dans la table de hachage lesTermesFreq.put(mot2, tempFreq); } // Si le mot n'est pas dans la table, on l'ajoute else { lesTermesFreq.put(mot2, 1); } } /** * A partir d'une table de hachage, remplit une liste d'objets MotFreq */ public void hashToList(Map<String, Integer> uneMap) { // Pour chaque élément de la table de hachage for (Map.Entry<String, Integer> entry : uneMap.entrySet()) { // On récupère le mot String cle = entry.getKey(); // On récupère la fréquence int valeur = entry.getValue(); // Création d'un nouvel objet MotFreq MotFreq couple = new MotFreq(cle, valeur); // Ajout de celui-ci à la liste motfreq motfreq.add(couple); } } } /** * Objet qui contient un mot et sa fréquence * L'interface Comparator permet le tri en fonction des valeurs * */ class MotFreq implements Comparable<MotFreq>{ // Attributs private String denomination; private int occurrence; // Constructeur de la classe MotFreq public MotFreq(String uneDenomination, int uneOccurrence) { setDenomination(uneDenomination); setOccurrence(uneOccurrence); } /* * Méthodes permettant de lire ou de changer * les paramètres des objets de type MotFreq * Utiles pour l'affichage de ces paramètres dans la console * * @return */ public String toString() { return denomination + "\t\t" + occurrence; } public String getDenomination() { return denomination; } public void setDenomination(String denomination) { this.denomination = denomination; } public int getOccurrence() { return occurrence; } public void setOccurrence(int occurrence) { this.occurrence = occurrence; } /* * Comparateur - Sert au tri de la liste d'objets MotFreq */ @Override public int compareTo(MotFreq autreMotFreq) { return - (this.occurrence - autreMotFreq.occurrence); } } Le résultat : Les 20 mots les plus fréquemment rencontrés dans le texte : temps 191 société 160 spectacle 147 histoire 128 pouvoir 112 vie 99 historique 93 monde 92 mouvement 70 production 69 doit 69 classe 67 marchandise 66 économie 64 travail 62 propre 62 sociale 58 conscience 57 révolutionnaire 55 développement 51 (Soit dit en passant, ces mots-clé donnent une certaine idée du texte choisi...)
  3. Nirvana

    Les coQilles des journaux

    Grâce au Parisien, j'ai appris aujourd'hui qu'Asus était une entreprise thailandaise, et que Microsoft allait présenter la semaine prochaine (lol) au CES, à Las Vegas, sa nouvelle console, la "720".
  4. On a la Duflo(t) qu'on mérite.
  5. C'est pas bien de de se moquer de l'autisme.
  6. Je connaissais mais c'est toujours aussi drôle.
  7. Bon, alors. Dans mon programme, je lis un fichier texte, et je fais une table de hachage avec les mots et leurs fréquences. Ca, ça va. J'ai créé une classe comparable MotFreq qui contient un String et un int. J'ai écrit une boucle qui parcourt chaque élément de ma table de hachage et donne le mot et la fréquence (la clé et la valeur). Tout ça, c'est bon. Le problème, c'est quant j'essaie de réinjecter ce mot et cette fréquence dans un nouvel objet MotFreq. Quand j'essaie de les afficher au fur et à mesure de leur création, j'obtiens des dizaines de lignes comme ça : fr.crim.a2012.freqlist.MotFreq@7031dcf0 fr.crim.a2012.freqlist.MotFreq@59a04a1b fr.crim.a2012.freqlist.MotFreq@2a616095 fr.crim.a2012.freqlist.MotFreq@5f0bebef fr.crim.a2012.freqlist.MotFreq@7aec8a9 fr.crim.a2012.freqlist.MotFreq@63f7d32f C'est pas normal, ça, non ? Du coup, je pense que quelque chose merde au niveau de la classe MotFreq elle-même, qu'en pensez-vous ? Voilà mon code : package fr.crim.a2012.freqlist; import java.io.IOException; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class TMFreqList extends AbstractFreqlist{ // Table de hachage contenant mots et fréquences Map<String, Integer> lesTermesFreq = new HashMap<String, Integer>(); /* * Liste contenant des objets MotFreq * (construite à partir de la table de hachage ci-dessus) */ List<MotFreq> motfreq = new ArrayList<MotFreq>(); public TMFreqList() throws IOException { // Appel du constructeur de la classe abstraite super(); } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { AbstractFreqlist.test(new TMFreqList()); } @Override public void afficheTetes(int n) { // Affiche la table de hachage des mots et fréquence System.out.println(lesTermesFreq); //Convertit la table de hachage en liste d'objets MotFreq hashToList(lesTermesFreq); // Affiche la liste des mots et fréquences //System.out.println(motfreq); } // Réécriture ("surcharge") de la méthode mot de la classe abstraite @Override public void mot(String mot) { // Affichage du mot System.out.println(mot); // Incrémentation de sa fréquence dans la table de hachage ajoutemot(mot); } /** * Ajoute un mot à une table de hachage ou incrémente sa valeur * @param mot */ public void ajoutemot(String mot2) { // Si le mot existe dans la liste if (lesTermesFreq.containsKey(mot2)) { // On récupère son indice (la fréquence du mot) int tempFreq = lesTermesFreq.get(mot2); // On augmente la fréquence de 1 tempFreq++; // On met à jour la valeur dans la table de hachage lesTermesFreq.put(mot2, tempFreq); } // Si le mot n'est pas dans la table, on l'ajoute else { lesTermesFreq.put(mot2, 1); } } /** * A partir d'une table de hachage, remplit une liste d'objets MotFreq */ public void hashToList(Map<String, Integer> uneMap) { // Pour chaque élément de la table de hachage for (Map.Entry<String, Integer> entry : uneMap.entrySet()) { // On récupère le mot String cle = entry.getKey(); // On récupère la fréquence int valeur = entry.getValue(); // TEST de la conformité du mot et de la fréquence //System.out.println(cle + " " + valeur); // Création d'un nouvel objet MotFreq MotFreq couple = new MotFreq(cle, valeur); // TEST de la conformité de l'objet MotFreq - PROBLEME ICI System.out.println(couple); // Ajout de celui-ci à la liste motfreq motfreq.add(couple); } } } /** * Objet qui contient un mot et sa fréquence * L'interface Comparator permet le tri en fonction des valeurs * @author ****** * */ class MotFreq implements Comparator { // Attributs private String denomination; private int occurrence; // Constructeur de la classe MotFreq public MotFreq(String uneDenomination, int uneOccurrence) { denomination = uneDenomination; occurrence = uneOccurrence; } @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method stub return 0; } }
  8. Finalement c'est pas si con. J'ai déjà la hashmap et je ne suis pas obligé de réécrire ma méthode. Autant que je fasse ce que tu as dit avec une méthode dédiée.
  9. Est-ce que c'est possible de m'inspirer du code déjà existant et de faire comme ça ? Ou l'inverse :
  10. C'est moi qui me suis trompé en choisissant la mauvaise option suggérée par Eclipse. En fait il fallait ajouter import java.util.List;, tout bêtement.
  11. Mais s'il y a des éléments qui ont la même valeur (et c'est forcément le cas), elles vont se retrouver avec la même clé après inversion, et ça va causer des problèmes, non ?
  12. Pour l'instant, mon truc ressemble à ça : package fr.crim.a2012.freqlist; import java.io.IOException; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class TMFreqList extends AbstractFreqlist{ List<MotFreq> motfreq = new ArrayList<MotFreq>(); public TMFreqList() throws IOException { // Appel du constructeur de la classe abstraite super(); } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { AbstractFreqlist.test(new TMFreqList()); } @Override public void afficheTetes(int n) { System.out.println(motfreq); } // Réécriture ("surcharge") de la méthode mot de la classe abstraite @Override public void mot(String mot) { // Affichage du mot System.out.println(mot); // Incrémentation de sa fréquence dans la table de hachage ajoutemot(mot); } /** * Ajoute un mot à une table de hachage ou incrémente sa valeur * @param mot */ public void ajoutemot(String mot2) { // // Si le mot existe dans la table de hachage // if (lesTermesFreq.containsKey(mot2)) { // // // On récupère son indice (la fréquence du mot) // int tempFreq = lesTermesFreq.get(mot2); // // // On augmente la fréquence de 1 // tempFreq++; // // // On met à jour la valeur dans la table de hachage // lesTermesFreq.put(mot2, tempFreq); // } // // // Si le mot n'est pas dans la table, on l'ajoute // else { // lesTermesFreq.put(mot2, 1); // } } } /** * Objet qui contient un mot et sa fréquence * L'interface Comparator permet le tri en fonction des valeurs * @author ****** * */ class MotFreq implements Comparator { // Attributs private String denomination; private int occurrence; // Constructeur de la classe MotFreq public MotFreq(String uneDenomination, int uneOccurrence) { denomination = uneDenomination; occurrence = uneOccurrence; } @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method stub return 0; } } Je remplirai la méthode compare plus tard, mais je pense que mon constructeur pour MotFreq est correct, dites-moi si je me trompe. Ce que je cherche à faire maintenant, c'est de modifier la méthode ajoutemot (qui sera appelé pour chaque mot non-vide détecté dans le texte) de la classe TMFreqList pour créer un objet MotFreq approprié et le foutre dans ma liste (motfreq). Le problème, c'est qu'il va y avoir des doublons, donc j'hésite sur comment programmer ça, d'un point de vue logique. Je pourrais toujours garder ma table de hachage puis créer les objets MotFreq en piochant les clés et les valeurs (comme ça on évite le problème des doublons), mais ça fait bricolage d'utiliser une étape intermédiaire au lieu de le faire en direct à la lecture du fichier (mais comment ?).
  13. Mon prof vient de m'écrire et il précise : Je vais me pencher sur la question.
  14. Merci, tu m'as permis de troller du liberal sans me fatiguer : http://www.neogaf.com/forum/showthread.php?p=46014278
  15. http://en.wikipedia.org/wiki/Stand-your-ground_law ?
  16. Nirvana

    Jeux vidéo

    http://www.youtube.com/watch?v=jwC544Z37qo C'est déjà impressionnant en soi, mais ça devient vraiment un truc de ouf à partir de la quatrième minute.
  17. Je crois pas qu'on ait appris ça pour l'instant. Ca permet de classer en fonction des valeurs ?
  18. Selon la consigne, je dois tout faire dans une seule classe, je n'ai pas la possibilité d'en créer une autre... Et non, je ne suis pas obligé d'utiliser une HashMap. Intéressant, TreeMap, je vais voir ça.
  19. Quelqu'un connaît une manière simple, en Java, de classer des mots dans l'ordre décroissant de leur fréquence dans un texte donné ? J'ai réussi à faire une table de hachage (HashMap) qui donne un résultat comme ça : {religieux=5, realphilosophie=1, rallié=1, scientifique=16, efface=1, correspondait=1, nouveaux=5, (...) } Mais on ne peut pas trier un HashMap, donc je bloque et je ne crois pas que ce soit la bonne structure de données.
  20. C'est illégal et c'est con. "Regardez ces gens sont abonnés à un JOURNAL !" Ouah, super, qu'est-ce qu'on en a à battre.
  21. C'est couteux, en puissance de calcul ?
×
×
  • Créer...