Weiß jemand wie eine gute Möglichkeit, den ersten gemeinsamen Hypernym zwischen zwei Wörtern zu erhalten? Ich kann auf die erste Ebene (direktes Elternteil) von einem gegebenen Wort zugreifen, aber ich bin darauf angewiesen, wie man alle Hypernyms ("aufwärts") von diesem Wort abruft, bis es mit einem anderen Wort übereinstimmt. Die Idee ist zu identifizieren, wo/wann/welche zwei Wörter über WordNet als "gleich" betrachtet werden können (falls nicht gefunden, sollte es bis zum Ende der Wörter in Wordnet weitergehen). Ich habe hier einige Themen gefunden, aber für Python und Perl, nichts spezifisch für dieses Problem in JAVAGemeinsamer Hypernym zwischen zwei Wörtern mit WordNet (JWI) - JAVA
Ich benutze JWI (2.4.0), um SynsetID, WordID und andere Informationen aus WordNet zugreifen. Wenn es eine einfachere API gibt, ist der Job auch willkommen. Hier unten ist die Methode, die das erwähnte Hypernym bereitstellt.
public void getHypernyms(IDictionary dict_param, String lemma_param) throws IOException {
dict_param.open();
// get the synset
IIndexWord idxWord = dict_param.getIndexWord(lemma_param, POS.NOUN);
// 1st meaning
IWordID wordIDb = idxWord.getWordIDs().get(0);
IWord word = dict_param.getWord(wordIDb);
ISynset synset = word.getSynset();
System.out.println("Synset = " + synset);
// get the hypernyms by pointing a list of <types> in the words
List<ISynsetID> hypernyms = synset.getRelatedSynsets(Pointer.HYPERNYM);
// print out each h y p e r n y m s id and synonyms
List<IWord> words, wordsb;
for (ISynsetID sid : hypernyms) {
words = dict_param.getSynset(sid).getWords();
System.out.println("Lemma: " + word.getLemma());
System.out.print("Hypernonyms = " + sid + " {");
for (Iterator<IWord> i = words.iterator(); i.hasNext();) {
System.out.print(i.next().getLemma());
if (i.hasNext()) {
System.out.print(", ");
}
}
System.out.println("}");
}
}
ein Wörterbuch Providing und das Wort „Hund“ wir als Ergebnis haben (wie man sehen kann ich usingn nur die erste Bedeutung dieser Methode auszuführen):
Synset = SYNSET{SID-02084071-N : Words[W-02084071-N-1-dog, W-02084071-N-2 domestic_dog, W-02084071-N-3-Canis_familiaris]}
Lemma: dog Hypernonyms = SID-02083346-N {canine, canid}
Lemma: dog Hypernonyms = SID-01317541-N {domestic_animal, domesticated_animal}
Warten. Alles, was Ihre "Lösung" tut, ist die Synset-Hierarchie für die gegebene synsetId zu gehen. Hast du jemals herausgefunden, wie man den gewöhnlichen Hypernym bekommt? Intuitiv, ich schätze, wir können die Liste der Hypernyme (wie Ihre Lösung) für beide Wörter bekommen, dann ist die Lösung die erste ID, die in beiden Listen vorkommt. Aber das gibt tatsächlich etwas nicht-intuitive Ergebnisse. Bsp: Versuch Frau/Mann –
So etwas (Entschuldigung für die unverzeihliche Verzögerung). Wenn Sie WSD (Wort Sinn Disambiguierung) mit der ersten Ebene der Wörter-Synsets (Basis) tun, kann diese Art von Sachen (nicht intuitive Beziehungen) stark gemildert werden –