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

Shell et commandes POSIX Discussion :

Recherche et extraction


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut Recherche et extraction
    Bonjour,

    Est il possible en shell de rechercher un mot dans un texte et d'en extraire les 5 mots avant et les 5 mots après ?

    Par exemple,
    MyTexte = "Le podium. TF1 achevait jeudi soir la diffusion de la saison 2 de Falco. Les deux derniers épisodes de la série avec Sagamore Stévenin ont fédéré 5,5 millions de téléspectateurs, en légère baisse par rapport à la semaine dernière. France 3 arrive deuxième avec un western classique, Les sept mercenaires, qui a passionné 2,6 millions de téléspectateurs. France 2 et Envoyé spécial complètent le podium avec 2,5 millions de fidèles."

    -> Rechercher "France 3"
    -> Extraire "rapport à la semaine dernière. France 3 arrive deuxième avec un western"

    Merci pour votre aide ...

    Thais

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    je me risque à une réponse, qui fonctionne mais pour laquelle je ne sais pas si elle respectera les contraintes éventuelles (du fait qu'on est dans la section Unix et non Linux notament)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -Po "([^ ]+ ){5}France 3( [^ ]+){5}" <<< $MyTexte
    sinon via Perl directement sur le même principe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ne 'print $1."\n" if /((?:[^ ]+ ){5}France 3(?: [^ ]+){5})/' <<< $MyTexte
    en espérant que ça réponde à ta question

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,
    Sous quel Unix ?
    La question est vague, voici une solution qui fonctionne a peu près avec un grep qui supporte la répétition ( {5} ):
    Ici, je considère qu'un mot est un ensemble de caractères séparé par un ou plusieurs espaces et que le texte est sur une ligne (d'un point de vue système):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo $MyTexte
    Le podium. TF1 achevait jeudi soir la diffusion de la saison 2 de Falco. Les deux derniers épisodes de la série avec Sagamore Stévenin ont fédéré 5,5 millions de téléspectateurs, en légère baisse par rapport à la semaine dernière. France 3 arrive deuxième avec un western classique, Les sept mercenaires, qui a passionné 2,6 millions de téléspectateurs. France 2 et Envoyé spécial complètent le podium avec 2,5 millions de fidèles.
    $ echo $MyTexte | grep -o '\([^[:space:]]\+[[:space:]]\+\)\{5\}France 3\([[:space:]]\+[^[:space:]]\+\)\{5\}'
    rapport à la semaine dernière. France 3 arrive deuxième avec un western
    Et une version avec un grep qui ne supporte pas la répétition (la regex est beaucoup plus longue puisque l'on est obligé de la répéter autant que besoin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo $MyTexte | grep -o '[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+France 3[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+[[:space:]]\+[^[:space:]]\+'
    rapport à la semaine dernière. France 3 arrive deuxième avec un western

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut
    Bonjour,

    Merci pour votre aide.
    Je souhaite intégrer cette fonction dans un AppelScript.
    Et pour être franche, je ne sais pas trop quel Unix se cache derrière ....
    Normalement on doit pouvoir faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		set sRech to "\([^[:space:]]\+[[:space:]]\+\)\{5\}France 3\([[:space:]]\+[^[:space:]]\+\)\{5\}"
    		set sShell to "echo " & (quoted form of sText) & " | grep -o " & (quoted form of sRech)
    		try
    			set myResult to do shell script sShell
    		end try
    Mais bon, un simple copier/coller, ne fonctionne pas
    Et je suis très mauvaise en RegEx .....

    Si vous avez une piste n'hésitez pas, je vais également creuser de mon coté et vous tiens au courant.

    Thais

    PS EDIT : Pour info, le code suivant marche, mais ne m'extract que le mot trouvé et pas les 5 devant et les 5 derrières.
    Si c'est plus simple, on peut aussi extiare les 20 caractères devant et les 20 derrières ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set sRech to "France 3"
    set sShell to "echo " & (quoted form of MyText) & " | grep -oP " & (quoted form of sRech)
    try
    	set myRresult to do shell script sShell
    end try

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Je ne connais pas applescript (derrière on doit être sur du MAC OS), mais je vois que tu fourni une version "quoted" de la regex, il y a de forte chance que cela soit ceci qui gêne, essaie avec ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set sRech to "([^[:space:]]+[[:space:]]+){5}France 3([[:space:]]+[^[:space:]]+){5}"
    set sShell to "echo " & (quoted form of MyText) & " | grep -oP " & (quoted form of sRech)
    Et si cela ne fonctionne pas, avec les ligne suivantes (si on a droit de ne pas "quoted" ???):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set sRech to "([^[:space:]]+[[:space:]]+){5}France 3([[:space:]]+[^[:space:]]+){5}"
    set sShell to "echo " & (form of MyText) & " | grep -oP " & (form of sRech)
    Par ailleurs, je suis surpris de l'option -P du grep (en principe, c'est pour utiliser le moteur de regex de perl mais ce n'est pas documenter dans le man du grep d'apple...)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut
    Merci c'est parfait
    J'aie rajouté l'option -i pour le case control ....

    Merci beaucoup pour ton aide.

    Thais

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 573
    Par défaut
    Bonjour,

    Juste une dernière question subsidiaire.
    S'il y a moins de 5 mots entre le début du texte et le mot recherche/trouvé ca n'extrait pas l'info

    Sais tu ce qu'il faut modifier dans la RegEx pour extraire la chaine dans ce cas ?
    Idem pour la fin ....

    Thais

Discussions similaires

  1. [XL-2007] [VBA] Recherche multiple & Extraction
    Par deb_5588 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 04/02/2013, 14h51
  2. indexation, recherche et extraction d'infos
    Par MMDM12 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/06/2012, 10h35
  3. [Toutes versions] Recherche et Extraction
    Par BAHIRI dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/05/2012, 16h13
  4. recherche et extraction de l'information
    Par rom05 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/04/2008, 09h48
  5. Recherche Logiciel Extraction Audio
    Par Sami Xite dans le forum Audio
    Réponses: 2
    Dernier message: 24/10/2006, 20h51

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