2013-10-17 3 views
8

मैं वाक्यांश प्रमुख खोजने के लिए स्टैनफोर्ड कोरनलप 2013 का उपयोग करने जा रहा हूं। मैंने this thread देखा।वाक्यांश प्रमुखों को खोजने के लिए स्टैनफोर्ड पार्सर (कोरएनएलपी) का उपयोग

लेकिन, जवाब मुझे स्पष्ट नहीं था और मैं उस धागे को जारी रखने के लिए कोई टिप्पणी नहीं जोड़ सका। तो, मुझे नकल के लिए खेद है।

इस समय मेरे पास एक वाक्य का पार्स पेड़ है (स्टैनफोर्ड कोरनलप का उपयोग करके) (मैंने स्टैनफोर्ड कोरनलप द्वारा बनाई गई CONLL प्रारूप के साथ भी कोशिश की)। और मुझे जो चाहिए वह बिल्कुल संज्ञा वाक्यांशों का मुखिया है।

मुझे नहीं पता कि मैं निर्भरता और पार्स पेड़ का उपयोग कैसे कर सकता हूं ताकि संज्ञाफ्रेज़ के सिर निकाले जा सकें। मुझे क्या पता है कि अगर मेरे पास nsubj (x, y) है, तो y विषय का प्रमुख है। अगर मेरे पास dobj(x,y) है, तो y प्रत्यक्ष वस्तु का प्रमुख है। एफ मेरे पास iobj(x,y) है, वाई अप्रत्यक्ष वस्तु का प्रमुख है।

हालांकि, मुझे यकीन नहीं है कि यह तरीका सभी वाक्यांश प्रमुखों को खोजने का सही तरीका है या नहीं। यदि यह है, तो कौन से नियम मुझे संज्ञा वाक्यांशों के सभी प्रमुखों को प्राप्त करने के लिए जोड़ना चाहिए?

शायद, यह कहने योग्य है कि मुझे जावा कोड में संज्ञा वाक्यांशों के प्रमुखों की आवश्यकता है।

उत्तर

4

आप रुचि के वाक्यांश को निकाल सकते हैं जैसे कि यह कक्षा Tree कक्षा का एक वस्तु है, तो आप इंटरफेस HeadFinder को लागू करने वाले किसी भी वर्ग से determineHead(Tree t) विधि का उपयोग कर सकते हैं।

7

चूंकि मैं चैतन्य द्वारा दिए गए उत्तर पर टिप्पणी नहीं कर सका, यहां उनके जवाब में और भी जोड़ रहा हूं।

स्टैनफोर्ड CoreNLP सूट कोलिन्स सिर खोजक heuristics के कार्यान्वयन और

  1. के रूप में एक अर्थ सिर खोजक अनुमानी CollinsHeadFinder
  2. ModCollinsHeadFinder है
  3. SemanticHeadFinder

आप सभी की आवश्यकता होगी है तीन में से एक को तत्काल करें और निम्न कार्य करें।

Tree tree = sentence.get(TreeCoreAnnotations.TreeAnnotation.class); 
headFinder.determineHead(tree).pennPrint(out); 

आप पेड़ के नोड्स के माध्यम से पुनरावृत्त कर सकते हैं और जहां भी आवश्यक हो वहां सिर शब्द निर्धारित कर सकते हैं।

पुनश्च: मेरा जवाब StanfordCoreNLP सूट यहाँ 20140104.

के रूप में जारी किया पर आधारित है एक सरल DFS आप सभी संज्ञा पद के लिए सिर शब्द निकालने एक वाक्य में देता है

public static void dfs(Tree node, Tree parent, HeadFinder headFinder) { 
     if (node == null || node.isLeaf()) { 
     return; 
     } 
     //if node is a NP - Get the terminal nodes to get the words in the NP  
     if(node.value().equals("NP")) { 

     System.out.println(" Noun Phrase is "); 
     List<Tree> leaves = node.getLeaves(); 

     for(Tree leaf : leaves) { 
      System.out.print(leaf.toString()+" "); 

     } 
     System.out.println(); 

     System.out.println(" Head string is "); 
     System.out.println(node.headTerminal(headFinder, parent)); 

    } 

    for(Tree child : node.children()) { 
     dfs(child, node, headFinder); 
    } 

} 
संबंधित मुद्दे