No sé lo mejor, pero hay dos opciones que conozco para hacer esto con Python. Una es usar NLTK y la otra es usar SpaCy. El etiquetado de POS para ambos es relativamente sencillo, pero para la fragmentación (generalizada), ambos exponen una interfaz basada en reglas (donde se pueden definir las reglas). Si solo desea frases nominales, SpaCy es más fácil de usar que NLTK.
Etiquetado POS utilizando NLTK (más detalles aquí – 5. Categorización y etiquetado de palabras)
>>> importar nltk
>>> enviado = “El hombre vio al perro con el telescopio”.
>>> palabras = nltk.word_tokenize (enviado)
>>> nltk.pos_tag (palabras)
[(‘The’, ‘DT’), (‘man’, ‘NN’), (‘saw’, ‘VBD’), (‘the’, ‘DT’), (‘dog’, ‘NN’) , (‘con’, ‘IN’), (‘el’, ‘DT’), (‘telescopio’, ‘NN’), (‘.’, ‘.’)]
>>>
- ¿Cómo identificar el contexto basado en la oración?
- ¿Existe alguna posibilidad de que la química del aprendizaje automático pueda correlacionarse con la nanotecnología?
- ¿Cómo se puede aprender y dominar un tema?
- ¿Qué debo elegir para mi tesis en Machine Learning?
- ¿Cuál es la diferencia entre agrupar sin PCA y agrupar con PCA?
Etiquetado de POS usando SpaCy.
>>> de spacy.es import English
>>> nlp = inglés ()
>>> [(x.text, x.pos_) para x en nlp (unicode (enviado)) if x.pos_! = u’SPACE ‘]
[(u’The ‘, u’DET’), (u’man ‘, u’NOUN’), (u’saw ‘, u’VERB’), (u’the ‘, u’DET’), ( u’dog ‘, u’NOUN’), (u’with ‘, u’ADP’), (u’the ‘, u’DET’), (u’telescope ‘, u’NOUN’), (u ‘ . ‘, u’PUNCT’)]
La fragmentación de frases con NLTK se basa en reglas, así es como construiría un fragmentador que devuelva frases nominales. Más detalles aquí – 7. Extracción de información del texto.
>>> grammar = “NP: {
>>> analizador = nltk.RegexpParser (gramática)
>>> t = parser.parse (nltk.pos_tag (palabras))
>>> [str (s.leaves ()) para s en t.subtrees () if s.label () == “NP”]
[“[(‘The’, ‘DT’), (‘man’, ‘NN’)]”, “[(‘the’, ‘DT’), (‘dog’, ‘NN’)]”, ” [(” ‘,’ DT ‘), (‘ telescopio ‘,’ NN ‘)] “]
Si solo quiere frases nominales, SpaCy tiene un iterador incorporado para eso.
>>> [np.text para np en toks.noun_chunks]
[u’El hombre ‘, el perro’, el telescopio ‘]
El enfoque general de fragmentación para ambos se trata muy bien en este tema de SpaCy: fragmentación con gramática basada en reglas en espacios · Problema # 342 · explosión / spaCy – donde el OP describe cómo haría fragmentación con NLTK y la respuesta contiene cómo hazlo en SpaCy.
Sé que solo preguntaste sobre Python, pero para la fragmentación de frases, prefiero OpenNLP (basado en Java) (Bienvenido a Apache OpenNLP). Aquí hay un código Gist (JUnit / OpenNLP para extraer frases sustantivas del texto. Originalmente de mi pastebin (http://pastebin.com/bUDY7fb0) que muestra cómo usarlo en caso de que quiera probarlo.