【发布时间】:2012-09-20 14:18:10
【问题描述】:
我是 nlp 的新手,我正在尝试使用 stanford 解析器从文本中提取 (NP) 句子,我想检索文本中被标记的部分 (NP)
如果一个部分被标记(NP)并且它内部的较小部分也被标记(NP)我想取较小的部分。
到目前为止,我设法通过以下方法做我想做的事:
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;
}
这个方法的返回类型是树的列表,当我执行以下操作时:
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));}
是:
tree #0: (NP (NN club) (NN barcelona))
我希望输出立即为"club barcelona",没有标签,我尝试了.labels(); 属性和.label().value(); 他们返回标签
【问题讨论】:
标签: java nlp stanford-nlp