Avez vous une i=E9de simple pour rechercher un extrait parmis un texte.
Exemple :
J'ai un texte de 50 lignes,
J'ai un mot cl=E9.
Je souhaite avoir l'extrait pertinent, sachant que :
un extrait pertinent est compos=E9 du de la phrase du mot cl=E9, ainsi que
de la phrase pr=E9c=E9dente, et de la phrase suivante.
Pouvez vous me guider surtout pour d=E9tecter les phrases, et savoir dans
quelle phrase se situe mon mot cl=E9 (phrase n). Il faudrait ensuite
garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions
si le tableau n'est pas une bonne id=E9e.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Emmanuel Florac
Le Fri, 01 Apr 2005 17:29:09 +0200, Paul a écrit :
Je pense que c'est possible de faire cela avec un tableau...
Voici ma proposition (version cow boy) : je suppose que tes phrases sont séparées par des points. 1) modifier le spéarateur par défaut pour correspondre au point ($/='.'). 2) faire un slurp du fichier dans un tableau(@fichier=<fichier>). faire une boucle sur le tableau qui renvoie l'élément pertinent, l'élément précédent et l'élément suivant...
VOilà, exercice : écrivez le code :)
-- on passe la moitié de son temps à refaire ce que l'on n'a pas eu le temps de faire correctement. Loi de Myers.
Le Fri, 01 Apr 2005 17:29:09 +0200, Paul a écrit :
Je pense que c'est possible de faire cela avec un tableau...
Voici ma proposition (version cow boy) : je suppose que tes phrases sont
séparées par des points. 1) modifier le spéarateur par défaut pour
correspondre au point ($/='.'). 2) faire un slurp du fichier dans un
tableau(@fichier=<fichier>). faire une boucle sur le tableau qui renvoie
l'élément pertinent, l'élément précédent et l'élément suivant...
VOilà, exercice : écrivez le code :)
--
on passe la moitié de son temps à refaire ce que l'on n'a pas eu le
temps de faire correctement.
Loi de Myers.
Le Fri, 01 Apr 2005 17:29:09 +0200, Paul a écrit :
Je pense que c'est possible de faire cela avec un tableau...
Voici ma proposition (version cow boy) : je suppose que tes phrases sont séparées par des points. 1) modifier le spéarateur par défaut pour correspondre au point ($/='.'). 2) faire un slurp du fichier dans un tableau(@fichier=<fichier>). faire une boucle sur le tableau qui renvoie l'élément pertinent, l'élément précédent et l'élément suivant...
VOilà, exercice : écrivez le code :)
-- on passe la moitié de son temps à refaire ce que l'on n'a pas eu le temps de faire correctement. Loi de Myers.
Antoun
Je souhaite avoir l'extrait pertinent, sachant que : un extrait pertinent est composé du de la phrase du mot clé, ainsi que de la phrase précédente, et de la phrase suivante.
je suppose que tu disposes d'une variable $texte contenant l'intégralité de ton texte.
Comment définit-on une phrase ? je dirais qu'il s'agit d'un morceau de texte séparé par l'un des éléments suivants :
- début ou fin de chaîne - un signe de ponctuation parmi les suivants : . ? ! ... - un retour chariot r
pour raffiner un peu, disons que :
- tu recherches ton mot-clé sans t'occuper de la casse, mais tu veux que ce soit le mot exact
- en cas d'occurences multiples de ton mot-clé dans le texte, tu ne t'intéresses qu'à la première
- . ? ! ne marchent que s'ils sont suivis d'au moins un espace (sinon fr.comp.lang.perl représente 4 phrases !)
- des retours chariots successifs ne comptent pas, ni non plus des espaces avant ou après le retour chariot
Maintenant, tu découpes ton texte en un tableau de phrases, tu recherches ton mot-clé et tu prends tes trois phrases :
___________
my $texte = "ton blaba..." ; my $ok = 0 ; my $motcle = 'Kakabayev' ; # le mot que tu recherches
my @tablo = split /(?:[.?!]s+)|(?:s*rs*)/, $texte ;
my $i ; for ($i = 0; $i <= $#tablo; $i++) { if ($tablo[$i] =~ m/b$motcleb/i) { $ok = 1; last ; } }
exit if ! $ok ;
print "PHRASE PRECEDENTE : " . $tablo[$i - 1] . "n" if $i > 0 ; print "PHRASE : " . $tablo[$i] . "n" ; print "PHRASE SUIVANTE : " . $tablo[$i + 1] . "n" if $i < $#tablo ;
___________
un peu de commentaire sur la regex :
[.?!]s+ un signe de ponctuation .?! suivi d'au moins un espace
s*rs* un retour chariot, qui avale d'éventuels espaces
(?: ) parenthèses non-capturantes, afin d'éviter que les séparations entre phrases ne se retrouvent dans @tablo
voilà, have fun !
Antoun
Je souhaite avoir l'extrait pertinent, sachant que :
un extrait pertinent est composé du de la phrase du mot clé, ainsi que
de la phrase précédente, et de la phrase suivante.
je suppose que tu disposes d'une variable $texte contenant l'intégralité
de ton texte.
Comment définit-on une phrase ? je dirais qu'il s'agit d'un morceau de
texte séparé par l'un des éléments suivants :
- début ou fin de chaîne
- un signe de ponctuation parmi les suivants : . ? ! ...
- un retour chariot r
pour raffiner un peu, disons que :
- tu recherches ton mot-clé sans t'occuper de la casse, mais tu veux que
ce soit le mot exact
- en cas d'occurences multiples de ton mot-clé dans le texte, tu ne
t'intéresses qu'à la première
- . ? ! ne marchent que s'ils sont suivis d'au moins un espace (sinon
fr.comp.lang.perl représente 4 phrases !)
- des retours chariots successifs ne comptent pas, ni non plus des
espaces avant ou après le retour chariot
Maintenant, tu découpes ton texte en un tableau de phrases, tu
recherches ton mot-clé et tu prends tes trois phrases :
___________
my $texte = "ton blaba..." ;
my $ok = 0 ;
my $motcle = 'Kakabayev' ; # le mot que tu recherches
my @tablo = split /(?:[.?!]s+)|(?:s*rs*)/, $texte ;
my $i ;
for ($i = 0; $i <= $#tablo; $i++) {
if ($tablo[$i] =~ m/b$motcleb/i) {
$ok = 1;
last ;
}
}
exit if ! $ok ;
print "PHRASE PRECEDENTE : " . $tablo[$i - 1] . "n" if $i > 0 ;
print "PHRASE : " . $tablo[$i] . "n" ;
print "PHRASE SUIVANTE : " . $tablo[$i + 1] . "n" if $i < $#tablo ;
___________
un peu de commentaire sur la regex :
[.?!]s+ un signe de ponctuation .?! suivi d'au moins un espace
s*rs* un retour chariot, qui avale d'éventuels espaces
(?: ) parenthèses non-capturantes, afin d'éviter que les séparations
entre phrases ne se retrouvent dans @tablo
Je souhaite avoir l'extrait pertinent, sachant que : un extrait pertinent est composé du de la phrase du mot clé, ainsi que de la phrase précédente, et de la phrase suivante.
je suppose que tu disposes d'une variable $texte contenant l'intégralité de ton texte.
Comment définit-on une phrase ? je dirais qu'il s'agit d'un morceau de texte séparé par l'un des éléments suivants :
- début ou fin de chaîne - un signe de ponctuation parmi les suivants : . ? ! ... - un retour chariot r
pour raffiner un peu, disons que :
- tu recherches ton mot-clé sans t'occuper de la casse, mais tu veux que ce soit le mot exact
- en cas d'occurences multiples de ton mot-clé dans le texte, tu ne t'intéresses qu'à la première
- . ? ! ne marchent que s'ils sont suivis d'au moins un espace (sinon fr.comp.lang.perl représente 4 phrases !)
- des retours chariots successifs ne comptent pas, ni non plus des espaces avant ou après le retour chariot
Maintenant, tu découpes ton texte en un tableau de phrases, tu recherches ton mot-clé et tu prends tes trois phrases :
___________
my $texte = "ton blaba..." ; my $ok = 0 ; my $motcle = 'Kakabayev' ; # le mot que tu recherches
my @tablo = split /(?:[.?!]s+)|(?:s*rs*)/, $texte ;
my $i ; for ($i = 0; $i <= $#tablo; $i++) { if ($tablo[$i] =~ m/b$motcleb/i) { $ok = 1; last ; } }
exit if ! $ok ;
print "PHRASE PRECEDENTE : " . $tablo[$i - 1] . "n" if $i > 0 ; print "PHRASE : " . $tablo[$i] . "n" ; print "PHRASE SUIVANTE : " . $tablo[$i + 1] . "n" if $i < $#tablo ;
___________
un peu de commentaire sur la regex :
[.?!]s+ un signe de ponctuation .?! suivi d'au moins un espace
s*rs* un retour chariot, qui avale d'éventuels espaces
(?: ) parenthèses non-capturantes, afin d'éviter que les séparations entre phrases ne se retrouvent dans @tablo
voilà, have fun !
Antoun
Jérémy JUST
On Fri, 01 Apr 2005 21:35:31 +0200 Emmanuel Florac wrote:
faire un slurp du fichier dans un tableau(@fichier=<fichier>).
Ça va devenir énorme!
Je pense qu'il vaut mieux le faire sans tableau, au fil du texte. Quelque chose comme:
<<<<< my $previous_sentence = '' ; my $display_next = 0 ;
while(my $sentence = <>) {if ( $sentence =~m/ / ) # Recherche du mot {print $previous_sentence, $sentence ;
Bon, vous m'avez déjà apportés plusieurs éléments de réponses, je vais maintenant passer à l'acte, j'espere ue je vais me débrouiller.
Merci de votre aide et vos propositions.
Paul
Le Fri, 1 Apr 2005 17:29:09 +0200 Paul <ernond_paul_at_yahoo.fr> vous écriviez :
Bonjour,
Avez vous une iéde simple pour rechercher un extrait parmis un texte.
Exemple : J'ai un texte de 50 lignes, J'ai un mot clé.
Je souhaite avoir l'extrait pertinent, sachant que : un extrait pertinent est composé du de la phrase du mot clé, ainsi que de la phrase précédente, et de la phrase suivante.
Pouvez vous me guider surtout pour détecter les phrases, et savoir dans
quelle phrase se situe mon mot clé (phrase n). Il faudrait ensuite garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions si le tableau n'est pas une bonne idée.
Paul.
Bon, vous m'avez déjà apportés plusieurs éléments de réponses, je vais
maintenant passer à l'acte, j'espere ue je vais me débrouiller.
Merci de votre aide et vos propositions.
Paul
Le Fri, 1 Apr 2005 17:29:09 +0200
Paul <ernond_paul_at_yahoo.fr> vous écriviez :
Bonjour,
Avez vous une iéde simple pour rechercher un extrait parmis un texte.
Exemple :
J'ai un texte de 50 lignes,
J'ai un mot clé.
Je souhaite avoir l'extrait pertinent, sachant que :
un extrait pertinent est composé du de la phrase du mot clé, ainsi que
de la phrase précédente, et de la phrase suivante.
Pouvez vous me guider surtout pour détecter les phrases, et savoir
dans
quelle phrase se situe mon mot clé (phrase n). Il faudrait ensuite
garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions
si le tableau n'est pas une bonne idée.
Bon, vous m'avez déjà apportés plusieurs éléments de réponses, je vais maintenant passer à l'acte, j'espere ue je vais me débrouiller.
Merci de votre aide et vos propositions.
Paul
Le Fri, 1 Apr 2005 17:29:09 +0200 Paul <ernond_paul_at_yahoo.fr> vous écriviez :
Bonjour,
Avez vous une iéde simple pour rechercher un extrait parmis un texte.
Exemple : J'ai un texte de 50 lignes, J'ai un mot clé.
Je souhaite avoir l'extrait pertinent, sachant que : un extrait pertinent est composé du de la phrase du mot clé, ainsi que de la phrase précédente, et de la phrase suivante.
Pouvez vous me guider surtout pour détecter les phrases, et savoir dans
quelle phrase se situe mon mot clé (phrase n). Il faudrait ensuite garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions si le tableau n'est pas une bonne idée.
Paul.
Paul
si, si, ca risque d'être énorme... car, en disant 50 lignes, c'était un exemple...
dans la réalité, ce sera plutot 200 lignes, et le mot clé sera plutot une expression réguliére, voir plusieurs, et le tout, pour des centaines de textes...
On Fri, 01 Apr 2005 21:35:31 +0200 Emmanuel Florac wrote:
faire un slurp du fichier dans un tableau(@fichier=<fichier>).
Ça va devenir énorme!
un cinquantaine de lignes, énorme ???
si, si, ca risque d'être énorme... car, en disant 50 lignes, c'était un
exemple...
dans la réalité, ce sera plutot 200 lignes, et le mot clé sera plutot
une expression réguliére, voir plusieurs, et le tout, pour des centaines
de textes...
si, si, ca risque d'être énorme... car, en disant 50 lignes, c'était un exemple...
dans la réalité, ce sera plutot 200 lignes, et le mot clé sera plutot une expression réguliére, voir plusieurs, et le tout, pour des centaines de textes...
On Fri, 01 Apr 2005 21:35:31 +0200 Emmanuel Florac wrote:
faire un slurp du fichier dans un tableau(@fichier=<fichier>).
Ça va devenir énorme!
un cinquantaine de lignes, énorme ???
DoMiNiX
Paul wrote:
Bonjour,
Avez vous une iéde simple pour rechercher un extrait parmis un texte.
Exemple : J'ai un texte de 50 lignes, J'ai un mot clé.
Je souhaite avoir l'extrait pertinent, sachant que : un extrait pertinent est composé du de la phrase du mot clé, ainsi que de la phrase précédente, et de la phrase suivante.
Pouvez vous me guider surtout pour détecter les phrases, et savoir dans quelle phrase se situe mon mot clé (phrase n). Il faudrait ensuite garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions si le tableau n'est pas une bonne idée.
Paul.
$cat toto ceci est une premiere phrase. suivie d'une deuxième construction. Qui précède le troisième groupe. terminé par un quatrième. qui ne termine pas tout cependant.
$ perl -n00l -e '@F=split(/(?=. )/,$_,0); END{for(@F){$i++;print $F[$i -2],$F[$i -1],$F[$i] if /trois/}}' toto . suivie d'une deuxième construction. Qui précède le troisième groupe. terminé par un quatrième
j'étais parti sur un uniligne ... mais ca fait un peu tiré par les cheveux a la fin.
alors en decomposé: perl -MOÞparse -n00l -e '@F=split(/(?=. )/,$_,0); END{for(@F){$i++;print $F[$i -2],$F[$i -1],$F[$i] if /trois/}}'
BEGIN { $/ = ""; $ = "nn"; } LINE: while (defined($_ = <ARGV>)) { chomp $_; @F = split(/(?=. )/, $_, 0); sub END { foreach $_ (@F) { ++$i; print $F[$i - 2], $F[$i - 1], $F[$i] if /trois/; } } ; } -e syntax OK
-- dominix
Paul wrote:
Bonjour,
Avez vous une iéde simple pour rechercher un extrait parmis un texte.
Exemple :
J'ai un texte de 50 lignes,
J'ai un mot clé.
Je souhaite avoir l'extrait pertinent, sachant que :
un extrait pertinent est composé du de la phrase du mot clé, ainsi que
de la phrase précédente, et de la phrase suivante.
Pouvez vous me guider surtout pour détecter les phrases, et savoir dans
quelle phrase se situe mon mot clé (phrase n). Il faudrait ensuite
garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions
si le tableau n'est pas une bonne idée.
Paul.
$cat toto
ceci est une premiere
phrase. suivie d'une deuxième construction. Qui
précède le troisième groupe. terminé par un quatrième.
qui ne termine pas tout cependant.
$ perl -n00l -e '@F=split(/(?=. )/,$_,0);
END{for(@F){$i++;print $F[$i -2],$F[$i -1],$F[$i] if /trois/}}' toto
. suivie d'une deuxième construction. Qui
précède le troisième groupe. terminé par un quatrième
j'étais parti sur un uniligne ...
mais ca fait un peu tiré par les cheveux a la fin.
alors en decomposé:
perl -MOÞparse -n00l -e '@F=split(/(?=. )/,$_,0);
END{for(@F){$i++;print $F[$i -2],$F[$i -1],$F[$i] if /trois/}}'
BEGIN { $/ = ""; $ = "nn"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
@F = split(/(?=. )/, $_, 0);
sub END {
foreach $_ (@F) {
++$i;
print $F[$i - 2], $F[$i - 1], $F[$i] if /trois/;
}
}
;
}
-e syntax OK
Avez vous une iéde simple pour rechercher un extrait parmis un texte.
Exemple : J'ai un texte de 50 lignes, J'ai un mot clé.
Je souhaite avoir l'extrait pertinent, sachant que : un extrait pertinent est composé du de la phrase du mot clé, ainsi que de la phrase précédente, et de la phrase suivante.
Pouvez vous me guider surtout pour détecter les phrases, et savoir dans quelle phrase se situe mon mot clé (phrase n). Il faudrait ensuite garder la phrase n-1 et n+1.
Je pense que c'est possible de faire cela avec un tableau...
Merci de bien vouloir me conseiller, et me proposer d'autres solutions si le tableau n'est pas une bonne idée.
Paul.
$cat toto ceci est une premiere phrase. suivie d'une deuxième construction. Qui précède le troisième groupe. terminé par un quatrième. qui ne termine pas tout cependant.
$ perl -n00l -e '@F=split(/(?=. )/,$_,0); END{for(@F){$i++;print $F[$i -2],$F[$i -1],$F[$i] if /trois/}}' toto . suivie d'une deuxième construction. Qui précède le troisième groupe. terminé par un quatrième
j'étais parti sur un uniligne ... mais ca fait un peu tiré par les cheveux a la fin.
alors en decomposé: perl -MOÞparse -n00l -e '@F=split(/(?=. )/,$_,0); END{for(@F){$i++;print $F[$i -2],$F[$i -1],$F[$i] if /trois/}}'
BEGIN { $/ = ""; $ = "nn"; } LINE: while (defined($_ = <ARGV>)) { chomp $_; @F = split(/(?=. )/, $_, 0); sub END { foreach $_ (@F) { ++$i; print $F[$i - 2], $F[$i - 1], $F[$i] if /trois/; } } ; } -e syntax OK