Supprimer mots vides

Bonjour,

Quelqu'un a une idée SVP sur comment supprimer les mots vides dans une phrase, c'est à dire les mots n'ayant pas de signification ( et, de , que,...).

Merci à vous.

7 réponses

  1. Modérateur
    phrase.replaceAll("et|de|que|...","");
    La confiance n'exclut pas le contrôle
    1. Oui je connais cette méthode mais les mots vides c'est tout un dictionnaire! (Il y'a aussi les pronoms, les déterminants, en, ...) Je vais pas m'amuser à lister ces mots dans la méthode replaceAll, je ne pense pas que c'est la meilleure façon de faire.
      1. Modérateur
        Détrompes toi, la chaîne de caractères utilisée pour la méthode replaceAll est ensuite décomposée pour former une expression régulière ce qui rend la méthode extremement efficace pour ce genre de traitements. Bien meilleur que si tu parcourais un à un chaque déterminant pour le comparer à ton dictionnaire.
        En plus ton dictionnaire ne change probablement jamais donc tu peux construire une fois pour toute (au début du programme) la chaîne de caractères, et ensuite l'utiliser. C'est là la meilleure méthode mais bien sûr je ne dis pas de taper à la main cette liste de mots vides ce qui serait effectivement idiot...
    2. Il n'y a pas un moyen d'avoir une liste de mots vides en français toute prête?
      1. J'ai pu créer une liste de mots vide en français. Elle est donnée comme suit:
        elle
        il

        a
        afin
        ai
        ainsi
        ais
        ait
        alors
        après
        as
        assez
        au
        aucun
        aucune
        auprès
        auquel
        auquelles
        auquels
        auraient
        aurais
        aurait
        aurez
        auriez
        aurions
        aurons
        auront
        aussi
        aussitôt
        autre
        autres
        aux
        avaient
        avais
        avait
        avant
        avec
        avez
        aviez
        avoir
        avons
        ayant
        beaucoup
        c'
        car
        ce
        ceci
        cela
        celle
        celles
        celui
        cependant
        certes
        ces
        cet
        cette
        ceux
        chacun
        chacune
        chaque
        chez
        cinq
        comme
        d'
        d'abord
        dans
        de
        dehors
        delà
        depuis
        des
        dessous
        dessus
        deux
        deça
        dix
        doit
        donc
        dont
        du
        durant
        dès
        déjà
        elle
        elles
        en
        encore
        enfin
        entre
        er
        est
        est-ce
        et
        etc
        eu
        eurent
        eut
        faut
        fur
        hormis
        hors
        huit
        il
        ils
        j'
        je
        jusqu'
        l'
        la
        laquelle
        le
        lequel
        les
        lesquels
        leur
        leurs
        lors
        lorsque
        lui
        là
        m'
        mais
        malgré
        me
        melle
        mes
        mm
        mme
        moi
        moins
        mon
        mr
        même
        mêmes
        n'
        neuf
        ni
        non-
        nos
        notamment
        notre
        nous
        néanmoins
        nôtres
        on
        ont
        ou
        où
        par
        parce
        parfois
        parmi
        partout
        pas
        pendant
        peu
        peut
        peut-être
        plus
        plutôt
        pour
        pourquoi
        près
        puisqu'
        puisque
        qu'
        quand
        quant
        quatre
        que
        quel
        quelle
        quelles
        quelqu'
        quelque
        quelquefois
        quelques
        quels
        qui
        quoi
        quot
        s'
        sa
        sans
        se
        sept
        sera
        serai
        seraient
        serais
        serait
        seras
        serez
        seriez
        serions
        serons
        seront
        ses
        si
        sien
        siennes
        siens
        sitôt
        six
        soi
        sommes
        son
        sont
        sous
        souvent
        suis
        sur
        t'
        toi
        ton
        toujours
        tous
        tout
        toutefois
        toutes
        troiw
        tu
        un
        une
        unes
        uns
        voici
        voilà
        vos
        votre
        vous
        vôtres
        y
        à
        ème
        étaient
        étais
        était
        étant
        étiez
        étions
        êtes
        être
        afin
        ainsi
        alors
        après
        aucun
        aucune
        auprès
        auquel
        aussi
        autant
        aux
        avec
        car
        ceci
        cela
        celle
        celles
        celui
        cependant
        ces
        cet
        cette
        ceux
        chacun
        chacune
        chaque
        chez
        comme
        comment
        dans
        des
        donc
        donné
        dont
        duquel
        dès
        déjà
        elle
        elles
        encore
        entre
        étant
        etc
        été
        eux
        furent
        grâce
        hors
        ici
        ils
        jusqu
        les
        leur
        leurs
        lors
        lui
        mais
        malgré
        mes
        mien
        mienne
        miennes
        miens
        moins
        moment
        mon
        même
        mêmes
        non
        nos
        notre
        notres
        nous
        notre
        oui
        par
        parce
        parmi
        plus
        pour
        près
        puis
        puisque
        quand
        quant
        que
        quel
        quelle
        quelque
        quelqu'un
        quelques
        quels
        qui
        quoi
        sans
        sauf
        selon
        ses
        sien
        sienne
        siennes
        siens
        soi
        soit
        sont
        sous
        suis
        sur
        tandis
        tant
        tes
        tienne
        tiennes
        tiens
        toi
        ton
        tous
        tout
        toute
        toutes
        trop
        très
        une
        vos
        votre
        vous
        étaient
        était
        étant
        être

        Pour éliminer ces mots vides, je dois parcourir ma requête (étant déjà décomposée en mots) et comparer chaque mot composant la requête à tout les mots vide de la liste. Si il existe, on le supprime. Ma question est comment je vais programmé cette liste en Java.

        Merci à vous.
        1. Modérateur
          J'ai déjà répondu à cette question, le plus efficace c'est de faire une expression régulière en mettant des "|" entre chaque mot, puis faire un replaceAll, c'est plus rapide que "comparer chaque mot composant la requête à tout les mots vide de la liste. "
      2. La liste des mots vide est assez longue pour être un paramètre de la méthode replaceAll.
        1. Modérateur
          Relis ma réponse #3 et puis si tu veux absolument contredire toute l'aide que l'on te propose, que ce soit dans cette discussion ou dans les autres, et bien débrouilles toi tout seul !
      3. Non, je ne vous contredis pas c'est juste que j'ai mal compris votre réponse et que je ne trouve toujours pas la solution à mon problème. Sinon, je vous remercie tous pour tous vos réponses surtout vous KX. Vous étiez vraiment très utile pour moi.
        1. "expression régulière"? Pourriez-vous m'éclaircir votre idée SVP?
          1. Modérateur
            Une expression régulière ou expression rationnelle (cf. Wikipedia est une manière de faire des recherches rapides grâce à une optimisation du traitement.

            Par exemple si tu as à tester les mots "aaa","aab","aba";"abb","baa","bab","bba","bbb" alors on peut on peut la représenter avec un arbre de la manière suivante :

                       /\
                      /  \
                     /    \
                    /      \
                   /        \
                  /          \
                 a            b
                / \          / \
               /   \        /   \
              a     b      a     b
             / \   / \    / \   / \
            a   b a   b  a   b a   b
            On peut alors se déplacer sur l'arbre pour savoir si un mot appartient à l'arbre ou non sans avoir à tester toute la liste des mots.
            Par exemple si on veut savoir si "abc" est dans l'arbre, il suffit de regarder le première caractère "a" et de se diriger sur la bonne de gauche, on élimine ainsi déjà la moitié des tests, en effet il sera inutile de tester "baa","bab","bba","bbb" alors que l'on sait que le mot commence par "a".
            De même avec le deuxième caractère, on élimine la moitié des restants : "aaa" et "aab" puisque le deuxième caractère est "b", il reste plus qu'à faire un seul test sur le "c" pour voir que "abc" n'est pas dans l'arbre.

            Le nombre de tests nécessaires à effectuer est donc égal au nombre de caractères de la chaîne à chercher. C'est donc moins coûteux que de chercher à comparer tous les mots possibles les uns après les autres.

            Remarque : la construction de l'arbre est une manière d'expliquer ce qui se passe, mais l'implémentation des expressions régulières utilisent plutôt la notion d'automates, pour permettre de traiter un plus grand nombre de cas possibles.

            Par exemple : cette expression régulière (simplifiée) permet de vérifier qu'une chaîne de caractères est une adresse email correcte ou non :
            [a-zA-Z][a-zA-Z0-9]*@[a-zA-Z][a-zA-Z0-9]*.[a-z]+