GNT sans publicité, site mobile, fonctionnalitées exclusives...

Manipulation chaine de caractere

Le
martin.sam
Bonjour,

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/M...il_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.


J'ai essayer de faire ça :

$debut_titre = strpos($texte, ".");
$fin_titre = strpos($texte, "Niveau");
echo substr($texte, $debut_titre+1,$fin_titre-10);

$debut_niveau= strpos($texte, "Niveau");
$fin_niveau= strpos($texte, "Objectifs");
echo substr($texte, $debut_niveau,$fin_niveau);

Cela permet de définir un intervalle entre chaque chaine, mais ce
n'est pas concluant et souvant inexacte.

Si quelqu'un à une solution plus performante pour extraire les bonnes
infos de la chaine de caractère, merci de l'indiquer.

--
MARTIN.S
http://www.cavilam.com/
http://www.leplaisirdapprendre.com/
http://sevreskarate.free.fr/
Lire les 9 réponses

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
loufoque
Le #803086
a dit le 06/07/2005 à 14:01:

echo substr($texte, $debut_titre+1,$fin_titre-10);


ce serait plutôt substr($texte, $debut_titre+1, $fin_titre-$debut_titre-1);


echo substr($texte, $debut_niveau,$fin_niveau);


Même chose.

MARTIN Samuel
Le #803083
J'ai trouvé cette nuit une autre solution :

list($chaine1, $chaine2)=split("Niveau*. :", $texte);
//echo $chaine1;
$a= split(".", $chaine1);
echo "<br/>";
echo "Titre : ". $a[1]."<br/>";

$b = split("Objectif*. :", $chaine2);
$niveau = $b[0];
echo "Niveau(x) : ". $niveau ."</br>";
$c = split("Thème*. :", $b[1]);
$objectif = $c[0];
echo "Objectifs : ". $objectif ."</br>";
$d = split("1. ", $c[1]);
$theme = $d[0];
echo "Thèmes : ". $theme ."</br>";


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."

Merci d'avance

MARTIN.S
-------------------------------------------
http://www.cavilam.com
http://www.leplaisirdapprendre.com
http://sevreskarate.free.fr
CrazyCat
Le #803082
MARTIN Samuel wrote:
Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ?


en utlisant un split du genre:
split("niveau*. :", strtolower($texte));

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

Merci d'avance


De rien

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

loufoque
Le #803078
MARTIN Samuel a dit le 07/07/2005 à 10:00:

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? :"


Quelqu'un a t'il une solution pour ne pas avoir de problème de casse ?


spliti ?


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."


[0-9]+.

Hughes Monget
Le #803080
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

$str_texte_du_pdf = str_replace(
Array("rn", "r", "n"),
Array("n", "n", ' '),
$str_texte_du_pdf);

// 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';

if (preg_match($str_pattern, $str_texte_du_pdf, $arr_str_matches))
{
echo('<pre>');
echo($str_texte_du_pdf . "n");
var_dump($arr_str_matches);
echo('Titre : ' . $arr_str_matches[1] . "n"); // Magic number
echo('Niveaux : ' . $arr_str_matches[2] . "n");
echo('Objectifs : ' . $arr_str_matches[3] . "n");
echo('Thèmes : ' . $arr_str_matches[4] . "n");
echo('</pre>');
}

?>

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
Publicité
Suivre les réponses
Poster une réponse
Anonyme