Hah圧縮
(hah圧縮から転送)
概要
hah圧縮 (hah compress) とは、長大語を短縮するために考案された圧縮法である。名前の由来は、情報科学で使われる「ハッシュ(hash)関数」の「ハッシュ」をhah圧縮法で圧縮した結果である。応用の範囲が広いため、工学的な手法を好む者が改良案や発展的な方法を提案しているため、時々話題に挙がる。
オリジナルの手法については ponta氏による投稿 を参照のこと。
種類
オリジナルの手法に加え、それを拡張した様々な手法が考案されている。
オリジナルの手法
- 圧縮したい文字列を N (≧3) 文字ごとに区切る。
- 区切った部分文字列それぞれに対し、最初と最後の文字のみを取り出し、それ以外の文字は削除する。
- 取り出した文字を繋ぎ合わせる。
- 完成した文字列が言語の音韻構造に合わない場合は、手順 2 において削除した文字列内の母音字や子音字を適宜補う。
例1:
- jugemujugemugokounosurikire (寿限無寿限無 五劫の擦り切れ)
を圧縮する。 区切りの長さは N=4 とする。
- juge / muju / gemu / goko / unos / urik / ire
- je / mu / gu / go / us / uk / ie
- jemugugousukie
- (上記の文字列は日本語として発音可能なのでこの手順を行う必要はない)
例2:
- ryuuguunootohimenomotoyuinokirihazusi
を圧縮する。 区切りの長さは同様に N=4 とする。
- ryuu / guun / ooto / hime / nomo / toyu / inok / irih / azus / i
- ru / gn / oo / he / no / tu / ik / ih / as / i
- rugnoohenotuikihasi
- gn の部分が日本語で発音不可能なので、この部分に相当する圧縮前の guun から u を補い rugunoo~ とする。
ランダム hah 圧縮
- 圧縮したい文字列をランダムに並び替える。
- 以下、並び替えた文字列に対してオリジナルの手法を施す。
ソート型 hah 圧縮
- 圧縮したい文字列のそれぞれ文字に対して、その位置を表す数を与えてペアにする。
- 文字に関して何らかの順序 (辞書順など) でソートを行う。
- ソートした文字列にオリジナルの手法を施す (音節構造に合わせて文字を補うことはしない)。
- 手順 1 で各文字に与えた数に関してソートを行う。
- 完成した文字列が言語の音韻構造に合わない場合は、適宜文字を補う。
例:
- gokounosurikire
を圧縮する。 文字のソートはラテン文字順とし、区切りの長さは N=4 とする。
- g0 o1 k2 o3 u4 n5 o6 s7 u8 r9 i10 k11 r12 e13
- e13 g0 i10 k2 k11 n5 o1 o3 o6 r9 r12 s7 u4 u8
- ↓
- e13 g0 i10 k2 / k11 n5 o1 o3 / o6 r9 r12 s7 / u4 u8
- e13 k2 / k11 o3 / o6 s7 / u4 u8
- e13 k2 k11 o3 o6 s7 u4 u8
- k2 o3 u4 o6 s7 u8 k11 e13 → kouosuke
- (上記の文字列は日本語として発音可能なのでこの手順を行う必要はない)
母子音字別hah圧縮
- 圧縮したい文字列のそれぞれの文字に対して、その位置を表す数を与えてペアにする。
- 文字に関して言語での母音字と子音字に分けてリストにする。
- それぞれのリストに対してオリジナルの手法を施す。
- 母音字と子音字とを連結し一つのリストにする。
- 最初に各文字に与えた数に関してソートを行う。
- 完成した文字列が言語の音韻構造に合わない場合は、適宜文字を補う。
例:
- jugemujugemugokounosurikire
を圧縮する。文字が母音字か子音字かはヘボン式に準じるとし、区切りの長さはN=4とする。
- j0 u1 g2 e3 m4 u5 j6 u7 g8 e9 m10 u11 g12 o13 k14 o15 u16 n17 o18 s19 u20 r21 i22 k23 i24 r25 e26
- [u1 e3 u5 u7 e9 u11 o13 o15 u16 o18 u20 i22 i24 e26], [j0 g2 m4 j6 g8 m10 g12 k14 n17 s19 r21 k23 r25]
-
- [u1 e3 u5 u7 / e9 u11 o13 o15 / u16 o18 u20 i22 / i24 e26], [j0 g2 m4 j6 / g8 m10 g12 k14 / n17 s19 r21 k23 / r25]
- [u1 u7 / e9 o15 / u16 i22 / i24 e26], [j0 j6 / g8 k14 / n17 k23 / r25]
- [u1 u7 e9 o15 u16 i22 i24 e26], [j0 j6 g8 k14 n17 k23 r25]
- u1 u7 e9 o15 u16 i22 i24 e26 j0 j6 g8 k14 n17 k23 r25
- j0 u1 j6 u7 g8 e9 k14 o15 u16 n17 i22 k23 i24 r25 e26 → jujugekounikire
- (日本語として発音可能なのでこの手順を行う必要はない。)