2011-08-14 16 views
14

मैं एनएलटीके और पायथन के लिए बिल्कुल नया हूं। मैं उदाहरणों में दिए गए खिलौने व्याकरण का उपयोग करके वाक्य पार्स बना रहा हूं लेकिन मुझे यह जानना है कि पेन ट्रीबैंक के एक हिस्से से सीखने वाले व्याकरण का उपयोग करना संभव है, जैसा कि मेरा खुद लिखना या खिलौना का उपयोग करना है व्याकरण? (मै मैक पर पायथन 2.7 का उपयोग कर रहा हूं) बहुत धन्यवादपायथन और एनएलटीके का उपयोग करके पेन ट्रीबैंक से व्याकरण नियमों का एक सेट कैसे प्राप्त करूं?

उत्तर

3

पेड़बैंक_चंक या conll2000 निगम पर एक चंकर को प्रशिक्षित करना संभव है। आपको इससे व्याकरण नहीं मिलता है, लेकिन आपको एक अचार-सक्षम वस्तु मिलती है जो वाक्यांश भाग को पार्स कर सकती है। How to Train a NLTK Chunker, Chunk Extraction with NLTK, और NLTK Classified Based Chunker Accuracy देखें।

14

आप एक व्याकरण है कि ठीक पेन Treebank नमूना कि NLTK के साथ आता है कब्जा चाहते हैं, आप (नीचे टिप्पणी देखें) मानते हुए कि आपके NLTK के लिए Treebank डेटा डाउनलोड किया है यह कर सकते हैं,:

import nltk 
from nltk.corpus import treebank 
from nltk.grammar import ContextFreeGrammar, Nonterminal 

tbank_productions = set(production for sent in treebank.parsed_sents() 
         for production in sent.productions()) 
tbank_grammar = ContextFreeGrammar(Nonterminal('S'), list(tbank_productions)) 

यह हालांकि, शायद आपको कुछ उपयोगी नहीं लगेगा। चूंकि एनएलटीके केवल निर्दिष्ट सभी टर्मिनलों के साथ व्याकरण के साथ पार्सिंग का समर्थन करता है, इसलिए आप केवल ट्रीबैंक नमूने में शब्दों वाले वाक्यों को पार्स करने में सक्षम होंगे।

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

अंत में, यह अविश्वसनीय रूप से धीमा हो जाएगा यह बेकार है।

mini_grammar = ContextFreeGrammar(Nonterminal('S'), 
            treebank.parsed_sents()[0].productions()) 
parser = nltk.parse.EarleyChartParser(mini_grammar) 
print parser.parse(treebank.sents()[0]) 
+0

मैं अपने दूसरे कोड को चलाने के लिए असमर्थ हूं: सिर्फ साबित करने के लिए यदि आप एक ही वाक्य से व्याकरण पर कार्रवाई में इस दृष्टिकोण देखना चाहते हैं तो यह है कि यह काम करता है, निम्नलिखित कोड (ऊपर आयात के बाद) की कोशिश टुकड़ा। यह मुझे निम्न त्रुटि देता है: संसाधन 'निगम/पेड़बैंक/संयुक्त' नहीं मिला। –

+2

सबसे संभावित कारण यह है कि आपने एनएलटीके स्थापित करते समय ट्रीबैंक डेटा इंस्टॉल नहीं किया था। [एनएलटीके डेटा निर्देश] देखें (http://www.nltk.org/data)। मूल रूप से, एक पायथन दुभाषिया पर आपको 'nltk आयात' करने की आवश्यकता होगी, 'nltk.download()' पर कॉल करें, जो विंडो आता है, "निगम" टैब पर क्लिक करें, "treebank" चुनें और अंत में "डाउनलोड करें" पर क्लिक करें और जब आप पूरा कर लें तो इसे बंद करें। – Constantine