2011-09-16 38 views
19

एनएलटीके पुस्तक के माध्यम से जाना, यह स्पष्ट नहीं है कि किसी दिए गए वाक्य से निर्भरता पेड़ कैसे उत्पन्न करें।मैं एनएलटीके में निर्भरता पार्सिंग कैसे कर सकता हूं?

पुस्तक के प्रासंगिक अनुभाग: sub-chapter on dependency grammar देता है एक example figure लेकिन यह कैसे उन रिश्तों साथ आने के लिए एक वाक्य पार्स करने के लिए प्रदर्शित नहीं करता है - या शायद मैं NLP में कुछ मौलिक याद कर रहा हूँ?

संपादित करें: एक वाक्य को देखते हुए "मैं अपनी नींद में एक हाथी को गोली मार दी", यह की तरह कुछ लौटाना चाहिए: मैं क्या stanford parser करता है के लिए इसी तरह कुछ चाहते हैं

nsubj(shot-2, I-1) 
det(elephant-4, an-3) 
dobj(shot-2, elephant-4) 
prep(shot-2, in-5) 
poss(sleep-7, my-6) 
pobj(in-5, sleep-7) 
+0

आप देख सकते हैं [इस उदाहरण] (http://www.nltk.org/book/ch08.html#fig-depgraph0)। एनएलटीके निर्भरता के प्रकार का समर्थन नहीं करता है। – eph

उत्तर

6

मुझे लगता है कि आप कर सकते थे व्याकरण-आधारित एक एनएलटीके प्रदान करने के बजाय कॉर्पस-आधारित निर्भरता पार्सर का उपयोग करें।

पायथन में एक छोटी सी मात्रा में पाठ पर कॉर्पस-आधारित निर्भरता पार्सिंग करना आदर्श प्रदर्शन-वार नहीं है। तो एनएलटीके में वे एक wrapperMaltParser, एक कॉर्पस आधारित निर्भरता पार्सर प्रदान करते हैं।

आपको यह अन्य प्रश्न RDF representation of sentences प्रासंगिक के बारे में मिल सकता है।

1

स्टैनफोर्ड पार्सर दस्तावेज़ से: "पार्सर पैकेज में उपलब्ध अंग्रेजी ग्रामेटिकल स्ट्रक्चर क्लास का उपयोग करके वाक्यांश-संरचना पेड़ पर निर्भरता हमारे सॉफ्टवेयर [...] पर निर्भरता प्राप्त की जा सकती है।" http://nlp.stanford.edu/software/stanford-dependencies.shtml

निर्भरता पुस्तिका भी उल्लेख करती है: "या हमारा रूपांतरण उपकरण अन्य निर्वाचन क्षेत्र के पार्सर्स के आउटपुट को स्टैनफोर्ड निर्भरता प्रतिनिधित्व में परिवर्तित कर सकता है।" http://nlp.stanford.edu/software/dependencies_manual.pdf

वर्तमान में एनएलटीके में कार्यक्षमता लागू नहीं की जा रही है।

3

यदि आप निर्भरता पार्सिंग के बारे में गंभीर होना चाहते हैं तो एनएलटीके का उपयोग न करें, सभी एल्गोरिदम दिनांकित हैं, और धीमे हैं। इस तरह कुछ कोशिश करें: https://spacy.io/

+1

मेरे लिए 404 - वास्तव में तेज़ होना चाहिए, और वहां से ज़ूम आउट – JasTonAChair

+0

https://spacy.io/ पर ले जाया गया है, लेकिन मुझे यकीन नहीं है कि इसमें अब एक ट्रैनियर शामिल है या नहीं ...? – CpILL

56

हम एनएलटीके से स्टैनफोर्ड पार्सर का उपयोग कर सकते हैं।

सबसे पहले, here से स्टैनफोर्ड कोर एनएलपी उपकरण डाउनलोड करें। फिर, ज़िप फ़ाइल को कहीं भी निकालें।

इसके बाद, मॉडल लोड और NLTK

के माध्यम से इसका इस्तेमाल
from nltk.parse.stanford import StanfordDependencyParser 
path_to_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar' 
path_to_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar' 
dependency_parser = StanfordDependencyParser(path_to_jar=path_to_jar, path_to_models_jar=path_to_models_jar) 

result = dependency_parser.raw_parse('I shot an elephant in my sleep') 
dep = result.next() 
list(dep.triples()) 

अंतिम पंक्ति के उत्पादन में है:

[((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')), 
((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')), 
((u'elephant', u'NN'), u'det', (u'an', u'DT')), 
((u'shot', u'VBD'), u'prep', (u'in', u'IN')), 
((u'in', u'IN'), u'pobj', (u'sleep', u'NN')), 
((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))] 

मुझे लगता है कि यह तुम क्या चाहते है।

+0

उत्तर स्वीकार किया जाना चाहिए, मेरे लिए काम करता है, धन्यवाद ywat ​​ – JasTonAChair

+2

यदि आप पायथन 3 का उपयोग कर रहे हैं, तो परिणाम का उपयोग करें .__ परिणाम के बाद अगला __() परिणाम .next() – Dinesh

+0

'लिस्टीटरेटर पर' अगला() 'त्रुटि देता है, 'graphviz' हल किया गया है probelm – Bhashithe

2

यदि आपको बेहतर प्रदर्शन की आवश्यकता है, तो स्पासी (https://spacy.io/) सबसे अच्छा विकल्प है। प्रयोग बहुत सरल है:

import spacy 

nlp = spacy.load('en') 
sents = nlp(u'A woman is walking through the door.') 

आप आउटपुट के रूप में एक निर्भरता वृक्ष मिल जाएगा, और आप बहुत आसानी से हर जानकारी की आवश्यकता की खुदाई कर सकते हैं। आप अपनी खुद की कस्टम पाइपलाइनों को भी परिभाषित कर सकते हैं। उनकी वेबसाइट को और देखें।

https://spacy.io/docs/usage/

+1

@ एलेक्सेंडर जोवानोविक, मैंने संक्षेप में यह कोशिश की, और सटीकता भयानक थी। – craned