spanish - Python NLTK: ¿Cómo etiquetar oraciones con el conjunto simplificado de etiquetas de parte de voz?
part of speech python (3)
Actualizado, en caso de que alguien se tope con el mismo problema. Desde entonces, NLTK se ha actualizado a un conjunto de etiquetas "universal", fuente here . Una vez que haya etiquetado su texto, use map_tag para simplificar las etiquetas.
import nltk
from nltk.tag import pos_tag, map_tag
text = nltk.word_tokenize("And now for something completely different")
posTagged = pos_tag(text)
simplifiedTags = [(word, map_tag(''en-ptb'', ''universal'', tag)) for word, tag in posTagged]
print(simplifiedTags)
# [(''And'', u''CONJ''), (''now'', u''ADV''), (''for'', u''ADP''), (''something'', u''NOUN''), (''completely'', u''ADV''), (''different'', u''ADJ'')]
El capítulo 5 del libro Python NLTK ofrece este ejemplo de etiquetado de palabras en una oración:
>>> text = nltk.word_tokenize("And now for something completely different")
>>> nltk.pos_tag(text)
[(''And'', ''CC''), (''now'', ''RB''), (''for'', ''IN''), (''something'', ''NN''), (''completely'', ''RB''), (''different'', ''JJ'')]
nltk.pos_tag llama al etiquetador predeterminado, que utiliza un conjunto completo de etiquetas. Más adelante en el capítulo se presenta un conjunto simplificado de etiquetas .
¿Cómo puedo etiquetar oraciones con este conjunto simplificado de etiquetas de parte de discurso?
También he entendido correctamente al etiquetador, es decir, ¿puedo cambiar el conjunto de etiquetas que usa el etiquetador cuando pregunto, o debo asignar las etiquetas que devuelve al conjunto simplificado, o debo crear un nuevo etiquetador a partir de uno nuevo? ¿Corpus simplemente etiquetado?
Para simplificar las etiquetas del etiquetador predeterminado, puede usar nltk.tag.simplify.simplify_wsj_tag
, así:
>>> import nltk
>>> from nltk.tag.simplify import simplify_wsj_tag
>>> tagged_sent = nltk.pos_tag(tokens)
>>> simplified = [(word, simplify_wsj_tag(tag)) for word, tag in tagged_sent]
Simplemente puede establecer el atributo de conjunto de etiquetas en ''universal'' en el método pos_tag.
In [39]: from nltk import word_tokenize, pos_tag
...:
...: text = word_tokenize("Here is a simple way of doing this")
...: tags = pos_tag(text, tagset=''universal'')
...: print(tags)
...:
[(''Here'', ''ADV''), (''is'', ''VERB''), (''a'', ''DET''), (''simple'', ''ADJ''), (''way'', ''NOUN''), (''of'', ''ADP''), (''doing'', ''VERB''), (''this'', ''DET'')]