IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Regarder dans l'ensemble de List<String> les mots les plus apparus


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Regarder dans l'ensemble de List<String> les mots les plus apparus
    Bonjour!
    Je suis une étudiante en informatique, et je suis entraine de faire un tp sur le correcteur des mots dans un dico
    Et on fait une classe special qui va check si le mot M mal orthographié est present dans le dictionnaire sinon on fait les trigrammes du mot M et on cherche dans notre dico les mots qui ont les trigrammes en commun de maniere que on aura un HashMap< String, List<String>> où le clé c'est le trigramme du M et le value est la liste des mots du dictionnaire qui ont le trigramme en commun.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        public HashMap<String, List<String>> checkcheck(String m, Dictionary dico){
     
            TreePrefix tree = dico.make_dico(dico.filename);
            HashMap<String, List<String>> map = new HashMap<>();
            List<String> list_dico = dico.make_list(dico.filename);
     
            //on check si le mot m appartient au dico
            if(tree.find(m)){
                return null;
            }
            //on crée une liste de trigrammes du mot m
            List<String> list_trig  = trigram_of_word(m);
     
            //on remplit le HashMap
            for( String trig : list_trig){
                List<String> list = new ArrayList<>();
                for( String word : list_dico){
                    //rajouter à chaque mot "<"et ">" ?
                    if(word.contains(trig)){
                        list.add(word);
                    }
                }
                map.put(trig, list);
            }
            return map;
        }
    voici le code et notamment on aura besoin de selectionner les mots de dictionnaire qui ont le plus de trigrammes en commun avec le mot M (max 100 mots) et cela je trouve est compliqué à faire (( quelqu'un pourrra donner un indice de selectionner les mots le plus rapidement possible

    Bien cordialement

  2. #2
    Membre éclairé
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 386
    Points : 788
    Points
    788
    Par défaut
    Bonjour,

    pourriez vous poster une démo reproductible ?
    Utiliser la balise [code] (je ne sais pas moi même comment déclencher la coloration syntaxique) ?


    Sinon, de but en blanc, sans rien y connaitre à Java.
    Commencer par écrire un banc de test, l'optimisation commence toujours par là.

    Peut être que vous pourriez éviter de reconstruire le dictionnaire à chaque appel ?

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TreePrefix tree = dico.make_dico(dico.filename);
    List<String> list_dico = dico.make_list(dico.filename);

    Dans ce genre de problème il n'y a pas de surprises,
    des données bien préparées en amont permettent
    une recherche rapide et efficace par la suite.

    Ici vous faites une triple boucle,
    for( String trig : list_trig) => for( String word : list_dico) => word.contains(trig) => list.add(word);


    Si le dico indexait les mots par trigrammes vous n'auriez plus qu'à faire une double boucle
    for( String trig : list_trig) => for( String word : list_dico[trig]) => list.add(word);

    Le nombre d'itérations serait par ailleurs réduit puisque vous n'auriez pas besoin
    d'interroger tout le dico à chaque recherche.

    Mais comme je le disais, même si je n'y connais rien à Java,
    il faut commencer par la construction d'un banc de test et d'une suite de test
    avant de procéder à des tentatives d'optimisation.

    Bonne journée.

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/04/2022, 06h29
  2. Traitement de données dans un tableau ou liste de String
    Par liverbird dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/02/2016, 11h46
  3. Réponses: 1
    Dernier message: 31/03/2012, 22h27
  4. Réponses: 22
    Dernier message: 14/09/2009, 18h12
  5. [Debutant] Liste Des Commandes Basiques Les Plus Utilisées Sous VB6
    Par akatsuki1905 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/10/2008, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo