¿Cómo obtener todos los significados de una palabra usando Python NLTK?

Quiero usar todos los significados de una palabra en particular en una consulta de entrada.

Por ejemplo:

Supongamos que mi consulta de entrada es: “El perro está ladrando en el árbol”

Aquí quiero obtener todos los significados de la palabra ÁRBOL y BARRA en el siguiente formato:

árbol # n # 01, árbol # n # 02 … y así sucesivamente. ladrar # n # 01, ladrar # n # 02 … y así sucesivamente

Estoy utilizando el etiquetado POS para extraer el sinónimo de sustantivo, verbo, adjetivo y adverbio en consecuencia. Si la corteza se usa como verbo (como se usa en nuestra consulta de entrada), solo los significados relacionados deben mostrarse como la corteza # v # 01, la corteza # v # 02 …

Por favor, ayúdame a resolver esto usando Python. Estoy usando el módulo Python NLTK para el procesamiento de lenguaje natural.

Para saber qué palabra tiene la misma etiqueta / pos pos, puede usar el idiomático

>>> 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')] 

Luego, para obtener los posibles synsets para una palabra, simplemente haga:

 >>> 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')] 

Probablemente la solución que está buscando es:

 >>> 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')]