ドメイン名の圧縮


21

任意のIDNホスト名(RFC5890で定義)のドメインを非常にコンパクトに圧縮する方法について興味があり、これが興味深い課題になると思われます。Unicodeホストまたはドメイン名(Uラベル)はUnicode文字の文字列で構成され、通常、トップレベルドメイン(たとえば、ギリシャ文字)に応じて1つの言語に制限され、(対応するラベル)。.grxn--

正式な要件だけでなく、

  • 各非Unicodeラベルは文字列一致^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?$です;

  • 各Aラベルは、一致する文字列^xn--[a-z\d]([a-z\d\-]{0,57}[a-z\d])?$です。そして

  • ドメイン全体の長さ(Aラベルと '。'区切り文字で連結された非IDNラベル)が255文字を超えない

次のようなさまざまなヒューリスティックからも:

  • 下位Uラベルは、固有名詞や数字(ハイフンを除く句読点、空白が取り除かれ、Nameprepごとに折り畳まれている)を含む一部の自然言語で、字句的、構文的、意味的に有効なフレーズであることが多く、短いフレーズが優先されます。そして

  • 高次ラベルはSLDおよびTLDの辞書から引き出され、低次ラベルで使用される自然言語を予測するためのコンテキストを提供します。

こうした短い文字列を適切に圧縮することは、データのこれらの特定の機能を考慮せずに困難になること、さらに、既存のライブラリがより一般的なユースケースに対応するために不要なオーバーヘッドを生成することを恐れます。

Matt MahoneyのオンラインブックData Compression Explainedを読むと、上記の(および/または他の)モデリングの前提を活用するために多くの既存の手法を使用して、特定のツールよりもはるかに優れた圧縮を実現できることが明らかです。

コンテキストとして、この質問はSOに関する以前の質問からの派生物です。


最初の考え

この問題はオフライントレーニングの優れた候補であり、次の行に沿って圧縮データ形式を想定しています。

  • パブリックサフィックス」のハフマンコーディング。ドメイン登録またはトラフィックボリュームの公開されたソースから抽出された確率。

  • 残りのUラベルに使用される(自然言語)モデルのハフマンコーディング。ドメインサフィックスのコンテキストを指定して、ドメイン登録またはトラフィックボリュームの公開されたソースから抽出された確率。

  • 指定された自然言語モデルからいくつかの辞書ベースの変換を適用します。そして

  • Uラベル内の各文字の算術コーディングと、オフライントレーニングから派生した文脈適応型自然言語モデルから得られる確率


4
おそらく、すべてのドメイン名のリストをダウンロードし、それぞれに番号を割り当てることができます。これは非常にコンパクトです。

@Dietrich Epp:確かに-実際、レジストラはWHOISで各登録のシリアル番号を公開するかもしれないと考えていました。現実的には、このようなデータベースを維持する際の実際的な課題は、それを実行不可能にするものだと考えています。そのようなデータベースがサブドメインを処理しないことは言うまでもありません。
-eggyal

...まあ、数が十分であれば、ipv4 / 6アドレスの4/6バイトを取得してください:/

@arnaud:それを逆にすることは問題です-の正しいポインタに依存します.in-addr.arpa; IPが変更された場合も壊れます。
-eggyal

1
Dietrich Eppの方法(推定196mのドメインに基づく)では、28ビット(2つのUnicode文字)でドメイン名を保存できますが、これ以上はできません。もちろん、ドメイン名の確率分布を使用すると、予想されるビット数がはるかに向上します。少なくとも100万の最も人気のあるドメインには算術コーディングを使用し、残りにはアドホックスキームを使用できます。
ピーター

回答:


0

ハフマンコーディングは文字に最適であり、シーケンスに確実に適合させることができます。たとえば、シーケンス「ab」の結果のビット数が「a」および「b」のビット数よりも少ない場合は、単純にツリーに追加します...など。

...おそらく、カスタム最適化されたスーパーファンシーな圧縮アルゴリズムを使用してもあまり得られないように、最適なパフォーマンスに近いすべてを実行する単純なライブラリを使用することもできます。


ハフマンは最適ではないと思います(最も近いビットに丸める):算術コーディングは常に性能が優れているはずです。そして、圧縮されているデータの正確なモデルを適用しない限り、常に次善の結果が得られます...すべてのビットが重要な場合、汎用ライブラリでは十分ではありません。
-eggyal

4
ハフマン符号化は、文字間の相関を無視する場合に漸近的に最適です(たとえば、aが表示される場合q、次の文字はそうuでない場合よりもaになる可能性がはるかに高くなります)。しかし、それは現実的な仮定ではありません。実際には、これらの相関関係は非常に大きく、実際の素朴なハフマンコーディングよりもはるかに優れた結果を出すことができます。
DW

@DWどうすればより良い結果が得られるかについての推奨事項はありますか?ハフマンを介してエンコードされた連続した文字のペアまたはトリプルを許可するとおそらく役立つでしょうか?
ライアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.