हानिपूर्ण पाठ संपीड़न


9

पृष्ठभूमि

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

कई पत्र अधिकांश स्थितियों में कोई मूल्य नहीं जोड़ते हैं, और उन्हें अधिक सामान्य अक्षरों से बदला जा सकता है। उदाहरण के लिए, एक निम्न-केस "एल", पूंजी "आई", और "1" संख्या अधिकांश स्थितियों में लगभग समान दिखती है, इसलिए उन्हें समेकित किया जा सकता है।

पूंजी पत्रों की बहुत कम जरूरत होती है, इसलिए उन्हें इससे दूर किया जा सकता है। डीकंप्रेसन / डिस्प्ले प्रोग्राम स्वचालित रूप से प्रत्येक वाक्य के पहले अक्षर, सामान्य नाम, आदि को भी कैपिटल कर सकता है।

नियम

प्रविष्टियों पर फैसला किया जाएगा:

  • दबाव अनुपात
  • डी-संपीड़न के बाद पठनीयता

इस लेख के सादे पाठ संस्करण के खिलाफ प्रविष्टियों का परीक्षण किया जाएगा: http://en.wikipedia.org/wiki/Babbage और एक यादृच्छिक रूप से चयनित बीबीसी समाचार लेख।

के लिए अतिरिक्त अंक प्रदान किए जाएंगे; किसी भी मार्क-अप को संरक्षित करना, डी-कम्प्रेशन (यानी कैपिटलाइज़िंग वाक आदि) के बाद सौंदर्यीकरण करना।

बोली

  • आप जो भी पसंद करते हैं, लेकिन एक बुनियादी * निक्स बॉक्स पर आसानी से संकलित (या व्याख्या) किया जाना चाहिए।

तो PowerShell बाहर है? ओह।
जॉय

1
हास्केल:main = interact (\x -> take 90 x ++ " yada yada yada")
जॉय एडम्स

1
यह भी ध्यान दें कि "विघटन के बाद पठनीयता" एक काफी व्यक्तिपरक मानदंड है।
जॉय

विशेष रूप से यूनिक्स-बॉक्स पर, हमें ऊपरी ऊपरी मामले, निचले मामले की आवश्यकता होती है। :) और भेजे की शुरुआत का पता लगाना। तुच्छ नहीं है, यदि आप यू। Abbrev का उपयोग करता है। :)
उपयोगकर्ता अज्ञात

क्या हम वर्णमाला या पाठ को संक्षिप्त करना चाहते हैं? :) एल = एल = 1 हमारे विचारों का प्रतिनिधित्व करने के लिए आवश्यक वर्णों को संकुचित करता है। लेकिन "एक सेब" = "1 apl" पाठ को संपीड़ित करता है।
एनमेगीज

जवाबों:


11

पर्ल

बहुत अकुशल और खराब दर है। की आवश्यकता है /usr/share/dict/words

कंप्रेसर

#!/usr/bin/perl

$M = 2;
$N = 1;
$Min = 3;
$Max = 8;

while (<>) {
  for (split /\s+/) {
    s/[^a-z]//i;
    ($p) = m/([^a-z]*)$/;
    $_ = lc $_;
    $l = (length $_) - (length $p);
    s/^and$/A/;
    s/^he$/H/;
    s/^in$/I/;
    s/^of$/O/;
    s/^you$/U/;
    s/^the$/Z/;
    if (length $_ >= $Min) {
      if (length $_ <= $Max) {
        s/ed/D/g;
        s/ing\b/N/g;
        s/er/R/g;
        s/'s/S/g;
        s/th/T/g;
        s/[aeo]{1,2}//g;
        $_ .= $l;
      } else {
        s/^(.{$M})(.+)(\w{$N})$/$1.(length$2).$3/e;
      }
    }
    $a .= $_ . $p . ' ';
  }
}
print $a;

decompressor

#!/usr/bin/perl

$M = 2;
$N = 1;

open D, '/usr/share/dict/words';
chomp, push @W, $_ while <D>;
close D;

while (<>) {
  for (split /\s+/) {
    ($_, $p) = m/^(.+)([^a-z]*)$/;
    s/^A$/and/;
    s/^H$/he/;
    s/^I$/in/;
    s/^O$/of/;
    s/^U$/you/;
    s/^Z$/the/;
    if ($_ =~ m/^(\w{$M})(\d+)(\w{$N})$/) {
      $r = '^' . quotemeta($1) . ('\w' x $2) . quotemeta($3) . '$';
      ($_) = (grep /$r/, @W);
      $_ .= $4;
    } else {
      ($_, $l) = m/^(.+)(\d+)$/;
      s/D/ed/g;
      s/N/ing/g;
      s/R/er/g;
      s/S/'s/g;
      s/T/th/g;
      $r = '[aeo]{0,2}';
      for $y(split //) { $r .= (quotemeta $y) . '[aiueo]{0,2}' }
      ($_) = (grep /^(?=[a-z]{$l})$r$/, @W);
    }
    $a .= $_ . $p . ' ';
  }
}
print $a;

3

पर्ल, 0 चार्ट

अनन्तता का संपीड़न अनुपात, हालांकि विघटन के बाद पठनीय नहीं है, इसलिए यह कुछ निशान खो देगा।


2

बैश, 5 वर्ण

मेरी आलसी प्रविष्टि जो बस जीत सकती है:

bzip2

दोषरहित, इसलिए यह पूरी तरह से पठनीयता को बरकरार रखता है और सभी अतिरिक्त अंक प्राप्त करता है! बैबेज एचटीएमएल पर संपीड़न अनुपात 4.79x (153804 से 32084 बाइट्स) है।


किसी तरह मैं जानता था कि उस चुनौती के साथ आ रहा था ;-)
जॉय

जिसे हराना मुश्किल हो रहा है।
लोजैकर

हा! मैंने इसे लंबाई और संपीड़न अनुपात दोनों में हराया;)
Ry-

2
xz, इससे भी छोटा और बेहतर अनुपात :)
OneOfOne
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.