Unicode テキストを元のサイズの 10 ~ 20% に圧縮するアルゴリズムを誰かが紹介してくれませんか? 実際、テキストのサイズを元のサイズの 60% に縮小するLempel-Ziv 圧縮アルゴリズムを読んだことがありますが、このパフォーマンスのアルゴリズムがいくつかあると聞きました。
3 に答える
ハフマンエンコーディングと呼ばれるエントロピーベースの暗号化を使用する最初のアルゴリズムよりもテキスト圧縮のみを検討している場合
次に、辞書エンコーディングを使用して、以前に使用された一連の文字を使用してコードを割り当て、ファイルのサイズを縮小する LZW 圧縮があります。
上記の 2 つは、テキスト データを効率的にエンコードするのに十分であり、実装も簡単だと思います。
注:すべてのファイルで良好な圧縮を期待しないでください。データがパターンのないランダムな場合、圧縮アルゴリズムがまったくない場合は、まったく圧縮できません。圧縮率は、使用されるアルゴリズムだけでなく、ファイルに表示されるシンボルにも依存します。
LZ のようなコーダーは、テキスト圧縮には適していません。ただし、位置合わせオプションがあるため、Unicode を直接使用するのに最適なものは lzma です。( http://www.7-zip.org/sdk.html )
しかし、最適な圧縮のために、Unicode テキストをバイト単位の形式に変換することをお勧めします。utf8 を使用してから、テキストに対して既知の良好な結果が得られるアルゴリズムを使用します。BWT ( http://libbsc.com ) または PPMd ( http://compression.ru/ds/ppmdj1.rar )。
また、テキスト圧縮の結果を改善するために、いくつかの前処理を適用することもできます ( http://xwrt.sourceforge.net/を参照してください)。また、提案されているものよりもさらに優れた比率のコンプレッサーがいくつかあります (主に paq 派生物)。もっとゆっくり。
ここでは、Witten の「テキスト圧縮のためのモデリング」のロシア語翻訳のさまざまな表現をテストしました。
7z rar4 paq8px69 モデリング_win1251.txt 156091 50227 42906 36254 モデリング_utf16.txt 312184 52523 50311 38497 モデリング_utf8.txt 238883 53793 44231 37681 モデリング_bocu.txt 165313 53073 44624 38768 モデリング_scsu.txt 156261 50499 42984 36485
入力が長いからといって全体的な圧縮率が向上するわけではなく、SCSU は便利ですが、実際には Unicode テキストの最適な表現ではないことがわかります (win1251 コードページもその 1 つです)。
PAQは、テキスト圧縮の新たなチャンピオンです...いくつかの異なるフレーバーがあり、それらに関する情報は、ここで見つけることができます。
おすすめのフレーバーは次の3つです。
- ZPAQ - PAQ アルゴリズムの未来志向のコンテナー (PAQ の将来を容易にするために作成された)
- PAQ8PX/PAQ8KX - 最も強力で、EXE および WAV ファイルでも動作します。
- PAQ8PF - 高速 (圧縮と解凍の両方) で、主に TXT ファイルを対象としています
ソースから自分でビルドする必要がありますが、幸いなことに、2 つの最良のバイナリを 1 つにパッケージ化する GUI、 FrontPAQを作成した人がいます。
機能するバイナリを簡単に使用できるようになったら、ドキュメントをここで見つけることができます。
注:これは非常に古い質問であることは承知していますが、関連する最新のデータを含めたいと思います. 私は同じ質問を探しに来ましたが、より強力な新しい回答を見つけました。