Similitud de WordNet en Java: JAWS, JWNL o JAVA WN :: Similitud?
-
12-11-2019 - |
Pregunta
Necesito usar WordNet en una aplicación basada en Java. Quiero:
-
sintéticos de búsqueda
-
Encuentre la similitud / relación entre los sinceles
Mi aplicación utiliza gráficos RDF y sé que hay puntos finales SPARQL con WordNet, pero supongo que es mejor tener una copia local del conjunto de datos, ya que no es demasiado grande.
He encontrado los siguientes frascos:
- Biblioteca general - Jaws http:/// // Lyle. smu.edu/~tspell/jaws/index.html
- Biblioteca general - jwnl http://sourceforge.net/projects/jwordnet
- Biblioteca de similitud (PERL) - Wordnet :: Similitud http:// wn- Similitud.SourceForge.NET/
- versión java de Wordnet :: Similitud http://www.cogs.susx. ac.uk/users/drh21/ (beta)
¿Qué recomendarías para mi aplicación?
¿Es posible usar una biblioteca Perl de una aplicación Java a través de algunas enlaces?
¡Gracias! Mulone
Solución
Utilizo mandíbulas para cosas normales de wordnet porque es fácil de usar. Sin embargo, para métricas de similitud, uso la biblioteca ubicada aquí . También deberá descargar Esta carpeta que contiene datos de WordNet y Corpus pre-procesados, para que funcione. El código se puede usar así, suponiendo que colocó esa carpeta en otra llamada "lib" en la carpeta de su proyecto:
JWS ws = new JWS("./lib", "3.0");
Resnik res = ws.getResnik();
TreeMap<String, Double> scores1 = res.res(word1, word2, partOfSpeech);
for(Entry<String, Double> e: scores1.entrySet())
System.out.println(e.getKey() + "\t" + e.getValue());
System.out.println("\nhighest score\t=\t" + res.max(word1, word2, partOfSpeech) + "\n\n\n");
Esto imprimirá algo como lo siguiente, mostrando la puntuación de similitud entre cada posible combinación de sínsetas representadas por las palabras que se deben comparar:
hobby#n#1,gardening#n#1 2.6043996588901104
hobby#n#2,gardening#n#1 -0.0
hobby#n#3,gardening#n#1 -0.0
highest score = 2.6043996588901104
También hay métodos que le permiten especificar qué sentido de cualquiera / ambas palabras: generalmente, etc., desafortunadamente, la documentación de origen no es Javadoc, por lo que deberá inspeccionarlo manualmente. La fuente se puede descargar aquí .
Los algoritmos disponibles son:
JWSRandom(ws.getDictionary(), true, 16.0);//random number for baseline
Resnik res = ws.getResnik();
LeacockAndChodorowlch = ws.getLeacockAndChodorow();
AdaptedLesk adLesk = ws.getAdaptedLesk();
AdaptedLeskTanimoto alt = ws.getAdaptedLeskTanimoto();
AdaptedLeskTanimotoNoHyponyms altnh = ws.getAdaptedLeskTanimotoNoHyponyms();
HirstAndStOnge hso = ws.getHirstAndStOnge();
JiangAndConrath jcn = ws.getJiangAndConrath();
Lin lin = ws.getLin();
WuAndPalmer wup = ws.getWuAndPalmer();
Además, requiere que tenga el archivo JAR para el MIT's jwi
Otros consejos
Hay una función en las mandíbulas para encontrar formas de palabras similares Aquí hay detalles:
Adjetivo público [] GetSimilir () lanza WORDNETEXCETCHE Y Aquí está un enlace que puede verificar: http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/adjetivivesyset.html Este enlace contiene detalles que puede usar.
No estoy seguro de si mis mandíbulas o JWNL proporcionan métodos para calcular la similitud entre los sinsejidos, pero he intentado tanto para buscar sinsejidos y he encontrado que las mandíbulas sean más fáciles de usar.Específicamente, el simple:
// Specifying the Database Directory
System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");
fue más fácil para mí entender que el requisito de file_properties.xml de JWNL.