2011-03-27 14 views
7

Mi trabajo consiste en encontrar una consulta (puede ser noun+verb) en una oración, luego extraer el objeto.Stanford Parser: cómo extraer dependencias?

ejemplo: "coding is sometimes a tough work." Mi consulta sería: "coding is".

las dependencias mecanografiadas que consigo son:

nsubj(work-6, coding-1) 
cop(work-6, is-2)  
advmod(work-6, sometimes-3) 
det(work-6, a-4) 
amod(work-6, tough-5) 

Mi programa debe extraer la dependencia nsubj, identificar "coding" como la consulta y guardar "work".

Puede ser que esto parezca simple, pero hasta ahora, no encontré un método capaz de extraer una dependencia especificada, y realmente necesito esto para terminar mi trabajo.

Cualquier ayuda es bienvenida,

+0

¿Qué lenguaje de programación está usando? – Kaarel

+0

Estoy usando Java, pero para este viejo comentario encuentro la solución, utilicé StringTokonizer 2 veces, con "(" como separador, luego ingenio ",". Finalmente puse los tokens extraídos en un archivo xml. –

Respuesta

1

No creo que haya una manera de comunicar al analizador para extraer las dependencias en torno a una palabra dada. Sin embargo, puede ejecutar la lista de dependencias para cada oración, buscando todas las instancias en las que aparece la palabra de consulta en una relación nsubj.

Además, ¿cómo está almacenando los análisis de las oraciones? Si (como lo deduzco de su pregunta) está en un archivo de texto, puede usar 2 greps sucesivos, uno para la palabra de consulta y otro para la relación que desea, para obtener una lista de otras palabras relevantes.

10

puede encontrar por dependencias siguiente código:

Tree tree = sentence.get(TreeAnnotation.class); 
// Get dependency tree 
TreebankLanguagePack tlp = new PennTreebankLanguagePack(); 
GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory(); 
GrammaticalStructure gs = gsf.newGrammaticalStructure(tree); 
Collection<TypedDependency> td = gs.typedDependenciesCollapsed(); 
System.out.println(td); 

Object[] list = td.toArray(); 
System.out.println(list.length); 
TypedDependency typedDependency; 
for (Object object : list) { 
typedDependency = (TypedDependency) object; 
System.out.println("Depdency Name"typedDependency.dep().nodeString()+ " :: "+ "Node"+typedDependency.reln()); 
if (typedDependency.reln().getShortName().equals("something")) { 
    //your code 
} 
+0

El código es en Java, y está bien abordado el problema en el dominio de NLP específicamente para Stanford Core NLP API. @Alain no tiene sentido abordar los problemas ?? – Imran

+0

Eso está bien, pero en general las respuestas aceptadas y votadas en SO implican solo un poco más de contexto que un bloque de código, incluso si el código es bastante sencillo. Quizás adaptando tu caso de uso de muestra para resolver la pregunta original. De cualquier manera, me temo que no obtendrás mucho más comentarios del autor ya que la pregunta no ha tenido actividad en 2 años. – Alain