संपीड़ित फ़ाइलों में पाठ की खोज असम्पीडित टेक्स्ट फ़ाइलों में एक ही चीज़ की खोज करने से तेज़ी से हो सकती है।
एक संपीड़न तकनीक मैंने देखा है इसी क्रम में कुछ जगह बलिदान तेजी से खोज करने के लिए:
- पाठ में प्रत्येक शब्द का 2^16 प्रविष्टियों के साथ एक शब्दकोश बनाए रखें। शाब्दिक बाइट्स के लिए पहली 256 प्रविष्टियों को आरक्षित करें, यदि आप किसी ऐसे शब्द पर आते हैं जो शब्दकोश में नहीं है - भले ही कई बड़े ग्रंथों में 32,000 से अधिक अद्वितीय शब्द हैं, इसलिए उन्हें कभी भी उन शाब्दिक बाइट्स का उपयोग करने की आवश्यकता नहीं है।
- प्रत्येक शब्द के लिए 16-बिट शब्दकोश सूचकांक को प्रतिस्थापित करके मूल पाठ को संपीड़ित करें।
- (वैकल्पिक) सामान्य मामले दो शब्दों एक भी अंतरिक्ष चरित्र से अलग कर दिया जाता है, कि अंतरिक्ष चरित्र त्यागें; अन्यथा शब्दों में शब्दों के बीच स्ट्रिंग में सभी बाइट्स को विशेष "शब्द" (उदाहरण के लिए, "।" और "," और "\ n") के रूप में "कोई डिफ़ॉल्ट रिक्त स्थान" विशेषता के साथ टैग किया गया है, और फिर "संपीड़ित करें" "उन स्ट्रिंग्स को संबंधित शब्दकोश इंडेक्स के साथ बदलकर। उसी तरह से वाक्यांश संपीड़ित करने, और ठीक उसी तरह आप मूल पाठ में मूल स्ट्रिंग के लिए खोज करेंगे में संकुचित पाठ में बाइट्स की संकुचित स्ट्रिंग को खोजते हुए शब्द या वाक्यांश के लिए
- खोजें।
विशेष रूप से, एक शब्द आमतौर पर संकुचित पाठ है, जो मूल पाठ में उस शब्द के लिए खोज की तुलना में तेजी है में 16-बिट सूचकांक की तुलना करने के लिए कम कर देता है के लिए खोज है, क्योंकि
- प्रत्येक तुलना कम बाइट की तुलना की आवश्यकता है - 2, बजाय हालांकि कई बाइट्स है कि शब्द में थे, और
- हमारे पास कम से तुलना कर रहे हैं, क्योंकि संपीड़ित फ़ाइल कम है।
कुछ प्रकार के नियमित अभिव्यक्तियों का अनुवाद एक और नियमित अभिव्यक्ति में किया जा सकता है जो सीधे संपीड़ित फ़ाइल में आइटम पाता है (और शायद कुछ झूठी सकारात्मक भी पाता है)। इस तरह की एक खोज भी, मूल पाठ फ़ाइल पर मूल रेगुलर एक्सप्रेशन के उपयोग की तुलना में कम तुलना करता है क्योंकि संपीड़ित फ़ाइल कम है, लेकिन आम तौर पर प्रत्येक नियमित अभिव्यक्ति तुलना में अधिक काम की आवश्यकता है, तो यह या मूल regex ऑपरेटिंग तुलना में तेजी से नहीं हो सकता मूल पाठ पर।
(सिद्धांत रूप में आप चर लंबाई Huffman उपसर्ग कोड के साथ फिक्स्ड लंबाई 16-बिट कोड की जगह सकता है, का उल्लेख किया rwong के रूप में - परिणामी संपीड़ित फ़ाइल छोटा हो जाएगा, लेकिन सॉफ्टवेयर निपटने के लिए उन फ़ाइलों के साथ एक होगा थोड़ा धीमा और अधिक जटिल)।
और अधिक परिष्कृत तकनीक के लिए, आप
- MG4J पर दिख सकता है: इयान एच Witten, एलिस्टेयर Moffat, और टिमोथी सी बेल
स्रोत
2011-07-22 21:17:06
संबंधित: http://stackoverflow.com/questions/4855403/fast-search-for-text-in-files-in-a-directory-in-unix –