Skip to content Skip to sidebar Skip to footer

How To Determine Semantic Hierarchies / Relations In Using Nltk?

I want to use NLTK and wordnet to understand the semantic relation between two words. Like if I enter 'employee' and 'waiter', it returns something showing that employee is more ge

Solution 1:

Firstly, you have to tackle the problem of getting words into lemmas and then into Synsets, i.e. how can you identify a synset from a word?

word => lemma => lemma.pos.sense => synset    
Waiters => waiter => 'waiter.n.01' => wn.Synset('waiter.n.01')

So let's say you have already deal with the above problem and arrived at the right most representation of waiter, then you can continue to compare synsets. Do note that, a word can have many synsets

from nltk.corpus import wordnet as wn
waiter = wn.Synset('waiter.n.01')
employee = wn.Synset('employee.n.01')

all_hyponyms_of_waiter = list(set([w.replace("_"," ") for s in waiter.closure(lambda s:s.hyponyms()) for w in s.lemma_names]))
all_hyponyms_of_employee = list(set([w.replace("_"," ") for s in employee.closure(lambda s:s.hyponyms()) for w in s.lemma_names]))

if'waiter'in all_hyponyms_of_employee:
  print'employee more general than waiter'elif'employee'in all_hyponyms_of_waiter:
  print'waiter more general than employee'else:
  print"The SUMO ontology used in wordnet just doesn't have employee or waiter under the same tree"

Post a Comment for "How To Determine Semantic Hierarchies / Relations In Using Nltk?"