(57)【特許請求の範囲】
【請求項１】
コンピュータに、
入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録し、
前記動的辞書に登録された文字列それぞれについて、Ｎ個の異なる素数でハッシュ化したそれぞれのハッシュ化データにより特定されるＮ次元マトリックスデータ内の位置に前記動的辞書に登録した前記文字列へのポインタを追加し、
入力された文字列の、前記動的辞書への登録有無を、前記Ｎ次元マトリックスデータを用いて判定し、
前記判定の結果に応じて、前記動的辞書の登録内容に基づき、符号化を行う
処理を行わせる符号化プログラム。
【請求項２】
前記追加する処理は、前記Ｎ個の異なる素数でハッシュ化したそれぞれのハッシュ化データにより特定される前記Ｎ次元マトリックスデータ内の位置が衝突する場合に、前記位置を衝突フラグおよび重複テーブルへのポインタに更新するとともに、前記文字列へのポインタを、前記重複テーブルに登録する
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項３】
前記重複テーブルが満杯となった場合に、前記重複テーブルを容量の大きな重複テーブルに移し替える
ことを特徴とする請求項２に記載の符号化プログラム。
【請求項４】
前記Ｎは２以上である
ことを特徴とする請求項１から請求項３のいずれか１つに記載の符号化プログラム。
【請求項５】
前記追加する処理は、前記Ｎ個の異なる素数でハッシュ化したそれぞれのハッシュ化データにより特定されるＮ次元マトリックスデータ内のポインタに前記動的辞書に登録した前記文字列を対応付ける
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項６】
前記追加する処理は、前記Ｎ個の異なる素数でハッシュ化したそれぞれのハッシュ化データにより特定される前記Ｎ次元マトリックスデータ内のポインタが衝突する場合に、未使用な重複テーブルに対応付け、衝突フラグおよび前記ポインタに更新するとともに、前記文字列に対応付けたポインタを、前記重複テーブルに登録する
ことを特徴とする請求項５に記載の符号化プログラム。
【請求項７】
入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録する登録部と、
前記動的辞書に登録された文字列それぞれについて、Ｎ個の異なる素数でハッシュ化したそれぞれのハッシュ化データにより特定されるＮ次元マトリックスデータ内の位置に前記動的辞書に登録した前記文字列へのポインタを追加する追加部と、
入力された文字列の、前記動的辞書への登録有無を、前記Ｎ次元マトリックスデータを用いて判定する判定部と、
前記判定部によって判定された結果に応じて、前記静的辞書、または、前記動的辞書の登録内容に基づき、符号化を行う符号化部と、
を有することを特徴とする符号化装置。
【請求項８】
コンピュータが、
入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録し、
前記動的辞書に登録された文字列それぞれについて、Ｎ個の異なる素数でハッシュ化したそれぞれのハッシュ化データにより特定されるＮ次元マトリックスデータ内の位置に前記動的辞書に登録した前記文字列へのポインタを追加し、
入力された文字列の、前記動的辞書への登録有無を、前記Ｎ次元マトリックスデータを用いて判定し、
前記判定の結果に応じて、前記動的辞書の登録内容に基づき、符号化を行う
各処理を行うことを特徴とする符号化方法。
【請求項９】
コンピュータに、
入力された単語をＮ個の異なる素数でハッシュ化したそれぞれのハッシュ化データを算出し、
前記算出したそれぞれのハッシュ化データを照合キーとして、静的辞書に含まれない文字列を登録した動的辞書の前記文字列へのポインタを追加したＮ次元マトリックスデータを用いて、前記入力された単語の、前記動的辞書への登録有無を判定する
処理を行わせることを特徴とする照合プログラム。
【請求項１０】
入力された単語をＮ個の異なる素数でハッシュ化したそれぞれのハッシュ化データを算出する算出部と、
前記算出部によって算出されたそれぞれのハッシュ化データを照合キーとして、静的辞書に含まれない文字列を登録した動的辞書の前記文字列へのポインタを追加したＮ次元マトリックスデータを用いて、前記入力された単語の、前記動的辞書への登録有無を判定する判定部と、
を有することを特徴とする照合装置。
【請求項１１】
コンピュータが、
入力された単語をＮ個の異なる素数でハッシュ化したそれぞれのハッシュ化データを算出し、
前記算出したそれぞれのハッシュ化データを照合キーとして、静的辞書に含まれない文字列を登録した動的辞書の前記文字列へのポインタを追加したＮ次元マトリックスデータを用いて、前記入力された単語の、前記動的辞書への登録有無を判定する
各処理を行うことを特徴とする照合方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化プログラなどに関する。
【背景技術】
【０００２】
ＬＺ７７の符号化（例えば、ＺＩＰ、ＧＺＩＰ）においては、スライド窓を利用し、最長一致文字列探索を行い、圧縮符号に最長一致文字列のアドレスと文字列長を割り当てている。例えば、ＧＺＩＰでは、圧縮対象の文字列がスライド窓のいずれかの文字列と一致するかの比較を、２グラムのハッシュ表および連結リストを用いて行う。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−２５２０４９号公報
【特許文献２】特許第３０３８２３３号公報
【特許文献３】特開平１０−２６１９６９号公報
【特許文献４】特開平４−２７４５５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、英文において、先頭２グラム分の文字の分布には偏りがあるため、２グラムのハッシュ表には衝突が生じ、連結リストによる表現が必要となり、この結果、処理量が大きくなり、符号の割り当て速度が低下するという問題がある。
【０００５】
ここで、処理量が大きくなり、符号の割り当て速度が低下するという問題を、図１を参照して説明する。図１は、ハッシュ表と連結リストの構造の参考例を示す図である。例えば、ＧＺＩＰでは、図１に示すように、バッファにハッシュ表と連結リストを用いた構造を持たせている。ハッシュ値は、文字列の先頭のαシンボルから生成される。一例として、２グラムの場合には、αは２である。ＧＺＩＰでは、同じハッシュ値を持つ文字列が現れた順に連結リストを用いてリスト状に連結する。ハッシュ表には、連結リストの先頭ポインタを保存する。そして、圧縮対象の文字列に対して、先頭のシンボルからハッシュ値を生成し、ハッシュ値が同値であれば、リストを辿り、同値のハッシュ値を持つバッファ内の文字列との一致をとることにより、最長一致文字列を求めることができる。最長一致文字列を求めると、最長一致文字列のアドレスと文字列長を圧縮符号として割り当てる。
【０００６】
ところが、２グラムの場合には、先頭２グラム分の文字の分布には偏りがあるため、文字列の先頭の２グラムから生成されるハッシュ値は、２グラムの分布に応じて衝突することがある。ハッシュ値が衝突すると、ハッシュ値に対応する連結リストの先頭ポイントから順次リストを辿って最長一致文字列を探索する。したがって、連結リストを順次辿って最長一致文字列を探索する処理の処理量が大きくなる。この結果、符号の割り当て処理の速度が低下する。
【０００７】
１つの側面では、文字列の符号化のためのリスト照合を高速化することを目的とする。また、１つの側面では、動的辞書を含む符号化文書の復号化において、動的辞書を参照した復号化を高速化することを目的とする。
【課題を解決するための手段】
【０００８】
第１の案では、符号化プログラムは、コンピュータに、入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録し、前記動的辞書に登録された文字列をそれぞれハッシュ化したハッシュ化データを、前記静的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データに追加し、入力された文字列の、前記静的辞書、または、前記動的辞書への登録有無を、前記第１のハッシュ化データを用いて判定し、前記判定の結果に応じて、前記静的辞書、または、前記動的辞書の登録内容に基づき、符号化を行う処理を実行させる。
【発明の効果】
【０００９】
１つの態様によれば、文字列の符号化のためのリスト照合を高速化することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、ハッシュ表と連結リストの構造の参考例を示す図である。
【図２Ａ】図２Ａは、実施例に係る符号化処理の流れの一例を示す図である。
【図２Ｂ】図２Ｂは、実施例に係る符号化処理の流れの一例を示す図である。
【図２Ｃ】図２Ｃは、実施例に係る符号化処理の流れの一例を示す図である。
【図３】図３は、実施例に係る動的辞書の一例を示す図である。
【図４】図４は、実施例に係る符号化装置の構成を示す機能ブロック図である。
【図５】図５は、静的辞書の一例を示す図である。
【図６Ａ】図６Ａは、実施例に係る符号化処理のフローチャートの一例を示す図（１）である。
【図６Ｂ】図６Ｂは、実施例に係る符号化処理のフローチャートの一例を示す図（２）である。
【図７】図７は、管理領域の移し替え処理のフローチャートの一例を示す図である。
【図８】図８は、符号化ファイルの構成例を示す図である。
【図９】図９は、実施例に係る照合処理の流れの一例を示す図である。
【図１０】図１０は、実施例に係る照合装置の構成を示す機能ブロック図である。
【図１１】図１１は、実施例に係る照合処理のフローチャートの一例を示す図である。
【図１２】図１２は、実施例の情報処理装置のハードウェア構成を示す図である。
【図１３】図１３は、コンピュータで動作するプログラムの構成例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する符号化プログラム、符号化装置、符号化方法、照合プログラム、照合装置および照合方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１２】
［実施例に係る符号化処理］
図２Ａ〜図２Ｃは、実施例に係る符号化装置の符号化処理の流れの一例を示す図である。
【００１３】
まず、符号化装置１００は、それぞれの単語に、４ビットのヘッダと、２０ビットの整数を割当て、３バイトの基本単語コードとして静的辞書に登録する。例えば、単語「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にＦ００３ＢＥｈを割り当てる。また、高頻度な単語には、その頻度に応じて可変長の静的符号が割り当てられ、低頻度な単語には、出現順に２〜３バイトの動的符号が割り当てられる。
【００１４】
ここで、英和辞典の単語と２０ビットの整数との関係について説明する。リーダーズ英和辞典には、約２７万語の単語が収められている。オックスフォード英英辞典には、約５０万語の単語が収められている。いずれの辞典も、単語の数が１００万語以内である。これに対して、２０ビットは最大１ＭＢ（メガバイト）であるので、１００万語の単語を表すことが可能である。つまり、いずれの辞典も、２０ビットの整数で単語の識別が可能である。
【００１５】
また、図２Ａに示すように、符号化装置１００は、２次元のハッシュ化マトリックスを利用して単語への符号割当てを行う。例えば、符号化装置１００は、単語「ａｃｃｅｓｓｉｂｉｌｉｔｙ（６１６３６３６５７３７３６９６２６９６Ｃ６９７４７９ｈ）」をＡハッシュするとともにＢハッシュする。ここでいうＡハッシュとは、単語をある素数Ａで割った余りを算出することをいう。ここでいうＢハッシュとは、ハッシュ化データをＡハッシュで用いた素数と異なる素数Ｂで割った余りを算出することをいう。一例として、符号化の対象の単語数が１００００語であるとすると、Ａハッシュで算出される余りとＢハッシュで算出される余りとから表わせる２次元の行列（マトリックス）が約１００００となるように、ＡハッシュおよびＢハッシュで用いられる素数が選択される。選択される素数は、行列の数が１０００の場合、一例として、９７と１０１である。つまり、最小公倍数が約１００００となる２次元のマトリックス空間の中で、ある単語についてＡハッシュおよびＢハッシュで求められる余りの組は、他の単語について求められる余りの組と衝突しない（重複しない）であろうという推測に基づくものである。選択された素数９７は一例としてＡハッシュで用いられ、Ａハッシュで算出された値は０〜９６のいずれかの値となる。選択された素数１０１は一例としてＢハッシュで用いられ、Ｂハッシュで算出された値は、０〜１００のいずれかの値となる。なお、Ａハッシュで算出される余りとＢハッシュで算出される余りとから表わせる２次元のハッシュ化マトリックスのことを、以降、「２次元マトリックス」というものとする。また、Ａハッシュ、Ｂハッシュという名称は、これに限定されず、２つのハッシュの区別がつくような名称であれば良い。
【００１６】
符号化装置１００は、２次元にハッシュ化された余りの組を用いて、２次元マトリックス１２１の要素（位置）をみつける。みつけた位置には、ポインタ情報が記憶される。ここで、ポインタ情報には、次の２種類がある。１種類目は、余りの組に重複がない場合である。すなわち、余りの組が衝突しない場合である。かかる場合のポインタ情報ｐ１は、識別フラグ「０」および動的コード（符号）を指す単語へのポインタを含む。２種類目は、余りの組に重複がある場合である。すなわち、余りの組が衝突する場合である。かかる場合のポインタ情報ｐ２は、識別フラグ「１」および重複テーブル１２３へのポインタを含む。重複テーブル１２３とは、２次元ハッシュ化で得られた余りの組が重複する場合に、重複する余りの組に対する複数の単語について、動的コード（符号）を指す単語へのポインタを管理するテーブルである。なお、重複テーブル１２３に関する詳しい説明は、後述する。
【００１７】
図２Ｂに示すように、符号化装置１００は、みつけた位置のポインタ情報を用いて、符号化する単語が動的辞書１２２に登録されているか否かを判定する。
【００１８】
ここで、まず、静的辞書とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書のことをいう。これに対して、動的辞書１２２とは、静的辞書に登録されていない単語と動的に付された動的コード（符号）とを対応付けた辞書である。静的辞書に登録されていない単語には、一例として、出現頻度の低い単語（低頻度単語）、未知語、数値、時刻、タグなどがある。ここでいう未知語とは、静的辞書に登録されていない単語であり、符号化する文書の中で繰り返し出現する特長がある単語のことをいう。動的辞書１２２には、静的辞書に登録されていない単語の出現順に、動的コードに対応付けられた単語がバッファ部に登録されている。
【００１９】
例えば、符号化装置１００は、みつけた位置のポインタ情報の識別フラグが「０」である場合には、ポインタ情報に含まれる単語へのポインタを辿り、符号化する単語が動的辞書１２２に登録されているか否かを判定する。符号化装置１００は、符号化する単語が動的辞書１２２に登録されている場合には、当該単語を、登録されている単語に対応する動的コードに符号化する。これにより、符号化装置１００は、１パスで符号化する場合であっても、連結リストを順次辿ることなく、且つ、高速に、符号化対象の単語を符号化することができる。
【００２０】
符号化装置１００は、符号化する単語が動的辞書１２２に登録されていない場合には、単語を動的辞書１２２に登録し、動的辞書１２２に基づいて、当該単語を、登録した単語に対応する動的コードに符号化する。この場合、みつけた位置に重複がある場合である。かかる場合には、符号化装置１００は、２次元マトリックス１２１のみつけた位置に、識別フラグ「１」と重複テーブル１２３へのポインタとを含むポインタ情報を再登録する。符号化装置１００は、重複テーブル１２３へのポインタが指す管理領域の未使用の位置に、使用中であることを示すＯＮと動的コード（符号）を指す単語へのポインタを設定する。ここでは、みつけた位置に重複があった２つ分の単語に対して設定される。
【００２１】
符号化装置１００は、みつけた位置のポインタ情報の識別フラグが「１」である場合には、ポインタ情報に含まれる重複テーブル１２３へのポインタを辿り、辿ったポインタが指す管理領域を探索対象として、符号化する単語が動的辞書１２２に登録されているか否かを判定する。符号化装置１００は、符号化する単語が動的辞書１２２に登録されている場合には、当該単語を、登録されている単語に対応する動的コードに符号化する。
【００２２】
符号化装置１００は、符号化する単語が動的辞書１２２に登録されていない場合には、単語を動的辞書１２２に登録し、動的辞書１２２に基づいて、登録した単語に対応する動的コードに符号化する。この場合、みつけた位置にさらに重複がある場合である。かかる場合には、符号化装置１００は、重複テーブル１２３へのポインタが指す管理領域の未使用の位置に、使用中であることを示す「０」（以降、ＯＮと同義）と動的コード（符号）を指す単語へのポインタを設定する。
【００２３】
ここで、重複テーブル１２３は、４段用の管理領域、８段用の管理領域および２ｎ段用の管理領域（ｎ：４以上の整数）を備える。個々の管理領域は、２次元マトリックス１２１の所定の位置に重複があった場合に、当該位置に対して割り当てられる。４段用の管理領域は、同じ位置で重複があった場合に、最大４個の単語の登録情報を管理する領域であり、複数確保されている。８段用の管理領域は、同じ位置で重複があった場合に、最大８個の単語の登録情報を管理する領域であり、複数確保されている。
【００２４】
図２Ｃに示すように、新たに同じ位置で重複があったときに、該当する４段用の管理領域が満杯であるため、溢れてしまう場合がある。すなわち、管理領域に未使用の位置がない場合である。かかる場合には、符号化装置１００は、４段用の管理領域に設定された情報を、４段用の管理領域より大きい容量の８段用の管理領域に移し替える。符号化装置１００は、移し替える前の管理領域を、全段分未使用であることを示す「００００」（以降、ＯＦＦと同義）に更新する。符号化装置１００は、移し替えた先の重複テーブル１２３へのポインタを２次元マトリックスの該当するポインタ情報に再登録する。そして、符号化装置１００は、新たに同じ位置で重複があった単語について、移し替えた先の管理領域の未使用の位置に、使用中であることを示すＯＮと動的コード（符号）を指す単語へのポインタを設定する。符号化装置１００は、新たに同じ位置で重複があった単語を動的コードに符号化する。これにより、符号化装置１００は、管理領域が満杯となっても、管理領域の容量を変化させることで、重複テーブル１２３を効率的に使用することができる。
【００２５】
［動的辞書の一例］
図３は、実施例に係る動的辞書の一例を示す図である。図３に示される動的辞書１２２は、ポインタ部１２２ａとバッファ部１２２ｂとを含む。バッファ部１２２ｂは、単語の文字列を記憶する。ポインタ部１２２ａは、動的コードと、種別と、ポインタとを対応付けて保持する。動的コードは、あらかじめ定められた固定長のコード（符号）であり、単語がバッファ部１２２ｂに登録された順に割り当てられるコードである。種別は、登録された単語の種類を区別するために用いられるものである。種別には、例えば、低頻度単語である場合には「１」が設定され、未知語である場合には「２」が設定され、数値である場合には「３」が設定され、時刻である場合には「４」が設定され、タグである場合には「５」が設定される。ポインタは、バッファ部１２２ｂに格納された単語の先頭を指す。なお、ポインタは、格納位置およびデータ長であっても良い。格納位置は、バッファ部１２２ｂに格納された単語の先頭からの開始位置を示し、データ長は、格納された単語の文字列の長さ（バイト長）を示す。
【００２６】
一例として、単語「accessibility」がバッファ部１２２ｂに登録された単語である場合には、符号化装置１００は、単語「accessibility」に対応するポインタにバッファ部１２２ｂの先頭を指すポインタを登録する。また、符号化装置１００は、単語「accessibility」の種別として「２」（未知語）を登録する。
【００２７】
図３に示すように、単語「accessibility」が動的辞書１２２に登録されたとすると、単語「accessibility」の動的コードは「Ａ００１ｈ」となる。この場合には、符号化装置１００は、単語「accessibility」を、動的コード「Ａ００１ｈ」に符号化する。
【００２８】
［符号化装置の構成］
図４は、実施例に係る符号化装置の構成を示す機能ブロック図である。図４に示すように、符号化装置１００は、符号化部１１０および記憶部１２０を有する。
【００２９】
符号化部１１０は、図２Ａ〜図２Ｃに示した符号化処理を実行する処理部である。符号化部１１０は、ファイルリード部１１１、単語判定部１１２、２次元ハッシュ化部１１３、識別フラグ判定部１１４、第１符号化部１１５、第２符号化部１１６およびファイルライト部１１７を有する。
【００３０】
記憶部１２０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部１２０は、２次元マトリックス１２１、動的辞書１２２、重複テーブル１２３および静的辞書１２４を有する。
【００３１】
２次元マトリックス１２１は、Ａハッシュで算出される余りとＢハッシュで算出される余りとから表わせる２次元の行列（マトリックス）である。ここでいう２次元の行列（マトリックス）は、第１のハッシュ化データの一例である。なお、２次元マトリックス１２１の説明は、図２Ａおよび図２Ｂと同様であるので、その説明を省略する。
【００３２】
動的辞書１２２は、静的辞書１２４に登録されていない単語と動的に付された動的コード（符号）とを対応付けた辞書である。なお、動的辞書１２２の説明は、図３と同様であるので、その説明を省略する。
【００３３】
重複テーブル１２３は、２次元ハッシュ化で得られた余りの組が重複する場合に、重複する余りの組に対する複数の単語について、動的コード（符号）を指す単語へのポインタを管理する。なお、重複テーブル１２３の説明は、図２Ｂおよび図２Ｃと同様であるので、その説明を省略する。
【００３４】
静的辞書１２４は、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。ここで、静的辞書１２４の一例を、図５を参照して説明する。図５は、静的辞書の一例を示す図である。
【００３５】
図５に示すように、静的辞書１２４は、基礎単語と、文字列長と、出現頻度と、圧縮符号と、動的符号と、基本単語コードとを対応付ける。「基礎単語」は、静的辞書１２４に登録された単語である。例えば、「基礎単語」とは、辞典、テキスト群などからあらかじめ抽出された約１９万語の単語である。なお、「基礎単語」として登録される単語数は、任意の語数でよい。それぞれの単語には、３バイトの「基本単語コード」が割り当てられ、登録される。
【００３６】
「文字列長」は、基礎単語の文字列の長さである。「出現頻度」は、頻度集計用のテキストファイル群において各基礎単語が出現した回数である。ここでいう頻度集計用のテキストファイル群とは、あらかじめ用意された各基礎単語の出現頻度を集計するための１以上のテキストファイルである。
【００３７】
基礎単語の出現頻度の集計について説明する。符号化装置１００は、頻度集計用のテキストファイルを読み込み、頻度集計用のテキストファイル群に存在する単語を適宜抽出して静的辞書１２４に登録する。さらに、符号化装置１００は、静的辞書１２４に登録された各々の基礎単語に関し、頻度集計用のテキストファイル群において出現した回数を出現頻度としてカウントする。例えば、図５の例において、静的辞書１２４は、基礎単語「able」が、頻度集計用のテキストファイル群において「785」回出現したことを示す。
【００３８】
「圧縮符号」、「動的符号」は、それぞれ各基礎単語に割り当てられる圧縮符号である。符号化装置１００は、高頻度な単語には、その頻度に応じた可変長の圧縮符号を割り当てる。一方、低頻度な単語には、その出現順に２〜３バイトの動的符号（動的コード）を割り当てる。
【００３９】
なお、静的辞書１２４は、図５に示すようにフィルタ部と連関させても良い。フィルタ部とは、符号化する単語が静的辞書１２４に登録されているか否かを判定するフィルタである。フィルタ部は、２グラムと、ビットフィルタとを含む。「２グラム」は、各単語に含まれる連続する文字である。例えば「able」は、「ab」「bl」「le」に対応する２グラムを有する。「ビットフィルタ」は、２グラムの文字列に対応するビットフィルタを表す。例えば、「able」は、基礎単語へのポインタによって、２グラム「ab」のビットフィルタ「１＿０＿０＿０＿０」と、２グラム「bl」のビットフィルタ「０＿１＿０＿０＿０」と、２グラム「le」のビットフィルタ「０＿０＿１＿０＿０」とに対応付けられる。例えば、符号化装置１００は、符号化する単語「able」を取得した場合に、２グラム「ab」のビットフィルタ「１＿０＿０＿０＿０」と、２グラム「bl」のビットフィルタ「０＿１＿０＿０＿０」と２グラム「le」のビットフィルタ「０＿０＿１＿０＿０」を用いて基礎単語「able」にアクセスする。また、静的辞書１２４は、２次元マトリックスと連関させることも可能である。
【００４０】
ファイルリード部１１１は、符号化対象のファイルのコンテンツ部分のデータを読み出す。ファイルリード部１１１は、読み出したデータに含まれる文字列を先頭から走査し、終端記号を区切りとする単語を順次抽出し、抽出した単語を単語判定部１１２に順次出力する。
【００４１】
単語判定部１１２は、符号化する単語が静的辞書１２４に登録されているか否かを判定する。例えば、単語判定部１１２は、単語が静的辞書１２４の基礎単語にヒットするか否かを判定する。単語判定部１１２は、単語が静的辞書１２４の基礎単語にヒットしないと判定した場合には、単語を２次元ハッシュ化部１１３に出力する。なお、単語判定部１１２は、単語が静的辞書１２４の基礎単語にヒットすると判定した場合には、当該単語を、ヒットした基礎単語に対応する単語コードに符号化する。
【００４２】
２次元ハッシュ化部１１３は、符号化する単語を２次元ハッシュ化する。
【００４３】
例えば、２次元ハッシュ化部１１３は、符号化する単語をＡハッシュするとともに、当該単語をＢハッシュする。具体的には、Ａハッシュが、単語を素数９７で割った余りを算出することであるとする。Ｂハッシュが、単語を素数１０１で割った余りを算出することであるとする。単語が「８６５７」（１０進数）であるとする。すると、２次元ハッシュ化部１１３は、Ａハッシュとして、８６５７を素数９７で割った余り２４を算出する。２次元ハッシュ化部１１３は、Ｂハッシュとして、８６５７を素数１０１で割った余り４１を算出する。
【００４４】
また、２次元ハッシュ化部１１３は、Ａハッシュで算出された余りおよびＢハッシュで算出された余りの組に対応する２次元マトリックス１２１の行列要素(位置)をみつける。２次元ハッシュ化部１１３は、みつけた行列要素（位置）に設定されたポインタ情報を識別フラグ判定部１１４に出力する。具体的には、２次元ハッシュ化部１１３は、（２４、４１）に対応する２次元マトリックス１２１の位置をみつけ、この位置に設定されたポインタ情報を識別フラグ判定部１１４に出力する。
【００４５】
識別フラグ判定部１１４は、ポインタ情報の識別フラグを判定する。例えば、識別フラグ判定部１１４は、ポインタ情報の識別フラグが、余りの組に重複がないことを示す「０」であるか否かを判定する。識別フラグ判定部１１４は、ポインタ情報の識別フラグが、余りの組に重複がないことを示す「０」であると判定した場合には、符号化する単語およびポインタ情報を第１符号化部１１５に出力する。識別フラグ判定部１１４は、ポインタ情報の識別フラグが、余りの組に重複がないことを示す「０」でないと判定した場合には、符号化する単語およびポインタ情報を第２符号化部１１６に出力する。
【００４６】
第１符号化部１１５は、ポインタ情報に含まれる単語へのポインタを用いて、符号化する単語を符号化する。
【００４７】
例えば、第１符号化部１１５は、ポインタ情報に含まれる単語へのポインタを辿り、符号化する単語が動的辞書１２２に登録されているか否かを判定する。第１符号化部１１５は、符号化する単語が動的辞書１２２に登録されていると判定した場合には、当該単語を、登録されている単語に対応する動的コードに符号化する。
【００４８】
一例として、動的辞書１２２が図３に示す場合について説明する。符号化する単語が「accessibility」であるとする。すると、第１符号化部１１５は、ポインタ情報に含まれる単語へのポインタを辿り、符号化する単語「accessibility」が動的辞書１２２のポインタ部１２２ａのポインタが指す単語と一致するか否かを判定する。ここでは、第１符号化部１１５は、一致するので、符号化する単語「accessibility」が動的辞書１２２に登録されていると判定する。第１符号化部１１５は、符号化する単語「accessibility」を、登録されている単語に対応する動的コード「Ａ００１ｈ」に符号化する。
【００４９】
また、第１符号化部１１５は、符号化する単語が動的辞書１２２に登録されていないと判定した場合には、単語を動的辞書１２２に登録する。第１符号化部１１５は、動的辞書１２２に基づいて、当該単語を、登録した単語に対応する動的コードに符号化する。第１符号化部１１５は、ポインタ情報の識別フラグ「１」と重複テーブル１２３へのポインタとを含むポインタ情報を再登録する。第１符号化部１１５は、重複テーブル１２３へのポインタが指す管理領域の未使用の位置に、使用中であることを示すＯＮと再登録前のポインタ情報に設定されていた動的コードを指す単語へのポインタとを設定する。第１符号化部１１５は、同じ管理領域の未使用の位置に、使用中であることを示すＯＮと今回動的辞書１２２に登録された単語へのポインタとを設定する。
【００５０】
一例として、動的辞書１２２が図２Ｂに示す場合について説明する。符号化する単語が「YYYY」であるとする。符号化する単語のＡハッシュの余りが３、Ｂハッシュの余りが１であるとする。すると、第１符号化部１１５は、余りの組（３、１）に対応する行列要素のポインタ情報に含まれる単語へのポインタを辿り、符号化する単語「YYYY」が動的辞書１２２のポインタ部１２２ａのポインタが指す単語と一致するか否かを判定する。ここでは、第１符号化部１１５は、符号化する単語「YYYY」がポインタ部１２２ａのポインタが指す単語「accessibility」と一致しないので、符号化する単語「YYYY」が動的辞書１２２に登録されていないと判定する。第１符号化部１１５は、符号化する単語「YYYY」をバッファ部１２２ｂに登録する。第１符号化部１１５は、動的辞書１２２に基づいて、単語「YYYY」を、まだ使用されていない動的コード「Ａ００２ｈ」に符号化する。第１符号化部１１５は、余りの組（３、１）に対応する行列要素のポインタ情報の識別フラグ「１」と重複テーブル１２３へのポインタとを含むポインタ情報を再登録する。そして、第１符号化部１１５は、再登録した重複テーブル１２３へのポインタが指す管理領域の未使用の位置に、使用中であることを示すＯＮと再登録前のポインタ情報に設定されていた動的コード（「Ａ００１ｈ」）を指す単語へのポインタとを設定する。第１符号化部１１５は、同じ管理領域の未使用の位置に、使用中であることを示すＯＮと今回動的辞書１２２に登録された、動的コード「Ａ００２ｈ」を指す単語へのポインタとを設定する。
【００５１】
なお、第１符号化部１１５は、ポインタ情報に含まれる単語へのポインタが初期値である場合には、符号化する単語が動的辞書１２２に登録されていないので、当該単語を動的辞書１２２に登録する。第１符号化部１１５は、動的辞書１２２に基づいて、当該単語を、登録した単語に対応する動的コードに符号化する。第１符号化部１１５は、識別フラグ「０」と動的辞書１２２に登録された単語へのポインタとを含むポインタ情報を登録する。
【００５２】
第２符号化部１１６は、ポインタ情報に含まれる重複テーブル１２３へのポインタを用いて、符号化する単語を符号化する。
【００５３】
例えば、第２符号化部１１６は、ポインタ情報に含まれる重複テーブル１２３へのポインタを辿り、ポインタが指す管理領域を探索対象として、符号化する単語が動的辞書１２２に登録されているか否かを判定する。第２符号化部１１６は、符号化する単語が動的辞書１２２に登録されていると判定した場合には、当該単語を、登録されている単語に対応する動的コードに符号化する。
【００５４】
一例として、動的辞書１２２が図２Ｂに示す場合について説明する。符号化する単語が「XXXX」であるとする。符号化する単語のＡハッシュの余りが５、Ｂハッシュの余りが０であるとする。すると、第２符号化部１１６は、余りの組（５、０）に対応する行列要素のポインタ情報に含まれる重複テーブル１２３へのポインタを辿り、符号化する単語「XXXX」が動的辞書１２２のポインタ部１２２ａのポインタが指す単語と一致するか否かを判定する。ここでは、第２符号化部１１６は、ポインタが指す管理領域の１段目で一致するので、符号化する単語「XXXX」が動的辞書１２２に登録されていると判定する。第２符号化部１１６は、符号化する単語「XXXX」を、登録されている単語に対応する動的コード「Ａ０００ｈ」に符号化する。
【００５５】
また、第２符号化部１１６は、符号化する単語が動的辞書１２２に登録されていないと判定した場合には、単語を動的辞書１２２に登録する。第２符号化部１１６は、動的辞書１２２に基づいて、当該単語を、登録した単語に対応する動的コードに符号化する。第２符号化部１１６は、重複テーブル１２３へのポインタが指す管理領域の未使用の位置に、使用中であることを示すＯＮと今回動的辞書１２２に登録された単語へのポインタとを設定する。
【００５６】
一例として、動的辞書１２２が図２Ｂに示す場合について説明する。符号化する単語が「AAAA」であるとする。符号化する単語のＡハッシュの余りが５、Ｂハッシュの余りが０であるとする。すると、第２符号化部１１６は、余りの組（５、０）に対応する行列要素のポインタ情報に含まれる重複テーブル１２３へのポインタを辿り、符号化する単語「AAAA」が動的辞書１２２のポインタ部１２２ａのポインタが指す単語と一致するか否かを判定する。ここでは、第２符号化部１１６は、符号化する単語「AAAA」がポインタ部１２２ａのポインタが指す単語と一致しないので、符号化する単語「AAAA」が動的辞書１２２に登録されていないと判定する。第２符号化部１１６は、符号化する単語「AAAA」をバッファ部１２２ｂに登録する。第２符号化部１１６は、動的辞書１２２に基づいて、単語「AAAA」を、まだ使用されていない動的コード「Ａ００２ｈ」に符号化する。そして、第２符号化部１１６は、重複テーブル１２３へのポインタが指す管理領域の未使用の位置に、使用中であることを示すＯＮと今回動的辞書１２２に登録された、動的コード「Ａ００２ｈ」を指す単語へのポインタとを設定する。
【００５７】
なお、重複テーブル１２３へのポインタが指す管理領域に未使用の位置がない場合には、第２符号化部１１６は、管理領域が満杯であると判断し、管理領域に設定された情報を、現管理領域より大きい容量の管理領域に移し替えれば良い。そして、第２符号化部１１６は、ポインタ情報内のポインタを、移し替えた先の新たな管理領域に対する重複テーブル１２３へのポインタに代えて、当該ポインタ情報を再登録する。
【００５８】
ファイルライト部１１７は、第１符号化部１１５および第２符号化部１１６から符号化データを取得し、取得した符号化データを符号化ファイルに書き込む。
【００５９】
［符号化処理のフローチャート］
図６Ａおよび図６Ｂは、実施例に係る符号化処理のフローチャートの一例を示す図である。
【００６０】
まず、符号化装置１００は、符号化対象のファイルを読み出す（ステップＳ１１）。符号化装置１００は、読み出したファイルから単語を読み出す（ステップＳ１２）。例えば、符号化装置１００は、ファイルに含まれる文字列を走査し、終端記号を区切りとする単語を読み出す。
【００６１】
続いて、符号化装置１００は、読み出した単語が静的辞書１２４に登録済みであるか否かを判定する（ステップＳ１３）。例えば、符号化装置１００は、読み出した単語が静的辞書１２４の基礎単語にヒットするか否かを判定する。
【００６２】
読み出した単語が静的辞書１２４に登録済みでないと判定した場合には（ステップＳ１３；Ｎｏ）、符号化装置１００は、読み出した単語を２次元にハッシュ化する（ステップＳ１６）。例えば、符号化装置１００は、読み出した単語をＡハッシュするとともに、読み出した単語をＢハッシュする。
【００６３】
続いて、符号化装置１００は、２次元にハッシュ化して得られた組に対応する２次元マトリックス１２１の行列要素（位置）をみつける。そして、符号化装置１００は、みつけた位置に設定されたポインタ情報の識別フラグが「０」（重複なし）であるか否かを判定する（ステップＳ１７）。ポインタ情報の識別フラグが「０」であると判定した場合には（ステップＳ１７；Ｙｅｓ）、符号化装置１００は、ポインタ情報の単語へのポインタが初期値であるか否かを判定する（ステップＳ１８）。
【００６４】
ポインタ情報の単語へのポインタが初期値であると判定した場合には（ステップＳ１８；Ｙｅｓ）、符号化装置１００は、読み出した単語がまだ動的辞書に１２２に登録されていないと判断し、当該単語を動的辞書１２２に登録する（ステップＳ１９）。そして、符号化装置１００は、識別フラグ「０」と、動的辞書１２２に登録された単語へのポインタとを含むポインタ情報を２次元マトリックス１２１の位置に登録する（ステップＳ２０）。そして、符号化装置１００は、単語へのポインタが示す動的コードを符号化データとして出力する（ステップＳ２１）。
【００６５】
一方、ポインタ情報の単語へのポインタが初期値でないと判定した場合には（ステップＳ１８；Ｎｏ）、符号化装置１００は、当該単語へのポインタを基に、動的辞書１２２を参照する（ステップＳ２２）。そして、符号化装置１００は、読み出した単語が動的辞書１２２に登録されているか否かを判定する（ステップＳ２３）。読み出した単語が動的辞書１２２に登録されていると判定した場合には（ステップＳ２３；Ｙｅｓ）、符号化装置１００は、読み出した単語を符号化すべく、ステップＳ２１に移行する。
【００６６】
一方、読み出した単語が動的辞書１２２に登録されていないと判定した場合には（ステップＳ２３；Ｎｏ）、符号化装置１００は、当該単語を動的辞書１２２に登録する（ステップＳ２４）。そして、符号化装置１００は、識別フラグ「１」と、重複テーブル１２３へのポインタとを含むポインタ情報を２次元マトリックス１２１の位置に再登録する（ステップＳ２５）。そして、符号化装置１００は、重複テーブル１２３へのポインタが示す管理領域の未使用の位置にＯＮと、再登録前のポインタ情報に設定されていた単語へのポインタとを設定する（ステップＳ２６）。符号化装置１００は、同じ管理領域の未使用の位置にＯＮと、今回動的辞書１２２に登録された単語へのポインタとを設定する（ステップＳ２７）。そして、符号化装置１００は、読み出した単語を符号化すべく、ステップＳ２１に移行する。
【００６７】
ステップＳ１７において、符号化装置１００は、ポインタ情報の識別フラグが「０」（重複なし）でないと判定した場合には（ステップＳ１７；Ｎｏ）、符号化装置１００は、重複テーブル１２３へのポインタが示す管理領域を基に、動的辞書１２２を参照する（ステップＳ２８）。そして、符号化装置１００は、読み出した単語が動的辞書１２２に登録されているか否かを判定する（ステップＳ２９）。読み出した単語が動的辞書１２２に登録されていると判定した場合には（ステップＳ２９；Ｙｅｓ）、符号化装置１００は、読み出した単語を符号化すべく、ステップＳ２１に移行する。
【００６８】
一方、読み出した単語が動的辞書１２２に登録されていないと判定した場合には（ステップＳ２９；Ｎｏ）、符号化装置１００は、当該単語を動的辞書１２２に登録する（ステップＳ３０）。そして、符号化装置１００は、管理領域の移し替え処理を実行する（ステップＳ３１）。なお、管理領域の移し替え処理のフローチャートは、後述する。
【００６９】
管理領域の移し替え処理を実行後、符号化装置１００は、重複テーブル１２３へのポインタが示す管理領域の未使用の位置にＯＮと、今回動的辞書１２２に登録された単語へのポインタとを設定する（ステップＳ３２）。そして、符号化装置１００は、読み出した単語を符号化すべく、ステップＳ２１に移行する。
【００７０】
そして、符号化装置１００は、符号化対象のファイルの終点であるか否かを判定する（ステップＳ３４）。符号化対象のファイルの終点でないと判定した場合には（ステップＳ３４；Ｎｏ）、符号化装置１００は、次の単語を読み出すべく、ステップＳ１２に移行する。
【００７１】
一方、符号化対象のファイルの終点であると判定した場合には（ステップＳ３４；Ｙｅｓ）、符号化装置１００は、符号化処理を終了する。
【００７２】
なお、ステップＳ３３において、読み出した単語が静的辞書１２４に登録済みであると判定した場合には（ステップＳ１３；Ｙｅｓ）、符号化装置１００は、静的辞書１２４を用いて、単語に対する単語コードを符号化データとして出力する（ステップＳ３３）。そして、符号化装置１００は、ステップＳ３４に移行する。
【００７３】
図７は、管理領域の移し替え処理のフローチャートの一例を示す図である。
【００７４】
［移し替え処理のフローチャート］
図７に示すように、符号化装置１００は、重複テーブル１２３へのポインタが示す管理領域に未使用の位置があるか否かを判定する（ステップＳ４１）。
【００７５】
管理領域に未使用の位置がないと判定した場合には（ステップＳ４１；Ｎｏ）、符号化装置１００は、重複テーブル１２３へのポインタが示す管理領域に設定された情報を、現管理領域より大きい容量の管理領域に移し替える（ステップＳ４２）。そして、符号化装置１００は、移し替えた先の新たな管理領域に対する重複テーブル１２３へのポインタを２次元マトリックス１２１の位置に再登録する（ステップＳ４３）。そして、符号化装置１００は、管理領域の移し替え処理を終了する。
【００７６】
一方、管理領域に未使用の位置があると判定した場合には（ステップＳ４１；Ｙｅｓ）、符号化装置１００は、当該管理領域を移し替える必要がないので、管理領域の移し替え処理を終了する。
【００７７】
［実施例の効果］
上記実施例によれば、符号化装置１００は、入力された文字データのうち、静的辞書１２４に含まれない文字列を、動的辞書１２２に順次登録する。符号化装置１００は、動的辞書１２２に登録された文字列をハッシュ化したハッシュ化データを、静的辞書１２４の各登録項目の単語を２次元ハッシュ化した第１のハッシュ化データに追加する。符号化装置１００は、入力された文字列の、静的辞書１２４、または、動的辞書１２２への登録有無を、第１のハッシュ化データを用いて判定する。符号化装置１００は、判定結果に応じて、静的辞書１２４、または、動的辞書１２２の登録内容に基づき、符号化を行う。かかる構成によれば、符号化装置１００は、１パスで符号化する場合であっても、動的辞書１２２を順次走査することなく、且つ、高速に、符号化対象の文字データを符号化できる。
【００７８】
また、上記実施例によれば、符号化装置１００は、２次元ハッシュ化した第１のハッシュ化データが衝突する場合に、第１のハッシュ化データを、重複テーブル１２３に登録する。かかる構成によれば、符号化装置１００は、第１のハッシュ化データが衝突する場合に重複テーブル１２３を用いることで、リストを辿ることが必要な重複テーブル１２３のサイズを縮小することができるとともに、高速に符号化できる。
【００７９】
また、上記実施例によれば、符号化装置１００は、重複テーブル１２３が満杯となった場合に、既に登録された第１のハッシュ化データを容量の大きな重複テーブル１２３に移し替える。かかる構成によれば、符号化装置１００は、第１のハッシュ化データが衝突した場合であっても、衝突した数に合わせて重複テーブル１２３の容量を変化させることで、重複テーブル１２３を効率的に使用することができる。
【００８０】
また、上記実施例によれば、符号化装置１００は、重複テーブル１２３に関し、第１のハッシュ化データごとにデータを管理する領域を確保する。かかる構成によれば、符号化装置１００は、連結リストを第１のハッシュ化データごとに分けて用いることで、該当する第１のハッシュ化データを高速に探索できるとともに、高速に符号化できる。
【００８１】
［実施例に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【００８２】
実施例に係る符号化装置１００の２次元ハッシュ化部１１３は、符号化する単語に対するハッシュ化データを２次元にハッシュ化し、２次元ハッシュ化に対応する２次元マトリックス１２１の行列要素（位置）をみつける。２次元ハッシュ化部１１３は、みつけた行列位置（要素）に設定されたポインタ情報を識別フラグ判定部１１４に出力すると説明した。しかしながら、２次元ハッシュ化部１１３は、２次元に限定されず、Ｎ次元であっても良い。すなわち、２次元ハッシュ化部１１３は、符号化する単語に対するハッシュ化データをＮ次元にハッシュ化し、Ｎ次元ハッシュ化に対応するＮ次元マトリックスの行列要素（位置）をみつける。２次元ハッシュ化部１１３は、みつけた行列位置（要素）に設定されたポインタ情報を識別フラグ判定部１１４に出力する。かかる構成によれば、符号化装置１００は、ハッシュ化データをＮ次元にハッシュ化し、Ｎ次元ハッシュ化をＮ次元マトリックスに対応させることで、符号化する単語を可能な限り一意にＮ次元マトリックスに紐付けることができる。この結果、符号化装置１００は、Ｎ次元マトリックスを用いて高速に符号化することができる。
【００８３】
また、実施例に係る符号化装置１００では、一例として、静的辞書１２４は、ビットフィルタと連関させ、ビットフィルタを用いて、符号化する単語が静的辞書１２４に登録されているか否かを判定すると説明した。しかしながら、符号化装置１００では、これに限定されず、静的辞書１２４に登録されている各登録項目の単語をそれぞれ２次元ハッシュ化しても良い。そして、符号化装置１００は、２次元ハッシュ化に対応する２次元マトリックス１２１の行列要素（位置）にそれぞれのポインタ情報をあらかじめ登録する。静的辞書１２４の場合のポインタ情報には、識別フラグ「０」（重複なし）および単語コード（符号）を指す単語へのポインタを含むようにすれば良い。これにより、符号化装置１００は、ビットフィルタに代えて２次元マトリックス１２１を用いて、符号化する単語が静的辞書１２４に登録されているか否かを判定することができる。そして、符号化装置１００は、登録されていれば、登録されている単語に対する単語コードを符号化データとして出力する。符号化装置１００は、登録されていなければ、動的辞書１２２を用いた符号化を行う。
【００８４】
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８５】
また、実施例に係る符号化装置１００は、動的辞書１２２を、入力された単語と照合して、当該単語に割り当てられた動的コードを獲得することができる。以降では、動的辞書１２２を単語と照合する装置を、便宜上、照合装置として説明する。
【００８６】
［符号化ファイルの構成例］
まず、符号化ファイルの構成例を、図８を参照して説明する。図８は、符号化ファイルの構成例を示す図である。図８に示すように、符号化ファイルは、ヘッダ部と、複数の単語コードで表わされる符号化データと、トレーラ部とを有する。トレーラ部は、動的辞書１２２の情報を記憶する。動的辞書１２２の情報は、図３に示した動的辞書の情報に対応する。ヘッダ部には、トレーラ部に格納された動的辞書１２２の情報へのポインタおよび超高頻度の単語の頻度表が格納される。後述する照合装置は、後述する照合処理において、ヘッダ部の動的辞書１２２へのポインタを利用し、動的辞書１２２を参照する。
【００８７】
[実施例に係る照合処理]
図９は、実施例に係る照合装置の照合処理の流れの一例を示す図である。図９に示すように、照合装置は、照合する単語を受け付けると、符号化ファイルを照合用の記憶領域に読み出す。動的辞書１２２は、符号化ファイルのトレーラ部から読み出される。そして、照合装置は、動的辞書１２２を基に、２次元マトリックス１２１および重複テーブル１２３を生成する。
【００８８】
照合装置は、照合する単語を２次元にハッシュ化し、２次元にハッシュ化して得られた組を用いて、２次元マトリックス１２１の要素（位置）をみつける。照合装置は、みつけた位置のポインタ情報の識別フラグが「０」（重複なし）である場合には、ポインタ情報に含まれる単語へのポインタを辿り、照合する単語が動的辞書１２２に登録されているか否かを判定する。照合装置は、照合する単語が動的辞書１２２に登録されている場合には、登録されている単語に対応する動的コードを照合結果として出力する。
【００８９】
例えば、照合する単語が「Mickey」であるとする。２次元マトリックス１２１の位置が（３，１）の位置であり、ポインタ情報の識別フラグが「０」であるとする。すると、照合装置は、ポインタ情報に含まれる単語へのポインタを辿り、照合する単語「Mickey」が動的辞書１２２のバッファ部に登録されているので、登録されている単語「Mickey」に対応する動的コード「Ａ００１ｈ」を照合結果として出力する。
【００９０】
また、照合装置は、みつけた位置のポインタ情報の識別フラグが「１」（重複あり）である場合には、ポインタ情報に含まれる重複テーブル１２３へのポインタを辿る。照合装置は、辿ったポインタが指す管理領域を探索対象として、照合する単語が動的辞書１２２に登録されているか否かを判定する。照合装置は、照合する単語が動的辞書１２２に登録されている場合には、登録されている単語に対応する動的コードを照合結果として出力する。これにより、照合装置は、入力された単語を照合する場合であっても、動的辞書１２２を順次辿ることなく、且つ、高速に、割り当てられた動的コードを獲得することができる。
【００９１】
例えば、照合する単語が「Minnie」であるとする。２次元マトリックス１２１の位置が（５，０）の位置であり、ポインタ情報の識別フラグが「１」であるとする。すると、照合装置は、ポインタ情報に含まれる重複テーブル１２３へのポインタを辿り、辿ったポインタが指す管理領域を探索対象とする。照合装置は、探索対象の管理領域の１番目の使用中（「０」）の欄に含まれる単語へのポインタを辿ると、照合する単語「Minnie」が動的辞書１２２のバッファ部に登録されていない。照合装置は、探索対象の管理領域の２番目の使用中（「０」）の欄に含まれる単語へのポインタを辿ると、照合する単語「Minnie」が動的辞書１２２のバッファ部に登録されているので、登録されている単語「Minnie」に対応する動的コード「Ａ００２ｈ」を照合結果として出力する。これにより、照合装置は、入力された単語を照合する場合であっても、動的辞書１２２を順次辿ることなく、且つ、高速に、割り当てられた動的コードを獲得することができる。
【００９２】
［照合装置の構成］
図１０は、実施例に係る照合装置の構成を示す機能ブロック図である。図１０に示すように、照合装置２００は、照合部２１０および記憶部２２０を有する。なお、記憶部２２０は、図４に示した記憶部１２０と同一の構成であるので、その重複する構成および内容の説明については省略する。
【００９３】
照合部２１０は、図９に示した照合処理を実行する処理部である。照合部２１０は、照合キー受付部２１１、単語判定部２１２、２次元ハッシュ化部２１３、識別フラグ判定部２１４、第１照合部２１５、第２照合部２１６および照合結果出力部２１７を有する。
【００９４】
照合キー受付部２１１は、照合キーを受け付ける。例えば、照合キー受付部２１１は、照合キーとして、照合する単語を受け付ける。
【００９５】
単語判定部２１２は、照合キーが静的辞書１２４に登録されているか否かを判定する。なお、単語判定部２１２は、図４で示した単号判定部１１２と同様の動作であるので、その説明を省略する。
【００９６】
２次元ハッシュ化部２１３は、照合キーを２次元ハッシュ化する。なお、２次元ハッシュ化部２１３は、図４で示した２次元ハッシュ化部１１３と同様の動作であるので、その説明を省略する。
【００９７】
識別フラグ判定部２１４は、２次元ハッシュ化して得られた、２次元マトリックス１２１の位置のポインタ情報の識別フラグを判定する。例えば、識別フラグ判定部２１４は、ポインタ情報の識別フラグが、余りの組に重複がないことを示す「０」であるか否かを判定する。識別フラグ判定部２１４は、ポインタ情報の識別フラグが「０」であると判定した場合には、照合キーを第１照合部２１５に出力する。識別フラグ判定部２１４は、ポインタ情報の識別フラグが、「０」でないと判定した場合には、照合キーを第２照合部２１６に出力する。
【００９８】
第１照合部２１５は、ポインタ情報に含まれる単語へのポインタを用いて、照合キーを動的辞書１２２と照合する。例えば、第１照合部２１５は、ポインタ情報に含まれる単語へのポインタを辿り、照合キーが動的辞書１２２に登録されているか否かを判定する。第１照合部２１５は、照合キーが動的辞書１２２に登録されていると判定した場合には、登録されている単語に対応する動的コードを照合結果出力部２１７に出力する。第１照合部２１５は、照合キーが動的辞書１２２に登録されていないと判定した場合には、照合キーが動的辞書１２２に登録されていないことを照合結果出力部２１７に出力する。なお、第１照合部２１５は、ポインタ情報に含まれる単語へのポインタが初期値である場合には、照合キーが動的辞書１２２に登録されていないので、照合キーが動的辞書１２２に登録されていないことを照合結果出力部２１７に出力する。
【００９９】
第２照合部２１６は、ポインタ情報に含まれる重複テーブル１２３へのポインタを用いて、照合キーを動的辞書１２２と照合する。例えば、第２照合部２１６は、ポインタ情報に含まれる重複テーブル１２３へのポインタを辿る。第２照合部２１６は、辿ったポインタが指す管理領域を探索対象として、探索対象の管理領域の使用中の欄に含まれる単語へのポインタを辿り、照合キーが動的辞書１２２に登録されているか否かを判定する。第２照合部２１６は、照合キーが動的辞書１２２に登録されていると判定した場合には、登録されている単語に対応する動的コードを照合結果出力部２１７に出力する。第２照合部２１６は、照合キーが動的辞書１２２に登録されていないと判定した場合には、探索対象の管理領域の他の使用中の欄に含まれる単語へのポインタを用いて、照合キーが動的辞書１２２に登録されているか否かを判定する。そして、第２照合部２１６は、他の使用中の欄に含まれる単語へのポインタを辿り、照合キーが動的辞書１２２に登録されていると判定した場合には、登録されている単語に対応する動的コードを照合結果出力部２１７に出力する。第２照合部２１６は、いずれの使用中の欄に含まれる単語へのポインタを辿っても、照合キーが動的辞書１２２に登録されていないと判定した場合には、照合キーが動的辞書１２２に登録されていないことを照合結果出力部２１７に出力する。
【０１００】
照合結果出力部２１７は、照合結果を出力する。例えば、照合結果出力部２１７は、第１照合部２１５または第２照合部２１６から動的コードを受け取ると、受け取った動的コードを照合結果として出力する。照合結果出力部２１７は、第１照合部２１５または第２照合部２１６から照合キーが動的辞書１２２に登録されていないことを受け取ると、照合キーが動的辞書１２２に登録されていないことを示す「ＮＧ」を照合結果として出力する。
【０１０１】
［照合処理のフローチャート］
図１１は、実施例に係る照合処理のフローチャートの一例を示す図である。
【０１０２】
まず、照合装置２００は、照合キー（照合する単語）を受け付ける(ステップＳ５１）。すると、照合装置２００は、符号化ファイルを照合用の記憶領域に読み出す（ステップＳ５２）。そして、照合装置２００は、符号化ファイルのトレーラ部に記憶された動的辞書１２２を基に、２次元マトリックス１２１および重複テーブル１２３を生成する（ステップＳ５３）。
【０１０３】
照合装置２００は、照合する単語が静的辞書１２４に登録されているか否かを判定する（ステップＳ５４）。例えば、照合装置２００は、照合する単語が静的辞書１２４の基礎単語にヒットするか否かを判定する。
【０１０４】
照合する単語が静的辞書１２４に登録されていると判定した場合には（ステップＳ５４；Ｙｅｓ）、照合装置２００は、照合する単語に対する単語コードを照合結果として出力する（ステップＳ５５）。そして、照合装置２００は、照合処理を終了する。
【０１０５】
一方、照合する単語が静的辞書１２４に登録されていないと判定した場合には（ステップＳ５４；Ｎｏ）、照合装置２００は、照合する単語を２次元のハッシュ化する（ステップＳ５６）。例えば、照合装置２００は、符号化装置１００と実施される２次元のハッシュ化と同様の２次元のハッシュ化を行う。すなわち、照合装置２００は、照合する単語をＡハッシュするとともに、照合する単語をＢハッシュする。
【０１０６】
続いて、照合装置２００は、２次元にハッシュ化して得られた組に対応する２次元マトリックス１２１の行列要素（位置）をみつける。そして、照合装置２００は、みつけた位置に設定されたポインタ情報の識別フラグが「０」（重複なし）であるか否かを判定する（ステップＳ５７）。ポインタ情報の識別フラグが「０」であると判定した場合には（ステップＳ５７；Ｙｅｓ）、照合装置２００は、ポインタ情報の単語へのポインタが初期値であるか否かを判定する（ステップＳ５８）。
【０１０７】
単語へのポインタが初期値であると判定した場合には（ステップＳ５８；Ｙｅｓ）、照合装置２００は、「ＮＧ」を照合結果として出力する（ステップＳ５９）。そして、照合装置２００は、照合処理を終了する。
【０１０８】
一方、単語へのポインタが初期値でないと判定した場合には（ステップＳ５８；Ｎｏ）、照合装置２００は、単語へのポインタを基に、照合する単語を動的辞書１２２と照合する（ステップＳ６０）。例えば、照合装置２００は、単語へのポインタを辿り、動的辞書１２２に、照合する単語が登録されているか否かを判定する。そして、照合装置２００は、ステップＳ６２に移行する。
【０１０９】
ステップＳ５７において、ポインタ情報の識別フラグが「０」でないと判定した場合には（ステップＳ５７；Ｎｏ）、照合装置２００は、重複テーブルへのポインタが示す管理領域を基に、照合する単語を動的辞書１２２と照合する（ステップＳ６１）。例えば、照合装置２００は、ポインタ情報に含まれる重複テーブル１２３へのポインタを辿る。照合装置２００は、辿ったポインタが指す管理領域を探索対象として、探索対象の管理領域の使用中の欄に含まれる単語へのポインタを辿り、動的辞書１２２に、照合する単語が登録されているか否かを判定する。そして、照合装置２００は、ステップＳ６２に移行する。
【０１１０】
ステップＳ６２において、照合装置２００は、照合の結果、動的辞書１２２に、照合する単語が登録されているか否かを判定する（ステップＳ６２）。動的辞書１２２に、照合する単語が登録されていると判定した場合には（ステップＳ６２；Ｙｅｓ）、照合装置２００は、登録されている単語に対応する動的コードを照合結果として出力する（ステップＳ６３）。そして、照合装置２００は、照合処理を終了する。
【０１１１】
一方、動的辞書１２２に、照合する単語が登録されていないと判定した場合には（ステップＳ６２；Ｎｏ）、照合装置２００は、「ＮＧ」を照合結果として出力する（ステップＳ６４）。そして、照合装置２００は、照合処理を終了する。
【０１１２】
これにより、照合装置２００は、入力された単語を照合する場合であっても、動的辞書１２２を順次辿ることなく、且つ、高速に、割り当てられた動的コードを獲得することができる。
【０１１３】
［情報処理装置のハードウェア構成］
実施例の符号化装置１００および照合装置２００を含む情報処理装置のハードウェア構成を、図１２を参照して説明する。図１２は、実施例の情報処理装置のハードウェア構成を示す図である。図１２の例が示すように、コンピュータ４００は、各種演算処理を実行するＣＰＵ４０１と、ユーザからのデータ入力を受け付ける入力装置４０２と、モニタ４０３とを有する。また、コンピュータ４００は、記憶媒体からプログラム等を読み取る媒体読取装置４０４と、他の装置と接続するためのインターフェース装置４０５と、他の装置と無線により接続するための無線通信装置４０６とを有する。また、コンピュータ４００は、各種情報を一時記憶するＲＡＭ４０７と、ハードディスク装置４０８とを有する。また、各装置４０１〜４０８は、バス４０９に接続される。
【０１１４】
ハードディスク装置４０８には、例えば図４に示した単語判定部１１２、２次元ハッシュ化部１１３、識別フラグ判定部１１４、第１符号化部１１５および第２符号化部１１６の各処理部と同様の機能を有する検索プログラムが記憶される。また、ハードディスク装置４０８には、符号化プログラムを実現するための各種データが記憶される。
【０１１５】
ＣＰＵ４０１は、ハードディスク装置４０８に記憶された各プログラムを読み出して、ＲＡＭ４０７に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ４００を、例えば図４に示した単語判定部１１２、２次元ハッシュ化部１１３、識別フラグ判定部１１４、第１符号化部１１５および第２符号化部１１６として機能させることができる。
【０１１６】
なお、上記の検索プログラムは、必ずしもハードディスク装置４０８に記憶されている必要はない。例えば、コンピュータ４００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ４００が読み出して実行するようにしてもよい。コンピュータ４００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）等に接続された装置にこのプログラムを記憶させておき、コンピュータ４００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１１７】
図１３は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ４００において、図１３に示すハードウェア群２６（４０１〜４０９）の制御を行なうＯＳ（オペレーティング・システム）２７が動作する。ＯＳ２７に従った手順でＣＰＵ４０１が動作して、ハードウェア群２６の制御・管理が行なわれることにより、アプリケーションプログラム２９やミドルウェア２８に従った処理がハードウェア群２６で実行される。さらに、コンピュータ４００において、ミドルウェア２８またはアプリケーションプログラム２９が、ＲＡＭ４０７に読み出されてＣＰＵ４０１により実行される。
【０１１８】
ＣＰＵ４０１により符号化する単語を受け付けた場合、ミドルウェア２８またはアプリケーションプログラム２９の少なくとも一部に基づく処理を行なうことで、（それらの処理をＯＳ２７に基づいてハードウェア群２６を制御して）符号化部１１０の符号化機能が実現される。符号化機能は、それぞれアプリケーションプログラム２９自体に含まれてもよいし、アプリケーションプログラム２９に従って呼び出されることで実行されるミドルウェア２８の一部であってもよい。
【０１１９】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２０】
（付記１）コンピュータに、
入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録し、
前記動的辞書に登録された文字列をそれぞれハッシュ化したハッシュ化データを、前記静的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データに追加し、
入力された文字列の、前記静的辞書、または、前記動的辞書への登録有無を、前記第１のハッシュ化データを用いて判定し、
前記判定の結果に応じて、前記静的辞書、または、前記動的辞書の登録内容に基づき、符号化を行う
処理を行わせる符号化プログラム。
【０１２１】
（付記２）前記追加する処理は、前記Ｎ次元ハッシュ化した第１のハッシュ化データが衝突する場合に、前記第１のハッシュ化データを、重複テーブルに登録する
ことを特徴とする付記１に記載の符号化プログラム。
【０１２２】
（付記３）前記重複テーブルが満杯となった場合に、既に登録された第１のハッシュ化データを容量の大きな重複テーブルに移し替える
ことを特徴とする付記２に記載の符号化プログラム。
【０１２３】
（付記４）前記第１のハッシュ化データは、Ｎが２以上であるＮ次元ハッシュ化したハッシュ化データである
ことを特徴とする付記１から付記３のいずれか１つに記載の符号化プログラム。
【０１２４】
（付記５）前記追加する処理は、前記重複テーブルに関し、前記第１のハッシュ化データごとにデータを管理する領域を確保する
ことを特徴とする付記２または付記３に記載の符号化プログラム。
【０１２５】
（付記６）入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録する登録部と、
前記動的辞書に登録された文字列をそれぞれハッシュ化したハッシュ化データを、前記静的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データに追加する追加部と、
入力された文字列の、前記静的辞書、または、前記動的辞書への登録有無を、前記第１のハッシュ化データを用いて判定する判定部と、
前記判定の結果に応じて、前記静的辞書、または、前記動的辞書の登録内容に基づき、符号化を行う符号化部と、
を有することを特徴とする符号化装置。
【０１２６】
（付記７）コンピュータが、
入力された文字データのうち、静的辞書に含まれない文字列を、動的辞書に順次登録し、
前記動的辞書に登録された文字列をそれぞれハッシュ化したハッシュ化データを、前記静的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データに追加し、
入力された文字列の、前記静的辞書、または、前記動的辞書への登録有無を、前記第１のハッシュ化データを用いて判定し、
前記判定の結果に応じて、前記静的辞書、または、前記動的辞書の登録内容に基づき、符号化を行う
各処理を行うことを特徴とする符号化方法。
【０１２７】
（付記８）コンピュータに、
入力された単語をハッシュ化したハッシュ化データを算出し、
前記算出したハッシュ化データを照合キーとして、前記静的辞書および前記静的辞書に含まれない文字列を登録した動的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データを用いて、前記入力された単語の、前記静的辞書、または前記動的辞書への登録有無を判定する
処理を行わせることを特徴とする照合プログラム。
【０１２８】
（付記９）入力された単語をハッシュ化したハッシュ化データを算出する算出部と、
前記算出部によって算出されたハッシュ化データを照合キーとして、静的辞書および前記静的辞書に含まれない文字列を登録した動的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データを用いて、前記入力された単語の、前記静的辞書、または前記動的辞書への登録有無を判定する判定部と、
を有することを特徴とする照合装置。
【０１２９】
（付記１０）コンピュータが、
入力された単語をハッシュ化したハッシュ化データを算出し、
前記算出したハッシュ化データを照合キーとして、静的辞書および前記静的辞書に含まれない文字列を登録した動的辞書の各登録項目の単語をＮ次元ハッシュ化した第１のハッシュ化データを用いて、前記入力された単語の、前記静的辞書、または前記動的辞書への登録有無を判定する
各処理を行うことを特徴とする照合方法。
【符号の説明】
【０１３０】
１００  符号化装置
１１０  符号化部
１１１  ファイルリード部
１１２  単語判定部
１１３  ２次元ハッシュ化部
１１４  識別フラグ判定部
１１５  第１符号化部
１１６  第２符号化部
１１７  ファイルライト部
１２０  記憶部
１２１  ２次元マトリックス
１２２  動的辞書
１２３  重複テーブル
１２４  静的辞書
２００  照合装置
【図１】
0006536243.tif 000002
【図２Ａ】
0006536243.tif 000003
【図２Ｂ】
0006536243.tif 000004
【図２Ｃ】
0006536243.tif 000005
【図３】
0006536243.tif 000006
【図４】
0006536243.tif 000007
【図５】
0006536243.tif 000008
【図６Ａ】
0006536243.tif 000009
【図６Ｂ】
0006536243.tif 000010
【図７】
0006536243.tif 000011
【図８】
0006536243.tif 000012
【図９】
0006536243.tif 000013
【図１０】
0006536243.tif 000014
【図１１】
0006536243.tif 000015
【図１２】
0006536243.tif 000016
【図１３】
0006536243.tif 000017