Supprimer mots vides

noussa90 -  
KX Messages postés 19031 Statut Modérateur -
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. KX Messages postés 19031 Statut Modérateur 3 020
     
    phrase.replaceAll("et|de|que|...","");
    La confiance n'exclut pas le contrôle
    0
  2. noussa90
     
    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.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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...
      0
  3. noussa90
     
    Il n'y a pas un moyen d'avoir une liste de mots vides en français toute prête?
    0
  4. noussa90
     
    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

    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

    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.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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. "
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. noussa90
     
    La liste des mots vide est assez longue pour être un paramètre de la méthode replaceAll.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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 !
      0
  7. noussa90
     
    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.
    0
  8. noussa90
     
    "expression régulière"? Pourriez-vous m'éclaircir votre idée SVP?
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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]+
      0