Question

J'ai besoin d'utiliser WordNet dans une application basée sur Java. Je veux:

  • Recherchez des syndriets

  • Trouvez la similitude / la parenté entre les syndsets

Mon application utilise des graphiques RDF et je sais qu'il existe des points de terminaison SPARQL avec WordNet, mais je suppose qu'il est préférable d'avoir une copie locale de l'ensemble de données, car ce n'est pas trop grand.

J'ai trouvé les pots suivants:

Que recommanderiez-vous pour mon application?

Est-il possible d'utiliser une bibliothèque Perl à partir d'une application Java via quelques liaisons?

Merci! Mulone

Était-ce utile?

La solution

J'utilise des mâchoires pour des trucs WordNet normaux car il est facile à utiliser. Pour des mesures de similitude, cependant, j'utilise la bibliothèque située ici. Vous devrez également télécharger cette Dossier, contenant des données WordNet et Corpus prétraitées, pour qu'elle fonctionne. Le code peut être utilisé comme celui-ci, en supposant que vous avez placé ce dossier dans un autre appelé "lib" dans votre dossier de projet:

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");

Cela imprimera quelque chose comme celui qui suit, montrant le score de similitude entre chaque combinaison possible de syndriets représentés par les mots à comparer:

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

Il existe également des méthodes qui vous permettent de spécifier quel sens des deux mots: res(String word1, int senseNum1, String word2, partOfSpeech), etc. Malheureusement, la documentation source n'est pas Javadoc, vous devrez donc l'inspecter manuellement. La source peut être téléchargée ici.

Les algorithmes disponibles sont:

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();

En outre, cela vous oblige à avoir le fichier JAR pour le MIT JWI

Autres conseils

Il y a une fonction dans les mâchoires pour trouver des formes de mots similaires voici des détails:

public adjectiveSynset [] getImilar () lève WordNetException et voici le lien que vous pouvez consulter: http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/adjectifynset.htmlCe lien qu'il contient des détails que vous pouvez utiliser.

Je ne sais pas si JAWS ou JWNL fournissent des méthodes pour calculer la similitude entre les sysets, mais j'ai essayé les deux pour la recherche de syntèmes de syntèmes et j'ai trouvé des mâchoires plus faciles à utiliser. Plus précisément, le simple:

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

J'étais plus facile pour moi de comprendre que l'exigence de fichier_properties.xml de JWNL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top