如何使用python NLTK获取单词的所有含义?

时间:2014-01-23 20:37:10

标签: python nlp nltk wordnet

我想在输入查询中使用特定单词的所有含义。

例如:

假设我的输入查询是: “狗在树上吠”

在这里,我希望以下列格式获得 TREE BARK 这个词的所有含义:

树#n#01,树#n#02 ......等等。 树皮#n#01,树皮#n#02 ......等等

我正在使用POS标记来相应地提取名词,动词,形容词和副词synset。 如果使用bark作为动词(在我们的输入查询中使用),那么只有相关的含义应该显示为树皮#v#01,bark#v#02 ...

请帮我用Python解决这个问题。我正在使用Python NLTK模块进行自然语言处理。

1 个答案:

答案 0 :(得分:2)

要知道哪个单词具有相同/相似的pos标记,您可以使用惯用语

>>> from nltk.tag import pos_tag
>>> sent = "dog is barking at tree"
>>> [i for i in pos_tag(sent.split()) if i[1] == "NN"]
[('dog', 'NN'), ('tree', 'NN')]

然后,为了获得单词的可能的同义词集,只需执行:

>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('dog')
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]

您最想要的解决方案是:

>>> from nltk.corpus import wordnet as wn
>>> from nltk.tag import pos_tag
>>> sent = "dog is barking at tree"
>>> for i in [i[0] for i in pos_tag(sent.split()) if i[1].lower()[0] == 'n']:
...     print wn.synsets(i); print
... 
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]

[Synset('tree.n.01'), Synset('tree.n.02'), Synset('tree.n.03'), Synset('corner.v.02'), Synset('tree.v.02'), Synset('tree.v.03'), Synset('tree.v.04')]