मेरे पास टोकन-इंडेक्स आधारित दस्तावेज़ों का एक कॉर्पस है जो एक क्वेरी विधि प्रदान करता है। उपयोगकर्ता मैन्युअल रूप से (!) एक क्वेरी स्ट्रिंग में प्रवेश करता है जिसे पार्स और मूल्यांकन करने की आवश्यकता होती है। कॉर्पस को दिए गए क्वेरी स्ट्रिंग से मेल खाने वाले सभी दस्तावेज़ों की एक सूची वापस करनी चाहिए। क्वेरी भाषा में सरल बूलियन ऑपरेटर और, नहीं और OR शामिल हैं जिन्हें कोष्ठक द्वारा प्राथमिकता भी दी जा सकती है। कुछ शोध के बाद मैंने एक वाक्यविन्यास पेड़ में दिए गए क्वेरी स्ट्रिंग को पार्स करने के लिए पहले ही एएनटीएलआर का उपयोग किया था।सी # में एक साधारण स्ट्रिंग वाक्यविन्यास-पेड़ का मूल्यांकन और प्रक्रिया कैसे करें?
उदाहरण के लिए: क्वेरी
"Bill OR (John AND Jim) OR (NOT Simon AND Mike)"
निम्न सिंटैक्स पेड़ में अनुवाद किया है:
संपादित करें:
: कृपया बार्ट Kiers पोस्ट में सही ग्राफ (यहां कॉपी) को देखने के
पेड़ में सभी नोड सरल तार हैं और प्रत्येक नोड अपने माता-पिता को जानता है और बच्चे लेकिन इसके भाई बहन नहीं। जैसा कि आप देख सकते हैं, एएनटीएलआर व्याकरण पहले से ही उस क्रम को निर्धारित करता है जिसमें संचालन को निष्पादित करने की आवश्यकता होती है: पेड़ के नीचे वाले लोग पहले आते हैं।
तो मुझे शायद जो करना है वह पेड़ में सभी ऑपरेटरों का मूल्यांकन (?) है। सामान्य रूप से, मैं पेड़ में प्रत्येक पत्ते (जैसे "बिल" या "जॉन") के लिए विधि (स्ट्रिंग टर्म) विधि का उपयोग करके अपने कॉर्पस पर एक साधारण खोज कर सकता हूं। प्राप्त करें() पत्ते में शब्द युक्त दस्तावेजों की एक सूची देता है। मैं एक संभावित नोट ऑपरेटर को पहचानने के लिए प्रत्येक पत्ते के माता-पिता का भी मूल्यांकन कर सकता हूं जो तब कागजात में शब्द (जिसमें विधि() के बजाय विधि() का उपयोग नहीं कर रहा है, दस्तावेजों की परिणाम सूची का नेतृत्व करेगा।
- और एक विधि इंटरसेक्ट (List1, List2) बुलाना चाहिए जो कि List1 में और List2 में हैं दस्तावेजों की एक सूची देता है:
AND और OR ऑपरेटर विधि कॉल जो दो पैरामीटर की जरूरत के रूप में तब्दील किया जाना चाहिए ।
- या एक विधि संघ (सूची 1, सूची 2) को कॉल करना चाहिए जो दस्तावेजों की एक सूची देता है जो सूची 1 या सूची 2 में हैं।
पैरामीटर सूची 1 और सूची 2 में प्राप्त() या नहीं() का उपयोग करने से पहले प्राप्त दस्तावेज़ शामिल हैं।
मेरा प्रश्न है: मैं कैसे कर सकता हूं - सी # में अर्थात् और वाक्य रचनात्मक रूप से - सभी आवश्यक खोज शब्दों का मूल्यांकन कैसे कर सकता हूं और सही क्रम में सही ऑपरेटर विधियों को कॉल करने के लिए उनका उपयोग कर सकता हूं? सहजता से यह रिकर्सन की तरह लगता है लेकिन किसी भी तरह से मैं इसे चित्रित नहीं कर सकता - खासकर जब सभी विधियों को कॉल करने की आवश्यकता नहीं है, तो समान मात्रा में पैरामीटर हैं। या क्या इसे पूरा करने के लिए शायद पूरी तरह से अन्य तरीके हैं?
पूरी तरह से विषय से हटकर है, लेकिन क्या उपकरण आपको कि ग्राफिक बनाने के लिए उपयोग किया था? – Cameron
"साइमन नहीं" चाहिए, साइमन, या एक अभिव्यक्ति जो साइमन के लिए झूठी मूल्यांकन करेगा, या क्या ...? –
@Cameron: एकीकृत त्वरित स्वरूपण :) – Shackles