2012-09-20 24 views
5

私はnlpを新しくしました。スタンフォードパーサーを使用してテキストから(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"になりたいですD .labels();プロパティと.label().value();は、彼らはあなたが文の便利なメソッドを単に文字列形式にそれを変換することができます

tr.yield() 

でサブツリーTRの下に単語のリストを取得することができます

答えて

10

代わりにタグを返します。

Sentence.listToString(tr.yield()) 

あなたはちょうどあなたがやっているようツリーを歩くことができますが、あまりこういうことをやろうとしている場合、あなたはそれが簡単に木の特定のノードを見つけることができますtregexで見たいと思うかもしれません宣言的パターンを介して、suc NPの下にNPがなく、NPがない。あなたが探していることを行うためのきちんとした方法は次のとおりです。

関連する問題