RÉSUMER UN TEXTE SANS COUPER LES MOTS OU PHRASES

knasucre Messages postés 4 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 31 octobre 2006 - 31 oct. 2006 à 12:58
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008 - 17 mai 2008 à 20:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40147-resumer-un-texte-sans-couper-les-mots-ou-phrases

cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
17 mai 2008 à 20:57
Raaaaaaaaah merde, la fonction n'est pas faite pour du UTF8 (Cf. tinywords) ni pour de l'Unicode. Les strlen peuvent provoquer une mauvaise estimation de la longueur. Faut les remplacer par le strlen MultiBytes qui nécessite la présence de ce module sur le serveur.
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
17 mai 2008 à 17:47
c'est dr?le car tu as trouv? un bug avec le ? et le ! alors que je te parlais du " a " avec accent.
Il semblerait que le systeme de post de phpcs est eu un petit souci de convertion de lettres accentu?s.
pour mon pb de txt court, il n'y a pas de html dans le txt.
j'aivais enlev? le html a cause des photos qu'il pouvais y avoir au debut des articles
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
17 mai 2008 à 17:09
Hum, tout d'abord, en production, j'ai été obligé de corriger plein de trucs, je partagerais un update asap.

Perso, jai désactivé les tinywords car çà merde beaucoup, et grosse perte de performance.

Et, tu me fais justement remarqué que la fonction ne gère pas les césures avec un ! ou ? ... Je vais plancher la dessus.

Enfin, n'oublie pas de fournir un texte sans HTML, via strip_tags... Ca peut expliquer ton petit résumé si ya du code CSS ;op
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
17 mai 2008 à 10:48
bonjour,
je ne comprand pas pourquoi la phrase se termine apres un " ? "alors qu'il a ?t? d?finis dans les mots a ne pas prandre.
$tinyWords = array(':',';','a','?','au', ...
autre chose j'ai un r?sum? de 177 caracteres alor que j'en ai defini 400 dans la fonction et l'article contient plusieurs centaines de lignes.
merci de votre aide et bon week
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
28 janv. 2008 à 02:30
Pour info, la version RegEx proposée n'a pas donnée le résultat espérée d'un point de vue effeicacité... Pas comparé pour les performances :op
lTommyl Messages postés 28 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 26 novembre 2008
27 déc. 2007 à 17:56
Copie et passe cette ligne a l'endroit ou tu le souhaite.

<?=YMA_Resume($row_cherche_article['article']) ?>

Bravo pour la source :)
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
30 déc. 2006 à 13:24
Bonjour, pour étre franc je ne sais pas comment on utilise une fonction.
La variable qui serais concerné par ce code s'appel : $row_cherche_article['article'].
Comment appliquer cette fonction a cette variable ?

Merci et bonne année a tous
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
18 nov. 2006 à 17:56
Merciiiiiiiiiiiiii :o)

Je vais faire un test comparatif sur YMobActus pour voir ce que çà donne ;o)
bens59 Messages postés 1 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 18 novembre 2006
18 nov. 2006 à 16:36
Voilà ce que cela pourrait donner en Regex.
Beaucoup plus court et rapide, mais plus difficile à décrypter.
On coupe la chaîne à la longueur maxi, puis on remonte jusqu'au premier espace trouvé ou jusqu'à la première ponctuation si elle n'est pas éloignée de plus de x caractères ($tronque_maxi) du dernier espace.
Bien sûr c'est adaptable et améliorable.


function resume($chaine, $longueur_maxi=250, $tronque_maxi=5 ) {
if (strlen($chaine)>$longueur_maxi) {
$c = substr(ltrim($chaine), 0, $longueur_maxi);
preg_match('`.+(?=[,;\.])`s', $c, $out1); // la chaîne raccourcie jusqu'à la dernière ponctuation
preg_match('`.+(?=[ ])`s', $c, $out2); // la chaîne raccourcie jusqu'au dernier espace
// Si la ponctuation trouvée est trop loin du dernier mot on n'en tient pas compte
if ( ( strlen($out2[0]) - strlen($out1[0]) ) < $tronque_maxi) {
$c = $out1[0];
} else {
$c = $out2[0];
}
// Supprime les mots courts en fin de phrase
if (preg_match('`.+(?=(de|du|dans|le|la|a|à)$)`s', $c, $out3)) {$c = $out3[0];};
return $c."...";
} else {
return $chaine;
}
}
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
2 nov. 2006 à 15:11
Salut !

"Les reg-ex, cest pas ma tasse de thé, mais si t'en fais une qui permet de recuperer le texte original sous forme d'un tableau avec un mot ou une balise par cellule, je peux tenter le coup..."
- Et avec explode(), tu n'arriverais pas au meme but ? Sa me parrait l'ideal non ?

=> http://www.php.net/manual/fr/function.explode.php

@++
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
2 nov. 2006 à 12:34
C'est loin d'etre simple de gérer le HTML, il fodrait gerer des balises SCRIPT ou STYLE qui encadrent du contenu non-textuel

Les reg-ex, cest pas ma tasse de thé, mais si t'en fais une qui permet de recuperer le texte original sous forme d'un tableau avec un mot ou une balise par cellule, je peux tenter le coup...
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
2 nov. 2006 à 11:55
bl1412 > Avec des regexp tu devrais pouvoir t'en sortir...

Sinon, je n'ai pas encore lu le source mais je le retiens, ça peut être très utile ^^
cs_bl1412 Messages postés 4 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 4 novembre 2008
31 oct. 2006 à 18:16
C'est bien dommage :(
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
31 oct. 2006 à 17:40
J'avais oublié de préciser... Mon script ne prend pas en charge la présence de codes HTML :o(
cs_bl1412 Messages postés 4 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 4 novembre 2008
31 oct. 2006 à 17:13
Je me souviens avoir utilisé un script de ce genre, le problème au quel j'ai été confronté est lorsque la longueur du texte fixée (ici 250) arrive sur une balise et la divise en plein milieu.
Par exemple avec coupée avant la fermeture de la balise " />", des erreurs seront affichées dans le texte.
knasucre Messages postés 4 Date d'inscription mardi 15 février 2005 Statut Membre Dernière intervention 31 octobre 2006
31 oct. 2006 à 12:58
Pas mal ta source , à tester mais cela pourrais être bien utile pour les sites de news , merci et bonne prog a tous.
Rejoignez-nous