(57)【要約】【課題】テキストデータの圧縮を高速化する。【解決手段】記憶部１１は、それぞれがｎビットで表された異なる圧縮符号とそれぞれがｎより大きいビット数の文字コードで表された異なる文字とを対応付けた符号表であって、異なる文字の個数が２のｎ乗以下であり、１つの圧縮符号に対して高々１つの文字を対応付けた符号表１３を記憶する。処理部１２は、文字コードの下位ｎビットが圧縮符号と異なる文字１５ｃを被圧縮データ１６から検索し、文字１５ｃの文字コードの下位ｎビットを文字１５ｃに対応付けられた圧縮符号１４ｃに置換する。処理部１２は、置換後の被圧縮データ１６ａに含まれる文字それぞれの文字コードから下位ｎビット以外の残りのビットを削除することで、圧縮データ１７を生成する。【選択図】図１
2019050531.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
それぞれがｎビット（ｎは２以上の整数）で表された異なる複数の圧縮符号とそれぞれがｎより大きいビット数の文字コードで表された異なる複数の文字とを対応付けた符号表であって、異なる文字の個数が２のｎ乗以下であり、１つの圧縮符号に対して高々１つの文字を対応付けた符号表を取得し、
前記符号表が示す前記異なる複数の文字のうち文字コードの下位ｎビットが当該文字に対応付けられた圧縮符号と異なる文字を、被圧縮データから検索し、前記検索された文字の文字コードの下位ｎビットを、当該文字に対応付けられた圧縮符号に置換し、
前記置換後の被圧縮データに含まれる文字それぞれの文字コードから下位ｎビット以外の残りのビットを削除することで、圧縮データを生成する、
処理を実行させるデータ圧縮プログラム。
【請求項２】
前記コンピュータに更に、
前記被圧縮データから前記異なる複数の文字を検出し、検出した前記異なる複数の文字に前記異なる複数の圧縮符号を対応付けて前記符号表を生成し、
前記圧縮データに前記符号表を挿入する、
処理を実行させる請求項１記載のデータ圧縮プログラム。
【請求項３】
前記符号表は、文字コードの下位ｎビットが他の何れの文字とも重複しない第１の文字に対しては、当該下位ｎビットの値を圧縮符号として対応付けており、文字コードの下位ｎビットが他の何れかの文字と重複する第２の文字に対しては、前記異なる複数の文字において下位ｎビットに出現しない値を圧縮符号として対応付けている、
請求項１記載のデータ圧縮プログラム。
【請求項４】
前記被圧縮データは、数字を表す文字を含む数値データであり、
前記異なる複数の文字それぞれの文字コードは８ビットで表され、
前記異なる複数の圧縮符号はそれぞれ４ビットで表される、
請求項１記載のデータ圧縮プログラム。
【請求項５】
前記被圧縮データは、数字を表す文字と所定のアルファベットとを含むデータであり、
前記異なる複数の文字それぞれの文字コードは８ビットで表され、
前記異なる複数の圧縮符号はそれぞれ５ビットで表される、
請求項１記載のデータ圧縮プログラム。
【請求項６】
前記コンピュータに更に、
複数のセンサデバイスからセンサデータを受信し、前記複数のセンサデバイスのセンサデータを集約して前記被圧縮データを生成し、
前記圧縮データを他のコンピュータに送信する、
処理を実行させる請求項１記載のデータ圧縮プログラム。
【請求項７】
コンピュータに、
それぞれがｎビット（ｎは２以上の整数）で表された異なる複数の圧縮符号とそれぞれがｎより大きいビット数の文字コードで表された異なる複数の文字とを対応付けた符号表であって、異なる文字の個数が２のｎ乗以下であり、文字コードの下位ｎビットが他の何れの文字とも重複しない第１の文字に対しては当該下位ｎビットの値を圧縮符号として対応付けており、文字コードの下位ｎビットが他の何れかの文字と重複する第２の文字に対しては前記異なる複数の文字において下位ｎビットに出現しない値を圧縮符号として対応付けている符号表を取得し、
圧縮データからｎビットの圧縮符号を抽出し、前記抽出した圧縮符号に対応する文字を前記符号表から検索し、前記検索された文字を含む被圧縮データを復元する、
処理を実行させるデータ復号プログラム。
【請求項８】
コンピュータが実行するデータ圧縮方法であって、
それぞれがｎビット（ｎは２以上の整数）で表された異なる複数の圧縮符号とそれぞれがｎより大きいビット数の文字コードで表された異なる複数の文字とを対応付けた符号表であって、異なる文字の個数が２のｎ乗以下であり、１つの圧縮符号に対して高々１つの文字を対応付けた符号表を取得し、
前記符号表が示す前記異なる複数の文字のうち文字コードの下位ｎビットが当該文字に対応付けられた圧縮符号と異なる文字を、被圧縮データから検索し、前記検索された文字の文字コードの下位ｎビットを、当該文字に対応付けられた圧縮符号に置換し、
前記置換後の被圧縮データに含まれる文字それぞれの文字コードから下位ｎビット以外の残りのビットを削除することで、圧縮データを生成する、
データ圧縮方法。
【請求項９】
それぞれがｎビット（ｎは２以上の整数）で表された異なる複数の圧縮符号とそれぞれがｎより大きいビット数の文字コードで表された異なる複数の文字とを対応付けた符号表であって、異なる文字の個数が２のｎ乗以下であり、１つの圧縮符号に対して高々１つの文字を対応付けた符号表を記憶する記憶部と、
前記符号表が示す前記異なる複数の文字のうち文字コードの下位ｎビットが当該文字に対応付けられた圧縮符号と異なる文字を、被圧縮データから検索し、前記検索された文字の文字コードの下位ｎビットを、当該文字に対応付けられた圧縮符号に置換し、前記置換後の被圧縮データに含まれる文字それぞれの文字コードから下位ｎビット以外の残りのビットを削除することで、圧縮データを生成する処理部と、
を有するデータ圧縮装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ圧縮プログラム、データ復号プログラム、データ圧縮方法およびデータ圧縮装置に関する。
【背景技術】
【０００２】
文字列であるテキストデータをネットワークに送信する場合やストレージ装置に保存する場合に、ロスレス圧縮技術（可逆圧縮技術）を用いてテキストデータを圧縮してデータ量を削減することがある。ロスレス圧縮技術の１つにバイトペア符号化がある。
【０００３】
バイトペア符号化では、圧縮装置は、１文字１バイトで表現されたテキストデータから連続する２文字のパターンを示すバイトペアを抽出し、最も出現頻度が高いバイトペアをテキストデータ中で未使用の１文字に置換する。このバイトペアの置換を、２回以上出現するバイトペアが存在しなくなるか未使用の文字が無くなるまで繰り返す。そして、圧縮装置は、置換前のバイトペアと置換後の文字との対応関係を示す符号表を生成し、圧縮結果の文字列と符号表とを含む圧縮データを出力する。
【０００４】
例えば、元のテキストデータが「ＡＢＡＢＣＡＢＣＤ」であるとする。１ステップ目では、最も出現頻度が高いバイトペアが「ＡＢ」であるため、これを未使用の文字「Ｘ」に置換して「ＸＸＣＸＣＤ」が得られる。２ステップ目では、最も出現頻度が高いバイトペアが「ＸＣ」であるため、これを未使用の文字「Ｙ］に置換して「ＸＹＹＤ」が得られる。２回以上出現するバイトペアが存在しなくなったため圧縮が終了する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−３０３６９０号公報
【特許文献２】特開２００９−１１７９９７号公報
【特許文献３】国際公開第２０１５／１２４３２４号
【非特許文献】
【０００６】
【非特許文献１】Philip Gage, "A New Algorithm for Data Compression", http://www.drdobbs.com/a-new-algorithm-for-data-compression/184402829, 1994年2月1日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、テキストデータのロスレス圧縮技術では、圧縮にかかる時間が長くなりやすいという問題がある。例えば、バイトペア符号化では、出現頻度が高いバイトペアを探索して１文字に置換することを、テキストデータ全体に対して繰り返し実行することになり、この繰り返しが終了するまで長時間かかることが多い。一方で、繰り返し回数を制限して繰り返しを途中で打ち切ると、圧縮率が低くなるおそれがある。
【０００８】
１つの側面では、本発明は、テキストデータの圧縮を高速化するデータ圧縮プログラム、データ圧縮方法およびデータ圧縮装置を提供することを目的とする。また、１つの側面では、本発明は、データ復号プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、コンピュータに実行させるデータ圧縮プログラムが提供される。それぞれがｎビット（ｎは２以上の整数）で表された異なる複数の圧縮符号とそれぞれがｎより大きいビット数の文字コードで表された異なる複数の文字とを対応付けた符号表であって、異なる文字の個数が２のｎ乗以下であり、１つの圧縮符号に対して高々１つの文字を対応付けた符号表を取得する。符号表が示す異なる複数の文字のうち文字コードの下位ｎビットが当該文字に対応付けられた圧縮符号と異なる文字を、被圧縮データから検索し、検索された文字の文字コードの下位ｎビットを、当該文字に対応付けられた圧縮符号に置換する。置換後の被圧縮データに含まれる文字それぞれの文字コードから下位ｎビット以外の残りのビットを削除することで、圧縮データを生成する。
【００１０】
また、1つの態様では、コンピュータに実行させるデータ復号プログラムが提供される。また、１つの態様では、コンピュータが実行するデータ圧縮方法が提供される。また、１つの態様では、記憶部と処理部とを有するデータ圧縮装置が提供される。
【発明の効果】
【００１１】
１つの側面では、テキストデータの圧縮を高速化できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のデータ圧縮装置を説明する図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】ゲートウェイのハードウェア例を示すブロック図である。
【図４】ゲートウェイとサーバの機能例を示すブロック図である。
【図５】符号表の第１の例を示す図である。
【図６】テキストデータの第１の圧縮例を示す図である。
【図７】第２の実施の形態の圧縮部の機能例を示すブロック図である。
【図８】第２の実施の形態の復号部の機能例を示すブロック図である。
【図９】第２の実施の形態の圧縮処理の手順例を示すフローチャートである。
【図１０】第２の実施の形態の復号処理の手順例を示すフローチャートである。
【図１１】テキストファイルの第１の例を示す図である。
【図１２】符号表の第２の例を示す図である。
【図１３】テキストデータの第２の圧縮例を示す図である。
【図１４】第３の実施の形態の圧縮部の機能例を示すブロック図である。
【図１５】第３の実施の形態の復号部の機能例を示すブロック図である。
【図１６】第３の実施の形態の圧縮処理の手順例を示すフローチャートである。
【図１７】第３の実施の形態の復号処理の手順例を示すフローチャートである。
【図１８】テキストファイルの第２の例を示す図である。
【図１９】符号表の第３の例を示す図である。
【図２０】テキストデータの第３の圧縮例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態のデータ圧縮装置を説明する図である。
第１の実施の形態のデータ圧縮装置は、文字列を含むテキストデータをロスレス圧縮形式（可逆圧縮形式）で圧縮してデータ量を削減する情報処理装置である。データ圧縮装置１０は、クライアント装置でもよいしサーバ装置でもよい。
【００１５】
データ圧縮装置１０は、記憶部１１および処理部１２を有する。記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性の半導体メモリでもよいし、ＨＤＤ（Hard Disk Drive）などの不揮発性のストレージでもよい。処理部１２は、例えば、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００１６】
記憶部１１は、符号表１３および被圧縮データ１６を記憶する。符号表１３は、処理部１２が圧縮時に被圧縮データ１６から生成するようにしてもよいし、予め生成されたものを記憶部１１に格納しておいてもよい。符号表１３は、異なる複数の圧縮符号と被圧縮データ１６に出現し得る異なる複数の文字とを対応付ける。
【００１７】
圧縮符号はそれぞれｎビット（ｎは２以上の整数）で表される。文字はｎより大きいビット数の文字コードで表される。文字コードは、例えば、英数字を表すＡＳＣＩＩ（American Standard Code for Information Interchange）コードである。符号表１３に含まれる異なる文字の個数は２のｎ乗以下であり、１つの圧縮符号に対して高々１つの文字（０個または１個の文字）が対応付けられる。圧縮符号のビット数は、被圧縮データ１６に出現し得る文字の種類に基づいて決定することが可能である。好ましくは、出現し得る異なる文字の個数が２のｎ乗以下という条件を満たす最小のｎを圧縮符号のビット数とする。例えば、文字コードが８ビットであり、圧縮符号が４ビットである。
【００１８】
符号表１３において、ある文字に対応付ける圧縮符号として文字コードの下位ｎビットを用いてもよい。下位ｎビットは最下位ビット（ＬＳＢ：Least Significant Bit）を含む連続するｎ個のビットである。ただし、異なる２つの文字の間で下位ｎビットが同一になる（「重複する」または「衝突する」と言うこともある）ことがある。その場合、少なくとも一方の文字に対応付ける圧縮符号を、何れの文字コードの下位ｎビットとしても使用されていない値、すなわち、空いている圧縮符号に変更することがある。
【００１９】
例えば、符号表１３は、圧縮符号１４ａ，１４ｂ，１４ｃ，１４ｄ，１４ｅおよび文字１５ａ，１５ｂ，１５ｃ，１５ｄを含む。圧縮符号１４ａと文字１５ａとが対応し、圧縮符号１４ｂと文字１５ｂとが対応し、圧縮符号１４ｃと文字１５ｃとが対応し、圧縮符号１４ｄと文字１５ｄとが対応する。圧縮符号１４ｅには文字が対応付けられていない。文字１５ａの下位ｎビットは圧縮符号１４ａであり、文字１５ｂの下位ｎビットは圧縮符号１４ｂであり、文字１５ｄの下位ｎビットは圧縮符号１４ｄである。これに対し、文字１５ｃの下位ｎビットは文字１５ａと重複している。そこで、文字１５ｃに対しては、圧縮符号１４ａに代えて圧縮符号１４ｃが対応付けられている。
【００２０】
被圧縮データ１６は、符号表１３に含まれる文字を用いて記載されたテキストデータである。各文字はｎより大きいビット数の文字コードで表される。文字コードのビット数は文字に関係なく固定でもよいし文字によって異なってもよい。例えば、被圧縮データ１６は、文字列として数値を記載した数値データである。被圧縮データ１６は、数字を表す文字を含んでもよい。また、被圧縮データ１６は、月名に用いられるアルファベットなど所定の範囲のアルファベットを含んでもよい。
【００２１】
処理部１２は、被圧縮データ１６を圧縮して圧縮データ１７を生成する。データ圧縮において、処理部１２は、符号表１３が示す文字のうち文字コードの下位ｎビットが圧縮符号として使用されていない文字を、被圧縮データ１６から検索する。例えば、処理部１２は、文字１５ｃの下位ｎビットが圧縮符号１４ｃと異なることを符号表１３から検出し、被圧縮データ１６から文字１５ｃを検索する。処理部１２は、検索された文字の下位ｎビットを符号表１３が示す圧縮符号に置換する。例えば、処理部１２は、被圧縮データ１６に含まれる文字１５ｃそれぞれの下位ｎビットを圧縮符号１４ｃに置換する。
【００２２】
これにより、被圧縮データ１６が被圧縮データ１６ａに置換される。そして、処理部１２は、被圧縮データ１６ａに含まれる文字それぞれの文字コードから下位ｎビット以外の残りのビットを削除する。例えば、処理部１２は、文字コードが８ビットである場合、文字コードの上位ｍビット（ｍ＝８−ｎ）を削除する。上位ｍビットは最上位ビット（ＭＳＢ：Most Significant Bit）を含む連続するｍ個のビットである。
【００２３】
これにより、被圧縮データ１６ａが圧縮データ１７に変換される。文字コードが８ビットである場合、圧縮率はｎ／８であり、圧縮データ１７のサイズが被圧縮データ１６のｎ／８倍になる。ｎ＝４である場合には圧縮率は５０％になる。圧縮データ１７には符号表１３が付加されてもよいし付加されなくてもよい。圧縮データ１７はデータ圧縮装置１０に保存されてもよいし他の装置に送信されてもよい。
【００２４】
第１の実施の形態のデータ圧縮装置１０によれば、ｎビットの圧縮符号とｎより大きいビット数の文字コードで表された文字とを対応付けた符号表１３が用意される。被圧縮データ１６に含まれる文字のうち文字コードの下位ｎビットと異なる圧縮符号が対応付けられた文字について、当該下位ｎビットが当該圧縮符号に置換される。そして、文字コードの下位ｎビット以外の残りのビットを削除することで圧縮データ１７が生成される。
【００２５】
これにより、被圧縮データ１６のロスレス圧縮を高速化することができる。特に、繰り返し回数が多いバイトペア符号化と比べて、被圧縮データ１６の全体を走査する回数が減少し圧縮時間を短縮することができる。また、原則として文字コードの下位ｎビットを圧縮符号として使用することで、文字コードの上位ビットを削除するという簡便的方法でロスレス圧縮が可能となる。また、被圧縮データ１６に出現し得る文字の種類が限定される場合、冗長な文字コードに代えて短い圧縮符号を使用でき、圧縮率が改善される。
【００２６】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の情報処理システムの例を示す図である。
【００２７】
第２の実施の形態の情報処理システムは、複数のセンサから温度や水量などの物理量を示すセンサデータを収集し、収集したセンサデータを分析するものである。情報処理システムは、センサ３１〜３３、ゲートウェイ１００およびサーバ２００を含む。ゲートウェイ１００は、第１の実施の形態のデータ圧縮装置に対応する。センサ３１〜３３、ゲートウェイ１００およびサーバ２００は、ネットワーク４０に接続されている。ネットワーク４０は、インターネットなどの広域ネットワークを含んでもよく、ＬＡＮ（Local Area Network）を含んでもよい。また、ネットワーク４０は、有線通信ネットワークを含んでもよいし、無線通信ネットワークを含んでもよい。
【００２８】
センサ３１〜３３は、温度や水量などの物理量を測定し、測定した物理量を示すセンサデータを送信するデバイスである。センサ３１〜３３は異なる場所に設置されている。センサ３１，３２は温度を測定する温度センサであり、センサ３３は水量を測定する水量センサである。センサ３１〜３３が送信するセンサデータでは、物理量がバイナリ形式で表現されている。例えば、温度や水量を示す数値が二進数で表現されている。
【００２９】
ゲートウェイ１００は、センサ３１〜３３からネットワーク４０を介してセンサデータを受信し、受信したセンサデータを集約するサーバコンピュータである。ゲートウェイ１００は、受信したバイナリ形式のセンサデータをテキスト形式に変換する。例えば、二進数で表現された数値を十進数で表現された文字列に変換する。また、ゲートウェイ１００は、物理量を示す文字列に対して、センサデータを受信した日時を示す文字列や、送信元センサを識別するセンサＩＤを示す文字列を付加する。センサ３１〜３３に対してはそれぞれ、ゲートウェイ１００が予めセンサＩＤを付与している。
【００３０】
ゲートウェイ１００は、センサ３１〜３３から所定期間内に受信したセンサデータについて、上記の文字列を集約したテキストファイルを生成する。すなわち、ゲートウェイ１００は、異なるセンサのセンサデータを集約する（デバイス方向に集約する）とともに、異なる時刻に受信されたセンサデータを集約する（時間方向に集約する）。例えば、ゲートウェイ１００は、１週間につき１つのテキストファイルを生成する。そして、ゲートウェイ１００は、上記のテキストファイルをロスレス圧縮技術を用いて圧縮して圧縮ファイルを生成し、圧縮ファイルをサーバ２００に送信する。
【００３１】
サーバ２００は、センサ３１〜３３によって測定された物理量を分析するサーバコンピュータである。サーバ２００は、所定周期（例えば、１週間周期）でゲートウェイ１００から、センサ３１〜３３の測定結果を集約してテキスト形式で記載したテキストファイルを受信する。受信時にはテキストファイルは圧縮ファイルとして圧縮されている。サーバ２００は、圧縮ファイルを復号（伸張）して非圧縮のテキストファイルを復元する。
【００３２】
サーバ２００は、復元したテキストファイルに記載された物理量を分析する。例えば、サーバ２００は、アプリケーションプログラムを起動して、物理量の変化を示す統計情報を記載したレポートを生成してシステム管理者に提示する。また、例えば、サーバ２００は、物理量の異常な変化を検出し、物理量が正常な範囲に収まるように空調機器や水量調整機器などの各種機器を制御する制御信号を送信する。
【００３３】
図３は、ゲートウェイのハードウェア例を示すブロック図である。
ゲートウェイ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。サーバ２００も、ゲートウェイ１００と同様のハードウェアを用いて実現できる。
【００３４】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよく、ゲートウェイ１００は複数のプロセッサを有してもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００３５】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、ゲートウェイ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３６】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、ゲートウェイ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３７】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、ゲートウェイ１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００３８】
入力信号処理部１０５は、ゲートウェイ１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウス、タッチパネル、タッチパッド、トラックボール、キーボード、リモートコントローラ、ボタンスイッチなど、任意の種類の入力デバイスを用いることができる。また、ゲートウェイ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００３９】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００４０】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００４１】
通信インタフェース１０７は、ネットワーク４０を介してセンサ３１〜３３やサーバ２００と通信を行うインタフェースである。通信インタフェース１０７は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【００４２】
図４は、ゲートウェイとサーバの機能例を示すブロック図である。
ゲートウェイ１００は、テキストファイル記憶部１２１、圧縮ファイル記憶部１２２、受信部１２３、キャッシング部１２４、集約部１２５、圧縮部１２６および送信部１２７を有する。テキストファイル記憶部１２１と圧縮ファイル記憶部１２２は、ＲＡＭ１０２またはＨＤＤ１０３を用いて実装される。受信部１２３と送信部１２７は、ＣＰＵ１０１と通信インタフェース１０７とプログラムを用いて実装される。キャッシング部１２４と集約部１２５と圧縮部１２６は、ＣＰＵ１０１とプログラムを用いて実装される。
【００４３】
テキストファイル記憶部１２１は、被圧縮データを含むテキストファイルを記憶する。テキストファイルは集約部１２５により生成される。圧縮ファイル記憶部１２２は、圧縮データを含む圧縮ファイルを記憶する。圧縮ファイルは圧縮部１２６により生成される。
【００４４】
受信部１２３は、センサ３１〜３３からセンサデータを受信する。キャッシング部１２４は、前回テキストファイルが生成されたとき以降に受信部１２３が受信したセンサデータを蓄積する。キャッシング部１２４は、キャッシュやバッファと言うこともできる。キャッシング部１２４が蓄積するセンサデータには、異なるセンサから受信されたセンサデータや異なる時刻に受信されたセンサデータが混在している。
【００４５】
集約部１２５は、所定周期（例えば、１週間周期）で、キャッシング部１２４に蓄積されたセンサデータを集約して１つのテキストファイルを生成する。集約部１２５は、生成したテキストファイルをテキストファイル記憶部１２１に格納する。テキストファイルの生成では、集約部１２５は、センサデータに含まれる温度や水量などの数値を、当該数値を表す文字列に変換する。また、集約部１２５は、数値を表す文字列に、センサＩＤを表す文字列や日時を表す文字列を付加する。集約部１２５は、このような文字列のレコードを様々なセンサデータから生成して１つのテキストファイルにまとめる。テキストファイルは、例えば、ＣＳＶ（Comma Separated Value）形式で記載される。
【００４６】
圧縮部１２６は、テキストファイル記憶部１２１に記憶されたテキストファイルを圧縮して圧縮ファイルを生成し、圧縮ファイル記憶部１２２に格納する。圧縮部１２６が行うデータ圧縮はロスレス圧縮である。テキストファイルでは文字コードとして８ビットのＡＳＣＩＩコードが使用される。ただし、テキストファイルには文字コードで表現可能な全ての種類の文字が出現し得るわけではなく、収集されるセンサデータの性質上、その一部の種類の文字のみが出現し得る。そこで、圧縮部１２６は、テキストファイルに出現し得る文字の種類が限定されることを利用して、文字コードよりもビット数の少ない圧縮符号を用いてテキストファイルを圧縮する。第２の実施の形態では、圧縮符号と文字コードとを対応付けた符号表を予め作成して圧縮部１２６に設定しておき、圧縮部１２６はその符号表を参照してテキストファイルから圧縮ファイルを生成する。
【００４７】
送信部１２７は、所定周期（例えば、１週間周期）で、圧縮ファイル記憶部１２２に記憶された圧縮ファイルをサーバ２００に送信する。
サーバ２００は、圧縮ファイル記憶部２２１、テキストファイル記憶部２２２、受信部２２３、復号部２２４およびデータ処理部２２５を有する。圧縮ファイル記憶部２２１とテキストファイル記憶部２２２は、ＲＡＭまたはＨＤＤを用いて実装される。受信部２２３は、ＣＰＵと通信インタフェースとプログラムを用いて実装される。復号部２２４とデータ処理部２２５は、ＣＰＵとプログラムを用いて実装される。
【００４８】
圧縮ファイル記憶部２２１は、圧縮ファイルを記憶する。圧縮ファイルは受信部２２３により格納される。テキストファイル記憶部２２２は、テキストファイルを記憶する。テキストファイルは復号部２２４により生成される。
【００４９】
受信部２２３は、ゲートウェイ１００から圧縮ファイルを受信する。受信部２２３は、受信した圧縮ファイルを圧縮ファイル記憶部２２１に格納する。
復号部２２４は、圧縮ファイル記憶部２２１に記憶された圧縮ファイルを復号（「復元」や「伸張」と言うこともある）して圧縮前のテキストファイルを生成し、テキストファイル記憶部２２２に格納する。第２の実施の形態では、圧縮符号と文字コードとを対応付けた符号表を予め作成して復号部２２４に設定しておき、復号部２２４はその符号表を参照して圧縮ファイルからテキストファイルを生成する。復号部２２４が参照する符号表は、ゲートウェイ１００の圧縮部１２６が参照する符号表と同一である。
【００５０】
データ処理部２２５は、テキストファイル記憶部２２２に記憶されたテキストファイルを利用したデータ処理を行う。例えば、データ処理部２２５は、センサ３１〜３３によって測定された物理量を分析し、分析結果を示すレポートをシステム管理者に提供する。また、例えば、データ処理部２２５は、分析結果に基づいて各種の電子機器を制御する。
【００５１】
次に、圧縮部１２６が行うロスレス圧縮について説明する。
図５は、符号表の第１の例を示す図である。
ここでは、テキストファイルに出現し得る文字が、ＡＳＣＩＩコードの文字のうち、数字（０〜９）、改行を示すラインフィード（ＬＦ）とキャリッジリターン（ＣＲ）、マイナス（−）、カンマ（，）、ピリオド（．）および空白（ＳＰ）の１６種類であるとする。この１６種類の文字によって数値データを表現し得る。符号表１３１は、この１６種類の文字を含み得るテキストファイルの圧縮に用いる符号表の例である。
【００５２】
符号表１３１は、４ビットの圧縮符号と８ビットの文字コードとを対応付けている。１６種類の文字は３ビット以下では識別不能であり４ビット以上で識別可能であるため、圧縮符号のビット数ｎを４としている。一般に、Ａ種類（Ａは２以上の整数）の文字に対しては、ｌｏｇ2Ａ以上の整数のうち最小の整数をビット数ｎとして使用すればよい。
【００５３】
符号表１３１は、復号の一意性を確保するため、１つの圧縮符号に対して高々１つの文字コードを対応付ける。符号表１３１では、原則として文字コードの下位ｎビットを圧縮符号として使用する。ただし、異なる文字コードが同一の下位ｎビットをもつことがある。その場合、衝突する２つの文字コードのうちの一方を、何れの文字コードの下位ｎビットとしても使用されない空き圧縮符号に振り分ける振り分け処理を行う。符号表１３１は、ゲートウェイ１００の圧縮部１２６が自動的に生成することも可能である。
【００５４】
ＡＳＣＩＩコードでは、「０」は０ｘ３０（０ｘは１６進数表現であることを示す）、「１」は０ｘ３１、「２」は０ｘ３２、「３」は０ｘ３３、「４」は０ｘ３４、「５」は０ｘ３５、「６」は０ｘ３６、「７」は０ｘ３７、「８」は０ｘ３８、「９」は０ｘ３９と表現される。また、ＬＦは０ｘ０Ａ、ＳＰは０ｘ２０、「，」は０ｘ２Ｃ、「−」は０ｘ２Ｄ、「．」は０ｘ２Ｅ、ＣＲは０ｘ０Ｄと表現される。
【００５５】
１６種類の文字のうち「０」、「−」、ＳＰおよびＣＲ以外の１２種類の文字は、下位４ビットが他の文字と重複しない。そこで、これら１２種類の文字には下位４ビットを圧縮符号として対応付けている。一方、「０」とＳＰは共に下位４ビットが００００（０ｘ０）である。そこで、「０」には００００（０ｘ０）を対応付け、ＳＰには空き圧縮符号である１０１１（０ｘＢ）を対応付けている。また、「−」とＣＲは共に下位４ビットが１１０１（０ｘＤ）である。そこで、「−」には１１０１（０ｘＤ）を対応付け、ＣＲには空き圧縮符号である１１１１（０ｘＦ）を対応付けている。
【００５６】
図６は、テキストデータの第１の圧縮例を示す図である。
データ１３２ａは、圧縮対象の文字列を示す。データ１３２ｂは、データ１３２ａが示す文字列を文字コードで表現したものである。符号表１３１を用いてデータ１３２ｂを圧縮する場合、圧縮部１２６は、符号表１３１から振り分け文字を検出する。振り分け文字は、文字コードの下位ｎビットを圧縮符号として使用していない文字である。
【００５７】
圧縮部１２６は、データ１３２ｂから振り分け文字を検索する。符号表１３１では振り分け文字はＳＰ（０ｘ２０）とＣＲ（０ｘ０Ｄ）であり、データ１３２ｂからは図６に示すように１１個のＳＰと２個のＣＲが検索される。圧縮部１２６は、検索された振り分け文字の下位ｎビットを、符号表１３１において当該振り分け文字に対応付けられた圧縮符号に置換する。ここでは、ＳＰを示す文字コード０ｘ２０が０ｘ２Ｂに置換され、ＣＲを示す文字コード０ｘ０Ｄが０ｘ０Ｆに置換される。
【００５８】
これにより、データ１３２ｂがデータ１３２ｃに変換される。そして、圧縮部１２６は、データ１３２ｃに含まれる文字コードそれぞれから、下位ｎビット以外の残りの上位ビットを削除する。ここでは、各文字コードの下位４ビットを残して上位４ビットを削除する。これにより、圧縮データを示すデータ１３２ｄが生成される。文字コードが８ビットで圧縮符号が４ビットである場合、圧縮率は５０％である。よって、データ１３２ｄのサイズはデータ１３２ｂの４／８＝５０％である。なお、文字コードが８ビットで圧縮符号が５ビットである場合、圧縮率は５／８＝６２．５％である。
【００５９】
データ１３２ｄを復号する場合、復号部２２４は、データ１３２ｄから４ビットの圧縮符号を１つずつ抽出し、抽出した圧縮符号に対応する文字コードを符号表１３１から検索する。これにより、データ１３２ｄからデータ１３２ｂを復元することができる。
【００６０】
次に、圧縮部１２６および復号部２２４について説明する。
図７は、第２の実施の形態の圧縮部の機能例を示すブロック図である。
圧縮部１２６は、符号表記憶部１４１、入力バッファ１４２、下位ビット置換部１４３、上位ビット削除部１４４および出力バッファ１４５を有する。
【００６１】
符号表記憶部１４１は、符号表を記憶する。第２の実施の形態では、符号表はデータ圧縮毎に生成されるのではなくデータ圧縮前に用意されている。符号表は、予めユーザにより作成されて符号表記憶部１４１に格納されてもよいし、テキストファイルに出現し得る文字を示す情報から圧縮部１２６が自動的に生成してもよい。
【００６２】
入力バッファ１４２は、テキストファイルを記憶するバッファメモリ領域である。テキストファイル記憶部１２１から入力バッファ１４２にテキストファイルが読み込まれる。
下位ビット置換部１４３は、符号表記憶部１４１に記憶された符号表を参照して、入力バッファ１４２に記憶されたテキストファイルを書き換える。下位ビット置換部１４３は、文字コードの下位ｎビットと圧縮符号とが一致しない振り分け文字を符号表から検出し、振り分け文字を入力バッファ１４２から検索する。下位ビット置換部１４３は、検索された振り分け文字の下位ｎビットを圧縮符号に置換する。
【００６３】
上位ビット削除部１４４は、下位ビット置換部１４３によってテキストファイルが書き換えられた後、入力バッファ１４２から１つずつ文字コードを抽出する。上位ビット削除部１４４は、抽出した文字コードの上位ビットを削除して下位ｎビットを出力バッファ１４５に挿入する。例えば、入力バッファ１４２の先頭から８ビットを読み出し、上位４ビットを削除して下位４ビットのみを出力バッファ１４５に挿入する。
【００６４】
出力バッファ１４５は、圧縮ファイルを記憶するバッファメモリ領域である。上位ビット削除部１４４によって入力バッファ１４２のテキストファイルの全体が処理されると、出力バッファ１４５には圧縮ファイルが形成されている。出力バッファ１４５から圧縮ファイル記憶部１２２に圧縮ファイルが書き出される。
【００６５】
図８は、第２の実施の形態の復号部の機能例を示すブロック図である。
復号部２２４は、符号表記憶部２４１、入力バッファ２４２、文字復元部２４３および出力バッファ２４４を有する。
【００６６】
符号表記憶部２４１は、符号表を記憶する。第２の実施の形態では、圧縮部１２６の符号表記憶部１４１と同じ符号表が予め符号表記憶部２４１に格納される。
入力バッファ２４２は、圧縮ファイルを記憶するバッファメモリ領域である。圧縮ファイル記憶部２２１から入力バッファ２４２に圧縮ファイルが読み込まれる。
【００６７】
文字復元部２４３は、符号表記憶部２４１に記憶された符号表を参照して、入力バッファ２４２に記憶された圧縮ファイルをテキストファイルに復元する。文字復元部２４３は、入力バッファ２４２から１つずつ圧縮符号を抽出する。文字復元部２４３は、抽出した圧縮符号に対応する文字コードを符号表から検索し、出力バッファ２４４に文字コードを挿入する。文字コードの下位ｎビットが圧縮符号として使用されている文字については、圧縮符号に対して上位ビットを補完することで文字コードを復元することもできる。例えば、入力バッファ２４２の先頭から４ビットを読み出し、読み出した４ビットに対応する８ビットの文字コードを検索して出力バッファ２４４に挿入する。
【００６８】
出力バッファ２４４は、テキストファイルを記憶するバッファメモリ領域である。文字復元部２４３によって入力バッファ２４２の圧縮ファイルの全体が処理されると、出力バッファ２４４にはテキストファイルが形成されている。出力バッファ２４４からテキストファイル記憶部２２２にテキストファイルが書き出される。
【００６９】
図９は、第２の実施の形態の圧縮処理の手順例を示すフローチャートである。
（Ｓ１０）圧縮部１２６は、テキストファイルを入力バッファ１４２に格納する。
（Ｓ１１）下位ビット置換部１４３は、符号表記憶部１４１に記憶された符号表から、文字コードの下位ｎビットが圧縮符号と異なる振り分け文字を検出する。
【００７０】
（Ｓ１２）下位ビット置換部１４３は、入力バッファ１４２からステップＳ１１の振り分け文字を検索する。下位ビット置換部１４３は、検索した振り分け文字の下位ｎビットを、当該振り分け文字に対応付けられた圧縮符号に置換する。
【００７１】
（Ｓ１３）上位ビット削除部１４４は、入力バッファ１４２の先頭側から１文字に相当する文字コード（例えば、８ビット）を抽出する。
（Ｓ１４）上位ビット削除部１４４は、ステップＳ１３の文字コードのうち下位ｎビットを除く上位ビット（例えば、上位４ビット）を削除する。上位ビット削除部１４４は、残った下位ｎビットを出力バッファ１４５に挿入する。
【００７２】
（Ｓ１５）上位ビット削除部１４４は、入力バッファ１４２が空であるか判断する。入力バッファ１４２が空である場合はステップＳ１６に処理が進み、入力バッファ１４２が空でない場合はステップＳ１３に処理が進む。
【００７３】
（Ｓ１６）圧縮部１２６は、出力バッファ１４５から圧縮ファイルを出力する。
図１０は、第２の実施の形態の復号処理の手順例を示すフローチャートである。
（Ｓ２０）復号部２２４は、圧縮ファイルを入力バッファ２４２に格納する。
【００７４】
（Ｓ２１）文字復元部２４３は、入力バッファ２４２の先頭側から１文字に対応するｎビットの圧縮符号（例えば、４ビット）を抽出する。
（Ｓ２２）文字復元部２４３は、符号表記憶部２４１に記憶された符号表から、ステップＳ２１の圧縮符号に対応付けられた文字コードを検索する。文字復元部２４３は、検索された文字コード（例えば、８ビット）を出力バッファ２４４に挿入する。
【００７５】
なお、圧縮ファイルからｎビットの圧縮符号を抽出して文字コードに変換する内部処理としては様々な方法が考えられる。例えば、圧縮ファイルから１回に８ビットを読み出し、８ビットを上位４ビットと下位４ビットに分割し、４ビットのビット列それぞれを文字コードに変換する方法が考えられる。また、例えば、圧縮ファイルから１回に３２ビットを読み出し、マスクデータとシフト演算を用いて３２ビットの中から所望の位置の４ビットを抽出し、抽出した４ビットを文字コードに変換する方法が考えられる。
【００７６】
（Ｓ２３）文字復元部２４３は、入力バッファ２４２が空であるか判断する。入力バッファ２４２が空である場合はステップＳ２４に処理が進み、入力バッファ２４２が空でない場合はステップＳ２１に処理が進む。
【００７７】
（Ｓ２４）復号部２２４は、出力バッファ２４４からテキストファイルを出力する。
次に、テキストファイルから圧縮ファイルへの変換例を説明する。
図１１は、テキストファイルの第１の例を示す図である。
【００７８】
テキストファイル１３３は、テキストファイル記憶部１２１に記憶される。テキストファイル１３３は、カンマ区切り形式（ＣＳＶ形式）の複数のレコードを含む。１つのレコードは、センサＩＤ、日付、時刻および測定値を示す文字列を含む。
【００７９】
センサＩＤは、センサデータを送信したセンサを識別する識別番号であり、集約部１２５によって付加される。センサ３１の識別番号は１であり、センサ３２の識別番号が２であり、センサ３３の識別番号は３である。日付は、ゲートウェイ１００がセンサデータを受信した年月日を示す８桁の数字であり、集約部１２５によって付加される。時刻は、ゲートウェイ１００がセンサデータを受信した時分秒を示す文字列であり、集約部１２５によって付加される。時刻は、時を示す１桁または２桁の数字、時と分を区切るコロン、分を示す２桁の数字、分と秒を区切るコロン、および、秒を示す２桁の数字を含む。測定値は、温度や水量などの物理量を示す数値であり、センサデータに含まれる。測定値は、正の整数または正の小数であり、任意の桁数の数字と小数点を含み得る。
【００８０】
テキストファイル１３３には、数字（０〜９）、ピリオド（．）、カンマ（，）、コロン（：）、空白（ＳＰ）およびラインフィード（ＬＦ）の１５種類の文字が出現し得る。
図１２は、符号表の第２の例を示す図である。
【００８１】
符号表１３４は、符号表記憶部１４１および符号表記憶部２４１に記憶される。符号表１３４は、４ビットの圧縮符号と８ビットの文字コードとを対応付けている。テキストファイル１３３に出現し得る文字が１５種類であるため、圧縮符号は４ビットである。
【００８２】
１５種類の文字のうち「０」、「：」、ＳＰおよびＬＦ以外の１１種類の文字は、下位４ビットが他の文字と重複していない。よって、これら１１種類の文字に対しては下位４ビットを圧縮符号として対応付けている。これに対し、「０」とＳＰは共に下位４ビットが００００（０ｘ０）である。そこで、「０」に対しては圧縮符号００００（０ｘ０）を対応付け、ＳＰに対しては空いている圧縮符号１０１１（０ｘＢ）を対応付けている。また、「：」とＬＦは共に下位４ビットが１０１０（０ｘＡ）である。そこで、「：」に対しては圧縮符号１０１０（０ｘＡ）を対応付け、ＬＦに対しては空いている圧縮符号１１０１（０ｘＤ）を対応付けている。なお、圧縮符号１１１１は使用されない。符号表１３４を使用すると、テキストファイル１３３が圧縮率５０％で圧縮される。
【００８３】
図１３は、テキストデータの第２の圧縮例を示す図である。
データ１３５ａは、テキストファイル１３３に含まれる文字列である。データ１３５ｂは、データ１３５ａが示す文字列を文字コードで表現したものである。符号表１３４を用いてデータ１３５ｂを圧縮する場合、圧縮部１２６は、符号表１３４から振り分け文字としてＳＰ（０ｘ２０）とＬＦ（０ｘ０Ａ）を検出する。
【００８４】
圧縮部１２６は、データ１３５ｂから３個のＳＰと１個のＬＦを検索する。圧縮部１２６は、ＳＰ（０ｘ２０）の下位４ビットを圧縮符号１０１１（０ｘＢ）に置換して０ｘ２Ｂに変換し、ＬＦ（０ｘ０Ａ）の下位４ビットを圧縮符号１１０１（０ｘＤ）に置換して０ｘ０Ｄに変換する。これにより、データ１３５ｂがデータ１３５ｃに変換される。圧縮部１２６は、データ１３５ｃに含まれる文字コード相当の８ビットそれぞれから上位４ビットを削除する。これにより、圧縮ファイルに含まれるデータ１３５ｄが生成される。データ１３５ｄのサイズはデータ１３５ｂの５０％である。
【００８５】
第２の実施の形態の情報処理システムによれば、テキストファイルに出現し得る文字の文字コードと文字コードより短い圧縮符号とを対応付けた符号表が作成される。符号表では、原則として文字コードの下位ビットが圧縮符号として使用され、下位ビットの衝突が生じる文字については衝突を解消するように振り分けが行われる。テキストファイルに含まれる文字のうち振り分け文字について下位ビットが圧縮符号に置換され、テキストファイルから上位ビットを削除することで圧縮ファイルが生成される。
【００８６】
これにより、テキストファイルのロスレス圧縮を高速化することができる。特に、繰り返し回数が多いバイトペア符号化と比べて、テキストファイル全体を走査する回数が減少し圧縮時間を短縮することができる。また、文字コードの上位ビットを削除するという簡便的方法によってロスレス圧縮が可能となる。また、テキストファイルに出現し得る文字の種類が限定されることを利用して、圧縮率を改善することができる。
【００８７】
［第３の実施の形態］
次に、第３の実施の形態を説明する。第２の実施の形態との違いを中心に説明し、第２の実施の形態と同様の内容については説明を省略することがある。
【００８８】
第２の実施の形態では固定的な符号表を使用したのに対し、第３の実施の形態ではデータ圧縮時に動的に符号表を生成する。第３の実施の形態の情報処理システムは、図２〜４に示した第２の実施の形態の情報処理システムと同様の構成によって実現できる。ただし、第３の実施の形態では、圧縮部１２６に代えて後述する圧縮部１２８を使用し、復号部２２４に代えて後述する復号部２２６を使用する。
【００８９】
図１４は、第３の実施の形態の圧縮部の機能例を示すブロック図である。
圧縮部１２８は、圧縮部１２６の符号表記憶部１４１、入力バッファ１４２、下位ビット置換部１４３、上位ビット削除部１４４および出力バッファ１４５に加えて、符号表生成部１４６および符号表出力部１４７を有する。
【００９０】
符号表生成部１４６は、テキストファイルの圧縮を開始するとき、テキストファイルから符号表を生成して符号表記憶部１４１に格納する。符号表生成部１４６は、下位ビット置換部１４３によって書き換えられる前に、入力バッファ１４２に記憶されたテキストファイルに出現する文字の種類を検出する。符号表生成部１４６は、検出した文字それぞれの文字コードから下位ｎビットを抽出し、原則として下位ｎビットを当該文字の圧縮符号として採用する。ただし、下位ｎビットが同一である２以上の文字が存在する場合、１つ文字を残して空き圧縮符号に振り分けることで圧縮符号の衝突を解消する。
【００９１】
圧縮符号のビット数ｎは、予めユーザが決定して符号表生成部１４６に設定してもよいし、符号表生成部１４６が決定してもよい。圧縮対象のテキストファイルにＡ種類の文字が出現する場合、ビット数ｎはｌｏｇ2Ａ以上の最小の整数とすることが好ましい。例えば、テキストファイルに１５種類の文字が出現する場合はｎ＝４とし、テキストファイルに２３種類の文字が出現する場合はｎ＝５とする。なお、生成される符号表は、今回の圧縮対象のテキストファイルに出現しない文字を含まなくてよい。異なるテキストファイルに対して異なる符号表が生成されることがあり、また、異なるテキストファイルに対してビット数の異なる圧縮符号が使用されることがある。
【００９２】
符号表出力部１４７は、上位ビット削除部１４４が出力バッファ１４５に圧縮符号を挿入し始める前に、符号表記憶部１４１に記憶された符号表を出力バッファ１４５に挿入する。すなわち、符号表出力部１４７は、圧縮ファイルの先頭に符号表を挿入する。符号表は、圧縮符号と文字コードとを対応付けた情報である。
【００９３】
複数の文字コードが圧縮符号の順に並んでいる場合には、符号表の先頭からのオフセット（相対アドレス）によって圧縮符号を特定することができるため、圧縮符号そのものが符号表に含まれていなくてもよい。すなわち、符号表は複数の文字コードを圧縮符号の順に並べたリストであってもよい。出力バッファ１４５に符号表を挿入するにあたり、符号表出力部１４７は、所定の圧縮アルゴリズムによって符号表を圧縮してもよい。
【００９４】
図１５は、第３の実施の形態の復号部の機能例を示すブロック図である。
復号部２２６は、復号部２２４の符号表記憶部２４１、入力バッファ２４２、文字復元部２４３および出力バッファ２４４に加えて、符号表抽出部２４５を有する。
【００９５】
符号表抽出部２４５は、圧縮ファイルの復号を開始するとき、圧縮ファイルから符号表を抽出して符号表記憶部２４１に格納する。入力バッファ２４２に記憶された圧縮ファイルの先頭には、圧縮部１２８によって生成された符号表が挿入されている。符号表抽出部２４５は、文字復元部２４３が圧縮符号を抽出し始める前に、入力バッファ２４２の先頭側から符号表を抽出する。圧縮ファイルに挿入された符号表が圧縮されている場合、符号表抽出部２４５は、所定の復号アルゴリズムによって符号表を復元してもよい。また、符号表抽出部２４５は、符号表を加工して符号表記憶部２４１に格納してもよい。
【００９６】
図１６は、第３の実施の形態の圧縮処理の手順例を示すフローチャートである。
（Ｓ３０）圧縮部１２８は、テキストファイルを入力バッファ１４２に格納する。
（Ｓ３１）符号表生成部１４６は、入力バッファ１４２に記憶されたテキストファイルを走査し、テキストファイルに出現する文字の種類（異なる複数の文字）を検出する。
【００９７】
（Ｓ３２）符号表生成部１４６は、ステップＳ３１で検出した異なる複数の文字それぞれの文字コードの下位ｎビットを抽出する。このとき、符号表生成部１４６は、固定のビット数ｎが予め指定されている場合には指定されたビット数を使用する。一方、符号表生成部１４６は、ビット数ｎが指定されていない場合には、ステップＳ３１で検出した文字の種類の数に基づいてビット数ｎを決定する。例えば、Ａ種類の文字が検出された場合、ｌｏｇ2Ａ以上の最小の整数をビット数ｎとして使用する。
【００９８】
（Ｓ３３）符号表生成部１４６は、複数の種類の文字の間で下位ｎビットの重複を判定する。符号表生成部１４６は、下位ｎビットが他の文字と重複しない文字には下位ｎビットを圧縮符号として対応付ける。一方、符号表生成部１４６は、下位ｎビットが重複する２以上の文字については、１つの文字に下位ｎビットを圧縮符号として対応付け、他の文字には空き圧縮符号を対応付ける振り分け処理を行う。符号表生成部１４６は、圧縮符号と文字コードとを対応付けた符号表を生成して符号表記憶部１４１に格納する。
【００９９】
（Ｓ３４）下位ビット置換部１４３は、符号表記憶部１４１に記憶された符号表から、文字コードの下位ｎビットが圧縮符号と異なる振り分け文字を検索する。ただし、下位ビット置換部１４３は、振り分け文字の情報を符号表生成部１４６から取得してもよい。下位ビット置換部１４３は、入力バッファ１４２から振り分け文字を検索し、検索した振り分け文字の下位ｎビットを当該振り分け文字に対応付けられた圧縮符号に置換する。
【０１００】
（Ｓ３５）符号表出力部１４７は、符号表記憶部１４１に記憶された符号表を出力バッファ１４５に挿入する。このとき、符号表出力部１４７は、符号表記憶部１４１に記憶された符号表を加工してもよいし圧縮してもよい。
【０１０１】
（Ｓ３６）上位ビット削除部１４４は、入力バッファ１４２の先頭側から１文字に相当する文字コード（例えば、８ビット）を抽出する。
（Ｓ３７）上位ビット削除部１４４は、ステップＳ３６の文字コードのうち下位ｎビットを除く上位ビット（例えば、上位４ビットや上位３ビット）を削除する。上位ビット削除部１４４は、残った下位ｎビットを出力バッファ１４５に挿入する。
【０１０２】
（Ｓ３８）上位ビット削除部１４４は、入力バッファ１４２が空であるか判断する。入力バッファ１４２が空である場合はステップＳ３９に処理が進み、入力バッファ１４２が空でない場合はステップＳ３６に処理が進む。
【０１０３】
（Ｓ３９）圧縮部１２８は、出力バッファ１４５から圧縮ファイルを出力する。
図１７は、第３の実施の形態の復号処理の手順例を示すフローチャートである。
（Ｓ４０）復号部２２６は、圧縮ファイルを入力バッファ２４２に格納する。
【０１０４】
（Ｓ４１）符号表抽出部２４５は、入力バッファ２４２の先頭側から符号表を抽出して符号表記憶部２４１に格納する。このとき、符号表抽出部２４５は、圧縮ファイルに含まれる符号表を復号してもよいし加工してもよい。
【０１０５】
（Ｓ４２）文字復元部２４３は、入力バッファ２４２の先頭側から１文字に対応するｎビットの圧縮符号（例えば、４ビットや５ビット）を抽出する。
（Ｓ４３）文字復元部２４３は、符号表記憶部２４１に記憶された符号表から、ステップＳ４２の圧縮符号に対応付けられた文字コードを検索する。文字復元部２４３は、検索された文字コード（例えば、８ビット）を出力バッファ２４４に挿入する。
【０１０６】
（Ｓ４４）文字復元部２４３は、入力バッファ２４２が空であるか判断する。入力バッファ２４２が空である場合はステップＳ４５に処理が進み、入力バッファ２４２が空でない場合はステップＳ４２に処理が進む。
【０１０７】
（Ｓ４５）復号部２２６は、出力バッファ２４４からテキストファイルを出力する。
次に、テキストファイルから圧縮ファイルへの変換例を説明する。
圧縮部１２８は、図１１のテキストファイル１３３を圧縮するときは、テキストファイル１３３から図１２の符号表１３４を自動的に生成することができる。この場合、圧縮部１２８は、第２の実施の形態と同様に図１３のようにしてテキストファイル１３３を圧縮ファイルに変換する。ただし、圧縮部１２８は、圧縮ファイルの先頭に符号表１３４を挿入する。これに対し、圧縮部１２８は、他のテキストファイルを圧縮するときは、当該他のテキストファイルに出現する文字の種類に応じて他の符号表を生成することがある。また、圧縮部１２８は、圧縮符号の長さを５ビットにすることもできる。以下では、５ビットの圧縮符号を用いてテキストファイルを圧縮する例を説明する。
【０１０８】
図１８は、テキストファイルの第２の例を示す図である。
テキストファイル１３６は、テキストファイル記憶部１２１に記憶される。テキストファイル１３６は、カンマ区切り形式（ＣＳＶ形式）の複数のレコードを含む。１つのレコードは、センサＩＤ、日付、時刻および測定値を示す文字列を含む。
【０１０９】
センサＩＤ、日付および時刻は、ゲートウェイ１００の集約部１２５によって付加される情報であり、図１１のテキストファイル１３３と同様である。センサ３１，３２から取得される測定値はテキストファイル１３３と同様である。一方、テキストファイル１３６では、センサ３３から取得される測定値のフォーマットがテキストファイル１３３と異なる。第３の実施の形態では、センサ３３から取得される測定値には、測定された水量を示す数値に加えて測定日時を示す情報が含まれている。
【０１１０】
センサ３３の測定日を示す文字列は、日を示す２桁の数字、日と月を区切るスラッシュ（／）、月名を示すアルファベット、月と年を区切るスラッシュ、および、年を示す４桁の数字を含む。月名は、「Ｊａｎ．」、「Ｆｅｂ．」、「Ｍａｒ．」、「Ａｐｒ．」、「Ｍａｙ」、「Ｊｕｎｅ」、「Ｊｕｌｙ」、「Ａｕｇ．」、「Ｓｅｐｔ．」、「Ｏｃｔ．」、「Ｎｏｖ．」および「Ｄｅｃ．」の何れかである。センサ３３の測定時刻を示す文字列は、時を示す１桁または２桁の数字、時と分を区切るコロン（：）、分を示す２桁の数字、分と秒を区切るコロン、および、秒を示す２桁の数字を含む。
【０１１１】
テキストファイル１３６に出現し得る文字のうちアルファベット以外のものは、数字（０〜９）、ピリオド（．）、カンマ（，）、コロン（：）、スラッシュ（／）、空白（ＳＰ）およびラインフィード（ＬＦ）の１６種類である。テキストファイル１３６に出現し得る文字のうちアルファベットは、上記の月名に使用されるものであり、Ａ，ａ，ｂ，ｃ，Ｄ，ｅ，Ｆ，ｇ，Ｊ，Ｉ，Ｍ，Ｎ，ｎ，ｏ，Ｏ，ｐ，ｒ，Ｓ，ｔ，ｕ，ｖ，ｙの２２種類である。よって、テキストファイル１３６には３８種類の文字が出現し得る。
【０１１２】
ただし、１週間に１つのテキストファイルが生成される場合には、１つのテキストファイルに出現する異なる月名は高々２個であるため、１つのテキストファイルの中に同時に出現する文字は３８種類よりも十分に少ない。出現するアルファベットの種類が最も多くなるのは、テキストファイルの生成前１週間が５月と６月にまたがる場合と、生成前１週間が８月と９月にまたがる場合である。前者の場合は出現するアルファベットはａ，ｅ，Ｊ，Ｍ，ｎ，ｕ，ｙの７種類であり、後者の場合は出現するアルファベットはＡ，ｅ，ｇ，ｐ，Ｓ，ｔ，ｕの７種類である。よって、テキストファイルの生成周期が１週間である場合、当該テキストファイルに出現する文字の種類の数は最大で２３である。ただし、出現する文字の種類は、テキストファイルの生成時期によって変わる。
【０１１３】
図１９は、符号表の第３の例を示す図である。
符号表１３７は、符号表生成部１４６によってテキストファイル１３６から生成され、符号表記憶部１４１および符号表記憶部２４１に記憶される。符号表１３７は、５ビットの圧縮符号と８ビットの文字コードとを対応付けている。テキストファイルに出現し得る異なる文字の総数は３８個であるものの、同時に出現する異なる文字の数は最大でその中の２３個である。よって、圧縮対象のテキストファイル毎に符号表を生成すれば、圧縮符号の長さを６ビットではなく５ビットに抑えることができる。
【０１１４】
このように、圧縮対象のテキストファイルによって出現する文字の種類が変わる場合には、固定の符号表を使用するよりもテキストファイル毎に符号表を生成した方が圧縮率が改善することがある。一方で、圧縮対象のテキストファイルが異なっても出現する文字の種類があまり変わらない場合には、第２の実施の形態のように固定の符号表を使用することで、圧縮側から復号側に符号表を送信することを省略できる。
【０１１５】
ここでは、テキストファイル１３６に記載された月名は「Ｊｕｎｅ」のみである場合を考える。その場合、テキストファイル１３６には２０種類の文字が出現する。符号表１３７は、５ビットで表現された３２通りの圧縮符号と２０種類の文字とを対応付ける。２０種類の文字のうち「Ｊ」、「ｎ」、「ｕ」、「．」、「５」およびＬＦ以外の１４種類の文字は、下位５ビットが他の文字と重複していない。よって、これら１４種類の文字に対しては下位５ビットを圧縮符号として対応付けている。
【０１１６】
これに対し、「Ｊ」とＬＦは共に下位５ビットが０１０１０である。そこで、ＬＦに対しては圧縮符号０１０１０を対応付け、「Ｊ」に対しては空いている圧縮符号００００１を対応付けている。また、「ｎ」と「．」は共に下位５ビットが０１１１０である。そこで、「．」に対しては圧縮符号０１１１０を対応付け、「ｎ」に対しては空いている圧縮符号０００１０を対応付けている。また、「ｕ」と「５」は共に下位５ビットが１０１０１である。そこで、「５」に対しては圧縮符号１０１０１を対応付け、「ｕ」に対しては空いている圧縮符号０００１１を対応付けている。符号表１３７を使用すると、テキストファイル１３６が圧縮率５／８＝６２．５％で圧縮される。
【０１１７】
図２０は、テキストデータの第３の圧縮例を示す図である。
データ１３８ａは、テキストファイル１３６に含まれる文字列である。データ１３８ｂは、データ１３８ａが示す文字列を文字コードで表現したものである。符号表１３７を用いてデータ１３８ｂを圧縮する場合、圧縮部１２８は、符号表１３７から振り分け文字として「Ｊ」（０ｘ４Ａ）と「ｎ」（０ｘ６Ｅ）と「ｕ」（０ｘ７５）を検出する。
【０１１８】
圧縮部１２８は、データ１３８ｂから１個の「Ｊ」と１個の「ｕ」と１個の「ｎ」を検索する。圧縮部１２８は、「Ｊ」（０ｘ４Ａ）の下位５ビットを圧縮符号００００１に置換して０ｘ４１に変換する。また、圧縮部１２８は、「ｕ」（０ｘ７５）の下位５ビットを圧縮符号０００１１に置換して０ｘ６３に変換する。また、圧縮部１２８は、「ｎ」（０ｘ６Ｅ）の下位５ビットを圧縮符号０００１０に置換して０ｘ６２に変換する。
【０１１９】
これにより、データ１３８ｂがデータ１３８ｃに変換される。圧縮部１２８は、データ１３８ｃに含まれる文字コード相当の８ビットそれぞれから上位３ビットを削除して下位５ビットを残す。これにより、圧縮ファイルに含まれるデータ１３８ｄが生成される。データ１３８ｄのサイズはデータ１３８ｂの６２．５％である。
【０１２０】
第３の実施の形態の情報処理システムによれば、第２の実施の形態と同様の効果が得られる。更に、第３の実施の形態では、圧縮対象のテキストファイルに好適な符号表が圧縮時に生成される。よって、テキストファイルによって出現する文字の種類が変わる場合であっても、圧縮符号を短くでき圧縮率を改善することができる。
【符号の説明】
【０１２１】
１０  データ圧縮装置
１１  記憶部
１２  処理部
１３  符号表
１４ａ，１４ｂ，１４ｃ，１４ｄ，１４ｅ  圧縮符号
１５ａ，１５ｂ，１５ｃ，１５ｄ  文字
１６，１６ａ  被圧縮データ
１７  圧縮データ
【図１】
2019050531.tif 000003
【図２】
2019050531.tif 000004
【図３】
2019050531.tif 000005
【図４】
2019050531.tif 000006
【図５】
2019050531.tif 000007
【図６】
2019050531.tif 000008
【図７】
2019050531.tif 000009
【図８】
2019050531.tif 000010
【図９】
2019050531.tif 000011
【図１０】
2019050531.tif 000012
【図１１】
2019050531.tif 000013
【図１２】
2019050531.tif 000014
【図１３】
2019050531.tif 000015
【図１４】
2019050531.tif 000016
【図１５】
2019050531.tif 000017
【図１６】
2019050531.tif 000018
【図１７】
2019050531.tif 000019
【図１８】
2019050531.tif 000020
【図１９】
2019050531.tif 000021
【図２０】
2019050531.tif 000022