Twitter文本压缩挑战

规则

  • 你的程序必须有两种模式: 编码解码
  • 编码时

  • 你的程序必须输入一些可读的Latin1文字,大概是英文。
  • 不要紧,如果你忽略标点符号。
  • 你只需要担心实际的英文单词,而不是L337。
  • 任何重音字母都可以转换为简单的ASCII码。
  • 你可以选择你想如何处理数字。
  • 123
  • 一二三
  • 一百二十三
  • 123
  • 1 2 3
  • 一百二十三
  • 一二三
  • 一百二十三
  • 123
  • 1 2 3
  • 你的程序必须输出一个可以表示的消息

  • U+0000 - U+10FFFF范围内的140个代码点

    排除非字符:

  • U+FFFE
  • U+FFFF
  • U+ n FFFEU+ n FFFF其中n1 - 10十六进制
  • U+FDD0 - U+FDEF
  • U+D800 - U+DFFF (代理码点)。
  • 它可以用您选择的任何合理编码输出; GNU iconv支持的任何编码都将被认为是合理的,并且您的平台本地编码或区域设置编码可能是一个不错的选择。

  • 解码时

  • 您的程序应该将编码模式的输出作为输入。
  • 文本输出应该是输入文本的近似值。
  • 越接近原始文本越好。
  • 不需要有任何标点符号。
  • 输出文本应该可以被人读取,也可以是英文。

  • 可以是L337,或者哈哈。
  • 除了上面指定的输出之外,解码过程可能无法访问编码过程的任何其他输出; 也就是说,你不能上传文本并输出解码过程的URL来下载,或者任何愚蠢的东西。
  • 为了保持用户界面的一致性,您的程序必须具有以下行为:
  • 你的程序必须是一个脚本,可以设置为在具有适当解释器的平台上执行,或者可以编译为可执行文件的程序。
  • 您的程序必须将第一个参数作为encodedecode来设置模式。
  • 您的程序必须至少以下列方式之一进行输入:
  • 从标准中输入并在标准输出上产生输出。
  • my-program encode <input.txt >output.utf
  • my-program decode <output.utf >output.txt
  • 从第二个参数中指定的文件获取输入,并在第三个文件中指定的文件中生成输出。
  • my-program encode input.txt output.utf
  • my-program decode output.utf output.txt
  • 对于您的解决方案,请发帖:
  • 您的代码全部和/或指向其他地方的链接(如果它很长,或需要编译许多文件或其他东西)。
  • 解释它是如何工作的,如果代码不是很明显,或者代码很长,人们会对摘要感兴趣。
  • 一个示例文本,包含原始文本,压缩文本以及解码文本。
  • 如果您正在构建其他人的想法,请将其归因于他们。 尝试改进别人的想法是可以的,但你必须将它们归因于它们。
  • 规则是Twitter图像编码挑战规则的变体。


    不知道我是否有时间/精力来跟上实际代码,但这里是我的想法:

  • 在一定长度下的任意拉丁字符串1可以被简单地编码(甚至不被压缩),而不会丢失到140个字符。 天真的估计是280个字符,虽然在比赛规则中有码点限制,但它可能比这个短一点。
  • 比上述长度略长的字符串(让280到500个字符之间的间隔)最有可能使用标准压缩技术缩小为足够短的字符串以允许上述编码。
  • 任何比这更长的事情,我们正在文本中开始丢失信息。 因此,执行以下步骤的最小数目以将字符串缩减为可以使用上述方法压缩/编码的长度。 此外,不要在整个字符串上执行这些替换,只要在子字符串上执行这些替换就会使它足够短(我可能会向后遍历字符串)。

  • 用127以外的所有拉丁字母1(主要是重音字母和时髦符号)替换为非重音字母字符中最接近的等值字符,或者可能使用通用符号替换字符“#”
  • 将所有大写字母替换为其等效小写形式
  • 用空格替换所有非字母数字(任何剩余的符号或标点符号)
  • 用0替换所有数字
  • 好吧,现在我们已经消除了尽可能多的多余字符,因为我们可以合理摆脱。 现在我们要做更大幅度的缩减:

  • 用一个字母(balon)替换所有的双字母(气球)。 看起来很奇怪,但仍然有希望被读者破译。
  • 用其他常用字母组合替换为较短的等价字符(CK用K,WR用R等)
  • 好的,就我们所能做的事情而言,文本是可读的。 除此之外,让我们看看我们是否可以想出一种方法,使文本看起来像原始文本,即使它不是最终可解析的(再次,从字符串末尾一次执行这一个字符,并停止当它足够短):

  • 用a替换所有元音(aeiouy)
  • 用l代替所有“高”字母(bdfhklt)
  • 将所有“短”字母(cmnrsvwxz)替换为n
  • 将所有“悬挂”字母(gjpq)替换为p
  • 这应该给我们留下一个由5个可能的值(a,l,n,p和空格)组成的字符串,这将允许我们编码相当长的字符串。

    除此之外,我们只需要截断。

    我所能想到的其他技术只有基于字典的编码,用于常用字或字母组。 这可能会给我们一些正确的句子的好处,但可能不适用于任意字符串。


    这是我的实际英语变体。

    每个代码点都有类似1100000个可能的状态。 那么,这是一个很大的空间。

    因此,我们将所有原始文本进行处理并从中获取Wordnet同义词。 数字被铸成英文名称(“四十二”)。 1,1M州将允许我们保持synset id(可以在0和82114之间),synset中的位置(约10个变体,我想)和同义词类型(其是四个名词,动词,形容词,副词之一) 。 我们甚至可能有足够的空间存储原始形式的单词(如动词时态id)。

    解码器只是将同义词集提供给Wordnet并检索相应的单词。

    源文本:

    A white dwarf is a small star composed mostly of electron-degenerate matter. Because a
    white dwarf's mass is comparable to that of the Sun and its volume is comparable to that 
    of the Earth, it is very dense.
    

    变为:

    A white dwarf be small star composed mostly electron degenerate matter because white
    dwarf mass be comparable sun IT volume be comparable earth IT be very dense
    

    (使用在线Wordnet进行测试)。 这个“代码”应该占用27个代码点。 当然,所有“大声笑”,如“大声笑”和“L33T”将永远失去。


    PAQ8O10T << FTW

    链接地址: http://www.djcxy.com/p/42741.html

    上一篇: Twitter text compression challenge

    下一篇: Implementing OpenID: identifying users