spanish - part of speech python
¿Cómo hago el análisis de dependencias en NLTK? (5)
Podemos usar el analizador de Stanford de NLTK.
Primero, descargue las herramientas stanford core nlp desde aquí . Luego, extraiga el archivo zip en cualquier lugar que desee.
A continuación, carga el modelo y úsalo a través de NLTK
from nltk.parse.stanford import StanfordDependencyParser
path_to_jar = ''path_to/stanford-parser-full-2014-08-27/stanford-parser.jar''
path_to_models_jar = ''path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar''
dependency_parser = StanfordDependencyParser(path_to_jar=path_to_jar, path_to_models_jar=path_to_models_jar)
result = dependency_parser.raw_parse(''I shot an elephant in my sleep'')
dep = result.next()
list(dep.triples())
La salida de la última línea es:
[((u''shot'', u''VBD''), u''nsubj'', (u''I'', u''PRP'')),
((u''shot'', u''VBD''), u''dobj'', (u''elephant'', u''NN'')),
((u''elephant'', u''NN''), u''det'', (u''an'', u''DT'')),
((u''shot'', u''VBD''), u''prep'', (u''in'', u''IN'')),
((u''in'', u''IN''), u''pobj'', (u''sleep'', u''NN'')),
((u''sleep'', u''NN''), u''poss'', (u''my'', u''PRP$''))]
Creo que esto es lo que quieres.
Repasando el libro NLTK, no está claro cómo generar un árbol de dependencias a partir de una oración dada.
La sección relevante del libro: el subcapítulo sobre la gramática de dependencia da una figura de ejemplo pero no muestra cómo analizar una oración para encontrar esas relaciones, ¿o quizás me falta algo fundamental en la PNL?
EDITAR: Quiero algo similar a lo que hace el analizador stanford : dada una frase "disparé a un elefante mientras dormía", debería regresar algo así como:
nsubj(shot-2, I-1)
det(elephant-4, an-3)
dobj(shot-2, elephant-4)
prep(shot-2, in-5)
poss(sleep-7, my-6)
pobj(in-5, sleep-7)
Si quiere tomar en serio el análisis de dependencia, no use NLTK, todos los algoritmos son anticuados y lentos. Pruebe algo como esto: https://spacy.io/
Si necesita un mejor rendimiento, entonces spacy ( https://spacy.io/ ) es la mejor opción. El uso es muy simple:
import spacy
nlp = spacy.load(''en'')
sents = nlp(u''A woman is walking through the door.'')
Obtendrá un árbol de dependencias como salida, y podrá extraer con facilidad toda la información que necesite. También puede definir sus propias tuberías personalizadas. Vea más uno en su sitio web.
Creo que podría usar un analizador de dependencias basado en corpus en lugar de uno basado en gramática que proporciona NLTK.
Hacer un análisis de dependencia basado en corpus en una cantidad pequeña de texto en Python no es ideal para el rendimiento. Por lo tanto, en NLTK proporcionan un envoltorio para MaltParser , un analizador de dependencias basado en corpus.
Puede encontrar esta otra pregunta sobre la representación RDF de oraciones relevantes.
De la documentación de Stanford Parser: "las dependencias se pueden obtener utilizando nuestro software [...] en árboles de estructura de frase utilizando la clase EnglishGrammaticalStructure disponible en el paquete de analizador". http://nlp.stanford.edu/software/stanford-dependencies.shtml
El manual de dependencias también menciona: "O nuestra herramienta de conversión puede convertir el resultado de otros analizadores de constituyentes a la representación de Dependencias de Stanford". http://nlp.stanford.edu/software/dependencies_manual.pdf
Ni la funcionalidad parece implementarse en NLTK actualmente.