2011-09-16 27 views
19

Repasando el libro NLTK, no está claro cómo generar un árbol de dependencias a partir de una oración dada.¿Cómo hago el análisis de dependencias en NLTK?

La sección correspondiente del libro: sub-chapter on dependency grammar da una example figure pero no muestra cómo analizar una oración para llegar a esas relaciones - o tal vez me falta algo fundamental en la PNL?

EDIT: quiero algo similar a lo que el stanford parser hace: recibió una sentencia "Me tiro un elefante en mi sueño", debe devolver algo 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) 
+0

Puede comprobar [este ejemplo] (http://www.nltk.org/book/ch08.html#fig-depgraph0). NLTK no es compatible con el tipo de dependencia. – eph

Respuesta

6

Creo que se podría utilice un analizador de dependencias basado en corpus en lugar del basado en gramática que proporciona NLTK.

Hacer análisis basado en corpus en una pequeña cantidad de texto en Python no es ideal para el rendimiento. Por lo tanto, en NLTK proporcionan un wrapper a MaltParser, un analizador de dependencias basado en corpus.

Puede que encuentre otra pregunta acerca de RDF representation of sentences relevante.

1

Según 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 la salida de otros analizadores de segmentos constitutivos a la representación de Dependencias de Stanford". http://nlp.stanford.edu/software/dependencies_manual.pdf

Actualmente, ninguna funcionalidad parece estar implementada en NLTK.

3

Si quiere hablar en serio sobre el análisis de dependencias, no use el NLTK, todos los algoritmos son anticuados y lentos. Pruebe algo como esto: https://spacy.io/

+1

404 para mí - debe ser muy rápido, y se alejó de allí – JasTonAChair

+0

movido a https://spacy.io/ pero no estoy seguro si ya incluye un tranier ...? – CpILL

56

Podemos usar el analizador Stanford de NLTK.

Primero, descargue stanford core nlp tools de here. Luego, extraiga el archivo zip en el lugar que desee.

A continuación, cargar el modelo y usarlo a través 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 desea.

+0

Se debe aceptar la respuesta, funciona para mí, gracias ywat ​​ – JasTonAChair

+2

Si está utilizando Python 3, use el resultado .__ next __() en lugar de result.next() – Dinesh

+0

'next()' en listiterater arroja un error, instalando 'graphviz' resuelto el probelma – Bhashithe

2

Si necesita un mejor rendimiento, entonces spacy (https://spacy.io/) es la mejor opción. Su uso es muy sencillo:

import spacy 

nlp = spacy.load('en') 
sents = nlp(u'A woman is walking through the door.') 

que obtendrá un árbol de dependencias como salida, y se puede extraer muy fácilmente todas las informaciones que necesita. También puede definir sus propias tuberías personalizadas. Vea más uno en su sitio web.

https://spacy.io/docs/usage/

+1

@ Aleksander Jovanovic, lo intenté brevemente, y la precisión fue terrible. – craned

Cuestiones relacionadas