2

WordNet 3.0 を使用しています。WordNet 階層内の 2 つの synset 間のセマンティックな関係を見つける方法を知りたいです。のように、入力として2つの単語が与えられた場合、それらの間の関係、つまり同義語、下位語-ハイパーニムなどであるかどうかを調べたい.

これを達成するためのpythonまたはperlモジュールはありますか?

4

3 に答える 3

5

NLTK は、Python で最も使用されている NLP ライブラリです。記述された操作は次のようになります。

from nltk.corpus import wordnet

house = wordnet.synset('house.n.01')
station = wordnet.synset('station.n.01')

次に、クラスSynsetのメソッドを次のように使用できます。

taxonomy_distance = house.shortest_path_distance(station)

それらが同義語であるかどうかを調べるには:

common_lemmas = len(set(house.lemma_names).intersection(set(station.lemma_names)))

これは、2 つのセットに共通する補題の数を返します。

また、Neo4j のようなグラフ データベースを使用してワードネット データセットを読み込み、それらのノード間の最短パスを探すこともできます。この問題については、こちら で説明しています。

于 2013-07-16T09:01:35.617 に答える
1

Python NLTK の使用:

>>> from nltk.corpus import wordnet as wn
>>> 
>>> synset1 = wn.synset('adornment.n.01')
>>> synset2 = wn.synset('jewelry.n.01')
>>> 
>>> synset1.lowest_common_hypernyms(synset2)
[Synset('adornment.n.01')]
>>> 
>>> synset1.hyponyms()
[Synset('frill.n.03'), Synset('rosette.n.01'), Synset('frontlet.n.01'), Synset('cordon.n.03'), Synset('fob.n.02'), Synset('beauty_spot.n.01'), Synset('sequin.n.01'), Synset('war_paint.n.01'), Synset('boutonniere.n.01'), Synset('trimming.n.02'), Synset('pendant.n.01'), Synset('pompon.n.01'), Synset('band.n.04'), Synset('bangle.n.02'), Synset('jewelry.n.01'), Synset('epaulet.n.01'), Synset('circlet.n.02'), Synset('frog.n.03'), Synset('tassel.n.01'), Synset('plume.n.02'), Synset('pectoral.n.02')]
>>> synset2.hypernyms()
[Synset('adornment.n.01')]

シノニムを取得するには:

>>> def lemmas_in_all_synsets(keyword):
...     lemmas=[]
...     for synset in wn.synsets(keyword):
...         for lemma in synset.lemmas:
...             lemmas.append(lemma)
...     return lemmas
...
>>> lemmas_in_all_synsets('station')
[Lemma('station.n.01.station'), Lemma('place.n.10.place'), Lemma('place.n.10.sta
tion'), Lemma('station.n.03.station'), Lemma('post.n.01.post'), Lemma('post.n.01
.station'), Lemma('station.n.05.station'), Lemma('station.v.01.station'), Lemma(
'station.v.01.post'), Lemma('station.v.01.send'), Lemma('station.v.01.place')]
于 2013-09-18T19:00:42.043 に答える