2011-05-12 17 views
7

Necesito usar Wordnet en una aplicación basada en Java. Quiero:Similitud de Wordnet en Java: JAWS, JWNL o Java WN :: ¿Similitud?

  • búsqueda synsets

  • hallazgo similitud/parentesco entre los synsets

Mi aplicación utiliza grafos RDF y sé que hay puntos finales SPARQL con Wordnet, pero supongo es mejor tener una copia local del conjunto de datos, ya que no es demasiado grande.

que he encontrado los siguientes frascos:

¿Qué recomendarías para mi aplicación?

¿Es posible utilizar una biblioteca de Perl desde una aplicación java a través de algunas fijaciones?

Gracias! Mulone

Respuesta

12

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

+0

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/. –

+0

@mj_: ¿por qué 11.01 y no 11.02? – damned

+0

¿El código anterior da la similitud entre los diferentes synsets? – Noor

0

No estoy seguro de si JAWS o JWNL proporcionan métodos para calcular la similitud entre synsets, pero he intentado ambos para buscar synsets y he encontrado que JAWS es más fácil de usar. En concreto, la sencilla:

// Specifying the Database Directory 
    System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/"); 

era más fácil para mí entender que el requisito de file_properties.xml JWNL.

1

hay función en JAWS para encontrar wordForms similares detalles aquí son:

public AdjectiveSynset [] getSimilar() arroja WordNetException y aquí hay un enlace que puede consultar: este enlace contiene detalles th en que puedes usar

Cuestiones relacionadas