1
2人の単語の間に最初の一般的なハイパーリンクを検索するにはどのように良い方法が分かりますか?私は特定の単語から最初のレベル(直接の親)にアクセスできますが、別の単語と一致するまで、この単語からすべての上位語( "上がっていく")を検索する方法に固執しています。アイデアは、どこに/いつ/ 2つの単語が、それらのルートに基づいてWordNetを通して "同じ"とみなせるかを特定することです(見つからなければ、単語の終わりまで続けるべきです)。私はここでいくつかの話題を見つけましたが、PythonとPerlでは、この問題に特化したものはありません。WordNet(JWI)を使用している2つの単語間の一般的なハイパーリンク -
WordNetからSynsetID、WordIDおよびその他の情報にアクセスするのにJWI(2.4.0)を使用しています。その仕事をするより簡単なAPIがあれば、それも歓迎です。以下は、私が言及した上位語を提供する方法です。
辞書と我々が結果として持っている単語「犬」(あなたは、私はちょうどこのメソッドを実行するための最初の意味をusingnだ見ることができるように)提供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("}");
}
}
:人のために
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}
待機。すべての "ソリューション"は、所定のsynsetIdのsynset hiearchyを歩いています。共通のハイパーシンをどうやって入手するのか分かりましたか?直感的に言えば、両方の単語のハイパーニム(あなたのソリューションのような)のリストを得ることができると思います。そして、ソリューションは両方のリストで最初に出現するIDです。しかし、これは実際にはやや直観的ではない結果をもたらす。例:女性/男性を試してください –
このようなものです(許されないほどの遅れで申し訳ありません)。第1レベルの単語synsets(ベース)でWSD(単語の曖昧さ回避)を行うと、これらの種類のもの(非直感的な関係)を大幅に緩和することができます –