Question

Existe-t-il un moyen de capturer des restrictions de sélection WordNet (telles que + animate, + humain, etc.) de Synset via NLTK? Ou y a-t-il un autre moyen de fournir des informations sémantiques sur Synset? Le plus proche que j'ai pu y parvenir était les relations d'hypernyme.

Était-ce utile?

La solution

Cela dépend de vos «restrictions de sélection» ou je l'appellerais des fonctionnalités sémantiques, car en sémantique classique, il existe un monde de concepts et comparer entre les concepts que nous devons trouver

  • Caractéristiques de discrimination (c'est-à-dire les caractéristiques des concepts utilisés pour les distinguer les uns des autres) et
  • caractéristiques de similitude (IE Caractéristiques des concepts similaires et met en évidence la nécessité de les différencier)

Par exemple:

Man is [+HUMAN], [+MALE], [+ADULT]
Woman is [+HUMAN], [-MALE], [+ADULT]

[+HUMAN] and [+ADULT] = similarity features
[+-MALE] is the discrimating features

Le problème commun de la sémantique traditionnelle et de l'application de cette théorie en sémantique informatique est la question de

"Existe-t-il une liste spécifique de fonctionnalités que nous pouvons utiliser pour comparer tout

"Si oui, quelles sont les fonctionnalités de cette liste?" concepts? "

(Voir www.acl.ldc.upenn.edu/e/e91/e91-1034.pdf pour plus de détails)

Pour revenir à WordNet, je peux suggérer 2 méthodes pour résoudre les "restrictions de sélection"

Première, Vérifiez les hypernymes pour les fonctionnalités discriminantes, mais vous devez d'abord décider quelles sont les fonctionnalités discriminantes. Pour différencier un animal des humains, prenons les caractéristiques discriminantes comme [+-humaine] et [+ -animal].

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"

Deuxième, Vérifiez les mesures de similitude comme @jacob l'avait suggéré.

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"

Autres conseils

Vous pouvez essayer d'utiliser certaines des fonctions de similitude avec des synchronisés triés sur le volet et l'utiliser pour filtrer. Mais c'est essentiellement la même chose que suivre l'arbre Hypernym - Afaik toutes les fonctions de similitude WordNet utilisent la distance d'hypernym dans leurs calculs. En outre, il y a beaucoup d'attributs facultatifs d'un synSet qui pourraient mériter d'être explorés, mais leur présence peut être très incohérente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top