J'ai fait la fonction suivante pour renvoyer un nombre spécifique de mots à partir d'un texte: et ça fonctionne assez bien avec la langue anglaise mais quand j'essaie de l'utiliser avec une langue arabe Il échoue et ne renvoie pas les mots comme prévu. Par exemple: P> function brief_text($string, $number_of_required_words = 50) {
$string = trim(preg_replace('/\s+/', ' ', $string));
$words = explode(" ", $string);
$required_words = array_slice($words, 0, $number_of_required_words); // get sepecific number of elements from the array
return implode(" ", $required_words);
}
3 Réponses :
Essayez avec cette fonction pour le nombre de mots:
// You can call the function as you like
if (!function_exists('mb_str_word_count'))
{
function mb_str_word_count($string, $format = 0, $charlist = '[]') {
mb_internal_encoding( 'UTF-8');
mb_regex_encoding( 'UTF-8');
$words = mb_split('[^\x{0600}-\x{06FF}]', $string);
switch ($format) {
case 0:
return count($words);
break;
case 1:
case 2:
return $words;
break;
default:
return $words;
break;
}
};
}
echo mb_str_word_count("اÙÙØ§Ùرة Ù٠عاصÙ
Ø© Ù
صر ÙØ¨Ø§Ø±Ùس Ù٠عاصÙ
Ø© ÙØ±Ùسا") . PHP_EOL;
AFAIK, ce nombre de mots ne fonctionnera pas pour le texte arabe. En arabe comme des langues, il y a quelques mots qu'ils ont des espaces dans eux.
Vous pouvez faire une liste de caractères qui sont des séparateurs. Adecional peut construire des exceptions, je suppose que ces mots avec des espaces à l'intérieur doivent avoir une règle pouvant être programmée.
1+ Pour les ressources sur "Un algorithme stemming arabe basé sur des règles" :)
@RKMAX Merci pour les ressources.
Je n'appelerais pas cette fonction mb_str_word_count () code> car il pourrait casser l'ensemble du système si la fonction native est jamais mise en œuvre.
Ok allez-y et renommez-le à autre chose. La réponse a été mise à jour en effet une meilleure approche :-) 1+ pour ce fonction_existes code> partie.
J'ai juste ajouté $ Format et $ Charlist Paramètre afin que personne ne soit confondu s'il utilise uniquement le polyfill.
ne fonctionne pas pour certaines langues (c'est-à-dire l'Europe d'Europe de l'Est)
@RKMAX Merci ... C'est le travail pour Persian (Farsi) .Toutes les utilisateurs arabes et persans et autres langues ... Venez ici ( bugs.php.net/bug.php?id=63671 ) et vote pour mb_str_word_count code>
Pour accepter les caractères ASCII aussi:
if (!function_exists('mb_str_word_count'))
{
function mb_str_word_count($string, $format = 0, $charlist = '[]') {
$string=trim($string);
if(empty($string))
$words = array();
else
$words = preg_split('~[^\p{L}\p{N}\']+~u',$string);
switch ($format) {
case 0:
return count($words);
break;
case 1:
case 2:
return $words;
break;
default:
return $words;
break;
}
}
}
Il y a quelque temps, je voulais calculer le temps de lecture d'un paragraphe et avoir le même problème et je comptais simplement les espaces dans le paragraphe :) (Notez que ce ne sera pas si précis mais cela me convient)
Comme ceci: p>
Bonne idée. Et vous pouvez le rendre plus précis en remplaçant tous les espaces multiples avec un seul espace avant d'utiliser la méthode substr_count code>.
Ouais c'est vrai, il donnera les mots exacts mais dans mon cas, cela n'a pas beaucoup d'importance.
Veuillez voter ici pour un
mb_str_word_count () code> Fonction: Bugs.php .net / bug.php? id = 63671@Amr je parle seulement espagnol et un peu anglais, vous pouvez publier une liste de mots arabes qui ont un espace en eux
Essayez d'utiliser cette fonction, je l'ai essayée et cela fonctionne bien. Stackoverflow.com/a/64319676/3604226