(57)【要約】【課題】入力文字列を一括探索する場合の探索速度を向上させる。【解決手段】情報処理装置１００は、符号化対象の単語を分割して複数の要素を得る。情報処理装置１００は、前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。情報処理装置１００は、前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。【選択図】図５
2016099662.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
符号化対象の単語を分割して複数の要素を得て、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する、
処理を行わせることを特徴とする符号化プログラム。
【請求項２】
前記制御する処理は、前記単語における前記要素の位置が前記単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項３】
前記制御する処理は、加えて、前記単語における前記要素の位置が前記単語の最前方である場合には、前記単語における最前方の位置に応じたビット数の値であって辞書における文字列分布に合わせた値が得られるように制御する
ことを特徴とする請求項２に記載の符号化プログラム。
【請求項４】
符号化対象の単語を分割して複数の要素を取得する分割部と、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する制御部と、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する出力部と、
を有することを特徴とする符号化装置。
【請求項５】
コンピュータが、
符号化対象の単語を分割して複数の要素を得て、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する、
処理を実行することを特徴とする符号化方法。
【請求項６】
コンピュータに、
入力された検索文字列を位置に応じたビット数にハッシュ化したハッシュ化検索文字列を受け取り、
複数の単語においてそれぞれ同じ演算方式で演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する
処理を行わせることを特徴とする検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化プログラムなどに関する。
【背景技術】
【０００２】
辞書に登録された文字列に対し、入力文字列を探索する際に、ハッシュ関数を用いてハッシュ化し、対象の文字列を探索する技術が存在する。
【０００３】
例えば、文書処理装置は、所定の規則に基づき算出された計算値とその計算値が算出された頻度を表す出現頻度とを関連付けて記憶部に記憶しておく。文書処理装置は、文書を所定の条件に基づいて複数の文字列に分割し、所定の規則に基づいて、分割された各文字列から各文字列固有の計算値（ハッシュ値）をそれぞれ求める。そして、文書処理装置は、求められた各計算値に対応する出現頻度を検出し、検出された各計算値に対応する各出現頻度に基づいて、１または２以上の計算値を選択し、選択された１または２以上の計算値に対する文字列を文書の要約として探索（抽出）する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−３００３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
辞書に登録された文字列に対し、入力文字列を探索する場合、ハッシュ関数の出力ビット数を抑えると、出力された値の重複（シノニム）が生じ、入力文字列と照合する文字列が増加することになる。このため、文字列全体の一括探索に時間がかかることとなる。また、ハッシュ関数の出力ビット数をある程度多く確保すると、文字列が登録されていないハッシュ値が増加し、ハッシュのデータサイズが大きくなる。
【０００６】
１つの側面では、ハッシュのデータサイズを抑えつつ、入力文字列の探索速度を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
第１の案では、符号化プログラムは、コンピュータに、符号化対象の単語を分割して複数の要素を得て、前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する処理を実行させる。
【発明の効果】
【０００８】
１つの態様によれば、ハッシュのデータサイズを抑えつつ、入力文字列の探索速度を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、参考例に係る検索処理の一例を示す図である。
【図２】図２は、参考例に係るビットフィルタの一例を示す図である。
【図３】図３は、実施例１に係る検索処理の一例を示す図である。
【図４】図４は、実施例１に係るビットフィルタの一例を示す図である。
【図５】図５は、実施例１に係る情報処理装置の機能構成を示す図である。
【図６】図６は、実施例１に係る検索処理の流れの一例を示す図である。
【図７】図７は、実施例２に係る検索処理の一例を示す図である。
【図８】図８は、実施例２に係る情報処理装置の機能構成を示す図である。
【図９】図９は、実施例２に係る検索処理の流れの一例を示す図である。
【図１０】図１０は、実施例２に係る単語符号化処理の具体例を示す図である。
【図１１】図１１は、実施例３に係る検索処理の一例を示す図である。
【図１２】図１２は、文字列分布を説明する図である。
【図１３】図１３は、実施例３に係る情報処理装置の機能構成を示す図である。
【図１４】図１４は、実施例３に係る文字列分布テーブルのデータ構造の一例を示す図である。
【図１５】図１５は、実施例３に係る検索処理の流れの一例を示す図である。
【図１６】図１６は、実施例１〜３の情報処理装置のハードウェア構成を示す図である。
【図１７】図１７は、コンピュータで動作するプログラムの構成例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する符号化プログラム、符号化装置、符号化方法および検索プログラムの実施例を図面に基づいて詳細に説明する。検索プログラムは、符号化プログラムを含むものとする。なお、この実施例によりこの発明が限定されるものではない。
【００１１】
［参考例に係る検索処理］
まず、図１を参照して、参考例に係る情報処理装置による符号化処理について説明する。図１は、参考例に係る検索処理の一例を示す図である。図１に示すように、情報処理装置は、検索対象の単語（検索単語）に含まれる「ａｂｌｅ△」を、「ａｂ」、「ｂｌ」、「ｌｅ」、「ｅ△」のように２文字ずつ区切り、各文字列を取得する。検索単語は、ｎ文字の英単語と１文字の終端記号とからなる。終端記号は、空白（スペース）、カンマ（，）やピリオド（．）の記号である。本実施例では一例として、終端記号を「△（三角）」で表す。
【００１２】
情報処理装置は、取得した各文字列をビットフィルタ１０に出力する。情報処理装置は、ビットフィルタ１０と、取得した各文字列とを比較して、検索単語の文字列がビットフィルタ１０にヒットするか否かを判定する。ビットフィルタ１０は、各単語に対して単語コードを対応付ける辞書のことをいう。ビットフィルタ１０には、それぞれの単語に対応する単語コードがあらかじめ登録されている。例えば、ビットフィルタ１０には、単語「ａｂｌｅ」「ａｂｏｕｔ」・・・に対応する単語コード「Ａ０００７Ｂｈ」「Ａ０００９１ｈ」・・・が順番にあらかじめ登録されている。なお、ビットフィルタ１０は、各単語に対して単語コードを対応付ける辞書と説明したが、これに限定されず、各単語に対して圧縮符号をさらに対応付けるようにしても良い。
【００１３】
ここで、参考例に係るビットフィルタ１０のデータ構造について、図２を参照して説明する。図２は、参考例に係るビットフィルタの一例を示す図である。図２に示すように、ビットフィルタ１０は、２グラムと、ビットマップと、単語文字列と、文字列長と、単語コードと、出現回数とを含んで対応付ける。「２グラム」は、各単語に含まれる連続する文字列である。例えば「ａｂｌｅ」は、「ａｂ」、「ｂｌ」、「ｌｅ」、「ｅ△」に対応する２グラムを有する。
【００１４】
「ビットマップ」は、２グラムの文字列に対応するビットマップを表す。一例として、２グラム「ａｂ」は、「１＿０＿０＿０＿０」のビットマップに対応する。２グラム「ｂｌ」は、「０＿１＿０＿０＿０」のビットマップに対応する。「単語文字列」は、ビットフィルタ１０に登録された単語の文字列である。例えば、単語文字列「ａｂｌｅ」は、単語へのポインタによって、２グラム「ａｂ」のビットマップ「１＿０＿０＿０＿０」と、２グラム「ｂｌ」のビットマップ「０＿１＿０＿０＿０」と、２グラム「ｌｅ」のビットマップ「０＿０＿１＿０＿０」と、２グラム「ｅ△」のビットマップ「０＿０＿０＿１＿１」に対応付けられる。
【００１５】
例えば、情報処理装置は、「ａｂｌｅ」を検索単語として取得した場合に、ビットフィルタ１０と「ａｂ」とを比較し、２グラム「ａｂ」のビットマップ「１＿０＿０＿０＿０」を取得する。情報処理装置は、ビットフィルタ１０と「ｂｌ」とを比較し、２グラム「ｂｌ」のビットマップ「０＿１＿０＿０＿０」を取得する。情報処理装置は、ビットフィルタ１０と「ｌｅ」とを比較し、２グラム「ｌｅ」のビットマップ「０＿０＿１＿０＿０」を取得する。情報処理装置は、ビットフィルタ１０と「ｅ△」とを比較し、２グラム「ｅ△」のビットマップ「０＿０＿０＿１＿１」を取得する。情報処理装置は、取得した各ビットマップである「１＿０＿０＿０＿０」と、「０＿１＿０＿０＿０」と、「０＿０＿１＿０＿０」と、「０＿０＿０＿１＿１」とを用いて単語文字列「ａｂｌｅ」にヒットするか否かを判定する。
【００１６】
「文字列長」は、各単語文字列の長さである。「単語コード」は、各単語文字列に割り当てるコードである。例えば、単語コードには、単語文字列「ａｂｌｅ」「ａｂｏｕｔ」・・・に対応する単語コード「Ａ０００７Ｂｈ」「Ａ０００９１ｈ」・・・がそれぞれ割り当てられる。
【００１７】
図１に戻って、情報処理装置は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図２の例では、情報処理装置は、検索単語の文字列が単語文字列「ａｂｌｅ」にヒットするので、単語文字列「ａｂｌｅ」に対応する単語コード「Ａ０００７Ｂｈ」を出力する。
【００１８】
このようにして、参考例に係る符号化処理では、単語の文字列の探索（検索）の際に、２グラムのように参照するビットフィルタ１０のサイズが小さいと、各参照で「外れ」は少ない。ビットフィルタ１０の２グラムの各文字列が単語との関係を有することが多いからである。しかしながら、多数回の参照を繰り返す必要があるため、単語の文字列の探索に時間がかかる。一方、Ｎ（Ｎ＞２）グラムのように参照するビットフィルタ１０のサイズが大きいと、各参照で「外れ」が多くなる。ビットフィルタ１０のＮグラムの各文字列が単語との関係を有することが少なくなるからである。すなわち、ビットフィルタ１０のＮグラムの各文字列には、単語と関係のない「外れ」の文字列が多く含まれるからである。特に、単語の文字列の探索を１回の照合で完了させようとすると、単語の文字列の文字数に応じたＮグラムのビットフィルタ１０を参照する必要があるため、単語の文字列の探索に時間がかかる。
【実施例１】
【００１９】
［実施例１に係る検索処理］
図３を参照して、実施例１に係る検索処理について説明する。図３は、実施例１に係る検索処理の一例を示す図である。図３に示すように、情報処理装置１００は、検索対象の単語（検索単語）に含まれる「ａｃｃｅｓｓｉｂｉｌｉｔｙ△」を「ａｃｃ」「ｅｓｓ」「ｉｂｉ」「ｌｉｔｙ△」のように、３バイト、３バイト、３バイト、残りバイトに分割する。
【００２０】
情報処理装置１００は、分割して得られた複数の要素「ａｃｃ」「ｅｓｓ」「ｉｂｉ」「ｌｉｔｙ△」それぞれの検索単語内の位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。例えば、情報処理装置１００は、最前の要素「ａｃｃ」の検索単語内の位置に応じて５ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、次の要素「ｅｓｓ」の検索単語内の位置に応じて５ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、次の要素「ｉｂｉ」の検索単語内の位置に応じて５ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、残りの要素「ｌｉｔｙ△」の検索単語内の位置に応じて５ビットのハッシュ値が得られるようにハッシュ演算を制御する。但し、実施例１では、位置に応じて同一ビット数のハッシュ値が得られるようにするので、ハッシュ演算は、同じハッシュ関数であれば良い。
【００２１】
情報処理装置１００は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値を結合し、２０ビットの整数を符号化結果として生成する。すなわち、情報処理装置１００は、検索単語を構成するｎ＋１グラムの文字列から、ハッシュ値により２０ビットの整数を生成する。図３の例では、ｎ＋１は、検索単語を構成する文字列の文字列長である「１３」と終端を示す空白の長さ「１」とを加算した値であり「１４」となる。
【００２２】
ここで、英和辞典の単語と２０ビットの整数との関係について説明する。リーダーズ英和辞典には、約２７万語の単語が収められている。オックスフォード英英辞典には、約５０万語の単語が収められている。いずれの辞典も、単語の数が１００万語以内である。これに対して、２０ビットは最大１ＭＢ（メガバイト）であるので、１００万語の単語を表すことが可能である。つまり、いずれの辞典も、２０ビットの整数で単語の識別が可能である。このような２０ビット整数を用いて、情報処理装置１００は、ビットフィルタ１２１からの検索単語の探索（検索）を１回の照合で完了させる。なお、検索単語全体をハッシュ演算した結果を符号化結果とすることも考えられる。しかしながら、この場合には、ハッシュの一様性および独立性を担保するには、ハッシュ値のビット数を（２０ビットより）十分長くとる必要がある。ハッシュ値のビット数を十分長くとることになると、検索単語の探索（検索）を１回の照合で完了させるとしても時間がかかることになる。
【００２３】
情報処理装置１００は、符号化結果として生成された２０ビットの整数をビットフィルタ１２１に出力する。情報処理装置１００は、ビットフィルタ１２１と２０ビットの整数とを比較して、検索単語の文字列がビットフィルタ１２１にヒットするか否かを判定する。かかるビットフィルタ１２１は、参考例に係るビットフィルタ１０と同様に、各単語に対して単語コードを対応付ける辞書のことをいう。ビットフィルタ１２１には、それぞれの単語に対応する単語コードがあらかじめ登録されている。例えば、ビットフィルタ１２１には、単語「ａｂｌｅ」「ａｂｏｕｔ」・・・に対応する単語コード「Ａ０００７Ｂｈ」「Ａ０００９１ｈ」・・・が順番にあらかじめ登録されている。なお、ビットフィルタ１２１は、各単語に対して単語コードを対応付ける辞書と説明したが、これに限定されず、各単語に対して圧縮符号を対応付けるようにしても良い。
【００２４】
ここで、実施例１に係るビットフィルタ１２１のデータ構造について、図４を参照して説明する。図４は、実施例１に係るビットフィルタの一例を示す図である。図４に示すように、ビットフィルタ１２１は、アドレスとしての２０ビット整数と、ビットフィルタと、単語文字列と、文字列長と、単語コードと、出現回数とを含んで対応付ける。
【００２５】
「２０ビット整数」は、単語文字列のアドレスである２０ビットの整数である。「２０ビット整数」は、１６進数の「０００００」「００００１」「００００２」・・・「ＦＦＦＦＦ」のように２０ビット整数が連続して登録される。例えば、「ａｃｃｅｓｓｉｂｉｌｉｔｙ△」の場合は、「ａｃｃ」、「ｅｓｓ」、「ｉｂｉ」、「ｌｉｔｙ△」に対応する２０ビット整数を有する。すなわち、かかる２０ビット整数には、「ａｃｃ」に対応する５ビットのハッシュ値、「ｅｓｓ」に対応する５ビットのハッシュ値、「ｉｂｉ」に対応する５ビットのハッシュ値、「ｌｉｔｙ△」に対応する５ビットのハッシュ値の結合を符号化結果とした２０ビットの整数が登録される。
【００２６】
「ビットフィルタ」は、「２０ビット整数」に対応するビットフィルタを表す。すなわち、「ビットフィルタ」は、検索単語を２０ビットの整数に符号化した方法と同様の方法で、単語を符号化した場合の「２０ビット整数」に対応する単語文字列の存在有無を示す。一例として、「ビットフィルタ」が「００００１ｈ」である場合には、存在することを示し、「０ｈ」である場合には、存在しないことを示す。「単語文字列」は、ビットフィルタ１２１に登録された単語の文字列である。例えば、単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」は、単語へのポインタによって２０ビット整数「ＡＤ４２５ｈ」のビットフィルタ「００００１ｈ」に対応付けられる。
【００２７】
例えば、情報処理装置１００は、「ａｃｃｅｓｓｉｂｉｌｉｔｙ」を検索単語として取得した場合に、２０ビット整数「ＡＤ４２５ｈ」を符号化結果として生成する。情報処理装置１００は、ビットフィルタ１００と、符号化結果として生成された「ＡＤ４２５ｈ」とを比較し、２０ビット整数「ＡＤ４２５ｈ」に対応するビットフィルタを取得する。情報処理装置は、ビットフィルタを用いて単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にヒットするか否かを判定する。
【００２８】
「文字列長」は、各単語文字列の長さである。「単語コード」は、各単語文字列に割り当てるコードである。例えば、単語コードには、単語文字列「ａｂｌｅ」「ａｂｏｕｔ」・・・に対応する単語コード「Ａ０００７Ｂｈ」「Ａ０００９１ｈ」・・・がそれぞれ割り当てられる。
【００２９】
図３に戻って、情報処理装置１００は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図４の例では、情報処理装置１００は、検索単語の文字列が単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にヒットするので、単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」に対応する単語コード「Ａ００ＸＹＺｈ」を出力する。
【００３０】
［実施例１に係る情報処理装置の機能構成］
次に、図５を参照して、実施例１に係る検索処理を実行する情報処理装置１００の機能構成について説明する。図５は、実施例１に係る情報処理装置の機能構成を示す図である。図５に示すように、情報処理装置１００は、制御部１１０と記憶部１２０とを有する。
【００３１】
制御部１１０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部１１０は、例えば、ＡＳＩＣやＦＰＧＡなどの集積回路の電子回路に対応する。または、制御部１１０は、ＣＰＵやＭＰＵなどの電子回路に対応する。また、制御部１１０は、単語分割部１１１、単語符号化部１１２および検索部１１３を有する。
【００３２】
記憶部１２０は、例えばフラッシュメモリやＦＲＡＭ（登録商標）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部１２０は、ビットフィルタ１２１を有する。なお、ビットフィルタ１２１の構成は、図４と同様であるので、その説明を省略する。
【００３３】
単語分割部１１１は、検索対象の単語（検索単語）を分割する。例えば、単語分割部１１１は、検索単語を取得すると、取得した検索単語の先頭から３バイトずつ分割する。単語分割部１１１は、分割して得られた複数の要素を取得する。
【００３４】
単語符号化部１１２は、検索単語から分割された複数の要素のそれぞれのハッシュにより、２０ビットに符号化する。例えば、単語符号化部１１２は、単語分割部１１１により取得された複数の要素それぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。一例として、単語符号化部１１２は、３文字、３文字、３文字、残りの文字の文字列に対し、それぞれ５ビットのハッシュ値を算出する場合には、同一のハッシュ関数となるように、ハッシュ演算を制御する。そして、単語符号化部１１２は、３文字、３文字、３文字、残りの文字の文字列に対し、制御されたハッシュ演算により、それぞれ５ビットのハッシュ値を算出する。単語符号化部１１２は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として２０ビットの整数を生成する。
【００３５】
検索部１１３は、ビットフィルタ１２１から、検索単語に対する単語コードを検索する。例えば、検索部１１３は、ビットフィルタ１２１の２０ビット整数と、単語符号化部１１２によって符号化された２０ビットの整数とを比較する。検索部１１３は、合致した２０ビット整数に対応するビットフィルタを取得する。検索部１１３は、取得したビットフィルタが存在しないことを示す「０ｈ」である場合には、単語が存在しないことを出力する。検索部１１３は、取得したビットフィルタが存在することを示す「００００１ｈ」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。検索部１１３は、検索単語の文字列が単語文字列にヒットする場合には、ヒットした単語文字列に対応する単語コードを出力する。検索部１１３は、検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。
【００３６】
［実施例１に係る検索処理の流れ］
次に、実施例１に係る検索処理の流れについて説明する。図６は、実施例１に係る検索処理の流れの一例を示す図である。
【００３７】
図６に示すように、情報処理装置１００は、前処理を行う（ステップＳ１０）。例えば、情報処理装置１００は、前処理においてビットフィルタ１２１を保持する領域を確保し、確保した領域にビットフィルタ１２１をロードする。
【００３８】
続いて、単語分割部１１１は、検索単語を受け取る（ステップＳ１１）。例えば、単語分割部１１１は、検索単語を含む対象ファイルから検索単語を抽出し、抽出した検索単語を受け取っても良い。なお、単語分割部１１１は、入力装置であるキーボードから検索単語を受け取っても良い。
【００３９】
続いて、単語分割部１１１は、受け取った検索単語を分割する（ステップＳ１２）。例えば、単語分割部１１１は、受け取った検索単語の先頭から３バイトずつ分割し、複数の要素を取得する。
【００４０】
続いて、単語符号化部１１２は、分割された各要素をハッシュ演算する（ステップＳ１３）。例えば、単語符号化部１１２は、分割された各要素に対し、それぞれ５ビットのハッシュ値を算出する場合には、同一のハッシュ関数によりそれぞれハッシュ値を算出する。
【００４１】
そして、単語符号化部１１２は、各演算結果を結合し、検索単語を符号化する（ステップＳ１４）。例えば、単語符号化部１１２は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として２０ビットの整数を生成する。
【００４２】
続いて、検索部１１３は、符号化されたビット列を用いてビットフィルタ１２１を検索する（ステップＳ１５）。例えば、検索部１１３は、ビットフィルタ１２１の２０ビット整数と、符号化された２０ビットの整数とを比較し、比較した結果、合致した２０ビット整数に対応するビットフィルタを取得する。
【００４３】
そして、検索部１１３は、ビットフィルタ１２１に単語コードが登録済みであるか否かを判定する（ステップＳ１６）。例えば、検索部１１３は、ビットフィルタ１２１に含まれる２０ビット整数に対応するビットフィルタが、存在することを示す「００００１ｈ」であるか否かを判定する。検索部１１３は、２０ビット整数に対応するビットフィルタが「００００１ｈ」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。
【００４４】
検索部１１３は、ビットフィルタ１２１に単語コードが登録済みでないと判定した場合には（ステップＳ１６；Ｎｏ）、単語文字列にヒットしないことを出力する。例えば、検索部１１３は、２０ビット整数に対応するビットフィルタが、存在することを示す「００００１ｈ」でない場合には、単語文字列にヒットしないことを出力する。あるいは、検索部１１３は、２０ビット整数に対応するビットフィルタが「００００１ｈ」である場合であって検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。そして、検索部１１３は、検索処理を終了する。
【００４５】
一方、検索部１１３は、ビットフィルタ１２１に単語コードが登録済みであると判定した場合には（ステップＳ１６；Ｙｅｓ）、ビットフィルタ１２１から検索単語に対応する単語コードを取得する（ステップＳ１７）。そして、検索部１１３は、取得した単語コードを出力し、検索処理を終了する。
【００４６】
［実施例１の効果］
上記実施例１によれば、情報処理装置１００は、検索対象の単語（検索単語）を分割して複数の要素を得る。情報処理装置１００は、複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、複数の要素について検索単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。情報処理装置１００は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。かかる構成によれば、情報処理装置１００は、単語を、分割により得られた複数の要素のそれぞれのハッシュ値の結合に符号化することで、検索対象の単語を一括探索する場合の速度を向上させることが可能となる。
【実施例２】
【００４７】
ところで、実施例１に係る情報処理装置１００は、検索単語を分割し、分割して得られた複数の要素についてそれぞれ同じビット数のハッシュ値が得られるように、ハッシュ演算を制御する。そして、情報処理装置１００は、各ハッシュ値の結合を符号化結果として出力する。しかしながら、情報処理装置１００は、これに限定されず、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御しても良い。英和辞典などの辞書では、英単語の先頭３文字について文字列の間隔が密（類似の文字列が多い）となる。そして、英単語の先頭から遠い程、文字列の間隔が疎となる。したがって、文字列の間隔が密な部分には、他の部分より長いビット数のハッシュ値が得られるようにし、文字列の間隔が疎な部分には、ビット数を短いビット数のハッシュ値が得られるように、制御ハッシュ演算を制御する。文字列の間隔が密の部分に長いビット数のハッシュ値が得られるようにすれば、他の単語の同じ位置であっても異なる文字とハッシュ値が可能な限り重複しない（ハッシュの独立性を担保する）ようになる。これにより、他の単語との判別を容易にすることが可能となる。
【００４８】
そこで、実施例２では、情報処理装置１００が、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する場合について説明する。
【００４９】
［実施例２に係る検索処理］
図７を参照して、実施例２に係る検索処理について説明する。図７は、実施例２に係る検索処理の一例を示す図である。図７に示すように、情報処理装置１００は、検索対象の単語（検索単語）に含まれる「ａｃｃｅｓｓｉｂｉｌｉｔｙ△」を「ａｃｃ」「ｅｓｓ」「ｉｂｉｌ」「ｉｔｙ△」のように３バイト、３バイト、４バイト、残りバイトに分割する。
【００５０】
情報処理装置１００は、分割して得られた複数の要素「ａｃｃ」「ｅｓｓ」「ｉｂｉｌ」「ｉｔｙ△」それぞれの検索単語内の位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。ここでいうハッシュ演算の制御は、検索単語内の分割位置に応じた出力ビット数の切り替えであったり、検索単語内の分割位置に応じたハッシュ関数の切り替えであったりする。例えば、情報処理装置１００は、最前の要素「ａｃｃ」の検索単語内の位置に応じて９ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、次の要素「ｅｓｓ」の検索単語内の位置に応じて５ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、次の要素「ｉｂｉｌ」の検索単語内の位置に応じて３ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、残りの要素「ｉｔｙ△」の検索単語内の位置に応じて３ビットのハッシュ値が得られるようにハッシュ演算を制御する。すなわち、情報処理装置１００は、検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。つまり、情報処理装置１００は、文字列の間隔が密な部分である先頭の３バイトには、長いビット数のハッシュ値が得られるように制御する。情報処理装置１００は、文字列の間隔が疎な部分であると予想される後方の４バイト、残りバイトには、ビット数を節約すべく短いビット数のハッシュ値が得られるように制御する。
【００５１】
情報処理装置１００は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値を結合し、２０ビットの整数を符号化結果として生成する。すなわち、情報処理装置１００は、検索単語を構成するｎ＋１グラムの文字列から、ハッシュ値により２０ビットの整数を生成する。図７の例では、ｎ＋１は、検索単語を構成する文字列の文字列長である「１３」と終端を示す空白の長さ「１」とを加算した値であり「１４」となる。
【００５２】
そして、情報処理装置１００は、符号化結果として生成された２０ビットの整数をビットフィルタ１２１に出力する。情報処理装置１００は、ビットフィルタ１２１と２０ビットの整数とを比較して、検索単語の文字列がビットフィルタ１２１にヒットするか否かを判定する。
【００５３】
すなわち、情報処理装置１００は、ビットフィルタ１２１と、符号化結果として生成された２０ビットの整数とを比較し、２０ビットの整数に対応するビットフィルタを取得する。情報処理装置１００は、ビットフィルタを用いて単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にヒットするか否かを判定する。なお、ビットフィルタ１２１内のビットフィルタは、「２０ビット整数」に対応する単語文字列の存在有無を示す。すなわち、ビットフィルタ１２１内のビットフィルタは、検索単語を２０ビットの整数に符号化した方法と同様の方法で、単語を符号化した場合の「２０ビット整数」に対応する単語文字列の存在有無を示す。
【００５４】
情報処理装置１００は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図７の例では、情報処理装置１００は、検索単語の文字列が単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にヒットするので、単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」に対応する単語コード「Ａ００ＸＹＺｈ」を出力する。
【００５５】
［実施例２に係る情報処理装置の機能構成］
次に、図８を参照して、実施例２に係る検索処理を実行する情報処理装置１００の機能構成について説明する。図８は、実施例２に係る情報処理装置の機能構成を示す図である。なお、図５に示す情報処理装置１００と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、単語分割部１１１を単語分割部２１１に変更し、単語符号化部１１２を単語符号化部２１３に変更した点にある。実施例１と実施例２とが異なるところは、出力ビット切替部２１２を追加した点にある。
【００５６】
単語分割部２１１は、検索対象の単語（検索単語）を分割する。例えば、単語分割部２１１は、検索単語を取得すると、取得した検索単語の先頭から３バイト、３バイト、４バイト、残りバイトに分割する。単語分割部２１１は、分割して得られた複数の要素を取得する。
【００５７】
出力ビット切替部２１２は、検索単語から分割された複数の要素のそれぞれの出力ビット数を切り替える。例えば、出力ビット切替部２１２は、単語分割部２１１により取得された複数の要素それぞれの位置に応じて、出力されるハッシュ値のビット数を切り替える。すなわち、出力ビット切替部２１２は、検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように出力ビット数を切り替える。一例として、検索単語における最前の要素の場合には、出力ビット数を９ビットとし、後続する要素の場合には、それぞれ５ビット、３ビット、３ビットとする。
【００５８】
単語符号化部２１３は、検索単語から分割された複数の要素のそれぞれのハッシュにより、２０ビットに符号化する。例えば、単語符号化部２１３は、単語分割部２１１により取得された複数の要素のそれぞれの位置に応じた出力ビット数のハッシュ値が得られるように、ハッシュ演算を制御する。それぞれの位置に応じた出力ビット数は、出力ビット切替部２１２によって切り替えられる。一例として、単語符号化部２１３は、検索単語における複数の要素のうち最前の要素の出力ビット数が９ビットである場合には、９ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部２１３は、検索単語における複数の要素のうち次の要素の出力ビット数が５ビットである場合には、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部２１３は、検索単語における複数の要素のうち次の要素の出力ビット数が５ビットである場合には、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部２１３は、検索単語における複数の要素のうち最後尾の要素の出力ビット数が３ビットである場合には、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。そして、単語符号化部２１３は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として２０ビットの整数を生成する。
【００５９】
［実施例２に係る検索処理の流れ］
次に、実施例２に係る検索処理の流れについて説明する。図９は、実施例２に係る検索処理の流れの一例を示す図である。
【００６０】
図９に示すように、情報処理装置１００は、前処理を行う（ステップＳ２０）。例えば、情報処理装置１００は、前処理においてビットフィルタ１２１を保持する領域を確保し、確保した領域にビットフィルタ１２１をロードする。
【００６１】
続いて、単語分割部２１１は、検索単語を受け取る（ステップＳ２１）。例えば、単語分割部２１１は、検索単語を含む対象ファイルから検索単語を抽出し、抽出した検索単語を受け取っても良い。なお、単語分割部２１１は、入力装置であるキーボードから検索単語を受け取っても良い。
【００６２】
続いて、単語分割部２１１は、受け取った検索単語を分割する（ステップＳ２２）。一例として、単語分割部２１１は、受け取った検索単語の先頭から３バイト、３バイト、４バイト、残りバイトに分割し、複数の要素を取得する。
【００６３】
続いて、出力ビット切替部２１２は、検索単語の分割された位置に応じてハッシュの出力ビット数を切り替える（ステップＳ２３）。一例として、出力ビット切替部２１２は、検索単語の先頭から３バイトの要素について、ハッシュの出力ビット数を９ビットに切り替える。出力ビット切替部２１２は、検索単語の次の３バイトの要素について、ハッシュの出力ビット数を５ビットに切り替える。出力ビット切替部２１２は、検索単語の次の４バイトの要素について、ハッシュの出力ビット数を３ビットに切り替える。出力ビット切替部２１２は、検索単語の最後尾の残りバイトの要素について、ハッシュの出力ビット数を３ビットに切り替える。
【００６４】
続いて、単語符号化部２１３は、分割された各要素をハッシュ演算する（ステップＳ２４）。例えば、単語符号化部２１３は、分割された各要素を、切り替えられた出力ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。一例として、単語符号化部２１３は、検索単語の最前の要素について、９ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部２１３は、検索単語の次の要素について、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部２１３は、検索単語の次の要素について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部２１３は、検索単語の最後尾の要素について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。
【００６５】
そして、単語符号化部２１３は、各演算結果を結合し、検索単語を符号化する（ステップＳ２５）。例えば、単語符号化部２１３は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として２０ビットの整数を生成する。
【００６６】
続いて、検索部１１３は、符号化されたビット列を用いてビットフィルタ１２１を検索する（ステップＳ２６）。例えば、検索部１１３は、ビットフィルタ１２１の２０ビット整数と、符号化された２０ビットの整数とを比較し、比較した結果、合致した２０ビット整数に対応するビットフィルタを取得する。
【００６７】
そして、検索部１１３は、ビットフィルタ１２１に単語コードが登録済みであるか否かを判定する（ステップＳ２７）。例えば、検索部１１３は、ビットフィルタ１２１に含まれる２０ビット整数に対応するビットフィルタが、存在することを示す「００００１ｈ」であるか否かを判定する。検索部１１３は、２０ビット整数に対応するビットフィルタが「００００１ｈ」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。
【００６８】
検索部１１３は、ビットフィルタ１２１に単語コードが登録済みでないと判定した場合には（ステップＳ２７；Ｎｏ）、単語文字列にヒットしないことを出力する。例えば、検索部１１３は、２０ビット整数に対応するビットフィルタが、存在することを示す「００００１ｈ」でない場合には、単語文字列にヒットしないことを出力する。あるいは、検索部１１３は、２０ビット整数に対応するビットフィルタが「００００１ｈ」である場合であって検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。そして、検索部１１３は、検索処理を終了する。
【００６９】
一方、検索部１１３は、ビットフィルタ１２１に単語コードが登録済みであると判定した場合には（ステップＳ２７；Ｙｅｓ）、ビットフィルタ１２１から検索単語に対応する単語コードを取得する（ステップＳ２８）。そして、検索部１１３は、取得した単語コードを出力し、検索処理を終了する。
【００７０】
［単語符号化処理の具体例］
図１０は、実施例２に係る単語符号化処理の具体例を示す図である。図１０に示すように、上段には、検索単語が「ｉｎｔｅｒｎｓｈｉｐ△」である場合に、検索単語が２０ビット整数に符号化されている。
【００７１】
具体的には、単語分割部２１１は、検索単語「ｉｎｔｅｒｎｓｈｉｐ△」の先頭から３バイトの「ｉｎｔ」、３バイトの「ｅｒｎ」、４バイトの「ｓｈｉｐ」、残り１バイト「△」に分割する。
【００７２】
そして、出力ビット切替部２１２は、検索単語の先頭から３バイトの「ｉｎｔ」について、ハッシュの出力ビット数を９ビットに切り替える。出力ビット切替部２１２は、検索単語の次の３バイトの「ｅｒｎ」について、ハッシュの出力ビット数を５ビットに切り替える。出力ビット切替部２１２は、検索単語の次の４バイトの［ｓｈｉｐ］について、ハッシュの出力ビット数を３ビットに切り替える。出力ビット切替部２１２は、検索単語の最後尾の残りバイトの「△」について、ハッシュの出力ビット数を３ビットに切り替える。
【００７３】
そして、単語符号化部２１３は、検索単語の最前の「ｉｎｔ」について、９ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「１０１０００１００ｂ」（１０進数：３２４）が算出される。単語符号化部２１３は、検索単語の次の「ｅｒｎ」について、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「０１０１０ｂ」（１０進数：１０）が算出される。単語符号化部２１３は、検索単語の次の「ｓｈｉｐ」について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「０１０ｂ」（１０進数：２）が算出される。単語符号化部２１３は、検索単語の最後尾の「△」について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「０００ｂ」（１０進数：０）が算出される。
【００７４】
中段には、検索単語が「ｉｎｓｕｒａｎｃｅ△」である場合に、検索単語が２０ビット整数に符号化されている。下段には、検索単語が「ｈｏｎｏｒａｂｌｅ△」である場合に、検索単語が２０ビット整数に符号化されている。
【００７５】
具体的には、単語符号化部２１３は、検索単語の最前の「ｉｎｓ」について、９ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「１０１００００１１ｂ」（１０進数：３２３）が算出される。単語符号化部２１３は、検索単語の次の「ｕｒａ」について、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「０１０１０ｂ」（１０進数：９）が算出される。単語符号化部２１３は、検索単語の次の「ｎｃｅ△」について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「０１１ｂ」（１０進数：３）が算出される。単語符号化部２１３は、検索単語の最後尾が存在しないので、３ビットのハッシュ値として「０００ｂ」（１０進数：０）を設定する。
【００７６】
下段には、検索単語が「ｈｏｎｏｒａｂｌｅ△」である場合に、検索単語が２０ビット整数に符号化されている。
【００７７】
具体的には、単語符号化部２１３は、検索単語の最前の「ｈｏｎ」について、９ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「０１０１１０１００ｂ」（１０進数：１８０）が算出される。単語符号化部２１３は、検索単語の次の「ｏｒａ」について、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「１０００１ｂ」（１０進数：１７）が算出される。単語符号化部２１３は、検索単語の次の「ｂｌｅ△」について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「１０１ｂ」（１０進数：５）が算出される。単語符号化部２１３は、検索単語の最後尾が存在しないので、３ビットのハッシュ値として「０００ｂ」（１０進数：０）を設定する。
【００７８】
このようにして、単語符号化部２１３は、検索単語における複数の要素のうち文字列の間隔が密の最前の要素に、できるだけ桁数の多いハッシュ値のハッシュ関数を割り当てることで、文字列の間隔が密の部分での一致判定を高速にさせることができる。つまり、検索部１１３は、単語符号化部２１３によって生成された２０ビット整数の最前の９ビットで、ビットフィルタ１２１の２０ビット整数を絞り込むことができ、検索単語に対応する２０ビット整数の探索を高速化できる。
【００７９】
［実施例２の効果］
上記実施例２によれば、情報処理装置１００は、検索対象の単語（検索単語）を分割して複数の要素を得る。情報処理装置１００は、複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、検索単語における要素の位置が検索単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。情報処理装置１００は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。かかる構成によれば、情報処理装置１００は、検索単語における要素の位置が検索単語の最前方に近い程長いビット数のハッシュ値を含む符号化結果を出力するので、符号化結果を一括探索する場合の速度を向上させることが可能となる。
【実施例３】
【００８０】
ところで、実施例２に係る情報処理装置１００は、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。そして、情報処理装置１００は、各ハッシュ値の結合を符号化結果として出力する。しかしながら、情報処理装置１００は、これに限定されず、分割して得られた複数の要素について検索単語における要素の位置が最前方である場合には、文字列分布に合わせた値が得られるように制御しても良い。英和辞典などの辞書では、英単語の先頭３文字について文字列の間隔が密（類似の文字列が多い）となる。そして、英単語の先頭から遠い程、文字列の間隔が疎となる。したがって、文字列の間隔が密な部分には、他の部分より長いビット数のハッシュ値に代えて文字列分布に合わせた値とすることで、さらに精度良く、他の単語との判別を容易にすることが可能となる。
【００８１】
そこで、実施例３では、情報処理装置１００が、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方である場合には、文字列分布に合わせた値が得られるように制御する場合について説明する。
【００８２】
［実施例３に係る検索処理］
図１１を参照して、実施例３に係る検索処理について説明する。図１１に示すように、情報処理装置１００は、検索対象の単語（検索単語）に含まれる「ａｃｃｅｓｓｉｂｉｌｉｔｙ△」を「ａｃｃ」「ｅｓｓ」「ｉｂｉｌ」「ｉｔｙ△」のように３バイト、３バイト、４バイト、残りバイトに分割する。
【００８３】
情報処理装置１００は、分割して得られた複数の要素のうち先頭の要素「ａｃｃ」を文字列分布に合わせた値が得られるように制御する。文字列分布とは、単語の先頭３グラムの文字列に対応させた単語コードの対応部分であり、単語コードの上位９ビットの文字列分布の情報のことをいう。
【００８４】
ここで、文字列分布について、図１２を参照して説明する。図１２は、文字列分布を説明する図である。
【００８５】
図１２左図は、リーダーズ英和辞典の単語辞書の英単語と単語コードとの対応付けが示されている。英単語に対応する単語コードは、３バイトで表わされ、Ａ０００００ｈ〜ＡＦＦＦＦＦｈで表わされる。先頭の４ビットは、英単語であることを示すヘッダであり、１６進数の「Ａ」で表わされる。一例として、単語「ａ△」に対応する単語コードは、「Ａ０００００ｈ」である。単語「ａｂｌｅ△」に対応する単語コードは、「Ａ００００６ｈ」である。単語「ａｄｍｉｎｉｓｔｒａｔｏｒ△」に対応する単語コードは、「Ａ０９０ＦＥｈ」である。文字列分布テーブルは、あらかじめ、リーダーズ英和辞典の単語辞書から作成される。
【００８６】
図１２右図は、文字列分布テーブルが示されている。文字列分布テーブルは、先頭文字列３グラムと文字列分布（９ビット）とを対応付ける。先頭文字列３グラムは、リーダーズ英和辞典の単語辞書の単語における先頭３グラムの文字列のことをいう。文字列分布（９ビット）は、単語に対応する単語コードのヘッダを除いた先頭９ビットのことをいう。すなわち、文字列分布（９ビット）は、単語の先頭３グラムの文字列に関し、該単語に対応する単語コードの上位９ビットを抽出したものである。以降、文字列分布（９ビット）を文字列分布と表記する。一例として、３グラムの先頭文字列「ａ△」に対応する文字列分布は、「０００ｈ」である。３グラムの先頭文字列「ａｂｌ」に対応する文字列分布は、「０００ｈ」である。３グラムの先頭文字列「ａｄｍ」に対応する文字列分布は、「０９０ｈ」である。例えば、情報処理装置１００は、単語の先頭３グラムを文字列分布に合わせた値として、文字列分布テーブルから単語の先頭３グラムに対応する文字列分布を取得する。
【００８７】
図１１に戻って、例えば、情報処理装置１００は、複数の要素のうち先頭の要素「ａｃｃ」を文字列分布に合わせた値として、文字列分布テーブルから先頭の要素「ａｃｃ」に対応する９ビットの文字列分布を取得する。つまり、情報処理装置１００は、文字列の間隔が密な部分である先頭の３バイトに対して、辞書における分布に合わせるように制御する。
【００８８】
情報処理装置１００は、分割して得られた複数の要素のうち先頭の要素以外の要素「ｅｓｓ」「ｉｂｉｌ」「ｉｔｙ△」について、それぞれの検索単語内の位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。ここでいうハッシュ演算の制御は、検索単語内の分割位置に応じた出力ビット数の切り替えであったり、検索単語内の分割位置に応じたハッシュ関数の切り替えであったりする。例えば、最前情報処理装置１００は、要素「ｅｓｓ」の検索単語内の位置に応じて５ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、次の要素「ｉｂｉｌ」の検索単語内の位置に応じて３ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置１００は、残りの要素「ｉｔｙ△」の検索単語内の位置に応じて３ビットのハッシュ値が得られるようにハッシュ演算を制御する。つまり、情報処理装置１００は、文字列の間隔が密な部分である先頭に近い３バイトには、長いビット数のハッシュ値が得られるように制御する。一方、情報処理装置１００は、文字列の間隔が疎な部分であると予想される後方の４バイト、残りバイトには、ビット数を節約すべく短いビット数のハッシュ値が得られるように制御する。
【００８９】
情報処理装置１００は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値を結合し、２０ビットの整数を符号化結果として生成する。すなわち、情報処理装置１００は、検索単語を構成するｎ＋１グラムの文字列から、ハッシュ値により２０ビットの整数を生成する。図１１の例では、ｎ＋１は、検索単語を構成する文字列の文字列長である「１３」と終端を示す空白の長さ「１」とを加算した値であり「１４」となる。
【００９０】
そして、情報処理装置１００は、符号化結果として生成された２０ビットの整数をビットフィルタ１２１に出力する。情報処理装置１００は、ビットフィルタ１２１と２０ビットの整数とを比較して、検索単語の文字列がビットフィルタ１２１にヒットするか否かを判定する。
【００９１】
すなわち、情報処理装置１００は、ビットフィルタ１２１と、符号化結果として生成された２０ビットの整数とを比較し、２０ビットの整数に対応するビットフィルタを取得する。情報処理装置１００は、ビットフィルタ１２１を用いて単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にヒットするか否かを判定する。なお、ビットフィルタ１２１内のビットフィルタは、「２０ビット整数」に対応する単語文字列の存在有無を示す。すなわち、ビットフィルタ１２１内のビットフィルタは、検索単語を２０ビットの整数に符号化した方法と同様の方法で、単語を符号化した場合の「２０ビット整数」に対応する単語文字列の存在有無を示す。
【００９２】
情報処理装置１００は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図１１の例では、情報処理装置１００は、検索単語の文字列が単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」にヒットするので、単語文字列「ａｃｃｅｓｓｉｂｉｌｉｔｙ」に対応する単語コード「Ａ００ＸＹＺｈ」を出力する。
【００９３】
［実施例３に係る情報処理装置の機能構成］
次に、図１３を参照して、実施例３に係る検索処理を実行する情報処理装置１００の機能構成について説明する。図１３は、実施例３に係る情報処理装置の機能構成を示す図である。なお、図８に示す情報処理装置１００と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例２と実施例３とが異なるところは、単語符号化部２１３を単語符号化部３１１に変更した点にある。実施例１と実施例２とが異なるところは、文字列分布テーブル３１２を追加した点にある。
【００９４】
ここで、文字列分布テーブル３１２のデータ構造について、図１４を参照して説明する。図１４は、文字列分布テーブルのデータ構造の一例を示す図である。図１４に示すように、文字列分布テーブル３１２は、先頭文字列３１２ａおよび文字列分布（９ビット）３１２ｂを対応付けて記憶する。先頭文字列３１２ａは、単語における先頭３グラムの文字列を示す。文字列分布（９ビット）３１２ｂは、単語に対応する単語コードのヘッダを除いた先頭９ビットを示す。
【００９５】
単語符号化部３１１は、検索単語から分割された複数の要素について、文字列分布とハッシュにより、２０ビットに符号化する。
【００９６】
例えば、単語符号化部３１１は、文字列分布テーブル３１２から、単語分割部２１１により取得された複数の要素のうち先頭の要素に対応する文字列分布を取得する。すなわち、単語符号化部３１１は、文字列分布テーブル３１２から、先頭の要素である３バイトの先頭文字列に対応する文字列分布（９ビット）３１２ｂを取得する。つまり、単語符号化部３１１は、先頭の要素を辞書における分布に合わせるように制御する。
【００９７】
また、単語符号化部３１１は、単号分割部２１１により取得された複数の要素のうち先頭の要素以外の要素について、それぞれの位置に応じた出力ビット数のハッシュ値が得られるように、ハッシュ演算を制御する。それぞれの位置に応じた出力ビット数は、出力ビット切替部２１２によって切り替えられる。
【００９８】
また、単語符号化部３１１は、取得された文字列分布と、算出して得られたそれぞれのハッシュ値とを結合して、符号化結果として２０ビットの整数を生成する。
【００９９】
［実施例３に係る検索処理の流れ］
次に、実施例３に係る検索処理の流れについて説明する。図１５は、実施例３に係る検索処理の流れの一例を示す図である。
【０１００】
図１５に示すように、情報処理装置１００は、前処理を行う（ステップＳ３０）。例えば、情報処理装置１００は、前処理においてビットフィルタ１２１を保持する領域および文字列分布テーブル３１２を保持する領域を確保する。そして、情報処理装置１００は、確保した領域にビットフィルタ１２１および文字列分布テーブル３１２をロードする。
【０１０１】
続いて、単語分割部２１１は、検索単語を受け取る（ステップＳ３１）。例えば、単語分割部２１１は、検索単語を含む対象ファイルから検索単語を抽出し、抽出した検索単語を受け取っても良い。なお、単語分割部２１１は、入力装置であるキーボードから検索単語を受け取っても良い。
【０１０２】
続いて、単語分割部２１１は、受け取った検索単語を分割する（ステップＳ３２）。一例として、単語分割部２１１は、受け取った検索単語の先頭から３バイト、３バイト、４バイト、残りバイトに分割し、複数の要素を取得する。
【０１０３】
続いて、出力ビット切替部２１２は、検索単語の分割された位置に応じてハッシュの出力ビット数を切り替える（ステップＳ３３）。一例として、出力ビット切替部２１２は、検索単語の分割された要素のうち先頭の要素に対応する出力ビット数を９ビットにする。そして、出力ビット切替部２１２は、検索単語の次の３バイトの要素について、ハッシュの出力ビット数を５ビットに切り替える。出力ビット切替部２１２は、検索単語の次の４バイトの要素について、ハッシュの出力ビット数を３ビットに切り替える。出力ビット切替部２１２は、検索単語の最後尾の残りバイトの要素について、ハッシュの出力ビット数を３ビットに切り替える。
【０１０４】
続いて、単語符号化部３１１は、文字列分布テーブル３１２から先頭の要素に対応する文字列分布を取得する（ステップＳ３４）。例えば、単語符号化部３１１は、文字列分布テーブル３１２から、先頭の要素である３バイトの先頭文字列に対応する文字列分布（９ビット）３１２ｂを取得する。
【０１０５】
そして、単語符号化部３１１は、先頭の要素以外の各要素をハッシュ演算する（ステップＳ３５）。例えば、単語符号化部３１１は、先頭の要素以外の各要素を、切り替えられた出力ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。一例として、単語符号化部３１１は、検索単語における先頭要素の次の要素について、５ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部３１１は、検索単語の次の要素について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部３１１は、検索単語の最後尾の要素について、３ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。
【０１０６】
そして、単語符号化部３１１は、文字列分布と各演算結果とを結合し、検索単語を符号化する（ステップＳ３６）。例えば、単語符号化部３１１は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として２０ビットの整数を生成する。
【０１０７】
続いて、検索部１１３は、符号化されたビット列を用いてビットフィルタ１２１を検索する（ステップＳ３７）。例えば、検索部１１３は、ビットフィルタ１２１の２０ビット整数と、符号化された２０ビットの整数とを比較し、比較した結果、合致した２０ビット整数に対応するビットフィルタを取得する。
【０１０８】
そして、検索部１１３は、ビットフィルタ１２１に単語コードが登録済みであるか否かを判定する（ステップＳ３８）。例えば、検索部１１３は、ビットフィルタ１２１に含まれる２０ビット整数に対応するビットフィルタが、存在することを示す「００００１ｈ」であるか否かを判定する。検索部１１３は、２０ビット整数に対応するビットフィルタが「００００１ｈ」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。
【０１０９】
検索部１１３は、ビットフィルタ１２１に単語コードが登録済みでないと判定した場合には（ステップＳ３８；Ｎｏ）、単語文字列にヒットしないことを出力する。例えば、検索部１１３は、２０ビット整数に対応するビットフィルタが、存在することを示す「００００１ｈ」でない場合には、単語文字列にヒットしないことを出力する。あるいは、検索部１１３は、２０ビット整数に対応するビットフィルタが「００００１ｈ」である場合であって検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。そして、検索部１１３は、検索処理を終了する。
【０１１０】
一方、検索部１１３は、ビットフィルタ１２１に単語コードが登録済みであると判定した場合には（ステップＳ３８；Ｙｅｓ）、ビットフィルタ１２１から検索単語に対応する単語コードを取得する（ステップＳ３９）。そして、検索部１１３は、取得した単語コードを出力し、検索処理を終了する。
【０１１１】
［実施例３の効果］
上記実施例３によれば、情報処理装置１００は、検索対象の単語（検索単語）を分割して複数の要素を得る。情報処理装置１００は、複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、検索単語における要素の位置が検索単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。加えて、情報処理装置１００は、検索単語における要素の位置が検索単語の最前方である場合には、文字列分布に合わせた値が得られるように制御する。情報処理装置１００は、複数の要素のそれぞれについて、文字列分布に合わせた値およびハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。かかる構成によれば、情報処理装置１００は、検索単語の最前方の要素を文字列分布に合わせた値とした符号化結果を出力するので、符号化結果を一括探索する場合の速度をさらに向上させることが可能となる。
【０１１２】
［実施例１〜３に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【０１１３】
また、実施例１に係る情報処理装置１００は、検索単語を分割した複数の要素である３文字、３文字、３文字、残りの文字の文字列に対し、それぞれ５ビットのハッシュ値を算出するものと説明した。しかしながら、情報処理装置１００は、これに限定されず、２文字、２文字、２文字、残りの文字の文字列に対して、ハッシュ演算により、それぞれ５ビットのハッシュ値を算出するようにしても良い。情報処理装置１００は、これに限定されず、４文字、４文字、４文字、残りの文字の文字列に対して、ハッシュ演算により、それぞれ５ビットのハッシュ値を算出するようにしても良い。すなわち、情報処理装置１００は、辞書で扱われている単語に合わせて分割する文字サイズを決定し、それぞれ５ビットのハッシュ値を算出するようにすれば良い。
【０１１４】
また、実施例２、３に係る情報処理装置１００は、検索単語を分割した複数の要素である３文字、３文字、４文字、残りの文字の文字列に対し、９ビット、５ビット、３ビット、３ビットの文字列分布やハッシュ値を算出するものと説明した。しかしながら、情報処理装置１００は、これに限定されず、２文字、３文字、４文字、残りの文字の文字列に対し、９ビット、５ビット、３ビット、３ビットの文字列分布やハッシュ値を算出しても良い。すなわち、情報処理装置１００は、辞書で扱われている単語に合わせて分割する文字サイズを決定し、９ビット、５ビット、３ビット、３ビットの文字列分布やハッシュ値を算出するようにすれば良い。
【０１１５】
また、実施例１〜３に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１１６】
（情報処理装置のハードウェア構成）
図１６は、実施例１〜３の情報処理装置のハードウェア構成を示す図である。図１６の例が示すように、コンピュータ４００は、各種演算処理を実行するＣＰＵ４０１と、ユーザからのデータ入力を受け付ける入力装置４０２と、モニタ４０３とを有する。また、コンピュータ４００は、記憶媒体からプログラム等を読み取る媒体読取装置４０４と、他の装置と接続するためのインターフェース装置４０５と、他の装置と無線により接続するための無線通信装置４０６とを有する。また、コンピュータ４００は、各種情報を一時記憶するＲＡＭ４０７と、ハードディスク装置４０８とを有する。また、各装置４０１〜４０８は、バス４０９に接続される。
【０１１７】
ハードディスク装置４０８には、例えば図５に示した単語分割部１１１、単語符号化部１１２および検索部１１３の各処理部と同様の機能を有する検索プログラムが記憶される。また、ハードディスク装置４０８には、検索プログラムを実現するための各種データが記憶される。
【０１１８】
ＣＰＵ４０１は、ハードディスク装置４０８に記憶された各プログラムを読み出して、ＲＡＭ４０７に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ４００を、例えば図５に示した単語分割部１１１、単語符号化部１１２および検索部１１３として機能させることができる。
【０１１９】
なお、上記の検索プログラムは、必ずしもハードディスク装置４０８に記憶されている必要はない。例えば、コンピュータ４００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ４００が読み出して実行するようにしてもよい。コンピュータ４００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ（Local  Area  Network）等に接続された装置にこのプログラムを記憶させておき、コンピュータ４００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１２０】
図１７は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ４００において、図１７に示すハードウェア群２６（４０１〜４０９）の制御を行なうＯＳ（オペレーティング・システム）２７が動作する。ＯＳ２７に従った手順でＣＰＵ４０１が動作して、ハードウェア群２６の制御・管理が行なわれることにより、アプリケーションプログラム２９やミドルウェア２８に従った処理がハードウェア群２６で実行される。さらに、コンピュータ４００において、ミドルウェア２８またはアプリケーションプログラム２９が、ＲＡＭ４０７に読み出されてＣＰＵ４０１により実行される。
【０１２１】
ＣＰＵ４０１により検索単語を受け付けた場合、ミドルウェア２８またはアプリケーションプログラム２９の少なくとも一部に基づく処理を行なうことで、（それらの処理をＯＳ２７に基づいてハードウェア群２６を制御して）制御部１１０の検索機能が実現される。検索機能は、それぞれアプリケーションプログラム２９自体に含まれてもよいし、アプリケーションプログラム２９に従って呼び出されることで実行されるミドルウェア２８の一部であってもよい。
【０１２２】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２３】
（付記１）コンピュータに、
符号化対象の単語を分割して複数の要素を得て、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する、
処理を行わせることを特徴とする符号化プログラム。
【０１２４】
（付記２）前記制御する処理は、前記単語における前記要素の位置が前記単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する
ことを特徴とする付記１に記載の符号化プログラム。
【０１２５】
（付記３）前記制御する処理は、加えて、前記単語における前記要素の位置が前記単語の最前方である場合には、前記単語における最前方の位置に応じたビット数の値であって辞書における文字列分布に合わせた値が得られるように制御する
ことを特徴とする付記２に記載の符号化プログラム。
【０１２６】
（付記４）符号化対象の単語を分割して複数の要素を取得する分割部と、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する制御部と、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する出力部と、
を有することを特徴とする符号化装置。
【０１２７】
（付記５）コンピュータが、
符号化対象の単語を分割して複数の要素を得て、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する、
処理を実行することを特徴とする符号化方法。
【０１２８】
（付記６）コンピュータに、
入力された検索文字列を前記検索文字列の位置に応じたビット数に所定のハッシュ演算によりハッシュ化したハッシュ化検索文字列を受け取り、
単語に対する、前記所定のハッシュ演算により演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する
処理を行わせることを特徴とする検索プログラム。
【０１２９】
（付記７）入力された検索文字列を前記検索文字列の位置に応じたビット数に所定のハッシュ演算によりハッシュ化したハッシュ化検索文字列を受け取る受取部と、
単語に対する、前記所定のハッシュ演算により演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する検索部と、
を有することを特徴とする検索装置。
【０１３０】
（付記８）コンピュータが、
入力された検索文字列を前記検索文字列の位置に応じたビット数に所定のハッシュ演算によりハッシュ化したハッシュ化検索文字列を受け取り、
単語に対する、前記所定のハッシュ演算により演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する
処理を実行することを特徴とする検索方法。
【符号の説明】
【０１３１】
１００  情報処理装置
１１０  制御部
１１１、２１１  単語分割部
１１２、２１３、３１１  単語符号化部
１１３  検索部
１２０  記憶部
１２１  ビットフィルタ
３１２  文字列分布テーブル
【図１】
2016099662.tif 000003
【図２】
2016099662.tif 000004
【図３】
2016099662.tif 000005
【図４】
2016099662.tif 000006
【図５】
2016099662.tif 000007
【図６】
2016099662.tif 000008
【図７】
2016099662.tif 000009
【図８】
2016099662.tif 000010
【図９】
2016099662.tif 000011
【図１０】
2016099662.tif 000012
【図１１】
2016099662.tif 000013
【図１２】
2016099662.tif 000014
【図１３】
2016099662.tif 000015
【図１４】
2016099662.tif 000016
【図１５】
2016099662.tif 000017
【図１６】
2016099662.tif 000018
【図１７】
2016099662.tif 000019