NLTKを介してsynsetからWordNetの選択制限(+ animate、+ humanなど)をキャプチャする方法はありますか? synsetに関する意味情報を提供する他の方法はありますか?私がそれに近づけることができるのは、上位関係でした。NLTKのWordNet選択制限
6
A
答えて
4
それはあなたの「selectional制限」であるかに依存したり、私は古典的なセマンティクスに、concepts
の世界が存在するので、意味的な機能、それを呼ぶだろうと我々は
- を識別見つける必要がある概念の間で比較すること機能(お互いからそれらを区別するために使用されている概念のすなわち機能)と
- 類似性がます(概念のつまりの特徴と類似して、それらを区別する必要性を強調して) 例えば
:
Man is [+HUMAN], [+MALE], [+ADULT]
Woman is [+HUMAN], [-MALE], [+ADULT]
[+HUMAN] and [+ADULT] = similarity features
[+-MALE] is the discrimating features
伝統的な意味の共通の問題や計算の意味で、この理論を適用するには、「
の質問である私たちが使用できる機能の特定のリストがありますどちらかを比較する
"もしそうなら、このリストの機能は何ですか?" の概念? "
(詳細はwww.acl.ldc.upenn.edu/E/E91/E91-1034.pdfを参照)
バックのWordNetに取得、私は "解決するために2つの方法を提案することができます選択制限 "
最初に、区別するために上位語を確認してください。しかし、まず区別する機能を決定する必要があります。動物を人間と区別するために、差別的な特徴を[+ - ヒト]と[+ - 動物]としましょう。
from nltk.corpus import wordnet as wn
# Concepts to compare
dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9
# To access the hypernym_paths()[0]
# It's weird for that hypernym_paths gives a list of list rather than a list, nevertheless it works.
dog_hypernyms = dog_sense.hypernym_paths()[0]
jb_hypernyms = jb_sense.hypernym_paths()[0]
# Discriminating features in terms of concepts in WordNet
human = wn.synset('person.n.01') # i.e. [+human]
animal = wn.synset('animal.n.01') # i.e. [+animal]
try:
assert human in jb_hypernyms and animal not in jb_hypernyms
print "James Baldwin is human"
except:
print "James Baldwin is not human"
try:
assert human in dog_hypernyms and animal not in dog_hypernyms
print "Dog is an animal"
except:
print "Dog is not an animal"
第二に、@Jacobとして類似度のためチェックが示唆されていました。
dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9
# Features to check against whether the 'dubious' concept is a human or an animal
human = wn.synset('person.n.01') # i.e. [+human]
animal = wn.synset('animal.n.01') # i.e. [+animal]
if dog_sense.wup_similarity(animal) > dog_sense.wup_similarity(human):
print "Dog is more of an animal than human"
elif dog_sense.wup_similarity(animal) < dog_sense.wup_similarity(human):
print "Dog is more of a human than animal"
0
いくつかの類似機能を手書きのsynsetで試して、それをフィルタリングすることができます。しかし、それは本質的にハイパーシンツリーをたどるのと同じです。すべてのワードネット類似関数は上位の距離を使って計算します。また、探索の価値があるかもしれないシンセセットの多くのオプションの属性がありますが、その存在は非常に矛盾している可能性があります。
関連する問題
徹底的な回答ありがとうございました。私はしばらく前に、あなたが言及した理由のためにWordNetの類似性/差別化機能を見つけることができませんでした。 – erickrf