Llamar a wordnet desde php (clase de Wordnet o API para PHP)
Pregunta
Estoy tratando de escribir un programa para encontrar similitudes entre dos documentos, y como estoy usando solo inglés, decidí usar wordnet, pero no puedo encontrar una manera de vincular wordnet con php, no puedo encontrar ninguna api de wordnet dephp.
Vi en el foro que alguien dijo (Spudley) que llamó a wordnet desde php (usando la función shell_exec ()), Clase de tesauro o API para PHP [editado]
Realmente me gustaría saber un método usado o algún código de ejemplo, quizás un tutorial para comenzar a usar wordnet con php.
muchas gracias
Solución
La extensión PHP a la que está vinculada desde el sitio de WordNet es muy antigua y desactualizada; afirma que funciona con PHP4, por lo que no creo que se haya examinado en años.
No hay otras API disponibles para WordNet-> PHP, así que desarrollé mi propia solución.
WordNet se puede ejecutar desde la línea de comandos, por lo que la función shell_exec()
de PHP puede leer la salida.
Si ejecuta WordNet desde la línea de comandos (cd al directorio de Wordnet, luego solo wn
) sin ningún parámetro, le mostrará una lista de posibles funciones que Wordnet admite.
Aún en la línea de comandos, si luego prueba una / algunas de esas funciones, verá cómo Wordnet genera sus resultados. Por ejemplo, si desea sinónimos para la palabra 'estrella', puede probar la función -synsn
:
wn star -synsn
Esto producirá un resultado que se parece un poco a esto:
Sinónimos / hiperónimos (ordenados por frecuencia estimada) del sustantivo estrella
8 sentidos de la estrella
Sentir 1 estrella => cuerpo celeste, cuerpo celeste
Sense 2 as, adepto, campeón, sensación, maven, mavin, virtuoso, genio, hotshot, estrella, superestrella, genio, genio, mago, mago => experto
Sense 3 estrellas => cuerpo celeste, cuerpo celeste
Sentido 4 estrellas => figura plana, figura bidimensional
Sentido 5 estrellas, director, líder => actor, histrion, jugador, thespian, role player
Cabeza de cartel de Sense 6, estrella => intérprete, artista escénico
Sentido 7 asterisco, estrella => carácter, grafema, símbolo gráfico
Sense topología de 8 estrellas, estrella => topología, topología de red
En PHP, puede leer este mismo resultado usando la función shell_exec()
.
$result = shell_exec('/path/to/wn '.$word.' -synsn');
Ahora $result
debería contener el bloque de texto citado anteriormente.
En este punto, debe realizar una codificación adecuada. Deberá tomar ese bloque de texto y analizarlo para obtener los datos que desee.
Aquí es donde se pone complicado. Debido a que los datos se presentan en un formato diseñado para ser leído por un humano y no por un programa, es complicado analizarlos con precisión.
Es importante tener en cuenta que las diferentes opciones de búsqueda presentan su resultado de manera ligeramente diferente. Y, algunos de los resultados que se devuelven pueden ser algo esotéricos. Terminé escribiendo un sistema de ponderación para calificar los resultados, pero era bastante específico para mis necesidades, por lo que deberá experimentar con él para crear su propio sistema.
Espero que sea de ayuda suficiente. :)