¿Cómo selecciono, a partir de una salida, solo las primeras 10 palabras?¿Cómo seleccionar las primeras 10 palabras de una oración?
Respuesta
implode(' ', array_slice(explode(' ', $sentence), 0, 10));
para añadir soporte para otras separaciones de palabras como las comas y los guiones, preg_match
da una manera rápida y no requiere la división de la cadena:
function get_words($sentence, $count = 10) {
preg_match("/(?:\w+(?:\W+|$)){0,$count}/", $sentence, $matches);
return $matches[0];
}
Como Pebbl menciona que PHP no maneja bien UTF-8 o Unicode, así que si eso es una preocupación, entonces puede reemplazar \w
por [^\s,\.;\?\!]
y \W
para [\s,\.;\?\!]
.
Esto funcionó muy bien para mí. Necesitaba mostrar solo las primeras 5 frases, así que cambié el 10 a un 5, luego cambié el '' a ''. 'en la implosión y explosión y funcionó bien. Tuve que poner un punto después de mostrar el texto porque se omitió el último período. Gracias. – NotJay
¡Buena actualización, +1 para evitar la división (y el uso de expresiones regulares!). Sin embargo, querrás tener cuidado con los límites de las palabras según mi respuesta actualizada. – Pebbl
Desafortunadamente, PHP aún no ha descubierto cómo manejar Unicode. Gracias por la información, actualicé mi respuesta. – Kelly
http://snipplr.com/view/8480/a-php-function-to-return-the-first-n-words-from-a-string/
function shorten_string($string, $wordsreturned)
{
$retval = $string; // Just in case of a problem
$array = explode(" ", $string);
/* Already short enough, return the whole thing*/
if (count($array)<=$wordsreturned)
{
$retval = $string;
}
/* Need to chop of some words*/
else
{
array_splice($array, $wordsreturned);
$retval = implode(" ", $array)." ...";
}
return $retval;
}
Simplemente dividir en espacios funcionará incorrectamente si hay un carácter inesperado en lugar de un espacio en la estructura de la oración, o si la oración contiene múltiples espacios combinados.
La siguiente versión funcionará sin importar qué tipo de "espacio" utilice entre palabras y se puede extender fácilmente para manejar otros caracteres ... actualmente es compatible con cualquier carácter de espacio en blanco más,. ; ? !
function get_snippet($str, $wordCount = 10) {
return implode(
'',
array_slice(
preg_split(
'/([\s,\.;\?\!]+)/',
$str,
$wordCount*2+1,
PREG_SPLIT_DELIM_CAPTURE
),
0,
$wordCount*2-1
)
);
}
Las expresiones regulares son perfectas para este problema, porque puede hacer que el código sea tan flexible o estricto como desee. Sin embargo, debes tener cuidado. Específicamente, me acerqué a lo anterior para identificar las brechas entre las palabras — en lugar de las palabras mismas — porque es bastante difícil establecer inequívocamente qué definirá una palabra.
Tome el \w
límite de palabras, o su \W
inverso. Raramente dependo de estos, principalmente porque — dependiendo del software que está usando (como ciertas versiones de PHP) — they don't always include UTF-8 or Unicode characters.
En expresiones regulares, es mejor ser específico, en todo momento. Para que sus expresiones pueden manejar cosas como la siguiente, sin importar dónde se prestan:
echo get_snippet('Это не те дроиды, которые вы ищете', 5);
/// outputs: Это не те дроиды, которые
Evitar que partía podría valer la pena, sin embargo, en términos de rendimiento. De modo que podría usar el enfoque actualizado de Kelly, pero cambie \w
por [^\s,\.;\?\!]+
y \W
por [\s,\.;\?\!]+
. Aunque, personalmente, me gusta la simplicidad de la expresión de división utilizada anteriormente, es más fácil de leer y, por lo tanto, modificar. La pila de funciones de PHP, sin embargo, es un poco fea :)
+1 ¿Por qué fue esto a 0 votos? Es una mejor solución que las otras respuestas. Aunque, las personas no deberían usar camel case en PHP. –
@StephenSarcsamKamenar gracias ... y buen punto, he estado haciendo demasiadas javascripting ese día :) – Pebbl
Estoy de acuerdo con la pregunta de @ StephenSarcsamKamenar! Supongo que hay dos respuestas aquí. Es un deber del que hizo la pregunta para actualizar la respuesta correcta. Esto es lo mejor para mí: ¡+1 sin dudas! – JeanValjean
Esto podría ayudarlo. Función para devolver N no. de las palabras
public function getNWordsFromString($text,$numberOfWords = 6)
{
if($text != null)
{
$textArray = explode(" ", $text);
if(count($textArray) > $numberOfWords)
{
return implode(" ",array_slice($textArray, 0, $numberOfWords))."...";
}
return $text;
}
return "";
}
}
Es totalmente lo que estamos buscando acaba de cortar n pegar en su programa y corrieron.
function shorten_string($string, $wordsreturned)
/* Returns the first $wordsreturned out of $string. If string
contains fewer words than $wordsreturned, the entire string
is returned.
*/
{
$retval = $string; // Just in case of a problem
$array = explode(" ", $string);
if (count($array)<=$wordsreturned)
/* Already short enough, return the whole thing
*/
{
$retval = $string;
}
else
/* Need to chop of some words
*/
{
array_splice($array, $wordsreturned);
$retval = implode(" ", $array)." ...";
}
return $retval;
}
y simplemente llamar a la función en el bloque de código al igual que
$data_itr = shorten_string($Itinerary,25);
Es mejor utilizar str_word_count
:
<?php
$str = "Lorem ipsum dolor sit amet,
consectetur adipiscing elit";
print_r(str_word_count($str, 1));
?>
El resultado del ejemplo sería:
Array
(
[0] => Lorem
[1] => ipsum
[2] => dolor
[3] => sit
[4] => amet
[5] => consectetur
[6] => adipiscing
[7] => elit
)
El uso un bucle para obtener las palabras que desea.
Fuente: http://php.net/str_word_count
lo hago de esta manera:
function trim_by_words($string, $word_count = 10) {
$string = explode(' ', $string);
if (empty($string) == false) {
$string = array_chunk($string, $word_count);
$string = $string[0];
}
$string = implode(' ', $string);
return $string;
}
Su UTF8 compatibles ...
que no entiendo por qué todo este lío cuando hay un built-in función de Wordpress:
<?= wp_trim_words(get_the_content(), 15, '...') ?>
Eso hace eco de las primeras 15 palabras de contenido (que funciona en el interior un bucle regular) y agrega puntos suspensivos.
Esto podría ayudarlo. Función para devolver no. of words
.
function num_of_word($text,$numb) {
$wordsArray = explode(" ", $text);
$parts = array_chunk($wordsArray, $numb);
$final = implode(" ", $parts[0]);
if(isset($parts[1]))
$final = $final." ...";
return $final;
return;
}
echo num_of_word($text, 10);
probar este
$str = 'Lorem ipsum dolor sit amet,consectetur adipiscing elit. Mauris ornare luctus diam sit amet mollis.';
$arr = explode(" ", str_replace(",", ", ", $str));
for ($index = 0; $index < 10; $index++) {
echo $arr[$index]. " ";
}
Sé que esto no es tiempo para responder, pero vamos a los recién llegados eligen sus propias respuestas.
function get_first_num_of_words($string, $num_of_words)
{
$string = preg_replace('/\s+/', ' ', trim($string));
$words = explode(" ", $string); // an array
// if number of words you want to get is greater than number of words in the string
if ($num_of_words > count($words)) {
// then use number of words in the string
$num_of_words = count($words);
}
$new_string = "";
for ($i = 0; $i < $num_of_words; $i++) {
$new_string .= $words[$i] . " ";
}
return trim($new_string);
}
utilizar de esta manera:
echo get_first_num_of_words("Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid, illo?", 5);
Salida: Lorem ipsum dolor sit amet
Esta función también funciona muy bien con los caracteres Unicode como caracteres árabes.
echo get_first_num_of_words("نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.", 100);
Salida: نموذج لنص عربي الغرض منه توضيح كيف يمكن استخلاص أول عدد معين من الكلمات الموجودة فى نص معين.
Para seleccionar 10 palabras del texto dado puede implementar la función siguiente:
function first_words($text, $count=10)
{
$words = explode(' ', $text);
$result = '';
for ($i = 0; $i < $count && isset($words[$i]); $i++) {
$result .= $words[$i];
}
return $result;
}
Esto se puede hacer fácilmente usando str_word_count()
$first10words = implode(' ', array_slice(str_word_count($sentence,1), 0, 10));
[Enlace a la documentación] (http://php.net/manual/en/function.str-word-count.php) –
- 1. SQL - Seleccione las primeras 10 filas solamente?
- 2. Truncar cadena a las primeras n palabras
- 3. ¿Cómo puedo convertir una oración en una matriz de palabras?
- 4. Couting de caracteres, palabras, longitud de las palabras y longitud total en una oración
- 5. Seleccione las primeras 10 filas distintas en mysql
- 6. Cómo seleccionar las N primeras filas en un Grupo LinqPor
- 7. Extraiga las primeras palabras X (no solo caracteres) de mySQL
- 8. Buscar las primeras 4 palabras y las últimas 4 palabras de la base de datos después de palabras clave particulares?
- 9. PHP: obtenga las dos primeras oraciones de un texto?
- 10. ¿Cómo se formatea cadenas localizadas para que las palabras sueltas de una oración sean un enlace?
- 11. ¿Cómo obtener las primeras N palabras de un NSString en Objective-C?
- 12. Todas las Palabras, excepto uno
- 13. Cómo seleccionar las primeras n filas de una tabla de datos/vista de datos en ASP.NET
- 14. PHP ¿Cuál es la mejor manera de obtener las primeras 5 palabras de una cadena?
- 15. Cómo seleccionar sólo las primeras filas para cada valor único de una columna
- 16. Truncar la oración a un cierto número de palabras
- 17. Seleccionar primeras n filas en ContentProvider
- 18. nlg construyendo una oración
- 19. Regex para obtener las dos primeras palabras de longitud desconocida de una cadena
- 20. cómo mostrar las primeras 50 palabras de un campo de texto en plantillas de Django
- 21. jQuery: seleccione las primeras cinco filas de una tabla
- 22. ¿Cómo eliminar todas las filas de una tabla excepto las dos primeras y la última?
- 23. cómo seleccionar palabras clave únicas de una coma separó etiquetas
- 24. Oracle SELECCIONAR 10 registros principales
- 25. la conversión de una cadena de oración para una matriz de cadenas de palabras en Java
- 26. Obtenga las primeras líneas de Wikipedia Artículo
- 27. Ordenar cadenas, primeras letras primero, luego letras dentro de las palabras
- 28. En un cuadro de texto, proteja las primeras palabras, pero permita agregar/editar texto más allá de esas palabras
- 29. seleccionar siguiente/anterior 10 filas en mysql
- 30. ¿Hay una biblioteca para dividir la oración en una lista de palabras?
Usted podría encuentre ['s ($ str) -> words (10)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d4 3adaa899642c1cce047e076dc/src/Str.php # L363) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw