récupérer du texte dans une chaine de caractère

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : récupérer du texte dans une chaine de caractère

Re: récupérer du texte dans une chaine de caractère

par sirakawa » 29 avr. 2014, 16:11

@moogli en particulier:
Tu as raison; c'est pourquoi je me sers de trim pour éviter le problème du mot vide en début de phrase.
et je pense qu'il vaudrait mieux, soit faire comme tu dis, soit se servir de strtok qui permetttrait d'isoler les mots avec l'espace et les ponstuations autres que le point. Je me demande même s'il ne faudrait pas strtok le texte entier (avec . ! ? comme séparateur)

Re: récupérer du texte dans une chaine de caractère

par moogli » 29 avr. 2014, 15:25

Bonjour,

Je voudrais créér un script qui me permettrait de récupérer les 3 premiers mots de chaque phrase dans un texte défini.

pour cela je pense qu'il faudrait que je créé une boucle pour parcourir tous le texte mais j'ai beau chercher j'avoue que je bloque.

Avez-vous une idée svp ??

Merci.
salut,

Il n'y a que moi que cela choque un explode sur un espace pour ne prendre que les 3 premiers index du tableau généré ? (sur un pharse de 6 mots, cela passe mais sur cinquante mots ?).

utiliser stpos et sustr semble tout aussi indiqué.

exemple
<?php

$chaine = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sed.';

$pos1 = strpos($chaine, ' ');
$pos2 = strpos($chaine, ' ', $pos1 + 1);
$pos3 = strpos($chaine, ' ', $pos2 + 1);

$mot1 = substr($chaine, 0, $pos1);
$mot2 = substr($chaine, $pos1 + 1, $pos2 - $pos1 - 1);
$mot3 = substr($chaine, $pos2 + 1, $pos3 - $pos2 - 1);

echo 'La chaine <br/>', $chaine, '<br /> le 1er mot : |', $mot1, '|<br /> le 2ème : |', $mot2, '|<br />', 'le 3ème : |', $mot3, '|';
reste a mettre cela dans une fonction pour faire propre et l'ajouter la séparation des phrases.
personnes n'utilise trim histoire d'éviter les problèmes s'il y a un espace en début de chaines ?
Ce qui va fatalement arriver si tu "split" sur les points et que la typo est respectée (un point est toujours suivis d'un espace donc explode va prendre ce qui suis le point pour le début de la chaîne et la tu auras un premier "mot" "vide").


@+

Re: récupérer du texte dans une chaine de caractère

par Arkeins » 29 avr. 2014, 12:47

Je peux pas tester maintenant, je te donne rapidement la méthode que j'appliquerais :

> tu regardes lequel de tes deux tableaux est le plus grand, tu mets cette valeur dans une boucle
> tu parcours tes tableaux, et tu concatènes tes deux tableaux dans ton string s'ils ne sont pas vide

Je pense pas qu'il y ait plus que ça ^^"

Re: récupérer du texte dans une chaine de caractère

par napoleon59 » 29 avr. 2014, 12:15

Ok top merci.

Maintenant plutot que de les afficher je les stocké dans un tableau

$tab1[] = $mot1." ".$mot2." ".$mot3."<br/>";

J'ai fait la meme chose avec un autre texte donc j'ai un deuxieme tableau

$tab2[] = $mot1." ".$mot2." ".$mot3."<br/>";

Et j'aimerai concatener à la suite toutes les lignes du tableau de chaque texte avec la structure suivante

$tab1[0] $tab2[0] $tab1[1] $tab2[1] $tab1[2] $tab2[2], etc.....

Donc il faudrait que j'utilise un foreach je pense mais la je coince vraiment.

Re: récupérer du texte dans une chaine de caractère

par Arkeins » 29 avr. 2014, 12:07

En fait j'ai fait mis le empty car j'ai des entrées vide dans mon tableau qui me génère dans lignes sans résultat et je souhaite les supprimer.

Ca n'est pas pareil la syntaxe suivante?

for ($i=O; $i<$nombre_element; $i = $i+3)

for ($i=O; $i<$nombre_element; $i+3)
Dans le second cas, tu calcules la valeur égale à $i +3, mais sans jamais l'assigné à $i, ta variable restera donc à 0.

En d'autres termes tu crées une boucle infinie, ce qui est assez mauvais.

Je ne sais pas si mon explication est précise ^^"

Re: récupérer du texte dans une chaine de caractère

par Arkeins » 29 avr. 2014, 12:05

Dans ce cas il faudrait tester quand tu assigne le contenu de ton array :
$test2 = "Mon texte que je veux séparer en 3 mots"
$teste = explode(" ", $test2);
$nombre_element=count($teste);
for ($i=O; $i<$nombre_element; $i = $i+3)
{
$mot1= !empty($teste[$i+0]) ? $teste[$i+1] : '';
$mot2= !empty($teste[$i+1]) ? $teste[$i+2] : '';
$mot3= !empty($teste[$i+2]) ? $teste[$i+3] : '';
echo $mot1." ".$mot2." ".$mot3."<br/>";

}
Après ce code affichera le retour à la ligne même si tu n'as que deux variables (ou moins) à afficher, si tu souhaites le retour à la ligne uniquement à 3, un simple compteur pour l'affichage du "<br/>" devrait suffire

Re: récupérer du texte dans une chaine de caractère

par napoleon59 » 29 avr. 2014, 12:00

En fait j'ai fait mis le empty car j'ai des entrées vide dans mon tableau qui me génère dans lignes sans résultat et je souhaite les supprimer.

Ca n'est pas pareil la syntaxe suivante?

for ($i=O; $i<$nombre_element; $i = $i+3)

for ($i=O; $i<$nombre_element; $i+3)

Re: récupérer du texte dans une chaine de caractère

par Arkeins » 29 avr. 2014, 11:54

Dans ta boucle for, tu calcules $i+3, mais tu ne donnes pas la valeur à ta variable, elle reste donc à 0.

J'imagine que c'est la cause de ton "!empty($i)" et de ton "$i = $i + 3" à la fin.

En modifiant juste ça, on obtient le code suivant, ce qui est nettement mieux (sauf erreur de ma part) :
$test2 = "Mon texte que je veux séparer en 3 mots"
$teste = explode(" ", $test2);
$nombre_element=count($teste);
for ($i=O; $i<$nombre_element; $i = $i+3)
{
$mot1= $teste[$i+0];
$mot2= $teste[$i+1];
$mot3= $teste[$i+2];
echo $mot1." ".$mot2." ".$mot3."<br/>";

}
Personnellement je trouve ça pas mal, mais je suis pas un expert ^^

Re: récupérer du texte dans une chaine de caractère

par napoleon59 » 29 avr. 2014, 11:43

Merci je n'avais pas vu les réponses en page 2. J'ai réussit tout seul avec un autre code. Est-ce que celui-ci te semble correct ? Est-il mieux ou moins bien que le tien et pourquoi ? Merci.



$test2 = "Mon texte que je veux séparer en 3 mots"
$teste = explode(" ", $test2);
$nombre_element=count($teste);
for ($i=O; $i<$nombre_element; $i+3)
{
if (!empty($i));
{
$mot1= $teste[$i+0];
$mot2= $teste[$i+1];
$mot3= $teste[$i+2];
echo $mot1." ".$mot2." ".$mot3."<br/>";
$i = $i + 3;
}
}

Re: récupérer du texte dans une chaine de caractère

par sirakawa » 29 avr. 2014, 11:33

Voici un exemple développé
<?PHP
$texte = "Il fait beau ce matin. La pluie a cessé hier. Et les hirondelles volent les porte-manteaux.";
$phrases = explode(".", $texte);
/*il faut éliminer le dernier élément du tableau, qui est une phrase vide
Si tu ne comprend pas, décommente la ligne suivante */
//print_r($phrases);
$p = array_pop($phrases);
$extraits = array();
$i = 1;
foreach($phrases as $phrase)
{
	/*Il faut éliminer les espaces éventuels en début et en fin de phrase sinon on va trouver des mots vides*/
	$mots = explode (" ", trim($phrase));
	for ($j = 0; $j <3; $j++)
	{
		$extraits[$i][$j] = ($mots[$j]!= "") ? $mots[$j] : "";
	}
	$i++;
/*on aurait un meilleur traitement avec strtok*/
}
print_r($extraits);

?>

Re: récupérer du texte dans une chaine de caractère

par Arkeins » 29 avr. 2014, 10:49

Tiens, je pense que ça peut t'aider :
<?php

// ici je génère juste un texte
$monText = '';
for( $i = 0; $i <30; $i++ ) {
	$monText .= "mot$i ";
}

// on explose tout ça
$monArray = explode(" ", $monText);

$i = 0; // notre compteur

// on continue tant qu'on n'a pas atteind la fin de notre array
while( $i < sizeof($monArray) )  {
	// on charge nos mots
	$mot1 = $monArray[$i];
	$mot2 = $monArray[$i+1];
	$mot3 = $monArray[$i+2];
	
	// on les affiche
	echo "$mot1 $mot2 $mot3 <br/>";
	
	// on incrémente notre compteur
	$i += 3;
}

Re: récupérer du texte dans une chaine de caractère

par napoleon59 » 29 avr. 2014, 10:44

En gros pour ma boucle je voudrais lui dire ceci :

Tant que la valeur du tableau est différent de null alors execute le code sinon arrete.

Re: récupérer du texte dans une chaine de caractère

par napoleon59 » 29 avr. 2014, 10:29

Merci une partie de l'erreur venait de l'oublie du dollar et de la variable en booléen :-).

Pour la boucle je ne vois pas comment faire. En gros je voudrais que ma boucle fonctionne tant qu'il y reste des séquences de 3 mots à mettre à la suite.

Re: récupérer du texte dans une chaine de caractère

par Arkeins » 29 avr. 2014, 09:45

$test="mon texte que je voudrais séparer en 3 mots"
$teste = explode(" ", $test2);

$i == 0;
foreach($teste AS $a)
{
$mot1= $teste[i+1];
$mot2= $teste[i+2];
$mot3= $teste[i+3];
echo $mot1."/".$mot2."/".$mot3."<br/>";
$i = $i + 3;
}

Mon texte est bien sindé en 3 mais il répète les meme mots tous le temps le $i + 3 ne marche pas
Salut !

Peut être une erreur lorsque tu nous as copié ton code, mais il manque des "$" sur les "i" dans dans ta variable $teste.
De même $i == 0 retourne un booléen, il te faut "$i = 0", un seul = pour une attribution.

Autre chose, que j'ai sûrement mal compris, mais quel est l'intérêt de faire un foreach si tu ne sers pas du $a ?

Edit : oublie d'un mot dans ma phrase ^^"

Re: récupérer du texte dans une chaine de caractère

par napoleon59 » 29 avr. 2014, 09:35

$test="mon texte que je voudrais séparer en 3 mots"
$teste = explode(" ", $test2);

$i == 0;
foreach($teste AS $a)
{
$mot1= $teste[i+1];
$mot2= $teste[i+2];
$mot3= $teste[i+3];
echo $mot1."/".$mot2."/".$mot3."<br/>";
$i = $i + 3;
}

Mon texte est bien sindé en 3 mais il répète les meme mots tous le temps le $i + 3 ne marche pas