Foros del Web » Programando para Internet » PHP »

Comparar palabras

Estas en el tema de Comparar palabras en el foro de PHP en Foros del Web. Hola, me gustaría que al mostrar un texto en pantalla (por ejemplo el de una noticia) este comprobase si existen ciertas palabras y que si ...
  #1 (permalink)  
Antiguo 06/09/2006, 10:03
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 18 años, 4 meses
Puntos: 5
Comparar palabras

Hola, me gustaría que al mostrar un texto en pantalla (por ejemplo el de una noticia) este comprobase si existen ciertas palabras y que si es cierto las lincase automaticamente. Pondre un ejemplo por que de la forma que lo expreso no lo entiendo ni yo

Tengo una base de datos con la tabla diccionario y la tabla noticias, pues lo que quiero hacer es que cuando muestre una noticia, compruebe si las palabras que muestra existen en el diccionario y si es así, lincar con ellas.

He hecho un código que lo que hace es separar el texto de la noticia en un array con explode(), luego crea otro array que contiene las palabras que hay en el diccionario (esto lo hago haciendo consultas a la base de datos, pero me gustaria crear un txt cada 12 horas que contubiese las palabras, para asi la comparacion hacerla con el TXT ... pero ese es otro tema que tengo en otro post ;)...)
Luego comparo los arrays palabra por palabra con un for anidado dentro de otro y si encuentro coincidencias cambio la palabra original por la misma pero con las etiquetas HTML para hacer el link.

Esto me a "relativamente" funcionado, pero me encuentro los siguietes errores:
- si una palabra acaba con punto o con coma, no la compara bien, ya que el explode lo hago usando los espacios y si tengo un texto tal como este:
"Hola, me llamo Dani" al crear el array la palabra Hola (que es la que deveria comparar) me la guarda como Hola,
Para solucionar esto he intentado crear una funcion que compruebe si la palabra acaba en letra o no y si no es asi puse le quita el ultimo caracter...

Código PHP:
function ultimo_caracter(&$aux2)
{    
    if (
ereg"([a-z]|[A-Z])"substr($cad,strlen($cad)-1)))
    {
        return 
FALSE;
    }
    else
    {
        return 
TRUE;
    }

pero no va bien del todo.

- El otro fallo que le veo es que no lo encuentro nada optimo, ya que si tengo un texto largo y muchas palabras en el diccionario me da la sensación de que ira lento.

Todo este rollo es simplemente para preguntar ¿que metodo se usa para hacer lo que busco? ¿estoy planteando bien el asunto? ¿como me cargo los puntos si los hay para comparar las palabras?

Espero no haber sido mu pesado, gracias!
  #2 (permalink)  
Antiguo 06/09/2006, 18:33
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Probablemente sea mejor, ya que creaste la expresión regular, analizar el texto y eliminar los caracteres que no sean letras, antes de hacer el explode(). Así no tendrías que revisar palabra por palabra, sino que de entrada no tendrías problemas con comas o puntos. Eso sí, tené cuidado con las letras acentuadas, generan algunos problemas con las regexp.

También creo que quizás en vez de comparar 2 matrices, podrías usar strpos para buscar la palabra en la cadena (agregándole un espacio al principio y otro al final para evitar que compare pedazos de palabra).

En fin, probá los métodos que se te ocurran y quedate con el más rápido.


Saludos.
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 13:13.