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

Collection et Stream Java Discussion :

Identification de ligne par regex


Sujet :

Collection et Stream Java

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut Identification de ligne par regex
    Bonjour,

    je cherche à lire un fichier texte en ne sélectionnant que certaines lignes.
    Pour celà, je pense utiliser une expression régulière. J'ai actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String reg = "(?i)(?s)\\t(DET|ART|PRP|KON|PRO|DEM)";
    Pattern p = Pattern.compile(reg);
    while((line = br.readLine()) != null) {
      Matcher m = p.matcher(line);
      if(!m.matches()) {
        list.add(line.split(SEPARATEUR));
      } 
    }
    Mon fichier texte a cette allure (généré par TreeTagger) :
    liberté NOM liberté
    certains PRO:IND certain
    termes NOM terme
    répandus VER:pper répandus
    comme KON comme
    piratage NOM piratage
    comportent VER:pres comporter
    des PRP:det du
    idées NOM idées
    auxquelles PRO:REL auquel
    nous PROER nous
    espérons VER:futu espérons
    que KON que
    vous PROER vous
    n' ADV ne
    adhérerez VER:futu adhérerez
    pas ADV pas
    Je cherche à supprimer les mots « sans sens » (articles...).

    La regex utilisée actuellement ne détecte rien... et je ne comprends pas pourquoi.

    Merci pour votre aide !

    Alban

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Je me rends compte que le format de fichier n'est pas très clair.
    En fait, c'est :
    mot [tabulation] type de mot [tabulation] mot dans sa forme neutre
    Et ce que je veux repérer, c'est le groupe « tabulation + type » (le type étant "codé" sur trois caractères en majuscule).

  3. #3
    Membre chevronné
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Par défaut
    Tu peux remplacer ta regex par ceci : "(DET|ART|PRP|KON|PRO|DEM)" ensuite il te suffit d'utiliser group() de la classe Matcher.

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le pipe s'applique seulement sur les deux éléments l'entourant, et non pas sur un mot...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (DET|ART|PRP|KON|PRO|DEM)
    Ceci signifie dans l'ordre : D, E , T ou A, R, T ou P, R, P ou K, O, N ou P ...

    Pour faire ce que tu veux il serait préférable de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((DET)|(ART)|(PRP)|(KON)|(PRO)|(DEM))
    Mais bon c'est pas très joli comme regexp.


    Il faudrait savoir ce que tu veux faire avec cela précisément...


    a++

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Merci pour votre aide à tous les deux !
    Ça me fait progresser dans la compréhension des regex... mais ça ne fonctionne pas ici

    En fait, l'objectif est de « regarder » chaque ligne. Si le terme du milieu est ART ou PRP ou un autre élément de la liste, la ligne est à ignorer. Sinon, elle est à copier ailleurs.

    Actuellement, avec toutes les expressions testées... toutes les lignes passent (donc aucune n'est "détectée" comme correspondant à la regex).

    J'avoue que là, on dépasse plus que largement mes limites techniques...

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Bon... en modifiant la méthode de lecture de la chaîne d'entrée... ça fonctionne. Ma string initiale devait être pourrie...

    Désolé pour le bruit, et merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. regex et lecture ligne par ligne
    Par arm3366 dans le forum Langage
    Réponses: 4
    Dernier message: 25/08/2011, 11h00
  2. Parcourir un Db_GRID ligne par ligne
    Par sanosuke dans le forum Bases de données
    Réponses: 8
    Dernier message: 12/05/2008, 12h14
  3. aditionner les champs d'une table ligne par ligne
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/08/2005, 08h38
  4. remplacer des sauts de ligne par '\n'
    Par Miksimus dans le forum Général Python
    Réponses: 5
    Dernier message: 18/07/2005, 10h01

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