我想在输入查询中使用特定单词的所有含义。
例如:
假设我的输入查询是: “狗在树上吠”
在这里,我希望以下列格式获得 TREE 和 BARK 这个词的所有含义:
树#n#01,树#n#02 ......等等。 树皮#n#01,树皮#n#02 ......等等
我正在使用POS标记来相应地提取名词,动词,形容词和副词synset。 如果使用bark作为动词(在我们的输入查询中使用),那么只有相关的含义应该显示为树皮#v#01,bark#v#02 ...
请帮我用Python解决这个问题。我正在使用Python NLTK模块进行自然语言处理。
答案 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')]