使用压缩库来估计英文句子的信息复杂度?

Using compression library to estimate information complexity of an english sentence?

我正在尝试编写一种算法来计算句子的 'unexpectedness' 或 'information complexity'。更具体地说,我正在尝试对一组句子进行排序,以便最不复杂的句子排在第一位。

我的想法是我可以使用一个压缩库,比如 zlib?,'pre train' 它在一个大的相同语言的文本语料库上(称之为 'Corpus'),然后附加到该文本语料库包含不同的句子。

也就是说,我可以将一个句子的复杂性度量定义为压缩附加了该句子的整个语料库与附加了不同句子的整个语料库需要多少字节。 (额外字节越少,句子越可预测或 'expected',因此复杂性越低)。这有意义吗?

问题是试图找到合适的库让我这样做,最好是 python。

我可以通过将句子直接附加到大型语料库并要求压缩库压缩整个 shebang 来做到这一点,但如果可能的话,我宁愿在语料库末尾停止压缩库的处理,拍摄相关压缩 'state' 的快照,然后利用所有可用的 'state' 尝试压缩最后一句话。 (然后我会回滚到语料库末尾的状态快照并尝试不同的句子)。

任何人都可以帮我提供一个可能适合这种需要的压缩库吗? (让我 'freeze' 它在 'pre training' 之后的状态的东西。)

我更愿意使用可以从 Python 或 Scala 调用的库。如果它是纯 python(或纯 scala)

就更好了

所有这一切要做的就是告诉您句子中的单词,可能还有句子中的短语,是否在您提供的词典中。我不明白这有多复杂。更像是年级。并且有更好的工具。不管怎样,我会回答你的问题。

是的,您可以为 zlib 压缩器预设一个字典。它只是高达 32K 字节的文本。您不需要在字典上 运行 zlib 或 "freeze a state" - 您只需开始压缩新数据,但允许它回头查看字典以查找匹配的字符串。但是32K不是很多。这与 zlib 的 deflate 格式看起来一样远,而且您无法在 32K 字节中加载大部分英语。

LZMA2 也允许预设字典,但它可以更大,最多 4 GB。 LZMA2 库有一个 Python 绑定,但您可能需要扩展它以提供字典预设功能。