Melhor resposta
Se por “melhor” você quer dizer a taxa de compressão, então de acordo com Referência de compressão de texto grande é CMIX. O único problema é que você precisa de um computador com 32 GB de memória para executá-lo. E então levará 4 dias para compactar ou descompactar 1 GB de texto.
Como a maioria dos programas mais bem classificados, o CMIX usa pré-processamento de dicionário e mistura de contexto no estilo PAQ. O pré-processador substitui palavras por símbolos de 1 a 3 bits de um dicionário e faz outro processamento, como substituir letras maiúsculas por um símbolo especial e o símbolo minúsculo correspondente. Ele também pode analisar prefixos e sufixos comuns.
Um modelo de contexto pega um contexto (por exemplo, os últimos n bits) e estima uma probabilidade p que o próximo bit será 0 ou 1. O resultado é enviado a um codificador aritmético, que codifica o bit muito próximo ao limite de Shannon de log2 1 / p bits. A taxa de compressão, portanto, depende inteiramente de quão bem p é estimado. Um algoritmo de mistura de contexto faz previsões muito precisas, combinando as previsões de muitos modelos independentes. O CMIX usa várias centenas de modelos, e é por isso que requer tanto tempo e memória. A razão de haver tantos modelos é que existem muitos contextos diferentes possíveis, muitas maneiras de converter um contexto em uma previsão, muitas maneiras de atualizar o modelo e muitas maneiras de combinar adaptativamente as previsões de outros modelos e selecionar os melhores usando uma hierarquia de mixers. Os misturadores de contexto práticos podem usar de 2 a 20 modelos, sacrificando alguma compressão pela simplicidade e usabilidade.
Os melhores compressores chegam perto de realmente entender o texto. Eles modelam a estrutura lexical, semântica e gramatical da língua. Por exemplo, o dicionário é organizado agrupando palavras relacionadas, como mãe com pai e segunda-feira com terça-feira . Isso resulta em códigos de dicionário que diferem apenas nos bits baixos. Então, alguns dos modelos de contexto eliminarão os bits baixos, permitindo que o compressor preveja Eu vi meu pai na segunda-feira depois de ter visto Eu vi minha mãe na terça-feira .
Os detalhes técnicos podem ser bastante complicados. Se você estiver interessado em aprender mais, consulte Explicação da compactação de dados .
Resposta
Supondo que você esteja falando sobre sem perdas compressão (os textos podem ser comprimidos com perdas com a linguagem SMS, por exemplo), é sabido que não é possível comprimir “qualquer” ficheiro binário sem perdas. Em outras palavras, alguns arquivos terão seu tamanho aumentado. Isso se deve aos arquivos de cabeçalho do codificador e à matemática básica de bijeções impossíveis entre [0, …, N] e [0, …, N-1], ou princípio do buraco de pombo de Dirichlet (Schubfachprinzip). Veja http://en.wikipedia.org/wiki/Pigeonhole\_principle
Como dito antes, “melhor” geralmente se refere a alguma taxa de compressão média @ Sam-Jp. O conjunto de caracteres dos textos (por exemplo, ascii 7 ou 8 bits é importante) e seu tipo também é importante. A “melhor compactação” em arquivos de texto escritos em linguagem humana pura se comporta de maneira diferente em arquivos postscript, rtf, doc ou mesmo PDF contendo texto, uma vez que alguns formatos já encapsulam a compactação. Consequentemente, o “melhor” na taxa de compressão depende do conteúdo do banco de dados, homogeneidade e tipologia dos arquivos de texto, como visto a compressão de texto em inglês fornecida no link @Igor-Carron: http://www.maximumcompression.com/data/text.php
A velocidade @ Jonathan-Hseu também é muito importante. Dependendo da sua aplicação (do arquivamento às interações com o banco de dados @ Daniel-Lemire), o foco é na velocidade de compactação ou descompactação (geralmente compactar uma vez, descompactar várias) ou ambas.
Mas outros recursos podem ser avaliados como bem, especialmente com o advento de enormes conjuntos de dados e diversos sistemas de aquisição: – desempenho de acesso aleatório ou capacidade de pesquisa em arquivos compactados – resiliência de erro (resistência a bits corrompidos) – capacidade on-line, ou seja, ser capaz de compactar com eficiência o fluxo de dados conforme ele chega – compressão de textos estruturados não apenas em ordem raster, mas em árvores, gráficos -baixa complexidade ou eficiência energética do codificador, ou decodificador, ou ambos -possível paralelização -possibilidade de codificação distribuída (trabalho de compressão compartilhado em diferentes nós de uma rede)
Eventualmente, mesmo para texto, pode-se pensar fora da caixa sem perdas. E vamos voltar ao SMS citado antes, onde o significado é importante, mas talvez não seja a grafia correta, consulte, por exemplo,Kaufman & Klein, compressão sem perda sem perda http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520
Como de costume, fazer a pergunta “melhor” resolve ao refinar a questão do propósito real, ao definir métricas de qualidade e ponderação apropriada dessas métricas para definir “seu” melhor @Alex-Kamil. Os tópicos nas seguintes fontes são inspiradores:
* IEEE Transactions on Information Theory http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * IRE Transactions on Information Theory http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Data Compression Conference pages.cs.brandeis.edu/~dcc/
Finalmente, não sendo um especialista, mas um amador em compressão sem perdas, recentemente fiquei impressionado com o desempenho (na taxa de compressão) do Deplump (http://www.deplump.com/index.html) em alguns arquivos de texto em inglês longos e alguns arquivos binários (comparando com meus favoritos rar, Bzip2 e 7zip citados em outras respostas). Você pode testá-lo para arquivos curtos online. Para obter informações adicionais, consulte F. Wood et al. The Sequence Memoizer, 2011 (consulte http://www.sequencememoizer.com/) ou a página da Web de Franck Wood “http://www.stat.columbia.edu/~fwood/