डोमेन नाम का संपीड़न


21

मैं कैसे एक हो सकता है के रूप में उत्सुक हूँ बहुत दृढ़तापूर्वक एक मनमाना के डोमेन सेक आईडीएन होस्ट नाम (के रूप में द्वारा परिभाषित RFC5890 ) और इस पर शक एक दिलचस्प चुनौती बन सकता है। यूनिकोड होस्ट या डोमेन नाम (यू-लेबल) में यूनिकोड वर्णों की एक स्ट्रिंग होती है, जो आमतौर पर शीर्ष-स्तरीय डोमेन (उदाहरण के लिए ग्रीक अक्षर .gr) के आधार पर एक भाषा के लिए विवश होती है, जो कि ASCII स्ट्रिंग के साथ शुरू होता है xn--(संगत) एक लेबल)।

न केवल औपचारिक आवश्यकताओं से डेटा मॉडल का निर्माण कर सकते हैं

  • प्रत्येक गैर-यूनिकोड लेबल एक स्ट्रिंग मिलान हो ^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?$;

  • प्रत्येक ए-लेबल एक स्ट्रिंग मिलान हो ^xn--[a-z\d]([a-z\d\-]{0,57}[a-z\d])?$; तथा

  • संपूर्ण डोमेन की कुल लंबाई (ए-लेबल और गैर-आईडीएन लेबल के साथ ''। 'सीमांकक) अधिक वर्णों से अधिक है।

लेकिन विभिन्न उत्तराधिकारियों से भी, जिनमें शामिल हैं:

  • निचले क्रम के यू-लेबल अक्सर कुछ प्राकृतिक भाषा में उचित संज्ञा और अंक (अंक के अलावा अप्रकाशित, हाइफ़न को छोड़कर, व्हाट्सएप से छीन लिया जाता है और प्रति नामप्रेप से मुड़ा हुआ होता है ), छोटे वाक्यांशों के लिए प्राथमिकता के साथ लेक्सिकली , वाक्यविन्यास और शब्दार्थ रूप से मान्य वाक्यांश होते हैं; तथा

  • उच्च-क्रम वाले लेबल SLDs और TLD के शब्दकोश से तैयार किए गए हैं और यह अनुमान लगाने के लिए संदर्भ प्रदान करते हैं कि निचले क्रम के लेबल में किस प्राकृतिक भाषा का उपयोग किया जाता है।

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

मैट महनी की ऑनलाइन पुस्तक डेटा संपीड़न को पढ़ना , यह स्पष्ट है कि उपरोक्त मौजूदा (और / या अन्य) मॉडलिंग मान्यताओं का लाभ उठाने के लिए कई मौजूदा तकनीकों को नियोजित किया जा सकता है, जिसके परिणामस्वरूप कम बेहतर उपकरण बनाम कम विशिष्ट उपकरणों के परिणामस्वरूप होना चाहिए।

संदर्भ के अनुसार, यह सवाल एसओ पर पिछले एक से एक ऑफशूट है ।


प्रारंभिक विचार

यह बताता है कि यह समस्या ऑफ़लाइन प्रशिक्षण के लिए एक उत्कृष्ट उम्मीदवार है और मैं निम्नलिखित लाइनों के साथ एक संकुचित डेटा प्रारूप की परिकल्पना करता हूं:

  • " पब्लिक प्रत्यय " का एक हफ़मैन कोडिंग , डोमेन पंजीकरण या ट्रैफ़िक वॉल्यूम के कुछ प्रकाशित स्रोत से खींची गई संभावनाओं के साथ;

  • शेष यू-लेबल के लिए हफ़मैन कोडिंग (प्राकृतिक भाषा) मॉडल का उपयोग किया जाता है, जिसमें डोमेन पंजीकरण के कुछ प्रकाशित स्रोत या ट्रैफ़िक वॉल्यूम के संदर्भ में दिए गए प्रायिकता के साथ डोमेन प्रत्यय का संदर्भ दिया जाता है;

  • निर्दिष्ट प्राकृतिक भाषा मॉडल से कुछ शब्दकोश-आधारित परिवर्तन लागू करें; तथा

  • यू-लेबल में प्रत्येक चरित्र का एक अंकगणितीय कोडिंग, ऑफ़लाइन प्रशिक्षण से प्राप्त प्रासंगिक अनुकूली प्राकृतिक भाषा मॉडल से खींची गई संभावनाओं के साथ (और शायद ऑनलाइन भी है, हालांकि मुझे संदेह है कि डेटा किसी भी सार्थक अंतर्दृष्टि प्रदान करने के लिए बहुत कम हो सकता है?)।


4
शायद आप सभी डोमेन नामों की सूची डाउनलोड कर सकते हैं, और हर एक को एक नंबर असाइन कर सकते हैं। यह बहुत कॉम्पैक्ट होगा।

@ डिएट्रिच एप: वास्तव में - और वास्तव में, मैंने सोचा था कि शायद रजिस्ट्रार WHOIS में प्रत्येक पंजीकरण की एक क्रम संख्या प्रकाशित कर सकते हैं जिसमें से यह मज़बूती से बनाया जा सकता है, लेकिन दुख की बात है कि वे ऐसा नहीं करते हैं। यथार्थवादी रूप से, मुझे लगता है कि इस तरह के डेटाबेस को मेन्टेन करने में व्यावहारिक चुनौतियां इसे अस्वीकार्य बनाती हैं: इस बात का उल्लेख नहीं करना कि इस तरह के डेटाबेस उप-डोमेन को नहीं संभालते हैं।
अर्ग्याल

... ठीक है, अगर एक संख्या पर्याप्त है, तो बस 4/6 बाइट्स ले लो ipv4 / 6 का पता: /

@ हरनॉड: इसे उलट देना एक समस्या है - एक सही सूचक पर निर्भर करता है .in-addr.arpa; आईपी ​​कभी बदलता है तो भी टूट जाता है।
१०

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

जवाबों:


0

हफ़मैन कोडिंग अक्षरों के लिए इष्टतम है और निश्चित रूप से अनुक्रमों के लिए अनुकूलित किया जा सकता है। उदाहरण के लिए, यदि अनुक्रम "ab" बिट्स की तुलना में "a" और "b" के लिए कम बिट्स में परिणामित होता है, तो बस इसे पेड़ में जोड़ें ... और इसी तरह।

... आप शायद कुछ सरल पुस्तकालय का भी उपयोग कर सकते हैं जो आपके लिए सभी इष्टतम प्रदर्शनों के निकट है, ताकि आप अपने कस्टम निर्मित सुपर फैंसी संपीड़न एल्गोरिथ्म का उपयोग करके अधिक लाभ न प्राप्त कर सकें।


मुझे लगता है कि हफमैन काफी इष्टतम नहीं है (यह निकटतम बिट के लिए गोल है): अंकगणित कोडिंग को हमेशा बेहतर प्रदर्शन करना चाहिए। और जब तक कोई डेटा के एक सटीक मॉडल को लागू नहीं करता है, तब तक वह हमेशा सबॉप्टीमल परिणाम प्राप्त करने वाला होता है ... इसलिए यदि हर बिट मायने रखता है, तो जेनेरिक लाइब्रेरीज़ पर्याप्त नहीं हो सकती हैं।
१०:५१

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

@ क्या आपके पास कोई सिफारिश है कि कोई बेहतर कैसे कर सकता है? शायद हफ़मैन के माध्यम से जोड़े या जोड़े के सन्निहित पात्रों को अनुमति देने में मदद मिलेगी?
रायाण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.