Somiglianza di Wordnet in Java: Jaws, JWNL o Java WN :: Soglia di somiglianza?
-
12-11-2019 - |
Domanda
Ho bisogno di utilizzare Wordnet in un'app basata su Java. Voglio:
- .
-
Search SynSets
-
Trova somiglianza / correlazione tra i sinsafici
La mia app utilizza i grafici RDF e so che ci sono Sparql Endpoint con Wordnet, ma immagino sia meglio avere una copia locale del set di dati, poiché non è troppo grande.
Ho trovato i seguenti vasetti:
- .
- Libreria generale - Jaws http:// lyle. smu.edu/~tspell/jaws/index.html
- Libreria generale - JWNL http://sourceforre"> http://sourcefornet.net/projects/jwordnet
- biblioteca di somiglianza (Perl) - wordnet :: somiglianza http:// wn- somiglialità.sourceforge.net/
- Versione Java di Wordnet :: Similazione http://www.cogs.susx. ac.uk/users/drh21/ (beta)
Cosa consiglieresti per la mia app?
È possibile utilizzare una libreria Perl da un'app Java tramite alcuni Bindings?
Grazie! Mulone
Soluzione
Io uso le mascelle per la normale roba Wordnet perché è facile da usare. Per le metriche di similarità, tuttavia, uso la libreria situata qui . Avrai anche bisogno di scaricare Questa cartella , contenente i dati di Wordnet e Corpus pre-elaborati, per il lavoro. Il codice può essere utilizzato in questo modo, supponendo che tu abbia effettuato quella cartella in un'altra "lib" nella cartella del progetto:
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");
.
Questo stampierà qualcosa come quanto segue, mostrando il punteggio di somiglianza tra ogni possibile combinazione di sinsati rappresentati dalle parole da confrontare:
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
.
Ci sono anche metodi che consentono di specificare quale senso di entrambi / entrambe le parole: res(String word1, int senseNum1, String word2, partOfSpeech)
, ecc. Sfortunatamente, la documentazione di origine non è Javadoc, quindi dovrai ispezionare manualmente. La fonte può essere scaricata qui .
Gli algoritmi disponibili sono:
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();
.
Inoltre, ti richiede di avere il file JAR per il MIT jwi
Altri suggerimenti
C'è una funzione nelle mascelle per trovare una formazione di wordforms simili Qui ci sono dettagli:
Aggettivi pubbliciynset [] getimilar () Thriw WordnetException e qui è il link che puoi controllare: http://lyle.smu.edu/~tspell/jaws/doc/edu/smu/tspell/wordnet/adjectiveesynset.html Questo collegamento consente di utilizzare i dettagli che puoi usare.
Non sono sicuro che le mascelle o JWNL forniscano metodi per calcolare la somiglianza tra i sinsafici, ma ho provato sia per la ricerca dei sinsati e ho trovato le mascelle più facili da usare.Nello specifico, il semplice:
// Specifying the Database Directory
System.setProperty("wordnet.database.dir", "C:/WordNet/2.1/dict/");
.
è stato più facile per me capire rispetto al file_properties.xml di JWNL.