Soy nuevo en nlp, estoy tratando de usar stanford parser para extraer la oración (NP) de un texto, quiero recuperar las partes del texto donde está etiquetado (NP)extrayendo el texto del análisis de salida Árbol
si una parte está etiquetada (NP) y una parte más pequeña dentro también está etiquetada (NP) Quiero tomar la parte más pequeña.
hasta ahora he logrado hacer lo que quería en el siguiente método:
private static ArrayList<Tree> extract(Tree t)
{
ArrayList<Tree> wanted = new ArrayList<Tree>();
if (t.label().value().equals("NP"))
{
wanted.add(t);
for (Tree child : t.children())
{
ArrayList<Tree> temp = new ArrayList<Tree>();
temp=extract(child);
if(temp.size()>0)
{
int o=-1;
o=wanted.indexOf(t);
if(o!=-1)
wanted.remove(o);
}
wanted.addAll(temp);
}
}
else
for (Tree child : t.children())
wanted.addAll(extract(child));
return wanted;
}
El tipo de retorno de este método es una lista de árboles, Cuando hago lo siguiente:
LexicalizedParser parser = LexicalizedParser.loadModel();
x = parser.apply("Who owns club barcelona?");
outs=extract(x);
for(int i=0;i<outs.size();i++){System.out.println("tree #"+i+": "+outs.get(i));}
es decir:
tree #0: (NP (NN club) (NN barcelona))
quiero que la salida sea "club barcelona"
de inmediato, sin las etiquetas, me trie d la propiedad .labels();
y .label().value();
regresan las etiquetas en lugar