Je suis confronté à un problème qui pour certain peut sembler une
simple formalité.
A l'aide d'un fonction Unix (pdftotext) je récupère le contenu d'un
fichier PDF.
Le contenu du pdf est de la forme :
Culture 1. Exposition : l'Ecole de Paris au Musée d'Art Moderne Niveau
: Avancé (a) Objectifs : Compréhension orale Exprimer son opinion,
ses goûts Thèmes : L'art, l'Ecole de Paris 1. Mise en route
Vocabulaire : Ecole de Paris : mouvement artistique (19041929)
représenté pour l'essentiel par des artistes étrangers venus en
France pour des raisons diverses ( Chagall, Modigliani, Soutine,
Kisling, Picasso, Orloff, Zadkine...) (a) Aimez-vous visiter des
expositions de peinture ?Pourquoi ? Quelle est l'exposition qui vous a
le plus marqué(e) ?Pour quelles raisons ? 2. Avec le document
(a)Visionner le document jusqu'à l'apparition de Gaston Damag.
Préciser aux élèves que la femme interviewée, Jeanine Warnod, est
la fille de André Warnod (1885-1960) inventeur du terme « Ecole de
Paris » Travaillez par deux. Que dit Jeanine Warnod à propos de son
père ? Quels souvenirs personnels a-t-elle de l'Ecole de Paris ?
Quelle comparaison établit-elle entre les artistes d'autrefois et ceux
d'aujourd'hui ? Mise en commun. Visionner le document jusqu'à la fin.
Que dit Gaston Damag au sujet des artistes d'autrefois et d'aujourd'hui
? 3. Expression orale (a) D'après vous, que peut-on faire pour
stimuler et faciliter la création des artistes ? Pensez-vous, comme
Gaston Damag, que les jeunes artistes n'ont plus besoin d'échanges
avec les autres artistes contemporains ? Pourquoi ? 4. Expression
écrite (a) Choisissez l'une des citations suivantes, dites comment
vous la comprenez et donnez votre opinion. - « En art, il n'y a pas
d'étranger » (Brancusi. Déclaration pour le Congrès de Paris en
1922) - « Doit-on considérer l'art français comme une notion
purement ethnique ou comme une notion purement esthétique ? »
(Waldemar George. Compte rendu du Salon des Indépendants. 1924) 5.
Pour aller plus loin (a) Découvrez quelques artistes de l'Ecole de
Paris :
http://www.mairie-paris.fr/musees/MAMVP/expositions/edp/accueil_edp.htm
Cliquez sur une oeuvre, décrivez-la (oeuvres d' Archipenko,
Modigliani, Brancusi, Marcoussis, Orloff). Présentez l'oeuvre à la
classe. Fiche réalisée par Martine Vidal, Cavilam, Vichy "
De cette chaine de caractère j'ai besoin uniquement de :
Titre : "Exposition : l'Ecole de Paris au Musée d'Art Moderne"
Niveau : "Avancé (a)"
Objectifs : Compréhension orale Exprimer son opinion, ses goûts
Thèmes : L'art, l'Ecole de Paris
Je veux mettre ces informations en base de donnée. Le script PHP
permettant de manipuler la chaine, doit s'adapter à chaque PDF. Dans
chaque pdf il y a toujours un nombre suivi d'un point "1." puis le
titre. Le problème c'est que parfois thème est au singulier ou au
pluriel ainsi que Niveau soit au singulier soit au pluriel.
Avec le "*." on dit alors que la chaine de caractères "Niveau :" peut aussi être de la forme "Niveaux :".
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ? Autre question, est t'il possible d'identifier un chiffre suivi d'un point mais peut importe le chiffre, ce peut être "1." "2." "3." "15." "200."
Avec le "*." on dit alors que la chaine de caractères "Niveau :" peut
aussi être de la forme "Niveaux :".
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ?
Autre question, est t'il possible d'identifier un chiffre suivi d'un
point mais peut importe le chiffre, ce peut être "1." "2." "3." "15."
"200."
Avec le "*." on dit alors que la chaine de caractères "Niveau :" peut aussi être de la forme "Niveaux :".
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ? Autre question, est t'il possible d'identifier un chiffre suivi d'un point mais peut importe le chiffre, ce peut être "1." "2." "3." "15." "200."
// L'expression régulière / rationnelle qui va nous permettre // d'extraire les informations recherchées. // Un problème est que le thème doit avoir un marqueur de fin. $str_pattern = '/[0-9]+. (.+) Niveaux? : (.+) Objectifs? : (.+) ' . 'Thèmes? : (.+) [0-9]+./Ui';
Titre : Exposition : l'Ecole de Paris au Musée d'Art Moderne Niveaux : Avancé (a) Objectifs : Compréhension orale Exprimer son opinion, ses goûts Thèmes : L'art, l'Ecole de Paris
HTH
-- hughes monget
Bonjour,
Voici une solution à votre problème:
<?php
$str_texte_du_pdf = file_get_contents('pdf.txt');
// On met tout le texte sur une ligne afin de s'éviter une
// prise de tête avec les modifiers m et s des PCRE.
// cf: http://www.php.net/pcre
// L'expression régulière / rationnelle qui va nous permettre
// d'extraire les informations recherchées.
// Un problème est que le thème doit avoir un marqueur de fin.
$str_pattern = '/[0-9]+. (.+) Niveaux? : (.+) Objectifs? : (.+) '
. 'Thèmes? : (.+) [0-9]+./Ui';
Titre : Exposition : l'Ecole de Paris au Musée d'Art Moderne
Niveaux : Avancé (a)
Objectifs : Compréhension orale Exprimer son opinion, ses goûts
Thèmes : L'art, l'Ecole de Paris
// L'expression régulière / rationnelle qui va nous permettre // d'extraire les informations recherchées. // Un problème est que le thème doit avoir un marqueur de fin. $str_pattern = '/[0-9]+. (.+) Niveaux? : (.+) Objectifs? : (.+) ' . 'Thèmes? : (.+) [0-9]+./Ui';
Titre : Exposition : l'Ecole de Paris au Musée d'Art Moderne Niveaux : Avancé (a) Objectifs : Compréhension orale Exprimer son opinion, ses goûts Thèmes : L'art, l'Ecole de Paris
HTH
-- hughes monget
Olivier Miakinen
Le 07/07/2005 14:36, CrazyCat répondait à Samuel MARTIN :
Autre question, est t'il possible d'identifier un chiffre suivi d'un point mais peut importe le chiffre, ce peut être "1." "2." "3." "15." "200."
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point
"/d{1,}./" devrait fonctionner tout aussi bien, et même "/d+./", ou encore "/[0-9]+./" comme proposé par loufoque.
Cela dit, Samuel, peut-être voudras-tu exclure les nombres commençant par 0. Si le nombre 0 lui-même est interdit, cela donne : "/[1-9][0-9]*./".
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
Le 07/07/2005 14:36, CrazyCat répondait à Samuel MARTIN :
Autre question, est t'il possible d'identifier un chiffre suivi d'un
point mais peut importe le chiffre, ce peut être "1." "2." "3." "15."
"200."
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point
"/d{1,}./" devrait fonctionner tout aussi bien, et même "/d+./", ou
encore "/[0-9]+./" comme proposé par loufoque.
Cela dit, Samuel, peut-être voudras-tu exclure les nombres commençant par 0.
Si le nombre 0 lui-même est interdit, cela donne : "/[1-9][0-9]*./".
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.
Le 07/07/2005 14:36, CrazyCat répondait à Samuel MARTIN :
Autre question, est t'il possible d'identifier un chiffre suivi d'un point mais peut importe le chiffre, ce peut être "1." "2." "3." "15." "200."
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point
"/d{1,}./" devrait fonctionner tout aussi bien, et même "/d+./", ou encore "/[0-9]+./" comme proposé par loufoque.
Cela dit, Samuel, peut-être voudras-tu exclure les nombres commençant par 0. Si le nombre 0 lui-même est interdit, cela donne : "/[1-9][0-9]*./".
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
MARTIN Samuel
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point Etes vous sur de cela ?
J'ai essayer il repère pas "1." "2." peut importe le chiffre, cela ne fonctionne pas chez moi
j'ai essayer $a= split("/[:digit:]{1,}./", $chaine1) cela ne fonctionne pas non plus .. je me rends compte dans son résultat qu'il ne repère pas du tout le chiffre suivi du point.
Merci de votre contribution et merci pour celle des autres également.
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point
Etes vous sur de cela ?
J'ai essayer il repère pas "1." "2." peut importe le chiffre, cela ne
fonctionne pas chez moi
j'ai essayer $a= split("/[:digit:]{1,}./", $chaine1) cela ne fonctionne
pas non plus .. je me rends compte dans son résultat qu'il ne repère pas
du tout le chiffre suivi du point.
Merci de votre contribution et merci pour celle des autres également.
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point Etes vous sur de cela ?
J'ai essayer il repère pas "1." "2." peut importe le chiffre, cela ne fonctionne pas chez moi
j'ai essayer $a= split("/[:digit:]{1,}./", $chaine1) cela ne fonctionne pas non plus .. je me rends compte dans son résultat qu'il ne repère pas du tout le chiffre suivi du point.
Merci de votre contribution et merci pour celle des autres également.
Le 07/07/2005 16:13, loufoque répondait à Samuel :
[ "Niveau*. :" ]
Avec le "*." on dit alors que la chaine de caractères "Niveau :" peut aussi être de la forme "Niveaux :".
Dans ce cas là ce serait plutôt "Niveaux? :"
Oui.
"Niveaux? :" = "Niveau :" ou "Niveaux :" et c'est tout.
"Niveau*. :" = "Niveau :" ou "Niveaux :" mais aussi "Nivea :" ou "Niveauuuuuuuuuuuuuuuuuuuuuuuuuuuu :", etc.
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ?
spliti ?
Oui, c'était facile. ;-)
Autre question, est[-]il possible d'identifier un chiffre suivi d'un point mais peu[] importe le chiffre, ce peut être "1." "2." "3." "15." "200."
[0-9]+.
Je complète mon autre réponse. D'après tes exemples, tu (Samuel) ne veux pas un chiffre suivi d'un point, mais un *nombre* suivi d'un point (les chiffres vont de 0 à 9). Pour tous les nombres entiers positifs ou nuls, commençant éventuellement par un nombre quelconque de 0, la réponse de loufoque est bonne ; pour les nombres ne commençant pas par 0, et en excluant le nombre 0, tu peux utiliser « [1-9][0-9]*. » ; enfin, pour accepter en plus le nombre constitué du seul chiffre 0, il y a « (0|[1-9][0-9]*). ».
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
Le 07/07/2005 16:13, loufoque répondait à Samuel :
[ "Niveau*. :" ]
Avec le "*." on dit alors que la chaine de caractères "Niveau :" peut
aussi être de la forme "Niveaux :".
Dans ce cas là ce serait plutôt "Niveaux? :"
Oui.
"Niveaux? :" = "Niveau :" ou "Niveaux :" et c'est tout.
"Niveau*. :" = "Niveau :" ou "Niveaux :" mais aussi "Nivea :" ou
"Niveauuuuuuuuuuuuuuuuuuuuuuuuuuuu :", etc.
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ?
spliti ?
Oui, c'était facile. ;-)
Autre question, est[-]il possible d'identifier un chiffre suivi d'un
point mais peu[] importe le chiffre, ce peut être "1." "2." "3." "15."
"200."
[0-9]+.
Je complète mon autre réponse. D'après tes exemples, tu (Samuel) ne veux
pas un chiffre suivi d'un point, mais un *nombre* suivi d'un point (les
chiffres vont de 0 à 9). Pour tous les nombres entiers positifs ou nuls,
commençant éventuellement par un nombre quelconque de 0, la réponse de
loufoque est bonne ; pour les nombres ne commençant pas par 0, et en
excluant le nombre 0, tu peux utiliser « [1-9][0-9]*. » ; enfin,
pour accepter en plus le nombre constitué du seul chiffre 0, il y a
« (0|[1-9][0-9]*). ».
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.
Le 07/07/2005 16:13, loufoque répondait à Samuel :
[ "Niveau*. :" ]
Avec le "*." on dit alors que la chaine de caractères "Niveau :" peut aussi être de la forme "Niveaux :".
Dans ce cas là ce serait plutôt "Niveaux? :"
Oui.
"Niveaux? :" = "Niveau :" ou "Niveaux :" et c'est tout.
"Niveau*. :" = "Niveau :" ou "Niveaux :" mais aussi "Nivea :" ou "Niveauuuuuuuuuuuuuuuuuuuuuuuuuuuu :", etc.
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ?
spliti ?
Oui, c'était facile. ;-)
Autre question, est[-]il possible d'identifier un chiffre suivi d'un point mais peu[] importe le chiffre, ce peut être "1." "2." "3." "15." "200."
[0-9]+.
Je complète mon autre réponse. D'après tes exemples, tu (Samuel) ne veux pas un chiffre suivi d'un point, mais un *nombre* suivi d'un point (les chiffres vont de 0 à 9). Pour tous les nombres entiers positifs ou nuls, commençant éventuellement par un nombre quelconque de 0, la réponse de loufoque est bonne ; pour les nombres ne commençant pas par 0, et en excluant le nombre 0, tu peux utiliser « [1-9][0-9]*. » ; enfin, pour accepter en plus le nombre constitué du seul chiffre 0, il y a « (0|[1-9][0-9]*). ».
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
Olivier Miakinen
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point Etes vous sur de cela ?
J'ai essayer il repère pas "1." "2." peut importe le chiffre, cela ne fonctionne pas chez moi
j'ai essayer $a= split("/[:digit:]{1,}./", $chaine1) cela ne fonctionne pas non plus .. je me rends compte dans son résultat qu'il ne repère pas du tout le chiffre suivi du point.
Aussi bien d que [:digit:] sont des syntaxes reconnues par les expressions de type perl, de même que le fait de mettre des séparateurs au début et à la fin (les /). Essaye avec preg_split(), qui est indiquée dans la doc comme étant beaucoup plus rapide, et cela a des chances d'aller mieux.
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point
Etes vous sur de cela ?
J'ai essayer il repère pas "1." "2." peut importe le chiffre, cela ne
fonctionne pas chez moi
j'ai essayer $a= split("/[:digit:]{1,}./", $chaine1) cela ne fonctionne
pas non plus .. je me rends compte dans son résultat qu'il ne repère pas
du tout le chiffre suivi du point.
Aussi bien d que [:digit:] sont des syntaxes reconnues par les
expressions de type perl, de même que le fait de mettre des séparateurs
au début et à la fin (les /). Essaye avec preg_split(), qui est indiquée
dans la doc comme étant beaucoup plus rapide, et cela a des chances
d'aller mieux.
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.
"/[d]{1,}./" <-- de 1 à x chiffres suivi(s) d'un point Etes vous sur de cela ?
J'ai essayer il repère pas "1." "2." peut importe le chiffre, cela ne fonctionne pas chez moi
j'ai essayer $a= split("/[:digit:]{1,}./", $chaine1) cela ne fonctionne pas non plus .. je me rends compte dans son résultat qu'il ne repère pas du tout le chiffre suivi du point.
Aussi bien d que [:digit:] sont des syntaxes reconnues par les expressions de type perl, de même que le fait de mettre des séparateurs au début et à la fin (les /). Essaye avec preg_split(), qui est indiquée dans la doc comme étant beaucoup plus rapide, et cela a des chances d'aller mieux.
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.