2010-02-03 14 views
11

में एकाधिक शब्दों को प्रतिस्थापित करने के लिए कुशल विधि जावास्क्रिप्ट का उपयोग करके मुझे ~ 10000 शब्द दस्तावेज़ से ~ 10000 कीवर्ड कुशलतापूर्वक हटाने की आवश्यकता है, जिनमें से ~ 1000 कीवर्ड होंगे। आप किस दृष्टिकोण का सुझाव देंगे?टेक्स्ट

भारी नियमित अभिव्यक्ति व्यावहारिक हो सकती है? या क्या मुझे सिर्फ कीवर्ड वर्णों (उबाऊ) की तलाश में दस्तावेज़ वर्णों के माध्यम से पुन: प्रयास करना चाहिए?

संपादित करें:
अच्छा बिंदु - केवल पूरे शब्द, भागों नहीं। और कुछ कीवर्ड में रिक्त स्थान होते हैं।
मैं बैकएंड पर दबाव कम करने के लिए इसे सभी क्लाइंट पक्ष करने की कोशिश कर रहा हूं।

+1

दिलचस्प सवाल। एक तरफ, एक संकलित भाषा में हस्तलिखित एक राज्य मशीन रेगेक्स से बाहर नरक को हरा देती है, लेकिन दूसरी तरफ, जावास्क्रिप्ट स्वयं धीमा है, इसलिए आपको कोशिश करने और बेंचमार्क करने की आवश्यकता होगी कि रेगेक्स इंजन संकलित होने के कारण तेज है या नहीं । –

+0

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

+0

क्या आपको केवल पूरे शब्द या शब्द के कुछ हिस्सों को प्रतिस्थापित करने की आवश्यकता है - उदाहरण के लिए शब्द, कीवर्ड, शब्द-स्टेम में सभी में 'शब्द' शब्द है, उनका इलाज कैसे किया जाना चाहिए? – meouw

उत्तर

6

एक रेगुलर एक्सप्रेशन का उपयोग करना एक अच्छा विकल्प हो सकता है:

var words = ['bon', 'mad']; 
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), ''); 
// 'joe joe ' 

regex लुक-आगे जैसी चीजों के साथ बहुत जटिल नहीं है, और regexp इंजन सी/सी में लिखा है ++, इसलिए आप उम्मीद कर सकते हैं कि यह काफी तेज़ हो। फिर भी - बेंचमार्क और देखें कि प्रदर्शन आपकी आवश्यकताओं के अनुरूप है या नहीं।

मुझे नहीं लगता कि आपके स्वयं के पार्सर को लागू करना तेज होगा, लेकिन मैं गलत हो सकता हूं - बेंचमार्क।

सर्वर पर दस्तावेज़ भेजना मेरे लिए बहुत अच्छा नहीं लगता है। 100k शब्दों के साथ आप मेगाबाइट रेंज में एक पेलोड देख रहे हैं, और आपको अभी भी सर्वर पर इसके साथ कुछ करना है और इसे वापस धक्का देना है।


आप धुन पर regexp रिक्तियों के साथ कुछ करने के लिए हो सकता है।

+1

आप शब्द सीमा जांच '' \\ b ('+ words.join (' | ') +') जोड़ सकते हैं \\ b'' –

+0

regexp कुछ प्यार का उपयोग कर सकता है, मैं सहमत हूं, लेकिन यह बिंदु को दर्शाता है। –

0

मेरी वृत्ति मुझे बताती है कि कीवर्ड की इतनी बड़ी संख्या के लिए - कीवर्ड को सॉर्ट करना और प्रति चरित्र राज्य मशीन बनाना नियमित अभिव्यक्ति से बहुत तेज़ होगा, क्योंकि राज्य मशीन छोटी है, इसे स्वचालित रूप से जेनरेट किया जा सकता है।