(57)【特許請求の範囲】
【請求項１】
コンピュータに、
可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別し、
前記タグ部分に含まれるタグそれぞれをタグバッファに格納し、格納したタグバッファの位置とタグのデータ長とを含むタグ内容に対応した第１の種類の符号にそれぞれ変換し、
前記地の文を、少なくとも前記入力文字データにおいて前記タグにより区切られる単位で第２の種類の符号に変換し、
前記第１の種類の符号それぞれ、および、前記第２の種類の符号それぞれを、前記入力文字データにおけるそれぞれの符号の変換前のタグまたは文字列の位置関係を維持した状態で出力する
処理を行わせることを特徴とする文字データ変換プログラム。
【請求項２】
前記第１の種類の符号に変換する処理は、前記タグ内容を、前記第１の種類の符号に対応させて所定の辞書に登録し、前記タグ内容に対応した第１の種類の符号に変換する
処理を行わせることを特徴とする請求項１に記載の文字データ変換プログラム。
【請求項３】
前記第１の種類の符号に変換する処理は、前記タグ内容に加えて、検索時に前記第１の種類の符号の特定に用いるタグの属性に対応した種別属性情報を、前記第１の種類の符号に対応させて所定の辞書に登録し、前記タグ内容に対応した第１の種類の符号に変換する
処理を行わせることを特徴とする請求項１に記載の文字データ変換プログラム。
【請求項４】
前記出力する処理は、前記地の文を符号化した前記第２の種類の符号に対し、それぞれの前記第２の種類の符号に対応する文字に付されたタグを変換した前記第１の種類の符号を付加して出力する
処理を行わせることを特徴とする請求項３に記載の文字データ変換プログラム。
【請求項５】
可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別する識別部と、
前記タグ部分に含まれるタグそれぞれをタグバッファに格納し、格納したタグバッファの位置とタグのデータ長とを含むタグ内容に対応した第１の種類の符号にそれぞれ変換する第１の変換部と、
前記地の文を、少なくとも前記入力文字データにおいて前記タグにより区切られる単位で第２の種類の符号に変換する第２の変換部と、
前記第１の種類の符号それぞれ、および、前記第２の種類の符号それぞれを、前記入力文字データにおけるそれぞれの符号の変換前のタグまたは文字列の位置関係を維持した状態で出力する出力部と、
を有することを特徴とする文字データ変換装置。
【請求項６】
コンピュータが、
可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別し、
前記タグ部分に含まれるタグそれぞれをタグバッファに格納し、格納したタグバッファの位置とタグのデータ長とを含むタグ内容に対応した第１の種類の符号にそれぞれ変換し、
前記地の文を、少なくとも前記入力文字データにおいて前記タグにより区切られる単位で第２の種類の符号に変換し、
前記第１の種類の符号それぞれ、および、前記第２の種類の符号それぞれを、前記入力文字データにおけるそれぞれの符号の変換前のタグまたは文字列の位置関係を維持した状態で出力する
各処理を実行することを特徴とする文字データ変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字データ変換プログラム等に関する。
【背景技術】
【０００２】
ＨＴＭＬ、ＸＭＬ等の構造化文書は、タグと文書内容（地の文）が混在するとともに、テキスト形式で表現される。この構造化文書に用いられるタグには、参照先等の可変部分を含むタグと、可変部分を含まないタグとの双方が存在する。ここで、可変部分を含むタグには、タグ全体が同一であるタグが少なく、可変部分を含まないタグは、限られた種類にとどまる。可変部分を含まないタグの一例として、＜ｔｉｔｌｅ＞＜／ｔｉｔｌｅ＞、＜ｂｏｄｙ＞＜／ｂｏｄｙ＞が挙げられる。
【０００３】
このようなタグと地の文が混在する文書の圧縮では、最長一致文字列探索によって符号の割り当てを行うＺＩＰ等のＬＺ７７系圧縮が知られている。
【０００４】
また、別の例では、可変部分を含まないタグを有する文書を圧縮する技術が知られている（例えば、特許文献１参照）。かかる技術では、例えば、データ圧縮装置は、文字列ストリームから識別したタグを分離してタグ情報として出力する。そして、データ圧縮装置は、タグが分離された文字列ストリームの位置に識別のためにタグ符号を配置し、配置されたタグ符号を含む文字列ストリームを符号化して符号ストリームを出力する。なお、分離されたタグ情報は、文字列ストリーム中の対応するタグ符号の位置を検索する際に用いられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１０１４４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の技術では、タグと地の文が混在する文書を圧縮する場合に、地の文の圧縮率が低下するという第１の問題がある。また、別の観点では、タグと地の文が混在する文書を圧縮する場合に、タグと文字列の位置関係が維持されないという第２の問題がある。
【０００７】
第１の問題について説明する。例えば、ＺＩＰの場合、文書を圧縮する装置は、スライド窓に地の文とタグを配置したうえで、最長一致文字列探索を行うため、最適な文字列がスライド窓から逸脱する。すなわち、スライド窓のサイズは予め設定されており、スライド窓内に格納されるデータがスライド窓のサイズを超えると、スライド窓内に先に格納されたデータが追い出される。したがって、タグと地の文が混在する文書におけるＬＺ７７系圧縮では、地の文の最長一致となる範囲が狭くなってしまう。つまり、タグと地の文が混在する文書におけるＬＺ７７系圧縮では、地の文の圧縮率が低下するという問題がある。
【０００８】
また、第２の問題について説明する。従来のデータ圧縮装置では、タグを符号化したタグ符号を文字列ストリームの位置に配置したうえで、タグ符号と地の文とを含む文字列ストリームを圧縮するので、タグと文字列の位置関係が維持されない。
【０００９】
１つの側面では、タグと地の文が混在する文書を圧縮する場合であっても、地の文の圧縮率を向上させることを目的とする。１つの側面では、タグと地の文が混在する文書を圧縮した状態で、地の文に対する、タグ付け状況を考慮した文字列の検索機能を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では、符号化プログラムは、コンピュータに、可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別し、前記タグ部分に含まれるタグそれぞれを、タグ内容に対応した第１の種類の符号にそれぞれ変換し、前記地の文を、少なくとも前記入力文字データにおいて前記タグにより区切られる単位で第２の種類の符号に変換し、前記第１の種類の符号それぞれ、および、前記第２の種類の符号それぞれを、前記入力文字データにおけるそれぞれの符号の変換前のタグまたは文字列の位置関係を維持した状態で出力する処理を行わせる。
【発明の効果】
【００１１】
１つの態様によれば、タグと地の文が混在する文書を圧縮する場合であっても、地の文の圧縮率を向上させることができる。また、タグと地の文が混在する文書を圧縮した状態で、地の文に対する、タグ付け状況を考慮した文字列の検索を行うことができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本実施例１に係る情報処理装置の圧縮処理の流れの一例を示す図である。
【図２】図２は、本実施例１に係る動的タグ辞書の一例を示す図である。
【図３】図３は、ビットフィルタの一例を示す図である。
【図４】図４は、圧縮ファイルのブロック構成例を示す図である。
【図５】図５は、本実施例１に係る情報処理装置の伸長処理の流れの一例を示す図である。
【図６】図６は、本実施例１に係る情報処理装置の構成を示す機能ブロック図である。
【図７】図７は、伸長用のケヤキ木のデータ構造の一例を示す図である。
【図８】図８は、本実施例１に係る圧縮部の構成の一例を示す機能ブロック図である。
【図９】図９は、本実施例１に係る伸長部の構成の一例を示す機能ブロック図である。
【図１０】図１０は、本実施例１に係る圧縮部の処理手順を示すフローチャートである。
【図１１】図１１は、本実施例１に係る伸長部の処理手順を示すフローチャートである。
【図１２】図１２は、本実施例２に係る情報処理装置の圧縮処理の流れの一例を示す図である。
【図１３】図１３は、本実施例２に係る動的タグ辞書の一例を示す図である。
【図１４】図１４は、本実施例２に係る情報処理装置の検索処理の流れの一例を示す図である。
【図１５】図１５は、本実施例２に係る情報処理装置の構成を示す機能ブロック図である。
【図１６】図１６は、本実施例２に係る検索部の構成の一例を示す機能ブロック図である。
【図１７】図１７は、本実施例２に係る検索部の処理手順を示すフローチャートである。
【図１８Ａ】図１８Ａは、本実施例３に係る情報処理装置の圧縮処理の流れの一例を示す図（１）である。
【図１８Ｂ】図１８Ｂは、本実施例３に係る情報処理装置の圧縮処理の流れの一例を示す図（２）である。
【図１９】図１９は、本実施例３に係る情報処理装置の検索処理の流れの一例を示す図である。
【図２０】図２０は、実施例１〜３の情報処理装置のハードウェア構成を示す図である。
【図２１】図２１は、コンピュータで動作するプログラムの構成例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する文字データ変換プログラム、文字データ変換装置および文字データ変換方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１４】
［圧縮処理の流れ］
まず、図１を参照して、実施例１に係る情報処理装置の圧縮処理について説明する。図１は、実施例１に係る情報処理装置の圧縮処理の流れの一例を示す図である。図１に示すように、ファイルＦ１は、圧縮対象のファイルであり、タグとタグ以外の地の文の文字列とが混在した文書である。
【００１５】
ここで、タグとは、開始記号‘＜’から始まり、終了記号‘＞’で終わる文字列を指し、可変部分を含まないタグ、可変部分を含むタグが含まれる。可変部分を含まないタグの一例として、＜ｔｉｔｌｅ＞＜／ｔｉｔｌｅ＞、＜ｂｏｄｙ＞＜／ｂｏｄｙ＞が挙げられる。可変部分を含むタグの一例として、アンカー名が異なる場合や属性の指定順序が異なる場合が挙げられる。例えば、ファイルＦ１には、「＜medical_effect  type＝“ac01”＞・・・＜side_effect  type＝“bf03”＞発熱＜/side_effect＞・・・」というデータが含まれる。このデータの中で、＜medical_effect  type＝“ac01”＞および＜side_effect  type＝“bf03”＞が可変部分を含むタグである。このデータの中で、「発熱」がタグ以外の地の文の文字列に対応する。
【００１６】
情報処理装置は、圧縮対象のファイルＦ１に記憶された文字データを記憶領域にロードする。情報処理装置は、記憶領域の先頭から文字列を抽出し、抽出した文字列がタグであるか否かを判定する。例えば、情報処理装置は、文字列の先頭文字がタグの開始記号‘＜’であるか否かを判定する。
【００１７】
情報処理装置は、文字列がタグである場合には、タグ全体を纏めて動的タグ辞書Ｔ０に登録し、動的タグ辞書Ｔ０に基づいて、登録したタグに対応する圧縮符号に圧縮する。
【００１８】
ここで、動的タグ辞書Ｔ０は、タグと動的に付された動的コードとを対応付けた辞書である。すなわち、情報処理装置は、タグ全体の文字列を登録し、登録した順に動的に付された動的コードを圧縮符号として割り当てる。なお、動的タグ辞書Ｔ０のデータ構造の一例は、後述する。
【００１９】
情報処理装置は、文字列がタグでない場合には、文字列を地の文としてビットフィルタＢ０に出力する。情報処理装置は、ビットフィルタＢ０と、出力された文字列とを比較して、出力された文字列がビットフィルタＢ０にヒットするか否かを判定する。情報処理装置は、文字列がビットフィルタＢ０にヒットした場合には、静的辞書に基づいて単語の文字列に対応する圧縮符号に変換する。なお、実施例では、文字列は、ビットフィルタＢ０にヒットするものとする。
【００２０】
ここで、ビットフィルタＢ０は、静的辞書を用いて圧縮する単語の文字列を特定するフィルタである。静的辞書は、文書毎に、単語の頻度に基づいて単語に対して圧縮符号を対応付ける辞書のことをいう。文書の一例として、圧縮対象のファイルが挙げられる。静的辞書には、それぞれの単語に対応する圧縮符号である静的コードがあらかじめ登録されている。なお、ビットフィルタＢ０のデータ構造の一例は、後述する。
【００２１】
情報処理装置は、動的タグ辞書Ｔ０に基づいた圧縮符号それぞれ、および、ビットフィルタＢ０に基づいた圧縮符号それぞれを、入力文字データにおけるそれぞれの圧縮符号の変換前のタグまたは地の文の位置関係を維持した状態で圧縮ファイルＦ２に出力する。
【００２２】
情報処理装置の圧縮対象のファイルＦ１の文字列「＜side_effect  type＝“bf03”＞・・・」を圧縮する場合の処理について説明する。
【００２３】
まず、情報処理装置は、文字列の先頭文字がタグの開始記号‘＜’であるか否かを判定する。図１の例では、文字列の先頭文字がタグの開始記号‘＜’であると判定される。このため、情報処理装置は、タグの文字列が出現された順に、タグの文字列を新たな動的コードｄ１に対応付けて動的タグ辞書Ｔ０に登録する。すなわち、情報処理装置は、タグの文字列「＜side_effect  type＝“bf03”＞」を纏めて新たな動的コードｄ１に対応付けて動的タグ辞書Ｔ０に登録する。
【００２４】
また、情報処理装置は、タグの文字列に対応付けられた動的タグ辞書Ｔ０の動的コードｄ１を圧縮符号として割り当てる。ここでは、タグの文字列「＜side_effect  type＝“bf03”＞」の圧縮符号として「Ｆ８０００１ｈ」が割り当てられる。そして、情報処理装置は、圧縮符号を、入力文字データにおける該圧縮符号の変換前のタグの位置関係を維持した状態で圧縮ファイルＦ２に出力する。
【００２５】
次に、情報処理装置が圧縮対象のファイルＦ１の文字列「発熱」を圧縮する場合の処理について説明する。
【００２６】
まず、情報処理装置は、文字列の先頭文字「発」がタグの開始記号‘＜’であるか否かを判定する。図１の例では、文字列の先頭文字がタグの開始記号‘＜’でないと判定される。このため、情報処理装置は、文字列「発熱」を地の文としてビットフィルタＢ０に出力する。情報処理装置は、ビットフィルタＢ０と、出力された文字列「発熱」とを比較して、出力された文字列「発熱」がビットフィルタＢ０にヒットするか否かを判定する。情報処理装置は、文字列がヒットフィルタＢ０にヒットするので、静的辞書に基づいて文字列「発熱」に対応する静的コードｄ２を圧縮符号として特定する。そして、情報処理装置は、ビットフィルタＢ０に基づいた圧縮符号の変換前の地の文の位置関係を維持した状態で圧縮ファイルＦ２に出力する。
【００２７】
［動的タグ辞書の一例］
図２は、本実施例１に係る動的タグ辞書の一例を示す図である。図２に示される動的タグ辞書Ｔ０は、タグバッファＴ１とアドレステーブルＴ２とを含む。タグバッファＴ１は、タグの文字列を記憶する。アドレステーブルＴ２は、動的コードと、格納位置と、データ長とを対応付けて保持する。動的コードは、あらかじめ定められた固定長の圧縮符号であり、タグの文字列が登録された順に割り当てられるコードである。ここでは、動的コードは、１６進数「Ｆ」で始まる固定長３バイトのコードである。格納位置は、タグバッファＴ１に格納されたタグの文字列の位置を示す。データ長は、タグバッファＴ１に格納されたタグの文字列の長さ（バイト長）を示す。
【００２８】
例えば、タグの文字列「＜side_effect  type＝“bf03”＞」に圧縮符号が割り当てられる場合について説明する。
【００２９】
情報処理装置は、タグの文字列「＜side_effect  type＝“bf03”＞」を纏めてタグバッファＴ１に格納する。情報処理装置は、タグの文字列を格納した格納位置および格納したデータ長をアドレステーブルＴ２に登録する。ここでは、情報処理装置は、格納位置として「２８」、データ長として「２５」をアドレステーブルＴ２に登録する。
【００３０】
情報処理装置は、タグの文字列に対応付けられたアドレステーブルＴ２の動的コードを圧縮符号として割り当てる。ここでは、情報処理装置は、タグの文字列「＜side_effect  type＝“bf03”＞」に対応付けられた動的コード「Ｆ８０００１ｈ」を圧縮符号として割り当てる。
【００３１】
［ビットフィルタの一例］
図３は、ビットフィルタの一例を示す図である。図３に示されるビットフィルタＢ０は、所定の文書の日本語一般単語のビットフィルタである。図３に示すように、ビットフィルタＢ０は、２グラムと、ビットマップと、ポインタと、単語文字列と、文字コード列長と、静的コードとを含んで対応付ける。
【００３２】
２グラムは、２文字の文字コード列を示す情報である。ビットマップは、２グラムの文字コード列に対応するビットマップを示す。例えば、「００ｈ００ｈ」に対応するビットマップは「０＿０＿０＿０＿０」となる。ポインタは、ビットマップに対応する単語文字列の位置を示すポインタである。
【００３３】
単語文字列は、静的辞書に登録された日本語の単語であり、文字コード列で表わされる。ここでは、文字コード列が括弧内に示される。文字コード列長は、単語文字列に対応する文字コード列の長さである。静的コードは、単語文字列に割り当てられた圧縮符号である。
【００３４】
例えば、単語文字列「発熱」に圧縮符号が割り当てられる場合について説明する。情報処理装置は、ビットフィルタＢ０と、単語文字列「発熱」とを比較して、単語文字列「発熱」がビットフィルタＢ０にヒットする、静的辞書に登録されている静的コード「Ｃ０００１０」を圧縮符号として特定する。
【００３５】
［圧縮ファイルの構成例］
図４は、圧縮ファイルのブロック構成例を示す図である。図４に示すように、圧縮ファイルＦ２は、ヘッダ部と、圧縮データと、トレーラ部とを有する。トレーラ部は、動的タグ辞書Ｔ０の情報を記憶する。すなわち、トレーラ部は、圧縮処理が完了した後のタグバッファＴ１とアドレステーブルＴ２の情報を記憶する。動的タグ辞書Ｔ０の情報は、図２に示した動的タグ辞書の情報に対応する。ヘッダ部には、トレーラ部に格納された動的タグ辞書Ｔ０の情報へのポインタが格納される。情報処理装置は、後述する伸長処理において、ヘッダ部の動的タグ辞書Ｔ０へのポインタを利用し、動的タグ辞書Ｔ０を参照する。
【００３６】
［伸長処理の流れ］
図５は、本実施例１に係る情報処理装置の伸長処理の流れの一例を示す図である。図５では、伸長処理のワークエリアとして、メモリに記憶領域Ａ１、記憶領域Ａ２および記憶領域Ａ３を設ける。情報処理装置は、記憶領域Ａ２に、図４のトレーラ部に格納された動的タグ辞書Ｔ０の情報をロードする。また、情報処理装置は、圧縮ファイルＦ２を記憶領域Ａ１にロードし、順次圧縮データを読み出す。情報処理装置は、読み出した圧縮データに応じた伸長処理を行う。情報処理装置は、伸長データを記憶領域Ａ３に格納し、記憶領域Ａ３に格納された伸長データに基づいて伸長ファイルＦ３を生成する。
【００３７】
図５では、図１に示した圧縮データｄ１、ｄ２に対する伸長処理を説明する。
【００３８】
情報処理装置は、圧縮データを読み出し、圧縮データが動的コードであるか否かを判定する。図５の例では、圧縮データｄ１は、動的コードであると判定される。このため、情報処理装置は、動的タグ辞書Ｔ０を用いて圧縮データｄ１を伸長する。例えば、情報処理装置は、動的タグ辞書Ｔ０のアドレステーブルＴ２から圧縮データｄ１と合致する動的コードを特定し、特定した動的コードに対応する格納位置およびデータ長を取得する。そして、情報処理装置は、タグバッファＴ１から、取得した格納位置およびデータ長の伸長データを特定する。ここでは、伸長データとして「＜side_effect  type＝“bf03”＞」が特定される。
【００３９】
また、情報処理装置は、圧縮データを読み出し、圧縮データが動的コードであるか否かを判定する。図５の例では、圧縮データｄ２は、動的コードでないと判定される。すなわち、圧縮データｄ２は、静的辞書によって符号化されたと判定される。このため、情報処理装置は、伸長用ケヤキ木を用いて圧縮データｄ２を伸長する。例えば、情報処理装置は、圧縮データｄ２と伸長用ケヤキ木とを比較して、伸長用ケヤキ木に示される伸長データへのポインタを特定する。そして、情報処理装置は、特定した伸長データへのポインタを基に、伸長データを特定する。ここでは、伸長データとして「発熱」が特定される。
【００４０】
また、情報処理装置は、特定した伸長データを、記憶領域Ａ３に書き込む。また、情報処理装置は、圧縮ファイルＦ２の圧縮データを全て伸長した後、記憶領域Ａ３に書き込まれた伸長データを伸長ファイルＦ３に書き込む。
【００４１】
［情報処理装置の構成］
図６は、本実施例１に係る情報処理装置の構成を示す機能ブロック図である。図６に示すように、この情報処理装置１００は、圧縮部１００ａと、伸長部１００ｂと、記憶部１００ｃとを有する。
【００４２】
圧縮部１００ａは、図１に示した圧縮処理を実行する処理部である。伸長部１００ｂは、図５に示した伸長処理を実行する処理部である。記憶部１００ｃは、圧縮対象のファイルＦ１、圧縮ファイルＦ２および伸長ファイルＦ３を記憶する。圧縮ファイルＦ２には、動的タグ辞書Ｔ０が含まれる。また、記憶部１００ｃは、圧縮用のケヤキ木としてのビットフィルタＢ０および伸長用のケヤキ木を記憶する。
【００４３】
図７は、伸長用のケヤキ木のデータ構造の一例を示す図である。図７に示すように、伸長用のケヤキ６０は、複数の枝６０−１〜６０−ｎと、葉６１−１〜６０−ｍとを有する。各枝６０−１〜６０−ｎには、所定のビット列が割り当てられる。情報処理装置１００は、圧縮データのビット列と、枝６０−１〜６０−ｎに割り当てられたビット列とを比較して、圧縮データのビット列にヒットする枝に接続される葉を特定する。葉には、圧縮データに対応する文字等の情報が格納される。
【００４４】
例えば、葉のデータ構造は、６１に示すものとなる。例えば、葉には、葉識別情報と、圧縮符号長と、単語へのポインタとが格納される。葉識別情報は、葉を一意に識別する情報である。圧縮符号長は、各枝６０−１〜６０−ｎと比較した圧縮データのビット列の内、有効な長さを示す情報である。単語へのポインタは、圧縮符号を伸長した場合の伸長データを一意に示す情報であり、伸長データへのポインタに対応する。
【００４５】
［圧縮部の構成］
図８は、本実施例１に係る圧縮部の構成の一例を示す機能ブロック図である。図８に示すように、この圧縮部１００ａは、ファイルリード部１０１、タグ判定部１０２、タグ符号化部１０３、テキスト符号化部１０４、更新部１０５およびファイルライト部１０６を有する。
【００４６】
ファイルリード部１０１は、ファイルＦ１内のコンテンツ部分の文字列を読み出す。ファイルリード部１０１は、読み出した文字列をタグ判定部１０２に出力する。
【００４７】
タグ判定部１０２は、文字列がタグであるか否かを判定する。例えば、タグ判定部１０２は、文字列の先頭文字がタグの開始記号‘＜’であるか否かを判定する。タグ判定部１０２は、文字列の先頭文字がタグの開始記号‘＜’である場合には、タグ文字列をタグ符号化部１０３に出力する。タグ文字列は、開始記号‘＜’から始まり、終了記号‘＞’で終わる文字列である。また、タグ判定部１０２は、文字列の先頭文字がタグの開始記号‘＜’でない場合には、文字列をテキスト符号化部１０４に出力する。
【００４８】
タグ符号化部１０３は、タグ文字列を符号化する。例えば、タグ符号化部１０３は、タグ文字列がタグバッファＴ１に既に格納されているか否かを判定する。タグ符号化部１０３は、タグ文字列がタグバッファＴ１に既に格納されている場合には、該タグ文字列に対応付けられたアドレステーブルＴ２の動的コードを圧縮データとして割り当てる。タグ符号化部１０３は、タグ文字列がタグバッファＴ１に格納されていない場合には、該タグ文字列を纏めてタグバッファＴ１に格納するとともに、該タグ文字列を格納した格納位置および格納したデータ長をアドレステーブルＴ２に登録する。タグ符号化部１０３は、タグ文字列に対応付けられたアドレステーブルＴ２の動的コードを圧縮データとして割り当てる。そして、タグ符号化部１０３は、割り当てられた圧縮データを更新部１０５に出力する。
【００４９】
テキスト符号化部１０４は、文字列を符号化する。例えば、テキスト符号化部１０４は、文字列を地の文としてビットフィルタＢ０に出力する。テキスト符号化部１０４は、ビットフィルタＢ０と、出力された文字列とを比較して、出力された文字列がビットフィルタＢ０にヒットするか否かを判定する。テキスト符号化部１０４は、出力された文字列がビットフィルタＢ０にヒットする場合には、静的辞書に登録されている静的コードを圧縮データとして特定する。そして、テキスト符号化部１０４は、特定した圧縮データを更新部１０５に出力する。
【００５０】
更新部１０５は、タグ符号化部１０３およびテキスト符号化部１０４から圧縮データを取得し、取得した順に、取得した圧縮データを記憶領域に蓄積することで、該記憶領域を更新する。
【００５１】
ファイルライト部１０６は、ファイルＦ１内のコンテンツ部分の文字列を全て圧縮した後、記憶領域に書き込まれた圧縮データを圧縮ファイルＦ２に書き込む。
【００５２】
［伸長部の構成］
図９は、本実施例１に係る伸長部の構成の一例を示す機能ブロック図である。図９に示すように、この伸長部１００ｂは、ファイルリード部１１０、タグコード判定部１１１、タグ伸長部１１２、テキスト伸長部１１３、更新部１１４およびファイルライト部１１５を有する。
【００５３】
ファイルリード部１１０は、圧縮ファイルＦ２内の圧縮データを記憶領域Ａ１に読み出す。ファイルリード部１１０は、記憶領域に格納された圧縮データに対する伸長処理が終了した場合に、新たな圧縮データを圧縮ファイルＦ２から読み出し、記憶領域Ａ１に格納する。
【００５４】
タグコード判定部１１１は、圧縮データがタグのコードであるか否かを判定する。例えば、タグコード判定部１１１は、圧縮データが動的コードであるか否かを判定する。例えば、動的コードが、１６進数「Ｆ」で始まる固定長３バイトのコードである場合には、タグコード判定部１１１は、圧縮データの先頭の４ビットが「Ｆ」であるか否かを判定し、「Ｆ」である場合には、動的コードであると判定する。すなわち、タグコード判定部１１１は、タグのコードであると判定し、圧縮データをタグ伸長部１１２に出力する。タグコード判定部１１１は、「Ｆ」でない場合には、動的コードでないと判定する。すなわち、タグコード判定部１１１は、タグのコードでないと判定し、圧縮データをテキスト伸長部１１３に出力する。
【００５５】
タグ伸長部１１２は、動的タグ辞書Ｔ０を用いて圧縮データを伸長する。例えば、タグ伸長部１１２は、動的タグ辞書Ｔ０のアドレステーブルＴ２から圧縮データと合致する動的コードを特定し、特定した動的コードに対応する格納位置およびデータ長を取得する。タグ伸長部１１２は、動的タグ辞書Ｔ０のタグバッファＴ１から、取得した格納位置およびデータ長の伸長データを特定する。タグ伸長部１１２は、特定した伸長データを更新部１１４に出力する。
【００５６】
テキスト伸長部１１３は、伸長用ケヤキ木を用いて圧縮データを伸長する。例えば、テキスト伸長部１１３は、圧縮データと伸長用ケヤキ木とを比較して、伸長用ケヤキ木に示される伸長データへのポインタを特定する。テキスト伸長部１１３は、特定した伸長データへのポインタを基に、伸長データを特定する。テキスト伸長部１１３は、特定した伸長データを更新部１１４に出力する。
【００５７】
更新部１１４は、タグ伸長部１１２およびテキスト伸長部１１３から伸長データを取得し、取得した順に、取得した伸長データを記憶領域Ａ３に蓄積することで、該記憶領域を更新する。
【００５８】
ファイルライト部１１５は、圧縮ファイルＦ２内の圧縮データを全て伸長した後、記憶領域に書き込まれた伸長データを伸長ファイルＦ３に書き込む。
【００５９】
［圧縮部の処理手順］
【００６０】
次に、図８に示した圧縮部１００ａの処理手順について、図１０を参照して説明する。図１０は、本実施例１に係る圧縮部の処理手順を示すフローチャートである。
【００６１】
図１０に示すように、圧縮部１００ａは、前処理を実行する（ステップＳ１０１）。例えば、圧縮部１００ａは、各種記憶領域を記憶部１００ｃに確保する。そして、圧縮部１００ａは、圧縮対象のファイルＦ１の文字列を読出用の記憶領域に読み出す（ステップＳ１０２）。
【００６２】
圧縮部１００ａは、記憶領域の先頭から文字列を抽出し、文字列がタグ部分であるか否かを判定する（ステップＳ１０３）。例えば、圧縮部１００ａは、文字列の先頭がタグ文字列の開始記号‘＜’であるか否かを判定する。
【００６３】
圧縮部１００ａは、文字列がタグ部分であると判定した場合には（ステップＳ１０３；Ｙｅｓ）、タグ部分がタグバッファＴ１に格納されているか否かを判定する（ステップＳ１０４）。圧縮部１００ａは、タグ部分がタグバッファＴ１に格納されている場合には（ステップＳ１０４；Ｙｅｓ）、タグ部分の動的コードを割り当てるべく、ステップＳ１０６に移行する。
【００６４】
一方、圧縮部１００ａは、タグ部分がタグバッファＴ１に格納されていない場合には（ステップＳ１０４；Ｎｏ）、タグ部分をタグバッファＴ１に格納するとともに、該タグ部分の格納位置と長さとをアドレステーブルＴ２に格納する（ステップＳ１０５）。そして、圧縮部１００ａは、タグ部分の動的コードを割り当てるべく、ステップＳ１０６に移行する。
【００６５】
ステップＳ１０６では、圧縮部１００ａは、アドレステーブルＴ２の、タグ部分に対応する動的コードを圧縮データとして割り当てる（ステップＳ１０６）。すなわち、圧縮部１００ａは、アドレステーブルＴ２に対して、タグ部分の格納位置と長さとを格納したレコードに含まれる動的コードを抽出し、抽出した動的コードを圧縮データとして割り当てる。そして、圧縮部１００ａは、ステップＳ１０８に移行する。
【００６６】
圧縮部１００ａは、文字列がタグ部分でないと判定した場合には（ステップＳ１０３；Ｎｏ）、静的辞書に登録されている静的コードを圧縮データとして割り当てる（ステップＳ１０７）。すなわち、圧縮部１００ａは、文字列とビットフィルタＢ０とを比較して、該文字列がビットフィルタＢ０にヒットした、静的辞書に登録されている静的コードを圧縮データとして特定する。そして、圧縮部１００ａは、ステップＳ１０８に移行する。
【００６７】
ステップＳ１０８では、圧縮部１００ａは、圧縮データを書込用の記憶領域に書き込む（ステップＳ１０８）。
【００６８】
圧縮部１００ａは、読出用の記憶領域に処理する文字列があるか否かを判定する（ステップＳ１０９）。圧縮部１００ａは、読出用の記憶領域に処理する文字列があると判定した場合には（ステップＳ１０９；Ｙｅｓ）、次の文字列の処理をすべく、ステップＳ１０３に移行する。
【００６９】
一方、圧縮部１００ａは、読出用の記憶領域に処理する文字列がないと判定した場合には（ステップＳ１０９；Ｎｏ）、圧縮処理を終了する。
【００７０】
［伸長部の処理手順］
次に、図９に示した伸長部１００ｂの処理手順について、図１１を参照して説明する。図１１は、本実施例１に係る伸長部の処理手順を示すフローチャートである。
【００７１】
図１１に示すように、伸長部１００ｂは、前処理を実行する（ステップＳ２０１）。例えば、伸長部１００ｂは、各種記憶領域を記憶部１００ｃに確保する。そして、伸長部１００ｂは、圧縮ファイルＦ２を読出用の記憶領域に読み出し（ステップＳ２０２）、動的タグ辞書Ｔ０および伸長用のケヤキ木を読み出す（ステップＳ２０３）。
【００７２】
伸長部１００ｂは、読出用の記憶領域内の圧縮データを記憶領域Ａ１に読出し、圧縮データが動的コードであるか否かを判定する（ステップＳ２０４）。例えば、動的コードが、１６進数「Ｆ」で始まる固定長３バイトのコードである場合には、伸長部１００ｂは、圧縮データの先頭の４ビットが「Ｆ」であるか否かを判定する。
【００７３】
伸長部１００ｂは、圧縮データが動的コードであると判定した場合には（ステップＳ２０４；Ｙｅｓ）、動的タグ辞書Ｔ０の動的コードを基にして伸長データを特定する（ステップＳ２０５）。例えば、伸長部１００ｂは、動的タグ辞書Ｔ０のアドレステーブルＴ２から圧縮データと合致する動的コードを特定し、特定した動的コードに対応する格納位置およびデータ長を取得する。タグ伸長部１１２は、動的タグ辞書Ｔ０のタグバッファＴ１に対して、取得された格納位置から取得されたデータ長分の伸長データを特定する。そして、伸長部１００ｂは、ステップＳ２０８に移行する。
【００７４】
一方、伸長部１００ｂは、圧縮データが動的コードでないと判定した場合には（ステップＳ２０４；Ｎｏ）、伸長用のケヤキ木と圧縮データとを比較して伸長データへのポインタを特定する（ステップＳ２０６）。伸長部１００ｂは、伸長データへのポインタを基に伸長データを特定する（ステップＳ２０７）。そして、伸長部１００ｂは、ステップＳ２０８に移行する。
【００７５】
ステップＳ２０８では、伸長部１００ｂは、書込用の記憶領域に伸長データの書き込みを行う（ステップＳ２０８）。
【００７６】
伸長部１００ｂは、読出用の記憶領域に処理する圧縮データがあるか否かを判定する（ステップＳ２０９）。伸長部１００ｂは、読出用の記憶領域に処理する圧縮データがあると判定した場合には（ステップＳ２０９；Ｙｅｓ）、次の圧縮データを処理すべく、ステップＳ２０４に移行する。
【００７７】
一方、伸長部１００ｂは、読出用の記憶領域に処理する圧縮データがないと判定した場合には（ステップＳ２０９；Ｎｏ）、伸長処理を終了し、圧縮ファイルＦ２をクローズする（ステップＳ２１０）。
【００７８】
このようにして、情報処理装置１００は、可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別し、タグ部分に含まれるタグそれぞれを、タグ内容に対応した第１の種類の符号にそれぞれ変換する。情報処理装置１００は、地の文を、少なくとも入力文字データにおいてタグにより区切られる単位で第２の種類の符号に変換する。情報処理装置１００は、第１の種類の符号それぞれ、および、第２の種類の符号それぞれを、入力文字データにおけるそれぞれの符号の変換前のタグまたは文字列の位置関係を維持した状態で出力する。かかる構成によれば、情報処理装置１００は、タグ部分を第１の種類の符号に変換し、地の文を第２の種類の符号に変換し、タグ部分および地の文の変換前の位置関係を維持した状態で出力するので、可変部分があるタグがあっても、入力文字データの圧縮率を向上させることができる。
【００７９】
具体的には、ＨＴＭＬ等に用いられるタグには、参照先等の可変部分を含むものと、可変部分を含まないものの双方が存在する。ここで、従来、文書における文字列については、文書ごとに用いられる単語や文字の頻度が異なるものであり、文書で用いられる単語や文字の頻度に基づいて符号が割り当てられる。タグ以外の文字列である地の文については、文書ごとに用いられる単語の頻度が異なるものであり、地の文で用いられる単語の頻度に基づいて符号が割り当てられることが望ましい。タグについては、可変部分を含むタグは、タグ全体が同一であるタグが少なく、一方、可変部分を含まないタグは、限られた種類に留まっている。従来、タグを含む文書、特に、タグに可変部分を含む文書においては、上記の特性の違いに応じた圧縮を行っていないため、圧縮率が劣っていた。これに対して、実施例１に係る情報処理装置１００は、タグ部分を第１の種類の符号に変換し、地の文を第２の種類の符号に変換し、タグ部分および地の文の変換前の位置関係を維持した状態で出力するので、可変部分があるタグがあっても、入力文字データの圧縮率を向上させることが可能となる。
【実施例２】
【００８０】
ところで、実施例１に係る情報処理装置１００は、可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別する。情報処理装置１００は、タグ部分と地の文をそれぞれ異なる種類の符号に変換し、変換した符号をタグ部分および地の文の変換前の位置関係を維持した状態で出力する。しかしながら、情報処理装置１００は、これに限定されず、さらに、圧縮された状態で、特定のタグ種別を有するタグで囲まれた地の文に、検索キーワードが存在するかどうかを検索するようにしても良い。例えば、薬に関する文書を例にとると、「発熱」という検索キーワードに対して、「発熱」に効く薬（薬効）を検索したい場合に、「薬効」タグで囲まれた地の文に「発熱」という検索キーワードが存在するかどうかを、文書が圧縮された状態で検索する。
【００８１】
そこで、実施例２では、情報処理装置１００が、圧縮された状態で、特定のタグ種別を有するタグで囲まれた地の文に、検索キーワードが存在するかどうかを検索する場合について説明する。
【００８２】
［圧縮処理の流れ］
まず、図１２を参照して、実施例２に係る情報処理装置の圧縮処理について説明する。図１２は、実施例２に係る情報処理装置の圧縮処理の流れの一例を示す図である。実施例１と実施例２とが異なるところは、動的タグ辞書Ｔ０を動的タグ辞書Ｔ１０に変更した点にある。
【００８３】
ファイルＦ１は、実施例１の図１と同様に、圧縮対象のファイルであり、タグとタグ以外の地の文の文字列とが混在した文書である。
【００８４】
情報処理装置は、圧縮対象のファイルＦ１に記憶された文字データを記憶領域にロードする。情報処理装置は、記憶領域の先頭から文字列を抽出し、抽出した文字列がタグであるか否かを判定する。例えば、情報処理装置は、文字列の先頭文字がタグの開始記号‘＜’であるか否かを判定する。
【００８５】
情報処理装置は、文字列がタグである場合には、タグの種別（タグ種別）を判別する。一例として、タグが「＜medical_effect  type＝“ac01”＞」である場合には、情報処理装置は、タグに含まれる「medical_effect」に基づいて、タグ種別が「薬効」であると判別する。別の例として、タグが「＜side_effect  type＝“bf03”＞」である場合には、情報処理装置は、タグに含まれる「side_effect」に基づいて、タグ種別が「副作用」であると判別する。
【００８６】
情報処理装置は、タグ文字列全体を纏めて動的タグ辞書Ｔ１０に格納するとともに、格納した位置（格納位置）、長さ（データ長）およびタグ種別を動的タグ辞書Ｔ１０に格納する。そして、情報処理装置は、動的タグ辞書Ｔ１０に基づいて、タグ文字列を、タグ文字列に対応する圧縮符号に圧縮する。なお、動的タグ辞書Ｔ１０のデータ構造の一例は、後述する。
【００８７】
情報処理装置は、文字列がタグでない場合には、文字列を地の文としてビットフィルタＢ０に出力し、ビットフィルタＢ０に基づいて、出力した文字列を、出力した文字列に対応する圧縮符号（静的コード）に圧縮する。なお、文字列がタグでない場合の圧縮処理は、実施例１と同様であるので、詳細を省略する。
【００８８】
情報処理装置は、動的タグ辞書Ｔ１０に基づいた圧縮符号それぞれ、および、ビットフィルタＢ０に基づいた圧縮符号それぞれを、入力文字データにおけるそれぞれの圧縮符号の変換前のタグまたは地の文の位置関係を維持した状態で圧縮ファイルＦ２に出力する。
【００８９】
［動的タグ辞書の一例］
図１３は、本実施例２に係る動的タグ辞書の一例を示す図である。図１３に示される動的タグ辞書Ｔ１０は、タグバッファＴ１１とアドレステーブルＴ１２とを含む。タグバッファＴ１１は、タグの文字列を記憶する。アドレステーブルＴ１２は、動的コードと、格納位置と、データ長と、タグ種別を対応付けて保持する。動的コードと、格納位置と、データ長とは、実施例１に係る動的タグ辞書Ｔ０と同様であるので、詳細な説明を省略する。タグ種別は、タグの種別である。一例として、タグ種別が「薬効」である場合には、「薬効」に対応する「６７」が設定される。タグ種別が「副作用」である場合には、「副作用」に対応する「８８」が設定される。「６７」や「８８」は、あらかじめタグ種別に対応するタグの部分と対応付けて記憶するようにすれば良い。
【００９０】
ここで、タグの文字列「＜side_effect  type＝“bf03”＞」に圧縮符号が割り当てられる場合について説明する。
【００９１】
情報処理装置は、タグの文字列の「side_effect  type」に基づいてタグ種別が「副作用」であると判別し、「side_effect  type」に対応付けられた「８８」を取得する。情報処理装置は、タグの文字列「＜side_effect  type＝“bf03”＞」を纏めてタグバッファＴ１１に格納する。情報処理装置は、タグの文字列を格納した格納位置、格納したデータ長およびタグ種別をアドレステーブルＴ１２に登録する。ここでは、情報処理装置は、格納位置として「２８」、データ長として「２５」、タグ種別として「８８」をアドレステーブルＴ１２に登録する。
【００９２】
情報処理装置は、タグの文字列に対応付けられたアドレステーブルＴ１２の動的コードを圧縮符号として割り当てる。ここでは、情報処理装置は、タグの文字列「＜side_effect  type＝“bf03”＞」に対応付けられた動的コード「Ｆ８０００１ｈ」を圧縮符号として割り当てる。
【００９３】
［検索処理の流れ］
図１４は、本実施例２に係る情報処理装置の検索処理の流れの一例を示す図である。図１４では、情報処理装置が、圧縮された状態で、検索タグのタグ種別を有するタグで囲まれた地の文に、検索キーワードが存在するかどうかを判定する。圧縮された状態の圧縮ファイルには、Ｆ２１、Ｆ２２が存在し、それぞれの圧縮ファイルには、それぞれの動的タグ辞書Ｔ１０が登録されている。
【００９４】
情報処理装置は、検索キーワードおよび検索タグのタグ種別を受け付ける。図１４の例では、検索キーワードは「発熱」であり、検索タグのタグ種別は「８８」である。タグ種別の「８８」は、「副作用」に関するタグのタグ種別である。
【００９５】
情報処理装置は、動的タグ辞書Ｔ１０のタグ種別を基にして、検索タグのタグ種別に対応する動的コードを特定する。例えば、情報処理装置は、動的タグ辞書Ｔ１０のアドレステーブルＴ１２から検索タグのタグ種別「８８」に対応する動的コードとして１６進数の「Ｆ８０００１」を特定する。
【００９６】
情報処理装置は、検索キーワードを地の文として、ビットフィルタＢ０を基にして、検索キーワードに対応する圧縮符号（静的コード）を特定する。なお、検索キーワードの圧縮処理は、文字列がタグでない場合の圧縮処理と同様であり、実施例１と同様であるので、詳細を省略する。ここでは、検索キーワード「発熱」の静的コードは、「Ａ」であるとする。
【００９７】
情報処理装置は、圧縮ファイルＦ２１、Ｆ２２に対して、検索タグのタグ種別に対応する動的コードの出現位置および検索キーワードに対応する圧縮符号の出現位置を検索する。図１４の例では、圧縮ファイルＦ２１に、動的タグ種別「８８」に対応する動的コード「Ｆ８０００１」が検索キーワード「発熱」に対応する圧縮符号「Ａ」の直前に出現される。ここで、実施例２では、圧縮符号は、変換前のタグまたは地の文の位置関係を維持した状態で圧縮ファイルＦ２１、Ｆ２２に出力される。したがって、情報処理装置は、検索タグのタグ種別「８８」を有するタグ「side_effect  type=”bf03”」とタグ「/side_effect  type」に囲まれた地の文に、検索キーワード「発熱」が存在すると判定する。
【００９８】
これに対して、圧縮ファイルＦ２２に、検索タグのタグ種別「８８」に対応する動的コード「Ｆ８０００１」が検索キーワード「発熱」に対応する圧縮符号「Ａ」の後方に出現される。ここで、実施例２では、圧縮符号は、変換前のタグまたは地の文の位置関係を維持した状態で圧縮ファイルＦ２１、Ｆ２２に出力される。したがって、情報処理装置は、検索タグのタグ種別「８８」を有するタグ「side_effect  type=”bf03”」とタグ「/side_effect  type」に囲まれた地の文に、検索キーワード「発熱」が存在しないと判定する。
【００９９】
情報処理装置は、検索結果を出力する。例えば、情報処理装置は、検索条件に合致した場合には、検索結果として「ＯＫ」を出力する。加えて、情報処理装置は、動的タグ辞書Ｔ１０に基づいて、検索条件に合致した圧縮部分を伸長した文字列を出力する。図１４の例では、情報処理装置は、圧縮ファイルＦ２１について、検索結果として「ＯＫ」を出力する。情報処理装置は、薬品名として「ＸＸＸＸＸ」を出力する。加えて、情報処理装置は、「＜side_effect  type=”bf03”＞発熱＜/side_effect＞」を出力する。
【０１００】
［情報処理装置の構成］
図１５は、本実施例２に係る情報処理装置の構成を示す機能ブロック図である。図１５に示すように、この情報処理装置２００は、圧縮部２００ａと、検索部２００ｂと、伸長部２００ｃと、記憶部２００ｄとを有する。
【０１０１】
圧縮部２００ａは、図１２に示した圧縮処理を実行する処理部である。検索部２００ｂは、図１４に示した検索処理を実行する処理部である。伸長部２００ｃは、実施例１と同様の処理であり、図５に示した伸長処理を実行する処理部である。記憶部２００ｄは、圧縮対象のファイルＦ１、動的タグ辞書Ｔ１０を含む圧縮ファイルＦ２および伸長ファイルＦ３を記憶する。また、記憶部２００ｄは、圧縮用のケヤキ木としてのビットフィルタＢ０および伸長用のケヤキ木を記憶する。
【０１０２】
［検索部の構成］
図１６は、本実施例２に係る検索部の構成の一例を示す機能ブロック図である。図１６に示すように、この検索部２００ｂは、検索キー受付部２０１、検索キー位置検索部２０２、検索条件合致判定部２０３および検索結果出力部２０４を有する。
【０１０３】
検索キー受付部２０１は、検索キーを受け付ける。例えば、検索キー受付部２０１は、検索キーとして、検索キーワードおよび検索タグのタグ種別を受け付ける。
【０１０４】
検索キー位置検索部２０２は、圧縮ファイルＦ２から検索キーに対応する位置を検索する。例えば、検索キー位置検索部２０２は、動的タグ辞書Ｔ１０に含まれるアドレステーブルＴ１２のタグ種別を基にして、検索タグのタグ種別に対応する動的コードを特定する。検索キー位置検索部２０２は、検索キーワードを地の文として、ビットフィルタＢ０を基にして、検索キーワードに対応する圧縮符号（静的コード）を特定する。そして、検索キー位置検索部２０２は、圧縮ファイルＦ２に対して、検索タグのタグ種別に対応する動的コードの出現位置および検索キーワードに対応する圧縮符号の出現位置を検索する。
【０１０５】
検索条件合致判定部２０３は、出現位置が検索条件に合致するか否かを判定する。例えば、検索条件が、検索タグのタグ種別に対応する動的コードの出現位置が検索キーワードに対応する圧縮符号（静的コード）の出現位置の直前であるという検索条件であるとする。検索条件合致判定部２０３は、検索タグのタグ種別に対応する動的コードの出現位置が検索キーワードに対応する圧縮符号（静的コード）の出現位置の直前であるか否かを判定する。検索条件合致判定部２０３は、検索タグのタグ種別に対応する動的コードの出現位置が検索キーワードに対応する圧縮符号（静的コード）の出現位置の直前であれば、検索条件に合致したと判定する。検索条件合致判定部２０３は、検索タグのタグ種別に対応する動的コードの出現位置が検索キーワードに対応する圧縮符号（静的コード）の出現位置の直前でなければ、検索条件に合致しないと判定する。
【０１０６】
検索結果出力部２０４は、検索結果を出力する。例えば、検索結果出力部２０４は、出現位置が検索条件に合致したと判定された場合には、検索結果として検索条件に合致したことを示す「ＯＫ」を出力する。加えて、検索結果出力部２０４は、動的タグ辞書Ｔ１０に基づいて、検索条件に合致した出現位置の圧縮部分を伸長した文字列を出力する。なお、検索結果出力部２０４は、検索条件に合致した出現位置が存在する圧縮ファイルＦ２の先頭部分を伸長した文字列を出力しても良い。検索結果出力部２０４は、検索条件に合致しないと判定された場合には、検索結果として検索条件に合致しないことを示す「ＮＧ」を出力する。
【０１０７】
［検索部の処理手順］
次に、図１６に示した検索部２００ｂの処理手順について、図１７を参照して説明する。図１７は、本実施例２に係る検索部の処理手順を示すフローチャートである。
【０１０８】
図１７に示すように、検索部２００ｂは、検索キーワードおよび検索タグのタグ種別を受け付ける（ステップＳ３０１）。そして、検索部２００ｂは、圧縮ファイルＦ２を検索用の記憶領域に読み出し（ステップＳ３０２）、動的タグ辞書Ｔ１０および伸長用のケヤキ木を読み出す（ステップＳ３０３）。
【０１０９】
検索部２００ｂは、動的タグ辞書Ｔ１０のタグ種別を基にして、検索タグのタグ種別に対応する動的コードを特定する（ステップＳ３０４）。例えば、検索部２００ｂは、動的タグ辞書Ｔ１０に含まれるアドレステーブルＴ１２から、検索タグのタグ種別と一致するタグ種別のレコードを取得する。検索部２００ｂは、取得したレコードに含まれる動的コードを特定する。
【０１１０】
検索部２００ｂは、静的辞書から検索キーワードに対応する圧縮符号を特定する（ステップＳ３０５）。例えば、検索部２００ｂは、検索キーワードを地の文として、ビットフィルタＢ０を基にして、検索キーワードに対応する圧縮符号（静的コード）を特定する。
【０１１１】
続いて、検索部２００ｂは、圧縮ファイルＦ２に対して、動的コードの出現位置および圧縮符号の出現位置を検索する（ステップＳ３０６）。
【０１１２】
そして、検索部２００ｂは、出現位置が検索条件に合致したか否かを判定する（ステップＳ３０７）。例えば、検索条件が、検索タグのタグ種別に対応する動的コードの出現位置が検索キーワードに対応する圧縮符号（静的コード）の出現位置の直前であるという検索条件であるとする。すると、検索部２００ｂは、検索された動的コードの出現位置および検索された圧縮符号の出現位置を用いて、該動的コードの出現位置が該圧縮符号の出現位置の直前であるか否かを判定する。
【０１１３】
検索部２００ｂは、出現位置が検索条件に合致したと判定した場合には（ステップＳ３０７；Ｙｅｓ）、検索結果として「ＯＫ」を出力する（ステップＳ３０８）。加えて、検索部２００ｂは、動的タグ辞書Ｔ１０に基づいて、検索条件に合致した出現位置の圧縮部分を伸長した文字列を出力する。なお、検索部２００ｂは、検索条件に合致した出現位置が存在する圧縮ファイルＦ２の先頭部分を伸長した文字列を出力しても良い。そして、検索部２００ｂは、検索処理を終了する。
【０１１４】
一方、検索部２００ｂは、出現位置が検索条件に合致しなかったと判定した場合には（ステップＳ３０７；Ｎｏ）、検索結果として「ＮＧ」を出力する（ステップＳ３０９）。そして、検索部２００ｂは、検索処理を終了する。
【０１１５】
このようにして、情報処理装置２００は、可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別する。情報処理装置２００は、タグ内容に加えて、タグの属性に対応した種別属性情報を、第１の種類の符号に対応させて動的タグ辞書Ｔ１０に登録し、タグ部分に含まれるタグそれぞれを、タグ内容に対応した第１の種類の符号にそれぞれ変換する。情報処理装置２００は、地の文を、少なくとも入力文字データにおいてタグにより区切られる単位で第２の種類の符号に変換する。情報処理装置２００は、第１の種類の符号それぞれ、および、第２の種類の符号それぞれを、入力文字データにおけるそれぞれの符号の変換前のタグまたは文字列の位置関係を維持した状態で出力する。かかる構成によれば、情報処理装置２００は、圧縮したまま、地の文に対する、タグ付け状況を考慮した検索を行うことができる。すなわち、情報処理装置２００は、タグ内容に加えて、タグの種別属性情報を、第１の種類の符号に対応させて動的タグ辞書Ｔ１０に記憶する。したがって、情報処理装置２００は、動的タグ辞書Ｔ１０を用いることで、特定のタグの種別属性情報を有するタグで囲まれた地の文に、指定された検索キーワードが存在するかどうかを、圧縮したまま判定することができる。
【実施例３】
【０１１６】
ところで、実施例２に係る情報処理装置２００は、タグ部分と地の文の単語をそれぞれ別々に符号化し、元のファイルＦ１における位置関係を維持した状態で出力する。かかる符号化の出力の実装の一例として、情報処理装置２００は、地の文の単語を符号化したコードに、該コードに対応する単語に付されたタグを変換した動的コードを付加して出力するようにしても良い。
【０１１７】
そこで、実施例３では、情報処理装置２００が、地の文の単語を符号化したコードに、該コードに対応する単語に付されたタグを変換した動的コードを付加して出力する場合について説明する。
【０１１８】
［圧縮処理の流れ］
まず、図１８Ａおよび図１８Ｂを参照して、実施例３に係る情報処理装置の圧縮処理について説明する。図１８Ａおよび図１８Ｂは、実施例３に係る情報処理装置の圧縮処理の流れの一例を示す図である。なお、動的タグ辞書１０は、実施例２に係る動的タグ辞書と同じ内容である。ファイルＦ１は、実施例２の図１２と同様に、圧縮対象のファイルであり、タグとタグ以外の地の文の文字列とが混在した文書である。
【０１１９】
図１８Ａに示すように、情報処理装置２００は、圧縮対象のファイルＦ１に記憶された文字データを記憶領域にロードする。情報処理装置２００は、記憶領域にロードした文字データのうち、先行してタグ部分を符号化する。すなわち、情報処理装置２００は、入力文字データの各タグ文字列について、タグ文字列全体を纏めて動的タグ辞書Ｔ１０に格納するとともに、格納した位置（格納位置）、長さ（データ長）およびタグ種別を動的タグ辞書Ｔ１０に格納する。そして、情報処理装置２００は、動的タグ辞書Ｔ１０に基づいて、タグ文字列を、タグ文字列に対応する圧縮符号に圧縮する。
【０１２０】
図１８Ａの例では、情報処理装置２００は、タグ文字列「＜medical_effect  type=”ac01”＞」について、該タグ文字列を纏めて動的タグ辞書Ｔ１０に格納するとともに、格納位置、データ長およびタグ種別を動的タグ辞書Ｔ１０に格納する。そして、情報処理装置２００は、動的タグ辞書Ｔ１０に基づいて、タグ文字列に対応する動的コード「Ｆ８００００ｈ」を圧縮符号ｄ１として符号化する。情報処理装置２００は、タグ文字列「＜side_effect  type=”bf03”＞」について、該タグ文字列を纏めて動的タグ辞書Ｔ１０に格納するとともに、格納位置、データ長およびタグ種別を動的タグ辞書Ｔ１０に格納する。そして、情報処理装置２００は、動的タグ辞書Ｔ１０に基づいて、タグ文字列に対応する動的コード「Ｆ８０００１ｈ」を圧縮符号ｄ１として符号化する。
【０１２１】
情報処理装置２００は、符号化した圧縮符号それぞれを、入力文字データにおけるそれぞれの圧縮符号の変換前のタグまたは地の文の位置関係を維持した状態で記憶領域Ｆ２´に出力する。
【０１２２】
図１８Ｂに示すように、情報処理装置２００は、記憶領域Ｆ２´の文字データのうち、地の文の文字列（単語）をビットフィルタＢ０に出力し、ビットフィルタＢ０に基づいて、地の文の文字列を、該文字列に対応する圧縮符号（静的コード）に圧縮する。図１８Ｂの例では、情報処理装置２００は、地の文の文字列「発熱」について、該「発熱」の静的辞書に登録されている静的コード「Ａ」を圧縮符号ｄ２として符号化する。
【０１２３】
情報処理装置２００は、地の文の文字列を符号化した圧縮符号に、該圧縮符号に対応する文字列に付されたタグを符号化した動的コードを付加して圧縮ファイルＦ２に出力する。すなわち、情報処理装置２００は、地の文の符号化の際に、地の文の文字列（単語）に対応する符号（静的コード）に加え、タグ付けしているタグの符号（動的コード）を、単語に合わせて付ける。図１８Ｂの例では、情報処理装置２００は、地の文の単語「発熱」を符号化した静的コード「Ａ」に、地の文の単語「発熱」に付されたタグ「＜side_effect  type=”bf03”＞」を符号化した動的コード「Ｆ８０００１」を付加して圧縮ファイルＦ２に出力する。
【０１２４】
これにより、情報処理装置２００は、地の文の単語を符号化した圧縮符号に、該圧縮符号に対応する単語に付されたタグを符号化した動的コードを付加して圧縮ファイルＦ２に出力するので、圧縮したまま、地の文に対する、タグ付け状況を考慮した検索を行うことができる。すなわち、情報処理装置２００は、検索タグのタグ種別を有するタグで囲まれた地の文に、指定された検索キーワードが存在するかどうかを、圧縮したまま判定することができる。
【０１２５】
［検索処理の流れ］
図１９は、本実施例３に係る情報処理装置の検索処理の流れの一例を示す図である。図１９では、情報処理装置２００が、圧縮された状態で、検索タグのタグ種別を有するタグで囲まれた地の文に、検索キーワードが存在するかどうかを判定する。圧縮された状態の圧縮ファイルには、Ｆ２１、Ｆ２２が存在し、それぞれの圧縮ファイルには、それぞれの動的タグ辞書Ｔ１０が登録されている。
【０１２６】
情報処理装置２００は、検索キーワードおよび検索タグのタグ種別を受け付ける。図１９の例では、検索キーワードは「発熱」であり、検索タグのタグ種別は「８８」である。検索タグのタグ種別の「８８」は、「副作用」に関するタグのタグ種別である。
【０１２７】
情報処理装置２００は、動的タグ辞書Ｔ１０のタグ種別を基にして、検索タグのタグ種別に対応する動的コードを特定する。例えば、情報処理装置２００は、動的タグ辞書Ｔ１０のアドレステーブルＴ１２から検索タグのタグ種別「８８」に対応する動的コードとして１６進数の「Ｆ８０００１ｈ」を特定する。
【０１２８】
情報処理装置２００は、検索キーワードを地の文として、ビットフィルタＢ０を基にして、検索キーワードに対応する圧縮符号（静的コード）を特定する。なお、検索キーワードの圧縮処理は、文字列がタグでない場合の圧縮処理と同様であり、実施例１と同様であるので、詳細を省略する。ここでは、検索キーワード「発熱」の静的コードは、「Ａ」であるとする。
【０１２９】
情報処理装置２００は、圧縮ファイルＦ２１、Ｆ２２に対して、検索タグのタグ種別に対応する動的コードの出現位置および検索キーワードに対応する圧縮符号の出現位置を検索する。図１９の例では、圧縮ファイルＦ２１には、静的コード「Ｂ」に動的コード「Ｆ８００００」が付加されている。静的コード「Ａ」に動的コード「Ｆ８０００１」が付加されている。圧縮ファイルＦ２２には、静的コード「Ａ」に動的コード「Ｆ８００００」が付加されている。静的コード「Ｂ」に動的コード「Ｆ８０００１」が付加されている。
【０１３０】
このような状況の下、圧縮ファイルＦ２１に、検索キーワード「発熱」の静的コード「Ａ」に検索タグのタグ種別「８８」に対応する動的コード「Ｆ８０００１」が付加されている。したがって、情報処理装置２００は、圧縮された状態で、検索タグのタグ種別「８８」を有するタグ「side_effect  type=”bf03”」とタグ「/side_effect  type」に囲まれた地の文に、検索キーワード「発熱」が存在すると判定する。
【０１３１】
これに対して、圧縮ファイルＦ２２に、検索キーワード「発熱」の静的コード「Ａ」に検索タグのタグ種別「８８」に対応する動的コード「Ｆ８０００１」が付加されていない。したがって、情報処理装置２００は、圧縮された状態で、検索タグのタグ種別「８８」を有するタグ「side_effect  type=”bf03”」とタグ「/side_effect  type」に囲まれた地の文に、検索キーワード「発熱」が存在しないと判定する。
【０１３２】
情報処理装置２００は、検索結果を出力する。図１９の例では、情報処理装置２００は、圧縮ファイルＦ２１について、検索結果として「ＯＫ」を出力する。情報処理装置２００は、薬品名として「ＸＸＸＸＸ」を出力する。加えて、情報処理装置２００は、「＜side_effect  type=”bf03”＞発熱＜/side_effect＞」を出力する。
【０１３３】
これにより、情報処理装置２００は、圧縮したまま、地の文に対する、タグ付け状況を考慮した検索を行うことができる。すなわち、情報処理装置２００は、検索タグのタグ種別を有するタグで囲まれた地の文に、指定された検索キーワードが存在するかどうかを、圧縮したまま判定することができる。
【０１３４】
［実施例１〜３に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【０１３５】
また、実施例１−３では、情報処理装置１００、２００が、可変部分があるタグを含む入力文字データから、タグ部分と地の文を識別し、タグ部分と地の文をそれぞれ異なる種類の符号に変換する。そして、情報処理装置１００、２００は、変換した符号をタグ部分および地の文の変換前の位置関係を維持した状態で出力する。しかしながら、情報処理装置１００、２００は、可変部分があるタグに限定せず、パスを含むファイル名やメールアドレスについて、同様の圧縮処理を行っても良い。すなわち、情報処理装置１００、２００は、パスを含むファイル名を含む入力文字データから、パス部分とパス部分以外の部分を識別し、パス部分とパス部分以外の部分をそれぞれ異なる種類の符号に変換する。そして、情報処理装置１００、２００は、変換した符号をパス部分およびパス部分以外の部分の変換前の位置関係を維持した状態で出力すれば良い。また、情報処理装置１００、２００は、メールアドレスを含む入力文字データから、メールアドレス部分とメールアドレス部分以外の部分を識別し、メールアドレス部分とメールアドレス部分以外の部分をそれぞれ異なる種類の符号に変換する。そして、情報処理装置１００、２００は、変換した符号をメールアドレス部分およびメールアドレス部分以外の部分の変換前の位置関係を維持した状態で出力すれば良い。これにより、情報処理装置１００、２００は、可変部分があるタグだけでなく、パス部分があっても、メールアドレス部分があっても、入力文字データの圧縮率を向上させることができる。
【０１３６】
また、実施例１〜３に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１３７】
［情報処理装置のハードウェア構成］
図２０は、実施例１〜３の情報処理装置のハードウェア構成を示す図である。図２０の例が示すように、コンピュータ４００は、各種演算処理を実行するＣＰＵ４０１と、ユーザからのデータ入力を受け付ける入力装置４０２と、モニタ４０３とを有する。また、コンピュータ４００は、記憶媒体からプログラム等を読み取る媒体読取装置４０４と、他の装置と接続するためのインターフェース装置４０５と、他の装置と無線により接続するための無線通信装置４０６とを有する。また、コンピュータ４００は、各種情報を一時記憶するＲＡＭ４０７と、ハードディスク装置４０８とを有する。また、各装置４０１〜４０８は、バス４０９に接続される。
【０１３８】
ハードディスク装置４０８には、例えば図８に示したタグ判定部１０２、タグ符号化部１０３、テキスト符号化部１０４および更新部１０５の各処理部と同様の機能を有する文字データ変換プログラムが記憶される。また、ハードディスク装置４０８には、文字データ変換プログラムを実現するための各種データが記憶される。
【０１３９】
ＣＰＵ４０１は、ハードディスク装置４０８に記憶された各プログラムを読み出して、ＲＡＭ４０７に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ４００を、例えば図８に示したタグ判定部１０２、タグ符号化部１０３、テキスト符号化部１０４および更新部１０５として機能させることができる。
【０１４０】
なお、上記の文字データ変換プログラムは、必ずしもハードディスク装置４０８に記憶されている必要はない。例えば、コンピュータ４００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ４００が読み出して実行するようにしてもよい。コンピュータ４００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）等に接続された装置にこのプログラムを記憶させておき、コンピュータ４００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１４１】
図２１は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ４００において、図２０に示すハードウェア群２６（４０１〜４０９）の制御を行なうＯＳ（オペレーティング・システム）２７が動作する。ＯＳ２７に従った手順でＣＰＵ４０１が動作して、ハードウェア群２６の制御・管理が行なわれることにより、アプリケーションプログラム２９やミドルウェア２８に従った処理がハードウェア群２６で実行される。さらに、コンピュータ４００において、ミドルウェア２８またはアプリケーションプログラム２９が、ＲＡＭ４０７に読み出されてＣＰＵ４０１により実行される。
【０１４２】
ＣＰＵ４０１により圧縮指示を受け付けた場合、ミドルウェア２８またはアプリケーションプログラム２９の少なくとも一部に基づく処理を行なうことで、（それらの処理をＯＳ２７に基づいてハードウェア群２６を制御して）圧縮部１００ａの圧縮機能が実現される。圧縮機能は、それぞれアプリケーションプログラム２９自体に含まれてもよいし、アプリケーションプログラム２９に従って呼び出されることで実行されるミドルウェア２８の一部であってもよい。
【符号の説明】
【０１４３】
１００、２００  情報処理装置
１００ａ、２００ａ  圧縮部
１００ｂ、２００ｃ  伸長部
１００ｃ、２００ｄ  記憶部
１０１  ファイルリード部
１０２  タグ判定部
１０３  タグ符号化部
１０４  テキスト符号化部
１０５  更新部
１０６  ファイルライト部
１１０  ファイルリード部
１１１  タグコード判定部
１１２  タグ伸長部
１１３  テキスト伸長部
１１４  更新部
１１５  ファイルライト部
２００ｂ  検索部
２０１  検索キー受付部
２０２  検索キー位置検索部
２０３  検索条件合致判定部
２０４  検索結果出力部
【図１】
0006550765.tif 000002
【図２】
0006550765.tif 000003
【図３】
0006550765.tif 000004
【図４】
0006550765.tif 000005
【図５】
0006550765.tif 000006
【図６】
0006550765.tif 000007
【図７】
0006550765.tif 000008
【図８】
0006550765.tif 000009
【図９】
0006550765.tif 000010
【図１０】
0006550765.tif 000011
【図１１】
0006550765.tif 000012
【図１２】
0006550765.tif 000013
【図１３】
0006550765.tif 000014
【図１４】
0006550765.tif 000015
【図１５】
0006550765.tif 000016
【図１６】
0006550765.tif 000017
【図１７】
0006550765.tif 000018
【図１８Ａ】
0006550765.tif 000019
【図１８Ｂ】
0006550765.tif 000020
【図１９】
0006550765.tif 000021
【図２０】
0006550765.tif 000022
【図２１】
0006550765.tif 000023