Résumer un texte sans couper les mots ou phrases

Contenu du snippet

Cette fonction recherche un point, une virgule (ou autres ponctuations) à proximité du nombre de caractères que l'on souhaite obtenir au maximum.
Au pire, elle cherche le dernier mot qui ne depasse pas la limite.

Source / Exemple :


function YMA_Resume($description,$lng=250,$nxtstr='?')
	{
	if ((strlen($description) <= $lng) OR ($lng <= 0))
		{
		$res = $description;
		}
	else
		{
		// Longueur minimum du résumé
		$minLng = ceil($lng*1/2)+1;
		
		$lstPt = $lstComa = $lstQuote = $lstDblPt = 0;
		$mots = explode(' ',$description);
		$res = $mots[0];
		$nbMots = count($mots);
		$i = 1;
		// On reconstruit le texte mot par mot
		while($i < $nbMots)
			{
			$lenRes= strlen($res);
			$lenMot=strlen($mots[$i]);
			if (($lenRes+1+$lenMot) <= $lng)
				{
				$res = $res.' '.$mots[$i];
				if ($lenRes > $minLng)
					{
					$lstChar = substr($mots[$i],-1);
					if ($lstChar == ',')
						{
						// Césure de phrase
						$lstComa = $lenRes+1+$lenMot;
						}
					else if (($lstChar == '.') AND ($lenMot > 2)) // On evite les abreviations de nom ou prénom
						{
						// Fin de phrase
						$lstPt = $lenRes+1+$lenMot;
						}
					else if (($lstChar == ':') OR ($lstChar == ';'))
						{
						// Césure
						$lstDblPt = $lenRes+1+$lenMot;
						}
					}
				}
			else
				{
				break;
				}
			$i++;
			}
			
		
		if ($lstPt > 0)
			{
			$res = substr($res,0,$lstPt);
			}
		else if ($lstDblPt > 0)
			{
			$res = rtrim(substr($res,0,$lstDblPt-1)).$nxtstr;
			}
		else if ($lstComa > 0)
			{
			$res = rtrim(substr($res,0,$lstComa-1)).$nxtstr;
			}
		else
			{
			// Suppression des petits mots se trouvant à la fin
			// Inutile pour respecter la longueur maxi, mais plus convivial
			$tinyWords = array();
			//$tinyWords = array(':',';','a','à','au','aux','avec','ce','dans','sur','un','une');
			$tinyWords = array(':',';');
			while (in_array(strtolower($mots[$i-1]),$tinyWords))
				{
				$res = substr($res,0,-(strlen($mots[$i-1])+1));
				$i--;
				}
			
			$res = $res.$nxtstr;
			}
		}
		
	return $res;
	}

Conclusion :


Crée pour le projet http://ymobactus.miaouw.net portail Wap 2.0 d'actualités

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.