Uso JAWS para cosas normales de wordnet porque es fácil de usar. Para métricas de similitud, sin embargo, utilizo la biblioteca ubicada here. También deberá descargar la carpeta this, que contiene datos preprocesados de WordNet y corpus, para que funcione. El código se puede utilizar como este, asumiendo que colocó esa carpeta en otro llamado "lib" en la carpeta del 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, que muestra la puntuación de similitud entre cada posible combinación de synsets representado por las palabras de compararse:
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 el sentido de cualquiera/ambas palabras: res(String word1, int senseNum1, String word2, partOfSpeech)
, etc. por desgracia, la documentación de origen no es JavaDoc, por lo que necesita inspeccionarlo manualmente. La fuente se puede descargar here.
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, se requiere que tenga el archivo JAR para el MIT JWI
Un elemento de la nota. Me gustaría obtener la versión beta 11.01 en lugar de la versión 11.02 si obtiene el paquete de http://www.cogs.susx.ac.uk/users/drh21/. –
@mj_: ¿por qué 11.01 y no 11.02? – damned
¿El código anterior da la similitud entre los diferentes synsets? – Noor