“Conocimiento software>compresión de datos

¿Cómo puedo comprimir una cadena de texto de manera eficiente?

2016/1/5
La forma más eficiente de comprimir una cadena de texto depende en gran medida de las características de ese texto. No hay un solo método "mejor". Aquí hay un desglose de las técnicas comunes y cuándo son más efectivos:

1. Algoritmos de compresión sin pérdidas (preservar texto original): Estos son adecuados cuando necesita reconstruir perfectamente la cadena original.

* Codificación de Huffman: Este es un esquema de codificación de longitud variable. Asigna códigos más cortos a caracteres más frecuentes y códigos más largos a los menos frecuentes. Es muy efectivo para el texto con distribuciones de caracteres desiguales. Las implementaciones están disponibles en muchos lenguajes de programación.

* Lempel-Ziv (LZ77, LZ78, LZW): Estos algoritmos explotan los patrones y secuencias de repetición dentro del texto. Construyen un diccionario de secuencias observadas anteriormente y reemplazan ocurrencias repetidas con referencias al diccionario. LZ77 y sus derivados (como la deflación, utilizada en ZIP y GZIP) son extremadamente comunes y ampliamente utilizadas debido a sus buenas relaciones de compresión y velocidades relativamente rápidas. Son particularmente buenos para el texto con redundancia.

* bzip2: Este algoritmo combina una transformación Burrows-Wheeler (BWT) con Huffman Coding. El BWT reorganiza la cadena de entrada para mejorar la efectividad de la codificación de Huffman al agrupar caracteres similares. En general, logra relaciones de compresión más altas que GZIP, pero a costa de la compresión y las velocidades de descompresión más lentas.

* zlib/gzip/zip: Estas son bibliotecas y herramientas fácilmente disponibles que implementan variaciones de deflación, ofreciendo un buen equilibrio entre la relación de compresión y la velocidad. A menudo son la opción de referencia para la compresión de texto de uso general.

2. Algoritmos de compresión con pérdida (no preserve el texto original): Estos son * no * adecuados si necesita recuperar el texto original exacto, pero puede lograr relaciones de compresión mucho más altas. Raramente se usan para el texto general, pero pueden ser apropiados en escenarios de nicho.

* aproximaciones/abstracciones: Si no necesita la redacción exacta, puede resumir o representar el texto con palabras clave o un conjunto de datos más pequeño. Esto depende en gran medida de la aplicación y requiere una lógica personalizada.

Elegir el método correcto:

* Para la mayoría de la compresión de texto de propósito general: `GZIP` (o` Zlib` en su código) es un punto de partida fantástico. Ofrece un buen equilibrio de relación de compresión y velocidad.

* Para relaciones de compresión muy altas (pero velocidad más lenta): `BZIP2` es una buena opción.

* Si necesita una compresión extremadamente rápida, incluso a costo de relaciones de compresión ligeramente más bajas: Considere un algoritmo más simple como la codificación de Huffman, aunque la ganancia podría ser mínima con bibliotecas optimizadas fácilmente disponibles para GZIP.

* Si tiene conocimiento previo de la estructura del texto o las propiedades estadísticas: Es posible que pueda adaptar una estrategia de compresión. Por ejemplo, si sabe que es principalmente texto en inglés, puede usar una tabla de frecuencia de caracteres específica para el inglés.

Ejemplo usando Python (GZIP):

`` `Python

importar gzip

importar IO

Text ="Esta es una cadena de muestra. Esta cadena se repite para demostrar la compresión". * 100

comprimir la cadena

compressed_data =gzip.compress (text.encode ('utf-8'))

Descomprima la cadena

DECOMPRESED_DATA =GZIP.DECOMPRESS (compressed_data) .Decode ('UTF-8')

print (f "tamaño original:{len (texto)} bytes")

print (f "tamaño comprimido:{len (compressed_data)} bytes")

imprime (f "texto original:{texto [:50]} ...") #show solo una parte para evitar una gran salida.

print (f "Texto descomprimido:{Decompressed_data [:50]} ...") #show solo una parte para evitar una gran salida.

#Handling de archivos en lugar de cadenas

con Open ('myFile.txt', 'wb') como F:

F.Write (text.enDode ('UTF-8'))

con Open ('myFile.txt.gz', 'wb') como f_out:

con gzip.open (f_out, 'wb') como f_in:

con Open ('myFile.txt', 'rb') como F:

f_in.WriteLines (f)

`` `` ``

Recuerde manejar posibles excepciones (como `ioError`) al trabajar con archivos. Este ejemplo muestra un uso básico; Puede adaptarlo para satisfacer sus necesidades específicas e integrarlo en programas más grandes. Siempre considere el manejo de errores y la gestión eficiente de la memoria cuando se trata de grandes cadenas de texto.

compresión de datos
Cómo comprimir archivos MIDI
Cómo comprimir de Flash Video tamaños
Cómo comprimir archivos de PowerPoint 2007
Cómo Zip una carpeta con WinRAR
Cómo recuperar la contraseña de archivos Zip protegidos
Cómo comprimir XML Java
Cómo comprimir archivos MOV
Cómo comprimir un video para caber en un CD
Conocimiento de la computadora © http://www.ordenador.online