¿Cómo puedo obtener el [x] número de palabras antes y después de una palabra clave dada en una cadena en PHP? Estoy tratando de mostrar los resultados de una consulta de MySQL adaptada a la palabra clave como un fragmento.¿Tomar x número de palabras antes y después de una palabra clave determinada?
5
A
Respuesta
5
$string = 'This is a test string to see how to grab words from an arbitrary sentence. It\'s a little hacky (as you can see from the results) - but generally speaking, it works.';
echo $string,'<br />';
function getWords($string,$word,$before=0,$after=0) {
$stringWords = str_word_count($string,1);
$myWordPos = array_search($word,$stringWords);
if (($myWordPos-$before) < 0)
$before = $myWordPos;
return array_slice($stringWords,$myWordPos-$before,$before+$after+1);
}
var_dump(getWords($string,'test',2,1));
echo '<br />';
var_dump(getWords($string,'this',2,1));
echo '<br />';
var_dump(getWords($string,'sentence',1,3));
echo '<br />';
var_dump(getWords($string,'little',2,2));
echo '<br />';
var_dump(getWords($string,'you',2,2));
echo '<br />';
var_dump(getWords($string,'results',2,2));
echo '<br />';
var_dump(getWords($string,'works',2,2));
echo '<hr />';
function getWords2($string,$word,$before=0,$after=0) {
$stringWords = str_word_count($string,1);
$myWordPos = array_search($word,$stringWords);
$stringWordsPos = array_keys(str_word_count($string,2));
if (($myWordPos+$after) >= count($stringWords))
$after = count($stringWords) - $myWordPos - 1;
$startPos = $stringWordsPos[$myWordPos-$before];
$endPos = $stringWordsPos[$myWordPos+$after] + strlen($stringWords[$myWordPos+$after]);
return substr($string,$startPos,$endPos-$startPos);
}
echo '[',getWords2($string,'test',2,1),']<br />';
echo '[',getWords2($string,'this',2,1),']<br />';
echo '[',getWords2($string,'sentence',1,3),']<br />';
echo '[',getWords2($string,'little',2,2),']<br />';
echo '[',getWords2($string,'you',2,2),']<br />';
echo '[',getWords2($string,'results',2,2),']<br />';
echo '[',getWords2($string,'works',1,3),']<br />';
Pero, ¿qué quieres que suceda si la palabra aparece varias veces? O si la palabra no aparece en la cadena?
EDITAR
Versión ampliada del getWords2 para regresar hasta un número determinado de veces que aparece la palabra clave
$string = 'PHP is a widely-used general-purpose scripting language that is especially suited for Web development. The current version of PHP is 5.3.3, released on July 22, 2010. The online manual for PHP is an excellent resource for the language syntax and has an extensive list of the built-in and extension functions. Most extensions can be found in PECL. PEAR contains a plethora of community supplied classes. PHP is often paired with the MySQL relational database.';
echo $string,'<br />';
function getWords3($string,$word,$before=0,$after=0,$maxFoundCount=1) {
$stringWords = str_word_count($string,1);
$stringWordsPos = array_keys(str_word_count($string,2));
$foundCount = 0;
$foundInstances = array();
while ($foundCount < $maxFoundCount) {
if (($myWordPos = array_search($word,$stringWords)) === false)
break;
++$foundCount;
if (($myWordPos+$after) >= count($stringWords))
$after = count($stringWords) - $myWordPos - 1;
$startPos = $stringWordsPos[$myWordPos-$before];
$endPos = $stringWordsPos[$myWordPos+$after] + strlen($stringWords[$myWordPos+$after]);
$stringWords = array_slice($stringWords,$myWordPos+1);
$stringWordsPos = array_slice($stringWordsPos,$myWordPos+1);
$foundInstances[] = substr($string,$startPos,$endPos-$startPos);
}
return $foundInstances;
}
var_dump(getWords3($string,'PHP',2,2,3));
Cuestiones relacionadas
- 1. regex para encontrar una palabra antes y después de una palabra específica
- 2. ¿Pueden las macros Racket tomar argumentos de palabra clave?
- 3. Buscar las primeras 4 palabras y las últimas 4 palabras de la base de datos después de palabras clave particulares?
- 4. Extracto X número de palabras que rodean una cadena de búsqueda dada dentro de una cadena
- 5. Expresión regular de una palabra determinada
- 6. Regex optimizada para N palabras alrededor de una palabra determinada (UTF-8)
- 7. Palabra clave "foreach" inesperada después del carácter "@"
- 8. ¿Cuál es la diferencia entre "palabra clave" y "palabra reservada"?
- 9. Palabras clave "nativas" y "literales"
- 10. argumentos de palabras clave Clojure
- 11. ¿Debo verificar si una determinada clave está presente en el Diccionario antes de acceder a ella?
- 12. LaTeX en blanco después del número y antes del texto
- 13. Editar imagen después de tomar una foto
- 14. palabra clave 'ref' y AppDomains
- 15. ¿Cómo eliminar espacios antes y después de una cadena?
- 16. "compartida" y "__gshared" Palabras clave en D
- 17. C++ y, o, no, palabras clave XOR
- 18. javaScript palabras clave reservadas
- 19. PHP - y/o palabras clave
- 20. Retirar un poco de una cadena antes de una palabra
- 21. pitón argumentos posicionales y argumentos de palabras clave
- 22. tipos de palabras clave y de referencia "REF"
- 23. Palabra clave volátil en Java - Clarificación
- 24. Al tomar la palabra de un flotador
- 25. Eliminación de registros antes de una fecha determinada
- 26. Entender la palabra clave yield y LINQ
- 27. diferencia entre la palabra clave var y sin var
- 28. C# - Desactivar palabras clave dinámicas
- 29. Algoritmos para detectar frases y palabras clave del texto
- 30. Palabra clave predeterminada de Javascript
Hola Marcos, gracias, si la palabra aparece varias veces, entonces quiero armar un fragmento de múltiplos, digamos hasta 3 iteraciones más o menos. así que el resultado final podría ser así: se trata de KEYWORD que trata sobre ... esta es otra pieza de rompecabezas de KEYWORD ... esta sería KEYWORD la tercera pieza –
Lo que estoy tratando de hacer es dar suficientes detalles acerca de lo que cada El resultado es, sin el ser muy similar el uno al otro. –
Eso funciona como un amuleto, muchas gracias Mark :) –