以下に、本願の開示する符号化プログラム、符号化装置、符号化方法および検索プログラムの実施例を図面に基づいて詳細に説明する。検索プログラムは、符号化プログラムを含むものとする。なお、この実施例によりこの発明が限定されるものではない。
[参考例に係る検索処理]
まず、図1を参照して、参考例に係る情報処理装置による符号化処理について説明する。図1は、参考例に係る検索処理の一例を示す図である。図1に示すように、情報処理装置は、検索対象の単語(検索単語)に含まれる「able△」を、「ab」、「bl」、「le」、「e△」のように2文字ずつ区切り、各文字列を取得する。検索単語は、n文字の英単語と1文字の終端記号とからなる。終端記号は、空白(スペース)、カンマ(,)やピリオド(.)の記号である。本実施例では一例として、終端記号を「△(三角)」で表す。
情報処理装置は、取得した各文字列をビットフィルタ10に出力する。情報処理装置は、ビットフィルタ10と、取得した各文字列とを比較して、検索単語の文字列がビットフィルタ10にヒットするか否かを判定する。ビットフィルタ10は、各単語に対して単語コードを対応付ける辞書のことをいう。ビットフィルタ10には、それぞれの単語に対応する単語コードがあらかじめ登録されている。例えば、ビットフィルタ10には、単語「able」「about」・・・に対応する単語コード「A0007Bh」「A00091h」・・・が順番にあらかじめ登録されている。なお、ビットフィルタ10は、各単語に対して単語コードを対応付ける辞書と説明したが、これに限定されず、各単語に対して圧縮符号をさらに対応付けるようにしても良い。
ここで、参考例に係るビットフィルタ10のデータ構造について、図2を参照して説明する。図2は、参考例に係るビットフィルタの一例を示す図である。図2に示すように、ビットフィルタ10は、2グラムと、ビットマップと、単語文字列と、文字列長と、単語コードと、出現回数とを含んで対応付ける。「2グラム」は、各単語に含まれる連続する文字列である。例えば「able」は、「ab」、「bl」、「le」、「e△」に対応する2グラムを有する。
「ビットマップ」は、2グラムの文字列に対応するビットマップを表す。一例として、2グラム「ab」は、「1_0_0_0_0」のビットマップに対応する。2グラム「bl」は、「0_1_0_0_0」のビットマップに対応する。「単語文字列」は、ビットフィルタ10に登録された単語の文字列である。例えば、単語文字列「able」は、単語へのポインタによって、2グラム「ab」のビットマップ「1_0_0_0_0」と、2グラム「bl」のビットマップ「0_1_0_0_0」と、2グラム「le」のビットマップ「0_0_1_0_0」と、2グラム「e△」のビットマップ「0_0_0_1_1」に対応付けられる。
例えば、情報処理装置は、「able」を検索単語として取得した場合に、ビットフィルタ10と「ab」とを比較し、2グラム「ab」のビットマップ「1_0_0_0_0」を取得する。情報処理装置は、ビットフィルタ10と「bl」とを比較し、2グラム「bl」のビットマップ「0_1_0_0_0」を取得する。情報処理装置は、ビットフィルタ10と「le」とを比較し、2グラム「le」のビットマップ「0_0_1_0_0」を取得する。情報処理装置は、ビットフィルタ10と「e△」とを比較し、2グラム「e△」のビットマップ「0_0_0_1_1」を取得する。情報処理装置は、取得した各ビットマップである「1_0_0_0_0」と、「0_1_0_0_0」と、「0_0_1_0_0」と、「0_0_0_1_1」とを用いて単語文字列「able」にヒットするか否かを判定する。
「文字列長」は、各単語文字列の長さである。「単語コード」は、各単語文字列に割り当てるコードである。例えば、単語コードには、単語文字列「able」「about」・・・に対応する単語コード「A0007Bh」「A00091h」・・・がそれぞれ割り当てられる。
図1に戻って、情報処理装置は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図2の例では、情報処理装置は、検索単語の文字列が単語文字列「able」にヒットするので、単語文字列「able」に対応する単語コード「A0007Bh」を出力する。
このようにして、参考例に係る符号化処理では、単語の文字列の探索(検索)の際に、2グラムのように参照するビットフィルタ10のサイズが小さいと、各参照で「外れ」は少ない。ビットフィルタ10の2グラムの各文字列が単語との関係を有することが多いからである。しかしながら、多数回の参照を繰り返す必要があるため、単語の文字列の探索に時間がかかる。一方、N(N>2)グラムのように参照するビットフィルタ10のサイズが大きいと、各参照で「外れ」が多くなる。ビットフィルタ10のNグラムの各文字列が単語との関係を有することが少なくなるからである。すなわち、ビットフィルタ10のNグラムの各文字列には、単語と関係のない「外れ」の文字列が多く含まれるからである。特に、単語の文字列の探索を1回の照合で完了させようとすると、単語の文字列の文字数に応じたNグラムのビットフィルタ10を参照する必要があるため、単語の文字列の探索に時間がかかる。
[実施例1に係る検索処理]
図3を参照して、実施例1に係る検索処理について説明する。図3は、実施例1に係る検索処理の一例を示す図である。図3に示すように、情報処理装置100は、検索対象の単語(検索単語)に含まれる「accessibility△」を「acc」「ess」「ibi」「lity△」のように、3バイト、3バイト、3バイト、残りバイトに分割する。
情報処理装置100は、分割して得られた複数の要素「acc」「ess」「ibi」「lity△」それぞれの検索単語内の位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。例えば、情報処理装置100は、最前の要素「acc」の検索単語内の位置に応じて5ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、次の要素「ess」の検索単語内の位置に応じて5ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、次の要素「ibi」の検索単語内の位置に応じて5ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、残りの要素「lity△」の検索単語内の位置に応じて5ビットのハッシュ値が得られるようにハッシュ演算を制御する。但し、実施例1では、位置に応じて同一ビット数のハッシュ値が得られるようにするので、ハッシュ演算は、同じハッシュ関数であれば良い。
情報処理装置100は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値を結合し、20ビットの整数を符号化結果として生成する。すなわち、情報処理装置100は、検索単語を構成するn+1グラムの文字列から、ハッシュ値により20ビットの整数を生成する。図3の例では、n+1は、検索単語を構成する文字列の文字列長である「13」と終端を示す空白の長さ「1」とを加算した値であり「14」となる。
ここで、英和辞典の単語と20ビットの整数との関係について説明する。リーダーズ英和辞典には、約27万語の単語が収められている。オックスフォード英英辞典には、約50万語の単語が収められている。いずれの辞典も、単語の数が100万語以内である。これに対して、20ビットは最大1MB(メガバイト)であるので、100万語の単語を表すことが可能である。つまり、いずれの辞典も、20ビットの整数で単語の識別が可能である。このような20ビット整数を用いて、情報処理装置100は、ビットフィルタ121からの検索単語の探索(検索)を1回の照合で完了させる。なお、検索単語全体をハッシュ演算した結果を符号化結果とすることも考えられる。しかしながら、この場合には、ハッシュの一様性および独立性を担保するには、ハッシュ値のビット数を(20ビットより)十分長くとる必要がある。ハッシュ値のビット数を十分長くとることになると、検索単語の探索(検索)を1回の照合で完了させるとしても時間がかかることになる。
情報処理装置100は、符号化結果として生成された20ビットの整数をビットフィルタ121に出力する。情報処理装置100は、ビットフィルタ121と20ビットの整数とを比較して、検索単語の文字列がビットフィルタ121にヒットするか否かを判定する。かかるビットフィルタ121は、参考例に係るビットフィルタ10と同様に、各単語に対して単語コードを対応付ける辞書のことをいう。ビットフィルタ121には、それぞれの単語に対応する単語コードがあらかじめ登録されている。例えば、ビットフィルタ121には、単語「able」「about」・・・に対応する単語コード「A0007Bh」「A00091h」・・・が順番にあらかじめ登録されている。なお、ビットフィルタ121は、各単語に対して単語コードを対応付ける辞書と説明したが、これに限定されず、各単語に対して圧縮符号を対応付けるようにしても良い。
ここで、実施例1に係るビットフィルタ121のデータ構造について、図4を参照して説明する。図4は、実施例1に係るビットフィルタの一例を示す図である。図4に示すように、ビットフィルタ121は、アドレスとしての20ビット整数と、ビットフィルタと、単語文字列と、文字列長と、単語コードと、出現回数とを含んで対応付ける。
「20ビット整数」は、単語文字列のアドレスである20ビットの整数である。「20ビット整数」は、16進数の「00000」「00001」「00002」・・・「FFFFF」のように20ビット整数が連続して登録される。例えば、「accessibility△」の場合は、「acc」、「ess」、「ibi」、「lity△」に対応する20ビット整数を有する。すなわち、かかる20ビット整数には、「acc」に対応する5ビットのハッシュ値、「ess」に対応する5ビットのハッシュ値、「ibi」に対応する5ビットのハッシュ値、「lity△」に対応する5ビットのハッシュ値の結合を符号化結果とした20ビットの整数が登録される。
「ビットフィルタ」は、「20ビット整数」に対応するビットフィルタを表す。すなわち、「ビットフィルタ」は、検索単語を20ビットの整数に符号化した方法と同様の方法で、単語を符号化した場合の「20ビット整数」に対応する単語文字列の存在有無を示す。一例として、「ビットフィルタ」が「00001h」である場合には、存在することを示し、「0h」である場合には、存在しないことを示す。「単語文字列」は、ビットフィルタ121に登録された単語の文字列である。例えば、単語文字列「accessibility」は、単語へのポインタによって20ビット整数「AD425h」のビットフィルタ「00001h」に対応付けられる。
例えば、情報処理装置100は、「accessibility」を検索単語として取得した場合に、20ビット整数「AD425h」を符号化結果として生成する。情報処理装置100は、ビットフィルタ100と、符号化結果として生成された「AD425h」とを比較し、20ビット整数「AD425h」に対応するビットフィルタを取得する。情報処理装置は、ビットフィルタを用いて単語文字列「accessibility」にヒットするか否かを判定する。
「文字列長」は、各単語文字列の長さである。「単語コード」は、各単語文字列に割り当てるコードである。例えば、単語コードには、単語文字列「able」「about」・・・に対応する単語コード「A0007Bh」「A00091h」・・・がそれぞれ割り当てられる。
図3に戻って、情報処理装置100は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図4の例では、情報処理装置100は、検索単語の文字列が単語文字列「accessibility」にヒットするので、単語文字列「accessibility」に対応する単語コード「A00XYZh」を出力する。
[実施例1に係る情報処理装置の機能構成]
次に、図5を参照して、実施例1に係る検索処理を実行する情報処理装置100の機能構成について説明する。図5は、実施例1に係る情報処理装置の機能構成を示す図である。図5に示すように、情報処理装置100は、制御部110と記憶部120とを有する。
制御部110は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部110は、例えば、ASICやFPGAなどの集積回路の電子回路に対応する。または、制御部110は、CPUやMPUなどの電子回路に対応する。また、制御部110は、単語分割部111、単語符号化部112および検索部113を有する。
記憶部120は、例えばフラッシュメモリやFRAM(登録商標)などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部120は、ビットフィルタ121を有する。なお、ビットフィルタ121の構成は、図4と同様であるので、その説明を省略する。
単語分割部111は、検索対象の単語(検索単語)を分割する。例えば、単語分割部111は、検索単語を取得すると、取得した検索単語の先頭から3バイトずつ分割する。単語分割部111は、分割して得られた複数の要素を取得する。
単語符号化部112は、検索単語から分割された複数の要素のそれぞれのハッシュにより、20ビットに符号化する。例えば、単語符号化部112は、単語分割部111により取得された複数の要素それぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。一例として、単語符号化部112は、3文字、3文字、3文字、残りの文字の文字列に対し、それぞれ5ビットのハッシュ値を算出する場合には、同一のハッシュ関数となるように、ハッシュ演算を制御する。そして、単語符号化部112は、3文字、3文字、3文字、残りの文字の文字列に対し、制御されたハッシュ演算により、それぞれ5ビットのハッシュ値を算出する。単語符号化部112は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として20ビットの整数を生成する。
検索部113は、ビットフィルタ121から、検索単語に対する単語コードを検索する。例えば、検索部113は、ビットフィルタ121の20ビット整数と、単語符号化部112によって符号化された20ビットの整数とを比較する。検索部113は、合致した20ビット整数に対応するビットフィルタを取得する。検索部113は、取得したビットフィルタが存在しないことを示す「0h」である場合には、単語が存在しないことを出力する。検索部113は、取得したビットフィルタが存在することを示す「00001h」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。検索部113は、検索単語の文字列が単語文字列にヒットする場合には、ヒットした単語文字列に対応する単語コードを出力する。検索部113は、検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。
[実施例1に係る検索処理の流れ]
次に、実施例1に係る検索処理の流れについて説明する。図6は、実施例1に係る検索処理の流れの一例を示す図である。
図6に示すように、情報処理装置100は、前処理を行う(ステップS10)。例えば、情報処理装置100は、前処理においてビットフィルタ121を保持する領域を確保し、確保した領域にビットフィルタ121をロードする。
続いて、単語分割部111は、検索単語を受け取る(ステップS11)。例えば、単語分割部111は、検索単語を含む対象ファイルから検索単語を抽出し、抽出した検索単語を受け取っても良い。なお、単語分割部111は、入力装置であるキーボードから検索単語を受け取っても良い。
続いて、単語分割部111は、受け取った検索単語を分割する(ステップS12)。例えば、単語分割部111は、受け取った検索単語の先頭から3バイトずつ分割し、複数の要素を取得する。
続いて、単語符号化部112は、分割された各要素をハッシュ演算する(ステップS13)。例えば、単語符号化部112は、分割された各要素に対し、それぞれ5ビットのハッシュ値を算出する場合には、同一のハッシュ関数によりそれぞれハッシュ値を算出する。
そして、単語符号化部112は、各演算結果を結合し、検索単語を符号化する(ステップS14)。例えば、単語符号化部112は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として20ビットの整数を生成する。
続いて、検索部113は、符号化されたビット列を用いてビットフィルタ121を検索する(ステップS15)。例えば、検索部113は、ビットフィルタ121の20ビット整数と、符号化された20ビットの整数とを比較し、比較した結果、合致した20ビット整数に対応するビットフィルタを取得する。
そして、検索部113は、ビットフィルタ121に単語コードが登録済みであるか否かを判定する(ステップS16)。例えば、検索部113は、ビットフィルタ121に含まれる20ビット整数に対応するビットフィルタが、存在することを示す「00001h」であるか否かを判定する。検索部113は、20ビット整数に対応するビットフィルタが「00001h」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。
検索部113は、ビットフィルタ121に単語コードが登録済みでないと判定した場合には(ステップS16;No)、単語文字列にヒットしないことを出力する。例えば、検索部113は、20ビット整数に対応するビットフィルタが、存在することを示す「00001h」でない場合には、単語文字列にヒットしないことを出力する。あるいは、検索部113は、20ビット整数に対応するビットフィルタが「00001h」である場合であって検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。そして、検索部113は、検索処理を終了する。
一方、検索部113は、ビットフィルタ121に単語コードが登録済みであると判定した場合には(ステップS16;Yes)、ビットフィルタ121から検索単語に対応する単語コードを取得する(ステップS17)。そして、検索部113は、取得した単語コードを出力し、検索処理を終了する。
[実施例1の効果]
上記実施例1によれば、情報処理装置100は、検索対象の単語(検索単語)を分割して複数の要素を得る。情報処理装置100は、複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、複数の要素について検索単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。情報処理装置100は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。かかる構成によれば、情報処理装置100は、単語を、分割により得られた複数の要素のそれぞれのハッシュ値の結合に符号化することで、検索対象の単語を一括探索する場合の速度を向上させることが可能となる。
ところで、実施例1に係る情報処理装置100は、検索単語を分割し、分割して得られた複数の要素についてそれぞれ同じビット数のハッシュ値が得られるように、ハッシュ演算を制御する。そして、情報処理装置100は、各ハッシュ値の結合を符号化結果として出力する。しかしながら、情報処理装置100は、これに限定されず、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御しても良い。英和辞典などの辞書では、英単語の先頭3文字について文字列の間隔が密(類似の文字列が多い)となる。そして、英単語の先頭から遠い程、文字列の間隔が疎となる。したがって、文字列の間隔が密な部分には、他の部分より長いビット数のハッシュ値が得られるようにし、文字列の間隔が疎な部分には、ビット数を短いビット数のハッシュ値が得られるように、制御ハッシュ演算を制御する。文字列の間隔が密の部分に長いビット数のハッシュ値が得られるようにすれば、他の単語の同じ位置であっても異なる文字とハッシュ値が可能な限り重複しない(ハッシュの独立性を担保する)ようになる。これにより、他の単語との判別を容易にすることが可能となる。
そこで、実施例2では、情報処理装置100が、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する場合について説明する。
[実施例2に係る検索処理]
図7を参照して、実施例2に係る検索処理について説明する。図7は、実施例2に係る検索処理の一例を示す図である。図7に示すように、情報処理装置100は、検索対象の単語(検索単語)に含まれる「accessibility△」を「acc」「ess」「ibil」「ity△」のように3バイト、3バイト、4バイト、残りバイトに分割する。
情報処理装置100は、分割して得られた複数の要素「acc」「ess」「ibil」「ity△」それぞれの検索単語内の位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。ここでいうハッシュ演算の制御は、検索単語内の分割位置に応じた出力ビット数の切り替えであったり、検索単語内の分割位置に応じたハッシュ関数の切り替えであったりする。例えば、情報処理装置100は、最前の要素「acc」の検索単語内の位置に応じて9ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、次の要素「ess」の検索単語内の位置に応じて5ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、次の要素「ibil」の検索単語内の位置に応じて3ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、残りの要素「ity△」の検索単語内の位置に応じて3ビットのハッシュ値が得られるようにハッシュ演算を制御する。すなわち、情報処理装置100は、検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。つまり、情報処理装置100は、文字列の間隔が密な部分である先頭の3バイトには、長いビット数のハッシュ値が得られるように制御する。情報処理装置100は、文字列の間隔が疎な部分であると予想される後方の4バイト、残りバイトには、ビット数を節約すべく短いビット数のハッシュ値が得られるように制御する。
情報処理装置100は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値を結合し、20ビットの整数を符号化結果として生成する。すなわち、情報処理装置100は、検索単語を構成するn+1グラムの文字列から、ハッシュ値により20ビットの整数を生成する。図7の例では、n+1は、検索単語を構成する文字列の文字列長である「13」と終端を示す空白の長さ「1」とを加算した値であり「14」となる。
そして、情報処理装置100は、符号化結果として生成された20ビットの整数をビットフィルタ121に出力する。情報処理装置100は、ビットフィルタ121と20ビットの整数とを比較して、検索単語の文字列がビットフィルタ121にヒットするか否かを判定する。
すなわち、情報処理装置100は、ビットフィルタ121と、符号化結果として生成された20ビットの整数とを比較し、20ビットの整数に対応するビットフィルタを取得する。情報処理装置100は、ビットフィルタを用いて単語文字列「accessibility」にヒットするか否かを判定する。なお、ビットフィルタ121内のビットフィルタは、「20ビット整数」に対応する単語文字列の存在有無を示す。すなわち、ビットフィルタ121内のビットフィルタは、検索単語を20ビットの整数に符号化した方法と同様の方法で、単語を符号化した場合の「20ビット整数」に対応する単語文字列の存在有無を示す。
情報処理装置100は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図7の例では、情報処理装置100は、検索単語の文字列が単語文字列「accessibility」にヒットするので、単語文字列「accessibility」に対応する単語コード「A00XYZh」を出力する。
[実施例2に係る情報処理装置の機能構成]
次に、図8を参照して、実施例2に係る検索処理を実行する情報処理装置100の機能構成について説明する。図8は、実施例2に係る情報処理装置の機能構成を示す図である。なお、図5に示す情報処理装置100と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、単語分割部111を単語分割部211に変更し、単語符号化部112を単語符号化部213に変更した点にある。実施例1と実施例2とが異なるところは、出力ビット切替部212を追加した点にある。
単語分割部211は、検索対象の単語(検索単語)を分割する。例えば、単語分割部211は、検索単語を取得すると、取得した検索単語の先頭から3バイト、3バイト、4バイト、残りバイトに分割する。単語分割部211は、分割して得られた複数の要素を取得する。
出力ビット切替部212は、検索単語から分割された複数の要素のそれぞれの出力ビット数を切り替える。例えば、出力ビット切替部212は、単語分割部211により取得された複数の要素それぞれの位置に応じて、出力されるハッシュ値のビット数を切り替える。すなわち、出力ビット切替部212は、検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように出力ビット数を切り替える。一例として、検索単語における最前の要素の場合には、出力ビット数を9ビットとし、後続する要素の場合には、それぞれ5ビット、3ビット、3ビットとする。
単語符号化部213は、検索単語から分割された複数の要素のそれぞれのハッシュにより、20ビットに符号化する。例えば、単語符号化部213は、単語分割部211により取得された複数の要素のそれぞれの位置に応じた出力ビット数のハッシュ値が得られるように、ハッシュ演算を制御する。それぞれの位置に応じた出力ビット数は、出力ビット切替部212によって切り替えられる。一例として、単語符号化部213は、検索単語における複数の要素のうち最前の要素の出力ビット数が9ビットである場合には、9ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部213は、検索単語における複数の要素のうち次の要素の出力ビット数が5ビットである場合には、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部213は、検索単語における複数の要素のうち次の要素の出力ビット数が5ビットである場合には、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部213は、検索単語における複数の要素のうち最後尾の要素の出力ビット数が3ビットである場合には、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。そして、単語符号化部213は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として20ビットの整数を生成する。
[実施例2に係る検索処理の流れ]
次に、実施例2に係る検索処理の流れについて説明する。図9は、実施例2に係る検索処理の流れの一例を示す図である。
図9に示すように、情報処理装置100は、前処理を行う(ステップS20)。例えば、情報処理装置100は、前処理においてビットフィルタ121を保持する領域を確保し、確保した領域にビットフィルタ121をロードする。
続いて、単語分割部211は、検索単語を受け取る(ステップS21)。例えば、単語分割部211は、検索単語を含む対象ファイルから検索単語を抽出し、抽出した検索単語を受け取っても良い。なお、単語分割部211は、入力装置であるキーボードから検索単語を受け取っても良い。
続いて、単語分割部211は、受け取った検索単語を分割する(ステップS22)。一例として、単語分割部211は、受け取った検索単語の先頭から3バイト、3バイト、4バイト、残りバイトに分割し、複数の要素を取得する。
続いて、出力ビット切替部212は、検索単語の分割された位置に応じてハッシュの出力ビット数を切り替える(ステップS23)。一例として、出力ビット切替部212は、検索単語の先頭から3バイトの要素について、ハッシュの出力ビット数を9ビットに切り替える。出力ビット切替部212は、検索単語の次の3バイトの要素について、ハッシュの出力ビット数を5ビットに切り替える。出力ビット切替部212は、検索単語の次の4バイトの要素について、ハッシュの出力ビット数を3ビットに切り替える。出力ビット切替部212は、検索単語の最後尾の残りバイトの要素について、ハッシュの出力ビット数を3ビットに切り替える。
続いて、単語符号化部213は、分割された各要素をハッシュ演算する(ステップS24)。例えば、単語符号化部213は、分割された各要素を、切り替えられた出力ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。一例として、単語符号化部213は、検索単語の最前の要素について、9ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部213は、検索単語の次の要素について、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部213は、検索単語の次の要素について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部213は、検索単語の最後尾の要素について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。
そして、単語符号化部213は、各演算結果を結合し、検索単語を符号化する(ステップS25)。例えば、単語符号化部213は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として20ビットの整数を生成する。
続いて、検索部113は、符号化されたビット列を用いてビットフィルタ121を検索する(ステップS26)。例えば、検索部113は、ビットフィルタ121の20ビット整数と、符号化された20ビットの整数とを比較し、比較した結果、合致した20ビット整数に対応するビットフィルタを取得する。
そして、検索部113は、ビットフィルタ121に単語コードが登録済みであるか否かを判定する(ステップS27)。例えば、検索部113は、ビットフィルタ121に含まれる20ビット整数に対応するビットフィルタが、存在することを示す「00001h」であるか否かを判定する。検索部113は、20ビット整数に対応するビットフィルタが「00001h」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。
検索部113は、ビットフィルタ121に単語コードが登録済みでないと判定した場合には(ステップS27;No)、単語文字列にヒットしないことを出力する。例えば、検索部113は、20ビット整数に対応するビットフィルタが、存在することを示す「00001h」でない場合には、単語文字列にヒットしないことを出力する。あるいは、検索部113は、20ビット整数に対応するビットフィルタが「00001h」である場合であって検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。そして、検索部113は、検索処理を終了する。
一方、検索部113は、ビットフィルタ121に単語コードが登録済みであると判定した場合には(ステップS27;Yes)、ビットフィルタ121から検索単語に対応する単語コードを取得する(ステップS28)。そして、検索部113は、取得した単語コードを出力し、検索処理を終了する。
[単語符号化処理の具体例]
図10は、実施例2に係る単語符号化処理の具体例を示す図である。図10に示すように、上段には、検索単語が「internship△」である場合に、検索単語が20ビット整数に符号化されている。
具体的には、単語分割部211は、検索単語「internship△」の先頭から3バイトの「int」、3バイトの「ern」、4バイトの「ship」、残り1バイト「△」に分割する。
そして、出力ビット切替部212は、検索単語の先頭から3バイトの「int」について、ハッシュの出力ビット数を9ビットに切り替える。出力ビット切替部212は、検索単語の次の3バイトの「ern」について、ハッシュの出力ビット数を5ビットに切り替える。出力ビット切替部212は、検索単語の次の4バイトの[ship]について、ハッシュの出力ビット数を3ビットに切り替える。出力ビット切替部212は、検索単語の最後尾の残りバイトの「△」について、ハッシュの出力ビット数を3ビットに切り替える。
そして、単語符号化部213は、検索単語の最前の「int」について、9ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「101000100b」(10進数:324)が算出される。単語符号化部213は、検索単語の次の「ern」について、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「01010b」(10進数:10)が算出される。単語符号化部213は、検索単語の次の「ship」について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「010b」(10進数:2)が算出される。単語符号化部213は、検索単語の最後尾の「△」について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「000b」(10進数:0)が算出される。
中段には、検索単語が「insurance△」である場合に、検索単語が20ビット整数に符号化されている。下段には、検索単語が「honorable△」である場合に、検索単語が20ビット整数に符号化されている。
具体的には、単語符号化部213は、検索単語の最前の「ins」について、9ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「101000011b」(10進数:323)が算出される。単語符号化部213は、検索単語の次の「ura」について、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「01010b」(10進数:9)が算出される。単語符号化部213は、検索単語の次の「nce△」について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「011b」(10進数:3)が算出される。単語符号化部213は、検索単語の最後尾が存在しないので、3ビットのハッシュ値として「000b」(10進数:0)を設定する。
下段には、検索単語が「honorable△」である場合に、検索単語が20ビット整数に符号化されている。
具体的には、単語符号化部213は、検索単語の最前の「hon」について、9ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「010110100b」(10進数:180)が算出される。単語符号化部213は、検索単語の次の「ora」について、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「10001b」(10進数:17)が算出される。単語符号化部213は、検索単語の次の「ble△」について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。この結果、ハッシュ値として「101b」(10進数:5)が算出される。単語符号化部213は、検索単語の最後尾が存在しないので、3ビットのハッシュ値として「000b」(10進数:0)を設定する。
このようにして、単語符号化部213は、検索単語における複数の要素のうち文字列の間隔が密の最前の要素に、できるだけ桁数の多いハッシュ値のハッシュ関数を割り当てることで、文字列の間隔が密の部分での一致判定を高速にさせることができる。つまり、検索部113は、単語符号化部213によって生成された20ビット整数の最前の9ビットで、ビットフィルタ121の20ビット整数を絞り込むことができ、検索単語に対応する20ビット整数の探索を高速化できる。
[実施例2の効果]
上記実施例2によれば、情報処理装置100は、検索対象の単語(検索単語)を分割して複数の要素を得る。情報処理装置100は、複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、検索単語における要素の位置が検索単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。情報処理装置100は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。かかる構成によれば、情報処理装置100は、検索単語における要素の位置が検索単語の最前方に近い程長いビット数のハッシュ値を含む符号化結果を出力するので、符号化結果を一括探索する場合の速度を向上させることが可能となる。
ところで、実施例2に係る情報処理装置100は、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。そして、情報処理装置100は、各ハッシュ値の結合を符号化結果として出力する。しかしながら、情報処理装置100は、これに限定されず、分割して得られた複数の要素について検索単語における要素の位置が最前方である場合には、文字列分布に合わせた値が得られるように制御しても良い。英和辞典などの辞書では、英単語の先頭3文字について文字列の間隔が密(類似の文字列が多い)となる。そして、英単語の先頭から遠い程、文字列の間隔が疎となる。したがって、文字列の間隔が密な部分には、他の部分より長いビット数のハッシュ値に代えて文字列分布に合わせた値とすることで、さらに精度良く、他の単語との判別を容易にすることが可能となる。
そこで、実施例3では、情報処理装置100が、検索単語を分割し、分割して得られた複数の要素について検索単語における要素の位置が最前方である場合には、文字列分布に合わせた値が得られるように制御する場合について説明する。
[実施例3に係る検索処理]
図11を参照して、実施例3に係る検索処理について説明する。図11に示すように、情報処理装置100は、検索対象の単語(検索単語)に含まれる「accessibility△」を「acc」「ess」「ibil」「ity△」のように3バイト、3バイト、4バイト、残りバイトに分割する。
情報処理装置100は、分割して得られた複数の要素のうち先頭の要素「acc」を文字列分布に合わせた値が得られるように制御する。文字列分布とは、単語の先頭3グラムの文字列に対応させた単語コードの対応部分であり、単語コードの上位9ビットの文字列分布の情報のことをいう。
ここで、文字列分布について、図12を参照して説明する。図12は、文字列分布を説明する図である。
図12左図は、リーダーズ英和辞典の単語辞書の英単語と単語コードとの対応付けが示されている。英単語に対応する単語コードは、3バイトで表わされ、A00000h〜AFFFFFhで表わされる。先頭の4ビットは、英単語であることを示すヘッダであり、16進数の「A」で表わされる。一例として、単語「a△」に対応する単語コードは、「A00000h」である。単語「able△」に対応する単語コードは、「A00006h」である。単語「administrator△」に対応する単語コードは、「A090FEh」である。文字列分布テーブルは、あらかじめ、リーダーズ英和辞典の単語辞書から作成される。
図12右図は、文字列分布テーブルが示されている。文字列分布テーブルは、先頭文字列3グラムと文字列分布(9ビット)とを対応付ける。先頭文字列3グラムは、リーダーズ英和辞典の単語辞書の単語における先頭3グラムの文字列のことをいう。文字列分布(9ビット)は、単語に対応する単語コードのヘッダを除いた先頭9ビットのことをいう。すなわち、文字列分布(9ビット)は、単語の先頭3グラムの文字列に関し、該単語に対応する単語コードの上位9ビットを抽出したものである。以降、文字列分布(9ビット)を文字列分布と表記する。一例として、3グラムの先頭文字列「a△」に対応する文字列分布は、「000h」である。3グラムの先頭文字列「abl」に対応する文字列分布は、「000h」である。3グラムの先頭文字列「adm」に対応する文字列分布は、「090h」である。例えば、情報処理装置100は、単語の先頭3グラムを文字列分布に合わせた値として、文字列分布テーブルから単語の先頭3グラムに対応する文字列分布を取得する。
図11に戻って、例えば、情報処理装置100は、複数の要素のうち先頭の要素「acc」を文字列分布に合わせた値として、文字列分布テーブルから先頭の要素「acc」に対応する9ビットの文字列分布を取得する。つまり、情報処理装置100は、文字列の間隔が密な部分である先頭の3バイトに対して、辞書における分布に合わせるように制御する。
情報処理装置100は、分割して得られた複数の要素のうち先頭の要素以外の要素「ess」「ibil」「ity△」について、それぞれの検索単語内の位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する。ここでいうハッシュ演算の制御は、検索単語内の分割位置に応じた出力ビット数の切り替えであったり、検索単語内の分割位置に応じたハッシュ関数の切り替えであったりする。例えば、最前情報処理装置100は、要素「ess」の検索単語内の位置に応じて5ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、次の要素「ibil」の検索単語内の位置に応じて3ビットのハッシュ値が得られるようにハッシュ演算を制御する。情報処理装置100は、残りの要素「ity△」の検索単語内の位置に応じて3ビットのハッシュ値が得られるようにハッシュ演算を制御する。つまり、情報処理装置100は、文字列の間隔が密な部分である先頭に近い3バイトには、長いビット数のハッシュ値が得られるように制御する。一方、情報処理装置100は、文字列の間隔が疎な部分であると予想される後方の4バイト、残りバイトには、ビット数を節約すべく短いビット数のハッシュ値が得られるように制御する。
情報処理装置100は、複数の要素のそれぞれについてハッシュ演算により得られた各ハッシュ値を結合し、20ビットの整数を符号化結果として生成する。すなわち、情報処理装置100は、検索単語を構成するn+1グラムの文字列から、ハッシュ値により20ビットの整数を生成する。図11の例では、n+1は、検索単語を構成する文字列の文字列長である「13」と終端を示す空白の長さ「1」とを加算した値であり「14」となる。
そして、情報処理装置100は、符号化結果として生成された20ビットの整数をビットフィルタ121に出力する。情報処理装置100は、ビットフィルタ121と20ビットの整数とを比較して、検索単語の文字列がビットフィルタ121にヒットするか否かを判定する。
すなわち、情報処理装置100は、ビットフィルタ121と、符号化結果として生成された20ビットの整数とを比較し、20ビットの整数に対応するビットフィルタを取得する。情報処理装置100は、ビットフィルタ121を用いて単語文字列「accessibility」にヒットするか否かを判定する。なお、ビットフィルタ121内のビットフィルタは、「20ビット整数」に対応する単語文字列の存在有無を示す。すなわち、ビットフィルタ121内のビットフィルタは、検索単語を20ビットの整数に符号化した方法と同様の方法で、単語を符号化した場合の「20ビット整数」に対応する単語文字列の存在有無を示す。
情報処理装置100は、検索単語の文字列が単語文字列にヒットした場合には、単語文字列に対応する単語コードを出力する。図11の例では、情報処理装置100は、検索単語の文字列が単語文字列「accessibility」にヒットするので、単語文字列「accessibility」に対応する単語コード「A00XYZh」を出力する。
[実施例3に係る情報処理装置の機能構成]
次に、図13を参照して、実施例3に係る検索処理を実行する情報処理装置100の機能構成について説明する。図13は、実施例3に係る情報処理装置の機能構成を示す図である。なお、図8に示す情報処理装置100と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例2と実施例3とが異なるところは、単語符号化部213を単語符号化部311に変更した点にある。実施例1と実施例2とが異なるところは、文字列分布テーブル312を追加した点にある。
ここで、文字列分布テーブル312のデータ構造について、図14を参照して説明する。図14は、文字列分布テーブルのデータ構造の一例を示す図である。図14に示すように、文字列分布テーブル312は、先頭文字列312aおよび文字列分布(9ビット)312bを対応付けて記憶する。先頭文字列312aは、単語における先頭3グラムの文字列を示す。文字列分布(9ビット)312bは、単語に対応する単語コードのヘッダを除いた先頭9ビットを示す。
単語符号化部311は、検索単語から分割された複数の要素について、文字列分布とハッシュにより、20ビットに符号化する。
例えば、単語符号化部311は、文字列分布テーブル312から、単語分割部211により取得された複数の要素のうち先頭の要素に対応する文字列分布を取得する。すなわち、単語符号化部311は、文字列分布テーブル312から、先頭の要素である3バイトの先頭文字列に対応する文字列分布(9ビット)312bを取得する。つまり、単語符号化部311は、先頭の要素を辞書における分布に合わせるように制御する。
また、単語符号化部311は、単号分割部211により取得された複数の要素のうち先頭の要素以外の要素について、それぞれの位置に応じた出力ビット数のハッシュ値が得られるように、ハッシュ演算を制御する。それぞれの位置に応じた出力ビット数は、出力ビット切替部212によって切り替えられる。
また、単語符号化部311は、取得された文字列分布と、算出して得られたそれぞれのハッシュ値とを結合して、符号化結果として20ビットの整数を生成する。
[実施例3に係る検索処理の流れ]
次に、実施例3に係る検索処理の流れについて説明する。図15は、実施例3に係る検索処理の流れの一例を示す図である。
図15に示すように、情報処理装置100は、前処理を行う(ステップS30)。例えば、情報処理装置100は、前処理においてビットフィルタ121を保持する領域および文字列分布テーブル312を保持する領域を確保する。そして、情報処理装置100は、確保した領域にビットフィルタ121および文字列分布テーブル312をロードする。
続いて、単語分割部211は、検索単語を受け取る(ステップS31)。例えば、単語分割部211は、検索単語を含む対象ファイルから検索単語を抽出し、抽出した検索単語を受け取っても良い。なお、単語分割部211は、入力装置であるキーボードから検索単語を受け取っても良い。
続いて、単語分割部211は、受け取った検索単語を分割する(ステップS32)。一例として、単語分割部211は、受け取った検索単語の先頭から3バイト、3バイト、4バイト、残りバイトに分割し、複数の要素を取得する。
続いて、出力ビット切替部212は、検索単語の分割された位置に応じてハッシュの出力ビット数を切り替える(ステップS33)。一例として、出力ビット切替部212は、検索単語の分割された要素のうち先頭の要素に対応する出力ビット数を9ビットにする。そして、出力ビット切替部212は、検索単語の次の3バイトの要素について、ハッシュの出力ビット数を5ビットに切り替える。出力ビット切替部212は、検索単語の次の4バイトの要素について、ハッシュの出力ビット数を3ビットに切り替える。出力ビット切替部212は、検索単語の最後尾の残りバイトの要素について、ハッシュの出力ビット数を3ビットに切り替える。
続いて、単語符号化部311は、文字列分布テーブル312から先頭の要素に対応する文字列分布を取得する(ステップS34)。例えば、単語符号化部311は、文字列分布テーブル312から、先頭の要素である3バイトの先頭文字列に対応する文字列分布(9ビット)312bを取得する。
そして、単語符号化部311は、先頭の要素以外の各要素をハッシュ演算する(ステップS35)。例えば、単語符号化部311は、先頭の要素以外の各要素を、切り替えられた出力ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。一例として、単語符号化部311は、検索単語における先頭要素の次の要素について、5ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部311は、検索単語の次の要素について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。単語符号化部311は、検索単語の最後尾の要素について、3ビットのハッシュ値が得られるようなハッシュ関数でハッシュ値を算出する。
そして、単語符号化部311は、文字列分布と各演算結果とを結合し、検索単語を符号化する(ステップS36)。例えば、単語符号化部311は、算出して得られたそれぞれのハッシュ値を結合して、符号化結果として20ビットの整数を生成する。
続いて、検索部113は、符号化されたビット列を用いてビットフィルタ121を検索する(ステップS37)。例えば、検索部113は、ビットフィルタ121の20ビット整数と、符号化された20ビットの整数とを比較し、比較した結果、合致した20ビット整数に対応するビットフィルタを取得する。
そして、検索部113は、ビットフィルタ121に単語コードが登録済みであるか否かを判定する(ステップS38)。例えば、検索部113は、ビットフィルタ121に含まれる20ビット整数に対応するビットフィルタが、存在することを示す「00001h」であるか否かを判定する。検索部113は、20ビット整数に対応するビットフィルタが「00001h」である場合には、単語へのポインタを用いて検索単語の文字列が単語文字列にヒットするか否かを判定する。
検索部113は、ビットフィルタ121に単語コードが登録済みでないと判定した場合には(ステップS38;No)、単語文字列にヒットしないことを出力する。例えば、検索部113は、20ビット整数に対応するビットフィルタが、存在することを示す「00001h」でない場合には、単語文字列にヒットしないことを出力する。あるいは、検索部113は、20ビット整数に対応するビットフィルタが「00001h」である場合であって検索単語の文字列が単語文字列にヒットしない場合には、単語文字列にヒットしないことを出力する。そして、検索部113は、検索処理を終了する。
一方、検索部113は、ビットフィルタ121に単語コードが登録済みであると判定した場合には(ステップS38;Yes)、ビットフィルタ121から検索単語に対応する単語コードを取得する(ステップS39)。そして、検索部113は、取得した単語コードを出力し、検索処理を終了する。
[実施例3の効果]
上記実施例3によれば、情報処理装置100は、検索対象の単語(検索単語)を分割して複数の要素を得る。情報処理装置100は、複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、検索単語における要素の位置が検索単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する。加えて、情報処理装置100は、検索単語における要素の位置が検索単語の最前方である場合には、文字列分布に合わせた値が得られるように制御する。情報処理装置100は、複数の要素のそれぞれについて、文字列分布に合わせた値およびハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する。かかる構成によれば、情報処理装置100は、検索単語の最前方の要素を文字列分布に合わせた値とした符号化結果を出力するので、符号化結果を一括探索する場合の速度をさらに向上させることが可能となる。
[実施例1〜3に関連する他の態様]
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
また、実施例1に係る情報処理装置100は、検索単語を分割した複数の要素である3文字、3文字、3文字、残りの文字の文字列に対し、それぞれ5ビットのハッシュ値を算出するものと説明した。しかしながら、情報処理装置100は、これに限定されず、2文字、2文字、2文字、残りの文字の文字列に対して、ハッシュ演算により、それぞれ5ビットのハッシュ値を算出するようにしても良い。情報処理装置100は、これに限定されず、4文字、4文字、4文字、残りの文字の文字列に対して、ハッシュ演算により、それぞれ5ビットのハッシュ値を算出するようにしても良い。すなわち、情報処理装置100は、辞書で扱われている単語に合わせて分割する文字サイズを決定し、それぞれ5ビットのハッシュ値を算出するようにすれば良い。
また、実施例2、3に係る情報処理装置100は、検索単語を分割した複数の要素である3文字、3文字、4文字、残りの文字の文字列に対し、9ビット、5ビット、3ビット、3ビットの文字列分布やハッシュ値を算出するものと説明した。しかしながら、情報処理装置100は、これに限定されず、2文字、3文字、4文字、残りの文字の文字列に対し、9ビット、5ビット、3ビット、3ビットの文字列分布やハッシュ値を算出しても良い。すなわち、情報処理装置100は、辞書で扱われている単語に合わせて分割する文字サイズを決定し、9ビット、5ビット、3ビット、3ビットの文字列分布やハッシュ値を算出するようにすれば良い。
また、実施例1〜3に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(情報処理装置のハードウェア構成)
図16は、実施例1〜3の情報処理装置のハードウェア構成を示す図である。図16の例が示すように、コンピュータ400は、各種演算処理を実行するCPU401と、ユーザからのデータ入力を受け付ける入力装置402と、モニタ403とを有する。また、コンピュータ400は、記憶媒体からプログラム等を読み取る媒体読取装置404と、他の装置と接続するためのインターフェース装置405と、他の装置と無線により接続するための無線通信装置406とを有する。また、コンピュータ400は、各種情報を一時記憶するRAM407と、ハードディスク装置408とを有する。また、各装置401〜408は、バス409に接続される。
ハードディスク装置408には、例えば図5に示した単語分割部111、単語符号化部112および検索部113の各処理部と同様の機能を有する検索プログラムが記憶される。また、ハードディスク装置408には、検索プログラムを実現するための各種データが記憶される。
CPU401は、ハードディスク装置408に記憶された各プログラムを読み出して、RAM407に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ400を、例えば図5に示した単語分割部111、単語符号化部112および検索部113として機能させることができる。
なお、上記の検索プログラムは、必ずしもハードディスク装置408に記憶されている必要はない。例えば、コンピュータ400が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ400が読み出して実行するようにしてもよい。コンピュータ400が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN(Local Area Network)等に接続された装置にこのプログラムを記憶させておき、コンピュータ400がこれらからプログラムを読み出して実行するようにしてもよい。
図17は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ400において、図17に示すハードウェア群26(401〜409)の制御を行なうOS(オペレーティング・システム)27が動作する。OS27に従った手順でCPU401が動作して、ハードウェア群26の制御・管理が行なわれることにより、アプリケーションプログラム29やミドルウェア28に従った処理がハードウェア群26で実行される。さらに、コンピュータ400において、ミドルウェア28またはアプリケーションプログラム29が、RAM407に読み出されてCPU401により実行される。
CPU401により検索単語を受け付けた場合、ミドルウェア28またはアプリケーションプログラム29の少なくとも一部に基づく処理を行なうことで、(それらの処理をOS27に基づいてハードウェア群26を制御して)制御部110の検索機能が実現される。検索機能は、それぞれアプリケーションプログラム29自体に含まれてもよいし、アプリケーションプログラム29に従って呼び出されることで実行されるミドルウェア28の一部であってもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータに、
符号化対象の単語を分割して複数の要素を得て、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する、
処理を行わせることを特徴とする符号化プログラム。
(付記2)前記制御する処理は、前記単語における前記要素の位置が前記単語の最前方に近い程、長いビット数のハッシュ値が得られるように、ハッシュ演算を制御する
ことを特徴とする付記1に記載の符号化プログラム。
(付記3)前記制御する処理は、加えて、前記単語における前記要素の位置が前記単語の最前方である場合には、前記単語における最前方の位置に応じたビット数の値であって辞書における文字列分布に合わせた値が得られるように制御する
ことを特徴とする付記2に記載の符号化プログラム。
(付記4)符号化対象の単語を分割して複数の要素を取得する分割部と、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御する制御部と、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する出力部と、
を有することを特徴とする符号化装置。
(付記5)コンピュータが、
符号化対象の単語を分割して複数の要素を得て、
前記複数の要素のそれぞれをハッシュ化してハッシュ値を得る際に、前記複数の要素について前記単語におけるそれぞれの位置に応じたビット数のハッシュ値が得られるように、ハッシュ演算を制御し、
前記複数の要素のそれぞれについて前記ハッシュ演算により得られた各ハッシュ値の結合を符号化結果として出力する、
処理を実行することを特徴とする符号化方法。
(付記6)コンピュータに、
入力された検索文字列を前記検索文字列の位置に応じたビット数に所定のハッシュ演算によりハッシュ化したハッシュ化検索文字列を受け取り、
単語に対する、前記所定のハッシュ演算により演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する
処理を行わせることを特徴とする検索プログラム。
(付記7)入力された検索文字列を前記検索文字列の位置に応じたビット数に所定のハッシュ演算によりハッシュ化したハッシュ化検索文字列を受け取る受取部と、
単語に対する、前記所定のハッシュ演算により演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する検索部と、
を有することを特徴とする検索装置。
(付記8)コンピュータが、
入力された検索文字列を前記検索文字列の位置に応じたビット数に所定のハッシュ演算によりハッシュ化したハッシュ化検索文字列を受け取り、
単語に対する、前記所定のハッシュ演算により演算された符号化文字列を含む辞書を基にして、前記ハッシュ化検索文字列に対応する符号化文字列を検索する
処理を実行することを特徴とする検索方法。