2008-12-09 12 views
5

तो यहां मैं जो हासिल करना चाहता हूं वह यहां है। मैं अपने उपयोगकर्ताओं को एक Google जैसा टेक्स्टबॉक्स देना चाहता हूं जहां वे अपने प्रश्न टाइप कर सकते हैं। और मैं उन्हें अर्द्ध प्राकृतिक भाषा को व्यक्त करने के इस तरह केउपयोगकर्ता की क्वेरी पार्सिंग

"view all between 1/1/2008 and 1/2/2008" 

के रूप में यह ठीक है अगर वाक्य रचना काफी संरचित और इस विशिष्ट डोमेन के लिए सीमित हो गया है सक्षम होने के लिए चाहते हैं ... ये विशेषज्ञ उपयोगकर्ताओं को, जो का उपयोग किया जाएगा रहे हैं इस।

आखिरकार, मुझे लगता है कि मैं पार्स परिणाम कुछ प्रकार के अभिव्यक्ति वृक्ष के रूप में उपलब्ध होना चाहता हूं। लेकिन अगर आपके पास कुछ अन्य विचार हैं जो डेटा संरचना बेहतर हो सकती है।

यह :-)

उत्तर

4

आप एक प्रोग्रामिंग भाषा का वर्णन कर रहे हैं। यह एक छोटी भाषा है (अक्सर एक छोटी भाषा, या डोमेन विशिष्ट भाषा (डीएसएल) कहा जाता है)। यदि आपने कभी भी रिकर्सिव डेसेंट पार्सर शब्द नहीं सुना है, तो शायद आप पॉल की सलाह के बाद और कुछ विवरण के ड्रॉप डाउन बॉक्स का उपयोग करके बेहतर हो सकते हैं।

हालांकि, फिर से, मुझे उससे सहमत होना होगा, अगर आप इसे करना चाहते हैं, तो एंटरल जाने का रास्ता है। साइट पर ऐसे ट्यूटोरियल हैं जो आपको प्रारंभ करने में मदद कर सकते हैं। असल में, आपको वर्णन करना होगा कि Backus-Naur Form नोटेशन का उपयोग करके सिंटैक्स कैसा है।

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

यदि आप वास्तव में इसमें हैं और/या अपने प्रोग्रामिंग पंखों को थोड़ा सा खींचना चाहते हैं, तो आप ड्रैगन बुक, एकेए कंपाइलर्स: सिद्धांत, तकनीक और उपकरण के साथ इस विषय पर और अधिक पढ़ सकते हैं।

शुभकामनाएँ मेरे दोस्त।

-1

कि सामान पार्स करने के लिए एक आपदा होगा कोशिश कर रहा है, और ultimatley बहुत उपयोगकर्ता के लिए सीमित है, इस प्रकार उन्हें और अधिक उनकी मदद तो निराशा सी # में है। मैं पूर्व-परिभाषित क्वेरी क्लोज़ का उपयोग करने का सुझाव दूंगा, किसी प्रकार के क्वेरी बिल्डर टूल के साथ जिसमें ड्रॉप डाउन फॉर्म में सभी उपलब्ध विकल्प हैं। अलग-अलग डेटा प्रकारों के लिए अलग-अलग बूलियन ऑपरेटर हो सकते हैं (संख्यात्मक से कम, जैसे स्ट्रिंग इत्यादि की तरह नहीं), हालांकि मुझे लगता है कि वास्तव में एक उपयोगकर्ता द्वारा टाइप किए जाने वाले विश्लेषण को समझने की तुलना में एक हेलुवा बहुत अधिक समझदार होगा।

+0

हमने पहले से ही ड्रॉपडाउन लागू किए हैं ... हमारे उपयोगकर्ताओं के लिए उनकी क्वेरी में गतिशील तत्व जोड़ने के लिए बहुत सारे क्लिक करना बहुत निराशाजनक है। नोट मैंने कहा "हमारे उपयोगकर्ता", मुझे पता है कि आम तौर पर आपका सुझाव शायद आसान है, लेकिन इन लोगों को हमारे ऐप को ऊपर और नीचे पता है और प्रशिक्षण प्राप्त करते हैं :-) –

1

एक अभिव्यक्ति वृक्ष एक अच्छा विचार है। वहाँ बहुत अच्छे सामान्य पार्सर्स और पार्सर जेनरेटर हैं, ओपन-सोर्स के साथ-साथ वाणिज्यिक, जो सही क्वेरी स्ट्रिंग्स को अभिव्यक्ति पेड़ों में बदल सकते हैं।

+0

क्या आप मुझे इन पार्सर्स और पार्सर जेनरेटर के कुछ उदाहरण दे सकते हैं को देखें? –

+0

बस Google "सी # पार्सर जनरेटर" गूगल, और प्रयोग करने के लिए तैयार रहें। – yfeldblum

2

मैं पहले इस स्थिति में रहा हूं। बहुत चर्चा के बाद, हमने फैसला किया कि संदर्भ-संवेदनशील ड्रॉपडाउन केवल एक टेक्स्टबॉक्स की तुलना में बेहतर समाधान थे।

उदाहरण के लिए, 4 ड्रॉपडाउन हैं, लेकिन अंतिम 3 अक्षम हैं। फिर, जब उपयोगकर्ता पहले से कोई विकल्प चुनता है, तो यह दूसरों को पॉप्युलेट और सक्षम बनाता है। इसलिए वे "सभी को" देखेंगे, फिर "बीच", और फिर पिछले दो के लिए टेक्स्टबॉक्स या कैलेंडर पॉप कर सकते हैं।

Here's an example that's kind of like what I am talking about

3

एक बहुत ही सरल भाषा के लिए, मैं regexps साथ जाना चाहते हैं। मुख्य लाभ यह है कि आपको किसी भी कोड पीढ़ी से निपटने की ज़रूरत नहीं है। पैटर्न मिलान का डिबगिंग मूल रूप से शून्य है, हालांकि।

यदि आपकी भाषा मामूली जटिल है (आप पूरी चीज को एक व्याकरण फ़ाइल में निर्दिष्ट करने में कोई दिक्कत नहीं करेंगे), तो मैं Coco/R के साथ जाऊंगा - यह तेज़, उपयोग करने में आसान है, और बेहद डिबग करने योग्य कोड बनाता है।

एक और जटिल भाषा के लिए, मेरा वर्तमान पसंदीदा Antlr v3 है। बहु-फ़ाइल व्याकरण का समर्थन करता है ('आयात' कथन के माध्यम से), जो बहुत अच्छा है। जेनरेट कोड डिबग करने योग्य है, लेकिन डिबगिंग को 'आसान' माना जाने से पहले उपयोग करने में थोड़ा सा समय लगता है।

0

मुझे नहीं पता कि इससे आपकी मदद मिलेगी, लेकिन हमने क्या किया था: हमने उपयोगकर्ता को प्री-डिफ़ाइंड मानदंडों को डेट चयन के लिए दिया था, हमने उन्हें दो कैलेंडर पॉप-अप दिए ताकि वे आज से लेकर तिथि सीमा का चयन कर सकें। .. हमने इसे अनिवार्य नहीं बनाया .. इसलिए तिथि फ़िल्टर केवल तभी लागू होता है जब उपयोगकर्ता तिथियों को निर्दिष्ट करता है ... इसी प्रकार आप उपयोगकर्ताओं को पूर्व परिभाषित मानदंड चयन भी दे सकते हैं ... अन्य तो अभिव्यक्ति का पेड़ एक प्रतीत होता है उस के लिए अच्छा कामकाज।

1

उपयोग Oslo, यह इस के लिए विशेष रूप से डिजाइन है ...

0

GOLD Parser Generator डिजाइन और अपने व्याकरण, यथोचित अच्छा ट्यूटोरियल और प्रलेखन के परीक्षण के लिए एक उपयोगी यूआई है, और सी # से उपयोग करने के लिए आसान है।

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