2012-09-20 8 views
5

से टेक्स्ट निकालने के लिए मैं एनएलपी के लिए नया हूं, मैं टेक्स्ट से (एनपी) वाक्य निकालने के लिए स्टैनफोर्ड पार्सर का उपयोग करने की कोशिश कर रहा हूं, मैं पाठ के उन हिस्सों को पुनर्प्राप्त करना चाहता हूं जहां इसे टैग किया गया है (एनपी)आउटपुट पार्स ट्री

यदि कोई भाग टैग किया गया है (एनपी) और इसके अंदर एक छोटा सा हिस्सा भी टैग किया गया है (एनपी) मैं छोटा हिस्सा लेना चाहता हूं।

अब तक मैं मैं क्या चाहते थे करने के लिए निम्न विधि में कामयाब रहे:

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" होना चाहता हूँ, टैग के बिना, मैं trie घ .labels(); संपत्ति और .label().value(); वे टैग लौटने के बजाय

उत्तर

10

आप

tr.yield() 

आप वाक्य में सुविधा के तरीकों के साथ सिर्फ स्ट्रिंग फार्म के लिए कि में बदल सकते हैं के साथ एक सबट्री टीआर के तहत शब्दों की एक सूची प्राप्त कर सकते हैं:

Sentence.listToString(tr.yield()) 

तुम सिर्फ एक पेड़ आप कर रहे हैं के रूप में चल सकता है, लेकिन आप ज्यादा बात इस तरह का क्या करने जा रहे हैं तो आप tregex जो यह आसान पेड़ों में विशेष नोड्स को खोजने के लिए बनाता है को देखने के लिए चाहते हो सकता है घोषणात्मक पैटर्न के माध्यम से, सफल एच एनपी के रूप में उनके नीचे कोई एनपी नहीं है। जो भी आप खोज रहे हैं उसे करने का एक साफ तरीका यह है:

Tree x = lp.apply("Christopher Manning owns club barcelona?"); 
TregexPattern NPpattern = TregexPattern.compile("@NP !<< @NP"); 
TregexMatcher matcher = NPpattern.matcher(x); 
while (matcher.findNextMatchingNode()) { 
    Tree match = matcher.getMatch(); 
    System.out.println(Sentence.listToString(match.yield())); 
} 
संबंधित मुद्दे