2010-02-06 6 views
8

मैं दिशा की मांग कर रहा हूँ और इस समस्या लेबल करने का प्रयास:पायथन में एक निष्कर्ष इंजन का निर्माण

मैं एक साधारण अनुमान इंजन के निर्माण के लिए अजगर में (वहाँ एक बेहतर नाम है?) जो एक स्ट्रिंग ले जाएगा का प्रयास कर रहा हूँ और -

1 - बस सफेद स्थान अलग मान

2 की एक सूची बनाने के द्वारा टोकन की एक सूची बना सकते हैं - इन टोकन वर्गीकृत, नियमित अभिव्यक्ति

का उपयोग कर

3 - आह उपयोग नियम categorisations के आधार पर निर्णय लेने के लिए की igher स्तर सेट

उदाहरण:

"90001" - एक टोकन, ज़िपकोड regex से मेल खाता, एक नियम के लिए एक निश्चित व्यवहार का कारण बनता है सिर्फ एक ज़िपकोड युक्त एक स्ट्रिंग मौजूद है होने के लिये

"30 + 14" - तीन टोकन, संख्यात्मक मूल्य और गणितीय ऑपरेटर मैच के लिए regexs, एक नियम के लिए मौजूद है एक संख्यात्मक मान एक गणितीय ऑपरेटर अन्य संख्यात्मक मान के बाद

होने के लिये एक निश्चित व्यवहार का कारण बनता है के बाद

मैं कैसे सबसे अच्छा कदम # 3, नियमों के उच्च स्तर सेट करने के लिए के साथ संघर्ष कर रहा हूँ। मुझे यकीन है कि कुछ ढांचे का अस्तित्व होना चाहिए। कोई विचार? इसके अलावा, आप इस समस्या को कैसे चिह्नित करेंगे? नियम आधारित प्रणाली, विशेषज्ञ प्रणाली, अनुमान इंजन, कुछ और?

धन्यवाद!

+1

1-3 ध्वनि एक अनुमान इंजन मेरे लिए एक पार्सर के बजाय की तरह। # 1 + # 2 = टोकन # 3 = पार्स तो संभावित रूप से # 4 = पार्सर के परिणाम पर कार्य करें। बाहर चेक pyparsing। –

उत्तर

6

मैं बहुत हैरान है कि कदम # 3 यदि आपको परेशानी दे रही है एक है हूँ ...

मान लिया जाये कि आप लेबल कर सकते हैं/ठीक से प्रत्येक टोकन वर्गीकृत (और है कि पहले आप उचित टोकन प्राप्त कर सकते हैं वर्गीकरण के रूप में, वहाँ कई अस्पष्ट मामलों ...) हो सकता है, "चरण # 3" समस्या एक ही है कि आसानी से एक संदर्भ मुक्त व्याकरण साथ घेरने की कोशिश की जा सकता है लगता है, जहां इस तरह ज़िप कोड देखने या गणितीय अभिव्यक्ति गणना के रूप में वांछित क्रिया (से प्रत्येक ...) संभवतः टोकन श्रेणियों से बने उनके उत्पादन नियम के प्रतीक होंगे। BNF संकेतन में इसे दर्शाने के लिए, हम शायद आपकी चिंता का विषय है कि जब चीजें जटिल हो, यह परस्पर विरोधी व्याकरण के नियमों के संदर्भ में पूरे आवश्यकता व्यक्त करने के लिए कठिन हो जाएगा है

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue> 

की तरह कुछ हो सकता था। या हो सकता है आपकी चिंता एक नियम गतिशील जोड़ सकता है कि, इसलिए व्याकरण "संकलन" तर्क के लिए मजबूर कर कार्यक्रम के साथ एकीकृत किया जा रहा है? जो कुछ भी चिंता है, मुझे लगता है कि यह तीसरा कदम तुलनात्मक रूप से तुच्छ होगा।

दूसरी तरफ, और जब तक कि विभिन्न श्रेणियां (और अंतर्निहित इनपुट टेक्स्ट) ऐसी नहीं हैं कि उन्हें एक नियमित भाषा के साथ भी वर्णित किया जा सके (जैसा कि आप प्रश्न में संकेत देते हैं), एक पाठ पार्सर और वर्गीकृत (कदम # 1 और # 2 ...) आम तौर पर तुच्छ चक्कर तुलना में एक कम है ..

कुछ उदाहरण पायथन पुस्तकालयों कि लेखन और व्याकरण का मूल्यांकन सरल बनाएं:

+0

सूचक के लिए पॉइपरिंग के लिए धन्यवाद। एक सीएफजी जाने का रास्ता है। – Art

+0

@Art, पार्स पुस्तकालयों के लिए क्रेडिट मैक्स एस जो कृपया और उचित रूप से जवाब संपादित करने के लिए चला जाता है। मैं अपने कुछ उत्तरों को "उसे दिखाने" के लिए कोशिश करूँगा ;-) – mjv

2

की तरह आप "व्याकरण निष्कर्ष" (व्याकरण प्रेरण) पुस्तकालय के लिए खोज यह लग रहा है।