/ रूबी रेगुलर एक्सप्रेशन बहुत बड़ा / मल्टीपल स्ट्रिंग मैच - माणिक, रेगी

रूबी नियमित अभिव्यक्ति बहुत बड़ी / एकाधिक स्ट्रिंग मैच - रूबी, रेगेक्स

मेरे पास 1,000,000 तार हैं जो मैं चाहता हूंश्रेणीबद्ध करना। जिस तरह से मैं यह कर रहा हूँ अगर यह शब्दों या वाक्यांशों का एक सेट होता है तो इसे बाल्टी में डालना है शब्दों का सेट लगभग 10,000 है। आदर्श रूप से मैं नियमित अभिव्यक्तियों का समर्थन करने में सक्षम होऊंगा, लेकिन मैं इसे अभी तेजी से चलाने के लिए केंद्रित हूं। उदाहरण वाक्यांश:

फोर्ड, पोर्श, मज़्दा ...

मैं वास्तव में एक-एक करके तार के खिलाफ प्रत्येक शब्द का मिलान नहीं करना चाहता, इसलिए मैंने नियमित अभिव्यक्ति का उपयोग करने का फैसला किया। दुर्भाग्य से, मैं एक नियमित अभिव्यक्ति मुद्दे पर चल रहा हूं:

Regexp.new ( "(क)" * 253) => / (ए) (ए) (ए) (ए) (ए) (ए) (ए) (ए) (ए) (ए) (ए) (ए) (ए) (एक) ) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) ( एक) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) ...

Regexp.new ( "(क)" * 254) RegexpError: नियमित अभिव्यक्ति बहुत बड़ी: / (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) (एक ) (क) (क) (क) (क) (क) (क) (क) (क) (क) (क) ...

जहां मेरे शब्दों या वाक्यांशों में से एक होगा। अभी, मैं 10,000 / 253 मैच चलाने की योजना बना रहा हूँ। मैंने पढ़ा कि regex की लंबाई प्रदर्शन पर भारी पड़ती है, लेकिन मेरा regex मैच वास्तव में सरल है और regexp बहुत जल्दी बन जाता है। मैं किसी भी सीमा तक पहुँचना चाहूँगा, या किसी के पास कोई उपाय होने पर बेहतर समाधान का उपयोग कर सकता हूँ। धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 1

आप 10k शब्दों को पहचानने के लिए अन्य तंत्रों पर विचार कर सकते हैं।

  • Trie: कभी-कभी एक उपसर्ग वृक्ष कहा जाता है, इसका उपयोग अक्सर शब्द देखने के लिए वर्तनी जांचकर्ताओं द्वारा किया जाता है। देख विकिपीडिया पर परीक्षण करें
  • DFA (नियतात्मक परिमित ऑटोमेटा): भाषा के टोकन को पहचानने के लिए एक संकलक में लेसर द्वारा अक्सर एक डीएफए बनाया जाता है। एक DFA बहुत जल्दी चलता है। सरल रीगेक्स को अक्सर डीएफए में संकलित किया जाता है। देख विकिपीडिया पर डीएफए