Foros del Web » Programando para Internet » PHP »

Extraer palabras de un texto.

Estas en el tema de Extraer palabras de un texto. en el foro de PHP en Foros del Web. Buenas: Estoy tratando de extraer las palabras limpias de un texto. Estoy utilizando lo siguiente: Código: $array_de_palabras = explode(' ', $texto); El problema con el ...
  #1 (permalink)  
Antiguo 28/03/2011, 00:23
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años
Puntos: 0
Información Extraer palabras de un texto.

Buenas:

Estoy tratando de extraer las palabras limpias de un texto. Estoy utilizando lo siguiente:

Código:
$array_de_palabras = explode(' ', $texto);
El problema con el código anterior es que las palabras no se extraen limpias, es decir, si están encerradas entre comillas, terminan en algún signo de puntuación, exclamación, interrogación etc. pues salen con eso y no es lo que quiero.

Entonces traté también de limpiar las palabras con preg_replace pero esa función me elimina los caracteres que puedan aparecer intermedios en una palabra, yo solo quiero limpiar el inicio y el final de las palabras para quitar posibles signos de puntuación entre otros como expliqué anteriormente.

Si alguien me puede ayudar de ante mano se lo agradezco.

Saludos.
  #2 (permalink)  
Antiguo 28/03/2011, 05:56
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Extraer palabras de un texto.

Pues entonces solo tienes que arreglar la funcion preg_match de tal forma que solo te quite el signo deseado solo si este está al principio o al final de la cadena. Ejemplo:

Código PHP:
$a preg_replace ('/!$/' '' '¿exclamac!on!');

echo 
$a."<br/>"// Devuelve ¿exclamac!on

$b preg_replace ('/^¿/' '' '¿exclamac!on!'); 

echo 
$b// Devuelve exclamac!on! 
Saludos
  #3 (permalink)  
Antiguo 28/03/2011, 07:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Extraer palabras de un texto.

Creo que algo así
Código PHP:
Ver original
  1. <?php
  2. $str = '¡foo_ "ba_r" ba.z candy! "fruits, vegetable?';
  3. if(preg_match_all('/[a-z]+[^a-z][a-z]+|[a-z]+/is', $str, $m)){
  4.     echo implode(' ', $m[0]);
  5. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 28/03/2011, 17:07
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años
Puntos: 0
Respuesta: Extraer palabras de un texto.

Gracias por sus respuestas en tan poco tiempo, probaré lo que me proponen y luego les digo.

Saludos.
  #5 (permalink)  
Antiguo 29/03/2011, 22:42
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años
Puntos: 0
Respuesta: Extraer palabras de un texto.

Buenas nuevamente, los códigos que me sugirieron me sirven perfectamente para el propósito inicial que tenía pero ahora quiero hacer algo más relacionado con el tema inicial. Resulta que estoy implementando una aplicación para gestionar noticias y una de las funcionalidades con la que cuento es la posibilidad de realizar búsquedas avanzadas por palabras clave, entonces lo que deseo hacer es que en el texto de las noticias que me da el sistema como resultado de las búsquedas se resalten con un color de fondo las palabras clave que el usuario utilizó para hacer la búsqueda, algo parecido a la cache de google.

El algoritmo que estoy intentando implementar recibe como parámetro dos variables, la primera "$contenido" es una variable string que contiene el texto de una noticia y la segunda "$palabras" es un array de string que contiene las palabras clave que utilizó el usuario para hacer la búsqueda, es decir las palabras que yo deseo resaltar con otro color de fondo en el texto de la noticia.

He llegado a un algoritmo que me funciona parcialmente pues no me resalta por ejemplo las palabras cuando tienen tilde y además también me resalta partes de palabras por ejemplo si una palabra clave que utilizó el usuario en la búsqueda fue "casa" y en el texto de la noticia aparece la palabra casador esta se resalta con el color de fondo cuando no debería, en definitiva acá les pongo el código y si me pueden dar algunas ideas de ante mano se los agradezco.

Código PHP:
Ver original
  1. public function resaltarFondoPalabras($contenido, $palabras) {
  2.         // Se definen 8 colores para utilizar
  3.         $colores = array('#ffff66', '#a0ffff', '#99ff99', '#ff9999', '#8dc2f3', '#e0bcf6', '#b7b5b5', '#ff6600');
  4.         $j = 0;
  5.  
  6.         foreach ($palabras as $palabra) {
  7.             $contenido = str_ireplace("$palabra", "<span style=\"background-color: $colores[$j]\">$palabra</span>", $contenido);
  8.             $j++;
  9.             if ($j > 7)
  10.                 $j = 0;
  11.         }
  12.        
  13.         return $contenido;
  14.     }

Etiquetas: cadenas, explode, expresiones_regulares, preg_replace
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:53.