도메인 이름 압축


21

나는 사람이 수 방법에 대한 궁금 매우 컴팩트 임의의 도메인 압축 IDN의 (에 의해 정의 된 호스트 이름을 RFC5890 )과 흥미로운 도전이 될 수이 의심. 유니 코드 호스트 또는 도메인 이름 (U-라벨)은 일반적으로 하나 개의 언어 (예 : 아래의 그리스 문자를 최상위 도메인에 따라 구속 유니 코드 문자의 문자열로 구성 .gr로 시작하는 ASCII 문자열로 인코딩되는) xn--(대응을 라벨).

공식적인 요구 사항뿐만 아니라 데이터 모델을 구축 할 수 있습니다.

  • 각 비 유니 코드 레이블은 문자열 일치입니다 ^[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의 온라인 데이터 압축 설명을 읽으면 위의 (및 / 또는 다른) 모델링 가정을 활용하기 위해 여러 가지 기존 기술을 사용하여 특정 도구보다 압축률이 훨씬 뛰어나다는 것이 분명합니다.

문맥 상,이 질문은 SO이전 질문에서 파생 된 것 입니다.


초기 생각

이 문제는 오프라인 교육의 훌륭한 후보이며 다음 줄을 따라 압축 된 데이터 형식을 예상합니다.

  • " 공개 접미사 " 의 허프만 코딩. 일부 공개 된 도메인 등록 소스 또는 트래픽 볼륨에서 발생하는 확률.

  • 허프만 코딩은 (자연 언어) 모델이 나머지 U- 라벨에 사용되며, 도메인 접미사와 관련하여 주어진 도메인 등록 소스 또는 트래픽 볼륨에서 나온 확률;

  • 지정된 자연어 모델에서 일부 사전 기반 변환을 적용하십시오. 과

  • 오프라인 교육에서 파생 된 상황에 따라 적응할 수있는 자연 언어 모델에서 파생 된 확률을 사용하여 U- 라벨에있는 각 문자의 산술 코딩 (그리고 온라인도 가능하지만 데이터가 너무 짧아서 의미있는 통찰력을 제공 할 수 없다고 생각하십니까?)


4
모든 도메인 이름 목록을 다운로드하고 각각에 번호를 할당 할 수 있습니다. 이것은 매우 컴팩트합니다.

@Dietrich Epp : 사실-실제로 등록 기관이 WHOIS에 각 등록의 일련 번호를 안정적으로 구축 할 수 있다고 생각했지만 슬프게도 그렇지 않습니다. 실제로 데이터베이스와 같은 데이터베이스를 유지 관리하는 데있어 실질적인 문제는 불가능하다고 생각합니다. 이러한 데이터베이스가 하위 도메인을 처리하지 않는다는 것은 말할 것도 없습니다.
eggyal

... 숫자가 충분하다면, ipv4 / 6 주소의 4/6 바이트를 취하십시오 : /

@arnaud : 반전은 문제입니다 .in-addr.arpa.; 의 올바른 포인터에 의존합니다 . IP가 변경되면 중단됩니다.
eggyal

1
Dietrich Epp의 방법 (196m 추정 도메인 기준)으로 도메인 이름을 28 비트 (2 개의 유니 코드 문자)로 저장할 수 있으며 더 잘 수행 할 수 없습니다. 물론 도메인 이름에 대한 확률 분포는 훨씬 더 나은 예상 비트 수를 제공 할 수 있습니다. 최소한 1 백만 개의 가장 인기있는 도메인에 대해 산술 코딩을 사용하고 나머지는 임시 방식을 사용할 수 있습니다.
Peter

답변:


0

허프만 코딩은 문자에 최적이며 시퀀스에 확실히 적용 할 수 있습니다. 예를 들어, 시퀀스 "ab"의 결과가 "a"및 "b"의 비트보다 적은 비트 수이면 트리에 추가하면됩니다.

... 아마도 최적의 성능으로 거의 모든 것을 수행하는 간단한 라이브러리를 사용할 수 있으므로 맞춤형 슈퍼 멋진 압축 알고리즘을 사용하지 않아도됩니다.


허프만은 최적이 아니라고 생각합니다 (가장 가까운 비트로 반올림). 산술 코딩은 항상 성능이 뛰어납니다. 그리고 압축되는 데이터의 정확한 모델을 적용하지 않으면 항상 차선책의 결과를 얻을 수 있습니다. 따라서 모든 비트가 중요하다면 일반 라이브러리로는 충분하지 않습니다.
eggyal

4
문자 사이의 상관 관계를 무시하면 허프만 코딩은 무조건 최적입니다 (예를 들어, q다음 문자가 표시되면 다음 문자가 u그렇지 않을 가능성이 훨씬 높음 ). 그러나 그것은 현실적인 가정이 아닙니다. 실제로 이러한 상관 관계는 엄청 나서 실제로 허프만 코딩보다 훨씬 더 잘 수행 할 수 있습니다.
DW

@DW 더 나은 방법에 대한 권장 사항이 있습니까? Huffman을 통해 연속 된 문자 쌍 또는 삼중 문자를 인코딩하는 것이 도움이됩니까?
라이언
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.