python - stopwords - Conversión de etiquetas POS de TextBlob en entradas compatibles con Wordnet
textblob para español (1)
Si textblob
usa el conjunto de etiquetas PennTreeBank (ptb), simplemente use el primer carácter en la etiqueta POS para asignarlo a la etiqueta pos de WN.
El conjunto de etiquetas POS de WN incluye ''a'' = adjetivo / adverbios, ''s'' = adjetivo de satélite, ''n'' = sustantivos y ''v'' = verbos.
tratar:
>>> from nltk import word_tokenize, pos_tag
>>> from nltk.corpus import wordnet as wn
>>> text = ''this is a pos tagset in some foo bar paradigm''
>>> pos_tag(word_tokenize(text))
[(''this'', ''DT''), (''is'', ''VBZ''), (''a'', ''DT''), (''pos'', ''NN''), (''tagset'', ''NN''), (''in'', ''IN''), (''some'', ''DT''), (''foo'', ''NN''), (''bar'', ''NN''), (''paradigm'', ''NN'')]
>>> for tok, pos in pos_tag(word_tokenize(text)):
... pos = pos[0].lower()
... if pos in [''a'', ''n'', ''v'']:
... wn.synsets(tok, pos)
...
[Synset(''be.v.01''), Synset(''be.v.02''), Synset(''be.v.03''), Synset(''exist.v.01''), Synset(''be.v.05''), Synset(''equal.v.01''), Synset(''constitute.v.01''), Synset(''be.v.08''), Synset(''embody.v.02''), Synset(''be.v.10''), Synset(''be.v.11''), Synset(''be.v.12''), Synset(''cost.v.01'')]
[Synset(''polonium.n.01''), Synset(''petty_officer.n.01''), Synset(''po.n.03''), Synset(''united_states_post_office.n.01'')]
[]
[]
[Synset(''barroom.n.01''), Synset(''bar.n.02''), Synset(''bar.n.03''), Synset(''measure.n.07''), Synset(''bar.n.05''), Synset(''prevention.n.01''), Synset(''bar.n.07''), Synset(''bar.n.08''), Synset(''legal_profession.n.01''), Synset(''stripe.n.05''), Synset(''cake.n.01''), Synset(''browning_automatic_rifle.n.01''), Synset(''bar.n.13''), Synset(''bar.n.14''), Synset(''bar.n.15'')]
[Synset(''paradigm.n.01''), Synset(''prototype.n.01''), Synset(''substitution_class.n.01''), Synset(''paradigm.n.04'')]
Estoy usando Python y nltk + Textblob para algunos análisis de texto. Es interesante que pueda agregar un TPV para WordNet para hacer que su búsqueda de sinónimos sea más específica, pero desafortunadamente el etiquetado tanto en nltk como en Textblob no es "compatible" con el tipo de entrada que wordnet espera para su clase de sintonizador.
Ejemplo Wordnet.synsets () requiere que el POS que le proporcione sea uno de n, v, a, r, como tal
wn.synsets("dog", POS="n,v,a,r")
Pero un etiquetado POS estándar de upenn_treebank se parece a
JJ, VBD, VBZ, etc.
Así que estoy buscando una buena manera de convertir entre los dos.
¿Alguien sabe de una buena manera de hacer que esta conversión ocurra, además de la fuerza bruta?