RÉSUMER UN TEXTE SANS COUPER LES MOTS OU PHRASES

Messages postés
6
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
31 octobre 2006
- - Dernière réponse : 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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
6
Date d'inscription
mardi 15 février 2005
Statut
Membre
Dernière intervention
31 octobre 2006
-
Pas mal ta source , à tester mais cela pourrais être bien utile pour les sites de news , merci et bonne prog a tous.