以下に添付図面を参照して、この発明にかかる情報生成プログラム、情報検索プログラム、情報生成装置、情報検索装置、情報生成方法、および情報検索方法の実施の形態を詳細に説明する。
[情報生成プログラム/装置/方法]
まず、情報生成プログラム、情報生成装置、および情報生成方法について説明する。
<情報生成の一例(その1)>
図1は、情報生成装置における情報生成の一例(その1)を示す説明図である。図1において、対象ファイル群Fは、対象ファイルの集合である。各対象ファイルは、文字列が記述された電子データである。対象ファイルは、たとえば、辞書や辞典、電子書籍、Webページなどの電子データであり、テキスト、HTML(HyperText Markup Language)、XML(Extensible Markup Language)形式で記述されている。
情報生成装置は、(A)対象ファイル群Fからの集計、(B)出現頻度の降順でのソート、(C)目標出現率の順位までの抽出、(D)マップ生成、という4つのフェーズを実行する。以下、基礎単語と単一文字に分けて説明する。
(A1)まず、情報生成装置は、対象ファイル群Fを読み込んで、基礎単語の出現頻度を計数する。ここで、基礎単語とは、単語群のうちあらかじめ指定された単語を意味する。たとえば、辞書の場合、見出し語が基礎単語に該当する。情報生成装置は、基礎単語を集めた基礎単語構造体を参照して、基礎単語構造体内の基礎単語に一致する文字列が対象ファイルに存在する場合に、当該基礎単語の出現頻度(初期値は0)を1加算する。基礎単語構造体とは、基礎単語が記述されたデータ構造体である。
(B1)対象ファイル群Fにおいて基礎単語の集計が終了すると、情報生成装置は、基礎単語出現頻度テーブル101を、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い基礎単語から順位付けをおこなう。
(C1)つぎに、情報生成装置は、(B1)ソート後の基礎単語出現頻度テーブル101を参照して、目標出現率Pwまでの順位の基礎単語を抽出する。具体的には、情報生成装置は、全基礎単語の出現頻度の総和(総出現頻度)を分母とし、順位が1位の基礎単語から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。
たとえば、総出現頻度が50000、1位からx位までの基礎単語群の累計出現頻度が45000とすると、x位までの出現頻度は、(45000/50000)×100=90[%]となる。ここで、目標出現率Pwが90[%]である場合は、上位x位までの基礎単語を抽出することとなる。なお、(C1)で抽出された基礎単語を、元の基礎単語群と区別するために、「特定基礎単語(群)」と称す。
(D1)最後に、情報生成装置は、特定基礎単語群について、特定基礎単語出現マップM1を生成する。特定基礎単語出現マップM1とは、特定基礎単語ごとに、特定基礎単語の存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。各対象ファイルにおいて、1回でも出現した場合は該当する対象ファイルのビットをONにし、1回も出現しなかった場合は該当する対象ファイルのビットをOFFのままにしておく。
なお、本明細書では、「ビットをON」とした場合は、そのビットの値を“1”にし、「ビットをOFF」とした場合は、そのビットの値を“0”として説明する。なお、「ビットをON」とした場合は、そのビットの値を“0”にし、「ビットをOFF」とした場合は、そのビットの値を“1”にしてもよい。つぎに、単一文字について説明する。
(A2)まず、情報生成装置は、対象ファイル群Fを読み込んで、単一文字の出現頻度を計数する。ここで、単一文字とは、所定ビット長の文字コードで表現された文字である。たとえば、UTF(UCS/Unicode Transformation Format)16ビット文字コードの文字などがある。情報生成装置は、単一文字を集めた単一文字構造体を参照して、単一文字構造体内の単一文字に一致する単一文字が対象ファイルに存在する場合に、当該単一文字の出現頻度(初期値は0)を1加算する。単一文字構造体とは、単一文字が記述されたデータ構造体である。
(B2)対象ファイル群Fにおいて単一文字の集計が終了すると、情報生成装置は、単一文字出現頻度テーブル102を、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い単一文字から順位付けをおこなう。
(C21)つぎに、情報生成装置は、(B2)ソート後の単一文字出現頻度テーブル102を参照して、目標出現率Pcまでの順位の単一文字を抽出する。具体的には、情報生成装置は、全単一文字の出現頻度の総和(総出現頻度)を分母とし、順位が1位の単一文字から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。
たとえば、総出現頻度が50000、1位からy位までの単一文字群の累計出現頻度が40000とすると、y位までの出現頻度は、(50000/40000)×100=80[%]となる。ここで、目標出現率Pcが80[%]である場合は、上位y位までの単一文字を抽出することとなる。なお、(C21)で抽出された単一文字を、元の単一文字群と区別するために、「特定単一文字(群)」と称す。
(C22)また、単一文字群のうち特定単一文字群から外された単一文字(以下、「非特定単一文字(群)」)は、出現頻度が各特定単一文字よりも低いため、その文字コードを分割する。具体的には、非特定単一文字の文字コードを、上位ビットの文字コードと、下位ビットの文字コードに分割する。
たとえば、単一文字がUTF16ビット文字コードで表現されている場合は、上位8ビットの文字コードと下位8ビットの文字コードに分割する。この場合、分割されたいずれの文字コードも、0x00〜0xFFのコードで表現される。このように、上位ビットの文字コードを「上位分割文字コード(群)」と称し、下位ビットの文字コードを「下位分割文字コード(群)」と称す。
(D2)そして、情報生成装置は、(C21)で抽出された特定単一文字群について、特定単一文字出現マップM2を生成する。特定単一文字出現マップM2とは、特定単一文字ごとに、特定単一文字の存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。各対象ファイルにおいて、1回でも出現した場合は該当する対象ファイルのビットをONにし、1回も出現しなかった場合は該当する対象ファイルのビットをOFFのままにしておく。
(D3)また、情報生成装置は、(C22)で分割された上位分割文字コード群について、上位分割文字コード出現マップM3を生成する。上位分割文字コード出現マップM3とは、上位分割文字コードごとに、上位分割文字コードの存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。上位分割文字コードおよび下位分割文字コードは、ともに0x00〜0xFFの範囲で表現されるが、上位分割文字コード出現マップM3では、下位分割文字コードとしてではなく、上位分割文字コードとして出現した場合に、該当する対象ファイルのビットがONになる。
(D4)同様に、情報生成装置は、(C22)で分割された下位分割文字コード群について、下位分割文字コード出現マップM4を生成する。下位分割文字コード出現マップM4とは、下位分割文字コードごとに、下位分割文字コードの存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。上位分割文字コードおよび下位分割文字コードは、ともに0x00〜0xFFの範囲で表現されるが、下位分割文字コード出現マップM4では、上位分割文字コードとしてではなく、下位分割文字コードとして出現した場合に、該当する対象ファイルのビットがONになる。
このように、目標出現率Pw,Pcにより、特定基礎単語および特定単一文字を制限するため、目的や用途に応じて目標出現率Pw,Pcを設定することで、必要最小限のマップサイズで各種出現マップを生成することができる。換言すれば、すべての基礎単語や単一文字についてマップ上でレコードを割り当てると、出現頻度の低い基礎単語や単一文字については、“0”のビット列が長くなり、マップ内で無駄が発生する。
このため、目的や用途に応じて目標出現率Pw,Pcを設定し、その目標出現率Pw,Pcに応じた分だけ特定基礎単語や特定単一文字として登録してマップ生成することで、マップサイズの縮小化を図ることができる。また、特定基礎単語から外された基礎単語であっても、基礎単語を構成する単一文字の各々が特定単一文字出現マップM2に設定されるため問題ない。また、非特定単一文字についても分割されて上位分割文字コード出現マップM3と下位分割文字コード出現マップM4に設定されるため問題ない。
また、文字の連続性についても、後述する連接文字列出現マップM5で設定可能であるため問題ない。このように、非特定基礎単語については、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、および連接文字列出現マップM5で設定可能となる。したがって、これらの出現マップのANDをとることで、非特定基礎単語の存否を判断することができる。
なお、(A)〜(D)のフェーズは、基礎単語と単一文字とにわけて実行してもよいが、1文字ずつシフトすることで、基礎単語と単一文字とを特定して、同時並行で実行することでマップ生成の高速化を実現することができる。
<非特定単一文字の分割例>
図2は、非特定単一文字の分割例を示す説明図である。図2では、(A)非特定単一文字「芝」と(B)非特定単一文字「兆」を例に挙げて説明する。「芝」の文字コードは「9D82」であるため、上位ビットの「0x9D」と下位ビットの「0x82」に分割される。同様に、「兆」の文字コードは「5146」であるため、上位ビットの「0x51」と下位ビットの「0x46」に分割される。
<情報生成の一例(その2)>
図3は、情報生成装置における情報生成の一例(その2)を示す説明図である。(D5)図3に示したように、情報生成装置は、図1の(D)フェーズにおいて、連接文字列出現マップM5も生成する。連接文字列とは、2以上の文字が連続する文字列である。たとえば、「結婚」は、特定単一文字「結」と特定単一文字「婚」の2連接文字列である。また、単一文字「芝」は非特定単一文字であるため、上位分割文字コード“0x9D”と下位分割文字コード“0x82”に分割される。このように、上位分割文字コードと下位分割文字コードが連続する場合も、2連接文字列である。
また、文字列「芝居」については、上位分割文字コード“0x9D”と下位分割文字コード“0x82”と特定単一文字「居」との3連接文字列である。「芝」と「居」の文字境界に着目すると、下位分割文字コード“0x82”と特定単一文字「居」との2連接文字列となる。同様に、文字列「人工芝」については、特定単一文字「人」,「工」と上位分割文字コード“0x9D”と下位分割文字コード“0x82”との4連接文字列である。「工」と「芝」の文字境界に着目すると、特定単一文字「工」と上位分割文字コード“0x9D”との2連接文字列となる。なお、本明細書では、説明の簡略化のため、2連接文字列を用いて説明することとする。
<情報生成装置のハードウェア構成>
図4は、実施の形態にかかる情報生成装置のハードウェア構成例を示すブロック図である。図4において、情報生成装置は、CPU(Central Processing Unit)401と、ROM(Read Only Memory)402と、RAM(Random Access Memory)403と、磁気ディスクドライブ404と、磁気ディスク405と、光ディスクドライブ406と、光ディスク407と、ディスプレイ408と、I/F(Interface)409と、キーボード410と、マウス411と、スキャナ412と、プリンタ413と、を備えている。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、情報生成装置の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
光ディスクドライブ406は、CPU401の制御にしたがって光ディスク407に対するデータのリード/ライトを制御する。光ディスク407は、光ディスクドライブ406の制御で書き込まれたデータを記憶したり、光ディスク407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)409は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク414に接続され、このネットワーク414を介して他の装置に接続される。そして、I/F409は、ネットワーク414と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ412は、画像を光学的に読み取り、情報生成装置内に画像データを取り込む。なお、スキャナ412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ413は、画像データや文書データを印刷する。プリンタ413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
<情報生成装置の機能的構成>
図5は、情報生成装置の機能的構成例を示すブロック図である。情報生成装置500は、設定部501と、集計部502と、順位特定部503と、検出部504と、分割部505と、生成部506とを備えている。設定部501〜生成部506は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。
設定部501は、目標出現率Pw,Pcを設定する機能を有する。具体的には、たとえば、キーボード410やマウス411の操作によって入力された目標出現率Pw,Pcを記憶装置に保存する。
集計部502は、文字列が記述された対象ファイル群Fの中から指定単語ごとの出現頻度を集計する。具体的には、たとえば、集計部502は、図1に示したように、基礎単語構造体を参照して、注目する単一文字を先頭文字とする基礎単語を、注目する単一文字からの最長一致検索により検索する。そして、最長一致検索された基礎単語のレコードを基礎単語出現頻度テーブル101に追加登録する。すでに追加登録済である場合は、追加登録する必要はない。そして、最長一致検索された基礎単語のレコードにおいて出現頻度を1加算する。
また、集計部502は、文字列が記述された対象ファイル群Fの中から単一文字ごとの出現頻度を集計する。具体的には、たとえば、集計部502は、図1に示したように、単一文字構造体を参照して、注目する単一文字のレコードを基礎単語出現頻度テーブル101に追加登録する。すでに追加登録済である場合は、追加登録する必要はない。そして、注目する単一文字のレコードにおいて出現頻度を1加算する。
順位特定部503は、集計部502によって集計された指定単語ごとの出現頻度に基づいて、指定単語に関する目標出現率までの降順の順位を特定する。具体的には、たとえば、順位特定部503は、設定部501によって設定された基礎単語に関する目標出現率Pwまでの降順の順位を特定する。すなわち、図1で説明したように、基礎単語出現頻度テーブル101を出現頻度の降順にソートしておく。
そして、注目する順位を第x位とし、xをx=1からインクリメントしながら、第1位から第x位までの基礎単語群の累積出現頻度を全基礎単語の総出現頻度で除算することで、第x位までの出現率を算出する。算出された出現率が目標出現率Pw以内であれば、xをインクリメントして、再度第x位までの出現率を算出する。
そして、目標出現率Pwを超えた場合、xを1つデクリメントすることで、目標出現率Pwまでの順位(デクリメント後のxの値)を特定することとなる。これにより、出現頻度の降順で第1位の基礎単語から目標出現率Pwとなる順位の基礎単語までの基礎単語群が、特定基礎単語群となる。
また、順位特定部503は、集計部502によって集計された単一文字ごとの出現頻度に基づいて、単一文字に関する目標出現率までの降順の順位を特定する。具体的には、たとえば、順位特定部503は、設定部501によって設定された単一文字に関する目標出現率Pcまでの降順の順位を特定する。すなわち、図1で説明したように、単一文字出現頻度テーブル102を出現頻度の降順にソートしておく。
そして、注目する順位を第y位とし、yをy=1からインクリメントしながら、第1位から第y位までの単一文字群の累積出現頻度を全単一文字の総出現頻度で除算することで、第y位までの出現率を算出する。算出された出現率が目標出現率Pc以内であれば、yをインクリメントして、再度第y位までの出現率を算出する。
そして、目標出現率Pcを超えた場合、yを1つデクリメントすることで、目標出現率Pcまでの順位(デクリメント後のyの値)を特定することとなる。これにより、出現頻度の降順で第1位の単一文字から目標出現率Pcとなる順位の単一文字までの単一文字群が、特定単一文字群となる。
検出部504は、対象ファイル群Fの中から選ばれた対象ファイルの中から順位特定部503によって特定された降順の順位までの特定の指定単語を検出する。具体的には、たとえば、対象ファイル内の注目単一文字を先頭から1文字ずつシフトしていく。このとき、順位特定部503によって特定された特定基礎単語群のうち、注目する単一文字を先頭文字とする特定基礎単語を、最長一致検索により検出する。
また、検出部504は、対象ファイル群Fの中から選ばれた対象ファイルの中から順位特定部503によって特定された降順の順位までの特定の単一文字を検出する。具体的には、たとえば、対象ファイル内の注目単一文字を先頭から1文字ずつシフトしていく。このとき、順位特定部503によって特定された特定単一文字に一致する注目単一文字を検出する。
分割部505は、順位特定部503によって特定された降順の順位よりも下位の順位となる単一文字の文字コードを上位ビットの分割文字コードと下位ビットの分割文字コードとに分割する。具体的には、たとえば、図2に示したように、非特定単一文字について上位8ビットの上位分割文字コードと下位8ビットの下位分割文字コードに分割する。
生成部506は、検出部504によって検出された特定の指定単語ごとに、当該特定の指定単語の存否を対象ファイルごとに示すインデックス情報を生成する。具体的には、たとえば、生成部506は、検出部504によって検出された特定基礎単語ごとに、特定基礎単語の存否を対象ファイルごとに示す特定基礎単語出現マップM1を生成する。
また、生成部506は、検出部504によって検出された特定の単一文字ごとに、当該特定の単一文字の存否を対象ファイルごとに示すインデックス情報を生成する。具体的には、たとえば、生成部506は、検出部504によって検出された特定単一文字ごとに、特定単一文字の存否を対象ファイルごとに示す特定単一文字出現マップM2を生成する。
また、生成部506は、分割部505によって分割された上位ビットの分割文字コードごとに、当該分割文字コードの存否を対象ファイルごとに示すインデックス情報(上位分割文字コード出現マップM3)を生成する。また、生成部506は、分割部505によって分割された下位ビットの分割文字コードごとに、当該分割文字コードの存否を対象ファイルごとに示すインデックス情報(下位分割文字コード出現マップM4)を生成する。
また、生成部506は、連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報(連接文字列出現マップM5)を生成する。連接文字列としては、具体的には、たとえば、順位特定部503によって特定された降順の順位までの複数の特定単一文字による連接文字列や特定単一文字と分割文字コードが混在する連接文字列がある。たとえば、2連接文字列には、特定単一文字の2連接文字列がある。
また、2連接文字列には、特定単一文字、上位分割文字コードの順で連続する連接文字列がある。また、2連接文字列には、下位分割文字コード、特定単一文字の順で連続する連接文字列がある。また、2連接文字列には、上位分割文字コード、下位分割文字コードの順で連続する連接文字列(すなわち、分割された非特定文字)がある。また、2連接文字列には、下位分割文字コード、上位分割文字コードの順で連続する連接文字列(すなわち、分割された2連接非特定文字の境界)がある。連接文字列出現マップM5では、このような連接文字列が出現した対象ファイルに対してビットをONにすることとなる。
<マップ生成の具体例>
つぎに、マップ生成の具体例について説明する。なお、本例では、連接文字列の連接数を2とする。また、マップ生成では、単一文字、2連接文字列、基礎単語について、まだ1回も出現していない場合は、そのマップ(ファイル番号1〜nまでのn個のビット列(値は“0”))を生成し、今回対象となっている対象ファイルFiのビットをONにすることとなる。一方、すでに対象ファイルF1〜F(i−1)までに生成済みの場合は、対象ファイルFiのビットをONにすることとなる。
図6は、マップ生成例(その1)を示す説明図である。図6では、対象ファイルFi内に『私の結婚活動の記録』という文字列が記述されているものとする。マップ生成では、先頭文字を対象文字として、1文字ずつ末尾方向へシフトしていく。図中、矢印で指している文字が対象文字である。
(A)まず、先頭文字「私」が対象文字である。対象文字「私」は特定単一文字であるため、特定単一文字「私」の特定単一文字出現マップM2を指定する。そして、特定単一文字「私」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。さらに、対象文字「私」を先頭文字とする「私の結婚活動の記録」の中から対象文字「私」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(B)つぎに、対象文字を1文字シフトして、対象文字を「の」にする。まず、対象文字「の」は特定単一文字であるため、特定単一文字「の」の特定単一文字出現マップM2を指定する。そして、特定単一文字「の」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「の」にシフトされた場合、「私の」という2連接文字列が得られるため、2連接文字列「私の」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「私の」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「の」を先頭文字とする「の結婚活動の記録」の中から対象文字「の」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(C)つぎに、対象文字を1文字シフトして、対象文字を「結」にする。まず、対象文字「結」は特定単一文字であるため、特定単一文字「結」の特定単一文字出現マップM2を指定する。そして、特定単一文字「結」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「結」にシフトされた場合、「の結」という2連接文字列が得られるため、2連接文字列「の結」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「の結」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「結」を先頭文字とする「結婚活動の記録」の中から対象文字「結」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「結婚」が最長一致するため、特定基礎単語「結婚」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「結婚」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(D)つぎに、対象文字を1文字シフトして、対象文字を「婚」にする。まず、対象文字「婚」は特定単一文字であるため、特定単一文字「婚」の特定単一文字出現マップM2を指定する。そして、特定単一文字「婚」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「婚」にシフトされた場合、「結婚」という2連接文字列が得られるため、2連接文字列「結婚」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「結婚」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「婚」を先頭文字とする「婚活動の記録」の中から対象文字「婚」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(E)つぎに、対象文字を1文字シフトして、対象文字を「活」にする。まず、対象文字「活」は特定単一文字であるため、単一文字「活」の単一文字出現マップを指定する。そして、特定単一文字「活」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「活」にシフトされた場合、「婚活」という2連接文字列が得られるため、2連接文字列「婚活」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「結活」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「活」を先頭文字とする「活動の記録」の中から対象文字「活」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「活動」が最長一致するため、特定基礎単語「活動」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「活動」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(F)つぎに、対象文字を1文字シフトして、対象文字を「動」にする。まず、対象文字「動」は特定単一文字であるため、特定単一文字「動」の特定単一文字出現マップM2を指定する。そして、特定単一文字「動」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「動」にシフトされた場合、「活動」という2連接文字列が得られるため、2連接文字列「活動」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「活動」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「動」を先頭文字とする「動の記録」の中から対象文字「動」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(G)つぎに、対象文字を1文字シフトして、対象文字を「の」にする。まず、対象文字「の」は特定単一文字であるため、特定単一文字「の」の特定単一文字出現マップM2を指定する。そして、対象文字「の」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(B)でONになっているため、何もしないこととなる。また、対象文字が「の」にシフトされた場合、「動の」という2連接文字列が得られるため、2連接文字列「動の」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「動の」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「の」を先頭文字とする「の記録」の中から対象文字「の」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(H)つぎに、対象文字を1文字シフトして、対象文字を「記」にする。まず、対象文字「記」は特定単一文字であるため、単一文字「記」の単一文字出現マップを指定する。そして、特定単一文字「記」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「記」にシフトされた場合、「の記」という2連接文字列が得られるため、2連接文字列「の記」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「の記」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「記」を先頭文字とする「記録」の中から対象文字「記」を先頭文字とする基礎単語の最長一致検索を実行する。この場合、「記録」が最長一致するため、特定基礎単語「記録」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「記録」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(I)つぎに、対象文字を1文字シフトして、対象文字を「録」にする。まず、対象文字「録」は特定単一文字であるため、特定単一文字「録」の特定単一文字出現マップM2を指定する。そして、特定単一文字「録」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「録」にシフトされた場合、「記録」という2連接文字列が得られるため、2連接文字列「記録」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「記録」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「録」を先頭文字とする「録」の中から対象文字「録」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
図7は、マップ生成例(その2)を示す説明図である。図7では分割文字コードを含む場合のマップ生成例を示す。単一文字を分割した場合は、分割文字コードを1文字として扱ってシフトすることとなる。図7では、対象ファイルFi内に『竜馬は脱藩した』という文字列が記述されているものとする。
(A)まず、先頭文字「竜」が対象文字である。対象文字「竜」は特定単一文字であるため、特定単一文字「竜」の特定単一文字出現マップM2を指定する。そして、特定単一文字「竜」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。さらに、対象文字「竜」を先頭文字とする「竜馬は脱藩した」の中から対象文字「竜」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(B)つぎに、対象文字を1文字シフトして、対象文字を「馬」にする。まず、対象文字「馬」は特定単一文字であるため、特定単一文字「馬」の特定単一文字出現マップM2を指定する。そして、特定単一文字「馬」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「馬」にシフトされた場合、「竜馬」という2連接文字列が得られるため、2連接文字列「竜馬」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「竜馬」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「馬」を先頭文字とする「馬は脱藩した」の中から対象文字「馬」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(C)つぎに、対象文字を1文字シフトして、対象文字を「は」にする。まず、対象文字「は」は特定単一文字であるため、特定単一文字「は」の特定単一文字出現マップM2を指定する。そして、特定単一文字「は」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「は」にシフトされた場合、「馬は」という2連接文字列が得られるため、2連接文字列「馬は」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「馬は」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「は」を先頭文字とする「は脱藩した」の中から対象文字「は」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(D)つぎに、対象文字を1文字シフトして、対象文字を「脱」にする。まず、対象文字「脱」は特定単一文字ではないため、対象文字「脱」の文字コード「0x8131」を、上位分割文字コード「0x81」と下位分割文字コード「0x31」に分割する。そして、対象文字を上位分割文字コード「0x81」にし、上位分割文字コード「0x81」の上位分割文字コード出現マップM3を指定する。つぎに、上位分割文字コード「0x81」の上位分割文字コード出現マップM3について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が上位分割文字コード「0x81」にシフトされた場合、「は 0x81」という2連接文字列が得られるため、2連接文字列「は 0x81」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「は 0x81」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0x81」を先頭文字とする「0x81 0x31 藩した」の中から対象文字「0x81」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(E)つぎに、対象文字を1文字シフトして、対象文字を下位分割文字コード「0x31」にする。まず、下位分割文字コード「0x31」の下位分割文字コード出現マップM4を指定する。つぎに、下位分割文字コード「0x31」の下位分割文字コード出現マップM4について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が下位分割文字コード「0x31」にシフトされた場合、「0x81 0x31」という2連接文字列が得られるため、2連接文字列「0x81 0x31」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0x81 0x31」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0x31」を先頭文字とする「0x31 藩した」の中から対象文字「0x31」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(F)つぎに、対象文字を1文字シフトして、対象文字を「藩」にする。まず、対象文字「藩」は特定単一文字ではないため、対象文字「藩」の文字コード「0xE985」を、上位分割文字コード「0xE9」と下位分割文字コード「0x85」に分割する。そして、対象文字を上位分割文字コード「0xE9」にし、上位分割文字コード「0xE9」の上位分割文字コード出現マップM3を指定する。
つぎに、上位分割文字コード「0xE9」の上位分割文字コード出現マップM3について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が上位分割文字コード「0xE9」にシフトされた場合、「0x31 0xE9」という2連接文字列が得られるため、2連接文字列「0x31 0xE9」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0x31 0xE9」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0xE9」を先頭文字とする「0xE9 0x85 した」の中から対象文字「0xE9」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(G)つぎに、対象文字を1文字シフトして、対象文字を下位分割文字コード「0x85」にする。まず、下位分割文字コード「0x85」の下位分割文字コード出現マップM4を指定する。つぎに、下位分割文字コード「0x85」の下位分割文字コード出現マップM4について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が下位分割文字コード「0x85」にシフトされた場合、「0xE9 0x85」という2連接文字列が得られるため、2連接文字列「0xE9 0x85」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0xE9 0x85」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0x85」を先頭文字とする「0x85 した」の中から対象文字「0x85」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(H)つぎに、対象文字を1文字シフトして、対象文字を「し」にする。まず、対象文字「し」は特定単一文字であるため、特定単一文字「し」の特定単一文字出現マップM2を指定する。そして、特定単一文字「し」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「し」にシフトされた場合、「0x85 し」という2連接文字列が得られるため、2連接文字列「0x85 し」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0x85 し」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「し」を先頭文字とする「した」の中から対象文字「し」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(I)つぎに、対象文字を1文字シフトして、対象文字を「た」にする。まず、対象文字「た」は特定単一文字であるため、特定単一文字「た」の特定単一文字出現マップM2を指定する。そして、特定単一文字「た」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「た」にシフトされた場合、「した」という2連接文字列が得られるため、2連接文字列「した」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「した」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「た」を先頭文字とする「た」の中から対象文字「た」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
図8−1および図8−2は、マップ生成例(その3)を示す説明図である。図8−1および図8−2では、対象ファイルFi内に英文文字列『that□is□a□pen』が記述されているものとする。なお、「□」はブランクである。ブランクも1文字として扱う。
(A)まず、先頭文字「t」が対象文字である。対象文字「t」は特定単一文字であるため、特定単一文字「t」の特定単一文字出現マップM2を指定する。そして、特定単一文字「t」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。
さらに、対象文字「t」を先頭文字とする「that□is□a□pen」の中から対象文字「t」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「that」(代名詞)が最長一致するため、特定基礎単語「that」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「that」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(B)つぎに、対象文字を1文字シフトして、対象文字を「h」にする。まず、対象文字「h」は特定単一文字であるため、特定単一文字「h」の特定単一文字出現マップM2を指定する。そして、特定単一文字「h」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「h」にシフトされた場合、「th」という2連接文字列が得られるため、2連接文字列「th」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「th」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。なお、英単語では前方一致の検索が重視されるため、英単語の文字列の途中については、特定基礎単語の最長一致検索を行わない。
(C)つぎに、対象文字を1文字シフトして、対象文字を「a」にする。まず、対象文字「a」は特定単一文字であるため、特定単一文字「a」の特定単一文字出現マップM2を指定する。そして、特定単一文字「a」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「a」にシフトされた場合、「ha」という2連接文字列が得られるため、2連接文字列「ha」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「ha」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(D)つぎに、対象文字を1文字シフトして、対象文字を「t」にする。まず、対象文字「t」は特定単一文字であるため、特定単一文字「t」の特定単一文字出現マップM2を指定する。そして、対象文字「t」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(A)でONになっているため、何も変わらないこととなる。また、対象文字が「t」にシフトされた場合、「at」という2連接文字列が得られるため、2連接文字列「at」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「at」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(E)つぎに、対象文字を1文字シフトして、対象文字を「□」にする。まず、対象文字「□」は特定単一文字であるため、特定単一文字「□」の特定単一文字出現マップM2を指定する。そして、特定単一文字「□」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「□」にシフトされた場合、「t□」という2連接文字列が得られるため、2連接文字列「t□」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「t□」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(F)つぎに、対象文字を1文字シフトして、対象文字を「i」にする。対象文字「i」は特定単一文字であるため、特定単一文字「i」の特定単一文字出現マップM2を指定する。そして、特定単一文字「i」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「i」にシフトされた場合、「□i」という2連接文字列が得られるため、2連接文字列「□i」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「□i」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「i」を先頭文字とする「is□a□pen」の中から対象文字「i」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「is」(be動詞)が最長一致するため、特定基礎単語「is」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「is」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(G)つぎに、対象文字を1文字シフトして、対象文字を「s」にする。対象文字「s」は特定単一文字であるため、特定単一文字「s」の特定単一文字出現マップM2を指定する。そして、特定単一文字「s」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「s」にシフトされた場合、「is」という2連接文字列が得られるため、2連接文字列「is」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「is」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(H)つぎに、対象文字を1文字シフトして、対象文字を「□」にする。まず、対象文字「□」は特定単一文字であるため、特定単一文字「□」の特定単一文字出現マップM2を指定する。そして、対象文字「□」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(E)でONになっているため、何も変わらないこととなる。また、対象文字が「□」にシフトされた場合、「s□」という2連接文字列が得られるため、2連接文字列「s□」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「s□」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(I)つぎに、対象文字を1文字シフトして、対象文字を「a」にする。まず、対象文字「a」は特定単一文字であるため、特定単一文字「a」の特定単一文字出現マップM2を指定する。そして、対象文字「a」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(C)でONになっているため、何も変わらないこととなる。また、対象文字が「a」にシフトされた場合、「□a」という2連接文字列が得られるため、2連接文字列「□a」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「□a」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「a」を先頭文字とする「a□pen」の中から対象文字「a」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「a」(不定冠詞)が最長一致するため、特定基礎単語「a」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「a」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(J)つぎに、対象文字を1文字シフトして、対象文字を「□」にする。まず、対象文字「□」は特定単一文字であるため、特定単一文字「□」の特定単一文字出現マップM2を指定する。そして、対象文字「□」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(E)でONになっているため、何もしないこととなる。また、対象文字が「□」にシフトされた場合、「a□」という2連接文字列が得られるため、2連接文字列「a□」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「a□」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(K)つぎに、対象文字を1文字シフトして、対象文字を「p」にする。まず、対象文字「p」は特定単一文字であるため、特定単一文字「p」の特定単一文字出現マップM2を指定する。そして、特定単一文字「p」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「p」にシフトされた場合、「□p」という2連接文字列が得られるため、2連接文字列「□p」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「□p」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「p」を先頭文字とする「pen」の中から対象文字「p」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「pen」(ペン)が最長一致するため、特定基礎単語「pen」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「pen」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(L)つぎに、対象文字を1文字シフトして、対象文字を「e」にする。まず、対象文字「e」は特定単一文字であるため、特定単一文字「e」の特定単一文字出現マップM2を指定する。そして、特定単一文字「e」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「e」にシフトされた場合、「pe」という2連接文字列が得られるため、2連接文字列「pe」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「pe」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(M)つぎに、対象文字を1文字シフトして、対象文字を「n」にする。まず、対象文字「n」は特定単一文字であるため、特定単一文字「n」の特定単一文字出現マップM2を指定する。そして、特定単一文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「n」にシフトされた場合、「en」という2連接文字列が得られるため、2連接文字列「en」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「en」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
図9は、マップ生成例(その4)を示す説明図である。図9では、対象ファイルFi内に英単語『internal』が記述されているものとする。
(A)まず、先頭文字「i」が対象文字である。対象文字「i」は特定単一文字であるため、特定単一文字「i」の特定単一文字出現マップM2を指定する。そして、特定単一文字「i」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。さらに、対象文字「i」を先頭文字とする「internal」の中から対象文字「i」を先頭文字とする特定基礎単語の最長一致検索を実行する。
この場合、「internal」は特定基礎単語ではないため最長一致しないが、「inter」(内)が最長一致するため、特定基礎単語「inter」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「inter」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(B)つぎに、対象文字を1文字シフトして、対象文字を「n」にする。まず、対象文字「n」は特定単一文字であるため、特定単一文字「n」の特定単一文字出現マップM2を指定する。そして、特定単一文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「n」にシフトされた場合、「in」という2連接文字列が得られるため、2連接文字列「in」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「in」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(C)つぎに、対象文字を1文字シフトして、対象文字を「t」にする。まず、対象文字「t」は特定単一文字であるため、特定単一文字「t」の特定単一文字出現マップM2を指定する。そして、特定単一文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「t」にシフトされた場合、「nt」という2連接文字列が得られるため、2連接文字列「nt」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「nt」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(D)つぎに、対象文字を1文字シフトして、対象文字を「e」にする。まず、対象文字「e」は特定単一文字であるため、特定単一文字「e」の特定単一文字出現マップM2を指定する。また、対象文字が「e」にシフトされた場合、「te」という2連接文字列が得られるため、2連接文字列「te」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「te」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(E)つぎに、対象文字を1文字シフトして、対象文字を「r」にする。まず、対象文字「r」は特定単一文字であるため、特定単一文字「r」の特定単一文字出現マップM2を指定する。そして、特定単一文字「r」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「n」にシフトされた場合、「er」という2連接文字列が得られるため、2連接文字列「er」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「er」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(F)つぎに、対象文字を1文字シフトして、対象文字を「n」にする。まず、対象文字「n」は特定単一文字であるため、特定単一文字「n」の特定単一文字出現マップM2を指定する。そして、対象文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(B)でONになっているため、何も変わらないこととなる。また、対象文字が「n」にシフトされた場合、「rn」という2連接文字列が得られるため、2連接文字列「rn」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「rn」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(G)つぎに、対象文字を1文字シフトして、対象文字を「a」にする。対象文字「a」は特定単一文字であるため、特定単一文字「a」の特定単一文字出現マップM2を指定する。そして、特定単一文字「a」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「a」にシフトされた場合、「na」という2連接文字列が得られるため、2連接文字列「na」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「na」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(H)最後に、対象文字を1文字シフトして、対象文字を「l」にする。対象文字「l」は特定単一文字であるため、特定単一文字「l」の特定単一文字出現マップM2を指定する。そして、特定単一文字「l」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「l」にシフトされた場合、「al」という2連接文字列が得られるため、2連接文字列「al」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「al」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
<情報生成処理手順>
図10は、情報生成装置500による情報生成処理手順を示すフローチャートである。情報生成装置500は、集計処理(ステップS1001)、マップ割当数決定処理(ステップS1002)、マップ生成処理(ステップS1003)を実行する。集計処理(ステップS1001)、マップ割当数決定処理(ステップS1002)、マップ生成処理(ステップS1003)の詳細については後述する。
図11は、図10に示した集計処理(ステップS1001)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、ファイル番号iをi=1に設定し(ステップS1101)、対象ファイルFiを読み込む(ステップS1102)。そして、情報生成装置500は、対象ファイルFiの集計処理を実行する(ステップS1103)。このあと、情報生成装置500は、ファイル番号iがi>n(nは対象ファイルF1〜Fnの総数)であるか否かを判断する(ステップS1104)。
i>nでない場合(ステップS1104:No)、情報生成装置500は、iをインクリメントし(ステップS1105)、ステップS1102に戻る。一方、i>nである場合(ステップS1104:Yes)、情報生成装置500は、マップ割当数決定処理(ステップS1002)に移行して、集計処理(ステップS1001)を終了する。この集計処理(ステップS1001)によれば、対象ファイルFiごとに対象ファイルFiの集計処理(ステップS1103)を実行することができる。
図12は、図11に示した対象ファイルFiの集計処理(ステップS1103)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字を対象ファイルFiの先頭文字とし(ステップS1201)、基礎単語集計処理を実行する(ステップS1202)。このあと、情報生成装置500は、単一文字出現頻度テーブル102において対象文字の出現回数を1増加する(ステップS1203)。そして、情報生成装置500は、対象文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS1204)。
対象文字が対象ファイルFiの末尾文字でない場合(ステップS1204:No)、情報生成装置500は、対象文字を末尾方向へ1文字シフトし(ステップS1205)、ステップS1202に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合(ステップS1204:Yes)、情報生成装置500は、ステップS1104に移行して、対象ファイルFiの集計処理(ステップS1103)を終了する。この対象ファイルFiの集計処理(ステップS1103)によれば、対象ファイル群Fに存在する基礎単語および単一文字の出現頻度を集計することができる。
図13は、図12に示した基礎単語集計処理(ステップS1202)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、最長一致検索処理を実行し(ステップS1301)、最長一致した基礎単語があったか否かを判断する(ステップS1302)。最長一致した基礎単語があった場合(ステップS1302:Yes)、情報生成装置500は、基礎単語出現頻度テーブル101において最長一致した基礎単語の出現回数を1増加し(ステップS1303)、ステップS1203に移行する。
一方、最長一致した基礎単語がなかった場合(ステップS1302:No)、ステップS1203に移行する。これにより、基礎単語集計処理(ステップS1202)を終了する。この基礎単語集計処理(ステップS1202)によれば、最長一致検索処理(ステップS1301)により基礎単語を計数することができるため、文字列が長い基礎単語を優先的に計数することができる。
図14は、図13に示した最長一致検索処理(ステップS1301)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、c=1とする(ステップS1401)。cは対象文字からの文字数(対象文字含む)である。c=1の場合は、対象文字だけである。つぎに、情報生成装置500は、対象文字からc文字目までの対象文字列と前方一致する基礎単語を、基礎単語構造体を検索する(ステップS1402)。そして、情報生成装置500は、検索により基礎単語があるか否かを判断する(ステップS1403)。2分探索により基礎単語がヒットしなかった場合(ステップS1403:No)、ステップS1406に移行する。
一方、2分探索により基礎単語がヒットした場合(ステップS1403:Yes)、情報生成装置500は、ヒットした基礎単語と対象文字列とが完全一致するか否かを判断する(ステップS1404)。そして、完全一致しない場合(ステップS1404:No)、ステップS1406に移行する。一方、完全一致する場合(ステップS1404:Yes)、情報生成装置500は、最長一致候補として記憶装置に保持し(ステップS1405)、ステップS1406に移行する。
ステップS1406では、情報生成装置500は、対象文字列について2分探索が終了したか否かを判断する(ステップS1406)。具体的には、情報生成装置500は、末尾の基礎単語まで2分探索したか否かを判断する。2分探索が終了していない場合(ステップS1406:No)、情報生成装置500は、ステップS1402に移行して、2分探索が終了するまで継続する。
一方、対象文字列について2分探索が終了した場合(ステップS1406:Yes)、情報生成装置500は、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS1407)。c文字目の文字が対象ファイルFiの末尾文字である場合(ステップS1407:Yes)、ステップS1410に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合(ステップS1407:No)、情報生成装置500は、c>cmaxであるか否かを判断する(ステップS1408)。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
c>cmaxでない場合(ステップS1408:No)、情報生成装置500は、cをインクリメントして(ステップS1409)、ステップS1402に戻る。一方、c>cmaxである場合(ステップS1408:Yes)、情報生成装置500は、最長一致候補があるか否かを判断する(ステップS1410)。具体的には、情報生成装置500は、ステップS1405において1つでも最長一致候補がメモリに保持されているか否かを判断する。
最長一致候補がある場合(ステップS1410:Yes)、情報生成装置500は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定する(ステップS1411)。そして、ステップS1302に移行する。一方、ステップS1410において、最長一致候補が1つもない場合(ステップS1410:No)、ステップS1302に移行する。これにより、最長一致検索処理(ステップS1301)を終了する。この最長一致検索処理(ステップS1301)によれば、基礎単語構造体にある基礎単語の中から、完全一致した文字列の中でかつ最長の文字列を基礎単語として検索することができる。
図15は、図10に示したマップ割当数決定処理(ステップS1002)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、集計処理(ステップS1001)による基礎単語ごとの出現頻度を示す基礎単語出現頻度テーブル101と単一文字ごとの出現頻度を示す単一文字出現頻度テーブル102を出現頻度の高い順にソートする(ステップS1501)。そして、情報生成装置500は、ソート後の基礎単語出現頻度テーブル101を参照して、基礎単語の出現順位RwをRw=1とし(ステップS1502)、出現順位Rwまでの累積出現回数Arwを計数する(ステップS1503)。そして、情報生成装置500は、下記式(1)を満たすか否かを判断する(ステップS1504)。
Arw>Pw×Aw・・・(1)
Awは集計された基礎単語の総出現回数である。
上記(1)式を満たさない場合(ステップS1504:No)、情報生成装置500は、出現順位Rwをインクリメントして(ステップS1505)、ステップS1503に戻る。すなわち、上記式(1)を満たすまで出現順位Rwを下げ続ける。
そして、上記式(1)を満たした場合(ステップS1504:Yes)、情報生成装置500は、基礎単語のマップ割当数NwをNw=Rw−1とする(ステップS1506)。ここで、マップ割当数Nwとは、特定基礎単語出現マップM1のレコード数(行数)を意味する。
また、情報生成装置500は、単一文字の出現順位RcをRc=1とし(ステップS1507)、出現順位Rcまでの累積出現回数Arcを計数する(ステップS1508)。そして、情報生成装置500は、下記式(2)を満たすか否かを判断する(ステップS1509)。
Arc>Pc×Ac・・・(2)
Acは集計された単一文字の総出現回数である。
上記(2)式を満たさない場合(ステップS1509:No)、情報生成装置500は、出現順位Rcをインクリメントして(ステップS1510)、ステップS1508に戻る。すなわち、上記式(2)を満たすまで出現順位Rcを下げ続ける。
そして、上記式(2)を満たした場合(ステップS1509:Yes)、情報生成装置500は、単一文字のマップ割当数NcをNc=Rc−1とする(ステップS1511)。ここで、マップ割当数Ncとは、特定単一文字出現マップM2のレコード数(行数)を意味する。この後、マップ生成処理(ステップS1003)に移行して、マップ割当数決定処理(ステップS1002)を終了する。
このマップ割当数決定処理(ステップS1002)によれば、目標出現率Pwに応じた数の基礎単語分について特定基礎単語出現マップM1を生成することができる。したがって、すべての基礎単語についてマップ割当をおこなう必要はなく、目標出現率Pwにしたがって決められるため、マップサイズの最適化を図ることができる。
また、単一文字についても、目標出現率Pcに応じた数の単一文字分について特定単一文字出現マップM2を生成することができる。したがって、すべての単一文字についてマップ割当をおこなう必要はなく、目標出現率Pcにしたがって決められるため、マップサイズの最適化を図ることができる。
図16は、図10に示したマップ生成処理(ステップS1003)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、ファイル番号iをi=1に設定し(ステップS1601)、対象ファイルFiを読み込む(ステップS1602)。そして、情報生成装置500は、対象ファイルFiのマップ生成処理を実行する(ステップS1603)。このあと、情報生成装置500は、ファイル番号iがi>n(nは対象ファイルF1〜Fnの総数)であるか否かを判断する(ステップS1604)。
i>nでない場合(ステップS1604:No)、情報生成装置500は、iをインクリメントし(ステップS1605)、ステップS1602に戻る。一方、i>nである場合(ステップS1604:Yes)、マップ生成処理(ステップS1003)が終了する。このマップ生成処理(ステップS1003)によれば、対象ファイルFiごとに対象ファイルFiのマップ生成処理(ステップS1603)を実行することができる。
図17は、図16に示した対象ファイルFiのマップ生成処理(ステップS1603)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字を対象ファイルFiの先頭文字とし(ステップS1701)、特定基礎単語出現マップ生成処理(ステップS1702)、特定単一文字出現マップ生成処理(ステップS1703)、連接文字列出現マップ生成処理(ステップS1704)を実行する。このあと、情報生成装置500は、対象文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS1705)。
対象文字が対象ファイルFiの末尾文字でない場合(ステップS1705:No)、情報生成装置500は、対象文字を末尾方向へ1文字シフトし(ステップS1706)、ステップS1702に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合(ステップS1705:Yes)、ステップS1604に移行して、対象ファイルFiのマップ生成処理(ステップS1603)を終了する。
この対象ファイルFiのマップ生成処理(ステップS1603)によれば、特定基礎単語出現マップM1、特定単一文字出現マップM2および連接文字列出現マップM5を、対象文字を1文字ずつシフトしながら、同時並行で生成することができる。
図18は、図17で示した特定基礎単語出現マップ生成処理(ステップS1702)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字について最長一致検索処理を実行する(ステップS1801)。最長一致検索処理(ステップS1801)の詳細な処理手順は、図14に示した最長一致検索処理(ステップS1301)と同一処理内容である。
そして、情報生成装置500は、最長一致した基礎単語、すなわち、特定基礎単語があるか否かを判断する(ステップS1802)。最長一致した基礎単語がない場合(ステップS1802:No)、特定単一文字出現マップ生成処理(ステップS1703)に移行する。一方、最長一致した基礎単語がある場合(ステップS1802:Yes)、情報生成装置500は、その最長一致した基礎単語について、特定基礎単語出現マップM1が設定済みであるか否かを判断する(ステップS1803)。
設定済みである場合(ステップS1803:Yes)、ステップS1805に移行する。一方、設定済みでない場合(ステップS1803:No)、情報生成装置500は、最長一致した基礎単語について、特定基礎単語出現マップM1を設定して(ステップS1804)、ステップS1805に移行する。
具体的には、情報生成装置500は、最長一致した基礎単語を特定基礎単語として、特定基礎単語出現マップM1の特定基礎単語項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS1805では、最長一致した基礎単語についての特定基礎単語出現マップM1の対象ファイルFiのビットをONにする(ステップS1805)。
これにより、特定基礎単語出現マップ生成処理(ステップS1702)を終了し、特定単一文字出現マップ生成処理(ステップS1703)に移行する。この特定基礎単語出現マップ生成処理(ステップS1702)によれば、対象文字ごとに最長一致した基礎単語を特定基礎単語としてマップ生成することができる。
図19は、図17で示した特定単一文字出現マップ生成処理(ステップS1703)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、単一文字構造体に対して対象文字の2分探索をおこない(ステップS1901)、一致したか否かを判断する(ステップS1902)。一致する単一文字がなかった場合(ステップS1902:No)、情報生成装置500は、分割文字コード出現マップ生成処理を実行して(ステップS1903)、連接文字列出現マップ生成処理(ステップS1704)に移行する。分割文字コード出現マップ生成処理(ステップS1903)の詳細については後述する。
一方、ステップS1902において、2分探索により対象文字と一致する単一文字があった場合(ステップS1902:Yes)、情報生成装置500は、その2分探索された対象文字について、特定単一文字出現マップM2が設定済みであるか否かを判断する(ステップS1904)。設定済みである場合(ステップS1904:Yes)、ステップS1906に移行する。一方、設定済みでない場合(ステップS1904:No)、情報生成装置500は、2分探索された単一文字について、特定単一文字出現マップM2を設定して(ステップS1905)、ステップS1906に移行する。
具体的には、情報生成装置500は、2分探索された単一文字を特定単一文字として、特定単一文字出現マップM2の特定単一文字項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS1906では、情報生成装置500は、2分探索された単一文字についての特定単一文字出現マップM2の対象ファイルFiのビットをONにする(ステップS1906)。
これにより、特定単一文字出現マップ生成処理(ステップS1703)を終了し、連接文字列出現マップ生成処理(ステップS1704)に移行する。この特定単一文字出現マップ生成処理(ステップS1703)によれば、2分探索された対象文字を特定単一文字としてマップ生成することができる。
図20は、図19で示した分割文字コード出現マップ生成処理(ステップS1903)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字を分割し(ステップS2001)、対象文字から分割された上位分割文字コードについて、上位分割文字コード出現マップM3が設定済みであるか否かを判断する(ステップS2002)。設定済みである場合(ステップS2002:Yes)、ステップS2004に移行する。一方、設定済みでない場合(ステップS2002:No)、情報生成装置500は、対象文字から分割された上位分割文字コードについて、上位分割文字コード出現マップM3を設定して(ステップS2003)、ステップS2004に移行する。
具体的には、情報生成装置500は、対象文字から分割された上位分割文字コードを、上位分割文字コード出現マップM3の上位分割文字コード項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS2004では、情報生成装置500は、対象文字から分割された上位分割文字コードについての上位分割文字コード出現マップM3の対象ファイルFiのビットをONにする(ステップS2004)。
また、情報生成装置500は、対象文字から分割された下位分割文字コードについて、下位分割文字コード出現マップM4が設定済みであるか否かを判断する(ステップS2005)。設定済みである場合(ステップS2005:Yes)、ステップS2007に移行する。一方、設定済みでない場合(ステップS2005:No)、情報生成装置500は、対象文字から分割された下位分割文字コードについて、下位分割文字コード出現マップM4を設定して(ステップS2006)、ステップS2007に移行する。
具体的には、情報生成装置500は、対象文字から分割された下位分割文字コードを、下位分割文字コード出現マップM4の下位分割文字コード項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS2007では、情報生成装置500は、対象文字から分割された下位分割文字コードについての下位分割文字コード出現マップM4の対象ファイルFiのビットをONにする(ステップS2007)。
これにより、分割文字コード出現マップ生成処理(ステップS1903)を終了し、連接文字列出現マップ生成処理(ステップS1704)に移行する。この分割文字コード出現マップ生成処理(ステップS1903)によれば、目標出現率Pcに応じた順位よりも下位の単一文字については、出現頻度が低いため、OFFのビットが多数出現することとなる。
しかしながら、特定単一文字出現マップM2の生成対象外とすることで、特定単一文字出現マップM2のマップサイズの最適化を図ることができる。また、分割することで、目標出現率Pcに応じた順位よりも下位の単一文字については、上位分割文字コード出現マップM3および下位分割文字コード出現マップM4といったマップサイズが固定化されたマップに設定される。したがって、目標出現率Pcをどのような出現率に設定しても、上位分割文字コード出現マップM3および下位分割文字コード出現マップM4は変わらないため、マップサイズの増大化を防止でき、省メモリ化を図ることができる。
図21は、図17で示した連接文字列出現マップ生成処理(ステップS1704)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字に対し、連接文字列特定処理を実行する(ステップS2101)。連接文字列特定処理(ステップS2101)の詳細については後述する。情報生成装置500は、連接文字列特定処理(ステップS2101)のあと、対象文字に関する連接文字列がない場合(ステップS2102:No)、ステップS1705に移行する。
一方、対象文字に関する連接文字列がある場合(ステップS2102:Yes)、情報生成装置500は、対象文字に関する連接文字列に対し、連接文字列出現マップM5が設定済みであるか否かを判断する(ステップS2103)。設定済みである場合(ステップS2103:Yes)、ステップS2105に移行する。一方、設定済みでない場合(ステップS2103:No)、情報生成装置500は、対象文字に関する連接文字列について、連接文字列出現マップM5を設定して(ステップS2104)、ステップS2105に移行する。
具体的には、情報生成装置500は、対象文字に関する連接文字列を、連接文字列出現マップM5の連接文字列項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS2105では、情報生成装置500は、対象文字に関する連接文字列についての連接文字列出現マップM5の対象ファイルFiのビットをONにする(ステップS2105)。これにより、連接文字列出現マップ生成処理(ステップS1704)を終了し、ステップS1705に移行する。この連接文字列出現マップ生成処理(ステップS1704)によれば、対象文字に関する連接文字列ごとにマップ生成することができる。
図22は、図21で示した連接文字列特定処理(ステップS2101)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字に対し、対象文字は分割されたか否かを判断する(ステップS2201)。すなわち、情報生成装置500は、対象文字が分割文字コードか否かを判断する。分割されていない場合(ステップS2201:No)、すなわち、単一文字の場合、情報生成装置500は、1つ前の文字があるか否かを判断する(ステップS2202)。
1つ前の文字がある場合(ステップS2202:Yes)、情報生成装置500は、1つ前の文字は分割されたか否かを判断する(ステップS2203)。すなわち、情報生成装置500は、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合(ステップS2203:No)、すなわち、単一文字の場合、情報生成装置500は、対象文字の1つ前の単一文字と対象文字(単一文字)からなる文字列を、連接文字列に決定する(ステップS2204)。そして、ステップS2102に移行する。
一方、ステップS2203において、1つ前の文字が分割された場合(ステップS2203:Yes)、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報生成装置500は、1つ前の文字である下位分割文字コードと対象文字からなる文字列を、連接文字列に決定する(ステップS2205)。そして、ステップS2102に移行する。
また、ステップS2202において、1つ前の文字がない場合(ステップS2202:No)、対象文字だけとなるため、連接文字列を決定せずに、ステップS2102に移行する。
また、ステップS2201において、対象文字が分割された場合(ステップS2201:Yes)、すなわち、分割文字コードである場合、情報生成装置500は、その分割文字コードが上位分割文字コードか下位分割文字コードであるかを判断する(ステップS2206)。
上位分割文字コードである場合(ステップS2206:上位)、情報生成装置500は、1つ前の文字は分割されたか否かを判断する(ステップS2207)。すなわち、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合(ステップS2207:No)、すなわち、単一文字の場合、情報生成装置500は、対象文字の1つ前の単一文字と対象文字から分割された上位分割文字コードからなる文字列を、連接文字列に決定する(ステップS2208)。そして、ステップS2102に移行する。
一方、ステップS2207において、1つ前の文字が分割された場合(ステップS2207:Yes)、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報生成装置500は、1つ前の文字である下位分割文字コードと対象文字から分割された上位分割文字コードからなる文字列を、連接文字列に決定する(ステップS2209)。そして、ステップS2102に移行する。
また、ステップS2206において、下位分割文字コードである場合(ステップS2206:下位)、情報生成装置500は、対象文字から分割された上位分割文字コードおよび下位分割文字コードからなる文字列を、連接文字列に決定する(ステップS2210)。そして、ステップS2102に移行する。
この連接文字列特定処理(ステップS2101)によれば、対象文字が分割された場合であっても連接文字列を特定することができる。また、1文字シフトにしたがって連接文字列を特定するため、特定基礎単語出現マップM1および特定単一文字出現マップM2と同時並行で生成することができる。
このように、上述した情報生成によれば、目標出現率Pw,Pcにより、マップ生成される基礎単語数および単一文字数が制限されるため、無駄なマップ生成がなくなり、マップ生成の高速化およびマップサイズの最適化を同時に実現することができる。また、1文字シフトにより複数種類のマップ生成を同時並行で実行することができ、高精度な検索に用いる複数種類のマップ生成の効率化を図ることができる。
[情報検索プログラム/装置/方法]
つぎに、情報検索プログラム、情報検索装置、および情報検索方法について説明する。情報検索プログラム、情報検索装置、および情報検索方法では、情報生成プログラム、情報検生成索装置、および情報生成方法により生成された各種マップを用いて検索を実行する。なお、情報検索装置のハードウェア構成例は、図4に示したハードウェア構成例と同一である。また、情報検索装置は、情報生成装置500と一体型のコンピュータとしてもよく、別々のコンピュータとしてもよい。
<情報検索装置の機能的構成>
図23は、情報検索装置の機能的構成例を示すブロック図である。情報検索装置2300は、入力部2301と、分割部2302と、ファイル特定部2303と、絞込み部2304と、検索部2305と、出力部2306とを備えている。入力部2301〜出力部2306は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。
入力部2301は、検索文字列の入力を受け付ける。具体的には、たとえば、キーボード410やマウス411などの入力装置の操作入力により、検索文字列の入力を受け付ける。
分割部2302は、検索文字列を構成する単一文字のうち特定の単一文字に該当しない単一文字の文字コードを上位ビットの分割文字コードと下位ビットの分割文字コードとに分割する。具体的には、たとえば、上述した特定単一文字出現マップM2の特定単一文字項目に登録されている特定単一文字に該当しない単一文字の文字コードを、上位分割文字コードと下位分割文字コードに分割する。
ファイル特定部2303は、文字列が記述された対象ファイル群Fに存在する指定単語のうち当該指定単語に関する目標出現率に応じた降順の順位以内の特定の指定単語の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列が存在する対象ファイルを特定する。具体的には、たとえば、上述した特定基礎単語出現マップM1を参照することにより、検索文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、文字列が記述された対象ファイル群Fに存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位以内の特定の単一文字の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する各単一文字が存在する対象ファイルを特定する。具体的には、たとえば、上述した特定単一文字出現マップM2を参照することにより、検索文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、分割部2302によって分割された上位ビットの分割文字コードの存否を対象ファイルごとに示すインデックス情報を参照することにより、上位ビットの分割文字コードが存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した上位分割文字コード出現マップM3を参照することにより、分割部2302により分割された上位分割文字コードが存在する対象ファイルを特定する。
同様に、ファイル特定部2303は、分割部2302によって分割された下位ビットの分割文字コードの存否を対象ファイルごとに示すインデックス情報を参照することにより、下位ビットの分割文字コードが存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した下位分割文字コード出現マップM4を参照することにより、分割部2302により分割された下位分割文字コードが存在する対象ファイルを特定する。
また、ファイル特定部2303は、対象ファイル群Fに存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの単一文字が連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、対象ファイル群Fに存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの特定の単一文字と上位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する、特定の単一文字と上位ビットの分割文字コードとが連続する連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、下位ビットの分割文字コードとファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの特定の単一文字とが連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する、下位ビットの分割文字コードと特定の単一文字とが連続する連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、上位ビットの分割文字コードと下位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する、上位ビットの分割文字コードと下位ビットの分割文字コードとが連続する連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
絞込み部2304は、ファイル特定部2303によって特定された対象ファイル群Fの中から検索文字列を構成する各単一文字がすべて存在する対象ファイルを絞り込む。具体的には、たとえば、絞込み部2304は、特定単一文字出現マップM2において、検索文字列を構成するすべての単一文字のビットがONになっている対象ファイルを、ファイル特定部2303によって特定された対象ファイルの中から絞り込む。
また、絞込み部2304は、ファイル特定部2303によって特定された対象ファイル群Fの中から検索文字列を構成する各単一文字および各連接文字列がすべて存在する対象ファイルを絞り込む。具体的には、たとえば、絞込み部2304は、特定単一文字出現マップM2において、検索文字列を構成するすべての特定単一文字のビットがONになっており、かつ、連接文字列出現マップM5において、検索文字列を構成するすべての連接文字列のビットがONになっている対象ファイルを、ファイル特定部2303によって特定された対象ファイルの中から絞り込む。
また、絞込み部2304は、ファイル特定部2303によって特定された対象ファイル群Fの中から検索文字列を構成する各単一文字、各上位ビットの分割文字コード、各下位ビットの分割文字コード、および各連接文字列がすべて存在する対象ファイルを絞り込む。
具体的には、たとえば、絞込み部2304は、特定単一文字出現マップM2において、検索文字列を構成するすべての特定単一文字のビットがONになっており、かつ、上位分割文字コード出現マップM3において、検索文字列を構成するすべての上位分割文字コードのビットがONになっており、かつ、下位分割文字コード出現マップM4において、検索文字列を構成するすべての下位分割文字コードのビットがONになっており、かつ、連接文字列出現マップM5において、検索文字列を構成するすべての連接文字列のビットがONになっている対象ファイルを、ファイル特定部2303によって特定された対象ファイルの中から絞り込む。
検索部2305は、ファイル特定部2303によって特定された対象ファイルの中から検索文字列に関する情報を検索する。具体的には、たとえば、検索部2305は、検索文字列が特定基礎単語に該当する場合、ファイル特定部2303により、特定基礎単語出現マップM1を参照して特定された対象ファイルの中から、検索文字列に一致する文字列を検索する。また、検索部2305は、検索文字列が特定基礎単語に該当しない場合、絞込み部2304により絞り込まれた対象ファイルの中から、検索文字列に一致する文字列を検索する。
出力部2306は、検索部2305によって検索された検索結果を出力する。具体的には、たとえば、出力部2306は、検索結果をディスプレイに表示出力したり、検索結果を印刷出力したり、検索結果を音声により読み上げたり、検索結果を記憶装置に保存したり、検索結果を外部に送信したりする。
また、検索結果は、検索文字列に一致する文字列を出力したり、検索文字列に一致する文字列に関連する情報を出力する。関連する情報としては、たとえば、検索文字列に一致する文字列が辞書の見出し語である場合には、解説文を出力する。これとは逆に、検索文字列に一致する文字列が辞書の解説文内の文字列である場合には、その解説文の見出し語を出力することとしてもよい。
<情報検索処理の具体例>
つぎに、情報検索処理の具体例について説明する。
図24は、情報検索処理の具体例(その1)を示す説明図である。図24では、検索文字列を「結婚活動」とする。なお、検索文字列「結婚活動」の中には、特定基礎単語「結婚」,「活動」が含まれている。したがって、図24に示した特定基礎単語「結婚」,「活動」の特定基礎単語出現マップM1のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図24の場合は、対象ファイルF3,Fn内に、検索文字列「結婚活動」が存在する可能性が高い。
図25は、情報検索処理の具体例(その2)を示す説明図である。図25では、検索文字列を「婚活」とする。なお、検索文字列「婚活」の中には、特定単一文字「婚」,「活」が含まれている。さらに、2連接文字列「婚活」が含まれている。特定基礎単語は含まれていない。
したがって、図25に示した特定単一文字出現マップM2、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図25の場合は、対象ファイルFn内に、検索文字列「婚活」が存在する。また、対象ファイルFn内に、「婚活」を含む文字列(たとえば、「結婚活動」)が存在する可能性が高く、いわゆる泣き別れによる検索性能の劣化を防止することができる。
図26は、情報検索処理の具体例(その3)を示す説明図である。図26では、検索文字列を「脱藩」とする。なお、検索文字列「脱藩」の単一文字「脱」,「藩」は特定単一文字でないため、単一文字「脱」の上位分割文字コード「0x81」,下位分割文字コード「0x31」、単一文字「藩」の上位分割文字コード「0xE9」,下位分割文字コード「0x85」が含まれている。また、2連接文字列「0x81 0x31」,「0x31 0xE9」,「0xE9 0x85」が含まれている。なお、検索文字列「脱藩」には特定基礎単語は含まれていない。
したがって、図26に示した上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図26の場合は、対象ファイルFn内に、検索文字列「脱藩」が存在する可能性が高い。
図27は、情報検索処理の具体例(その4)を示す説明図である。図27では、検索文字列を「離脱」とする。なお、検索文字列「離脱」の単一文字「離」は特定単一文字であるが、「脱」は特定単一文字でない。したがって、検索文字列「離脱」には、特定単一文字「離」,単一文字「脱」の上位分割文字コード「0x81」,下位分割文字コード「0x31」が含まれている。また、2連接文字列「離 0x81」,「0x81 0x31」が含まれている。なお、検索文字列「離脱」には特定基礎単語は含まれていない。
したがって、図27に示した特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図27の場合は、対象ファイルFn内に、検索文字列「離脱」が存在する可能性が高い。
図28は、情報検索処理の具体例(その5)を示す説明図である。図28では、検索文字列を「脱出」とする。また、検索文字列「脱出」の単一文字「出」は特定単一文字であるが、「脱」は特定単一文字でない。したがって、検索文字列「脱出」には、特定単一文字「出」,単一文字「脱」の上位分割文字コード「0x81」,下位分割文字コード「0x31」が含まれている。また、2連接文字列「0x81 0x31」,「0x31 出」が含まれている。なお、検索文字列「脱出」には特定基礎単語は含まれていない。
したがって、図28に示した特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図28の場合は、対象ファイルFn内に、検索文字列「脱出」が存在する可能性が高い。
図29は、情報検索処理の具体例(その6)を示す説明図である。図29では、検索文字列を「is」と「a」とし、検索条件をANDとする。なお、検索文字列「is」には、特定基礎単語「is」(be動詞)が含まれており、検索文字列「a」には特定基礎単語「a」(不定冠詞)が含まれている。この検索文字列では、いわゆるis a構文の文章を検索することができる。したがって、図29に示した「is」と「a」の特定基礎単語出現マップM1のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図29の場合は、対象ファイルF3,Fn内に、検索文字列「is」および「a」が存在する。
図30は、情報検索処理の具体例(その7)を示す説明図である。図30では、検索文字列を「tern」とする。なお、検索文字列「tern」には、2連接文字列「te」「er」「rn」が含まれている。したがって、図30に示した2連接文字列マップM5でON(1)になったファイル番号の対象ファイルが特定される。図30の場合は、対象ファイルFn内に、検索文字列「tern」が存在する。
<情報検索処理手順>
図31は、情報検索装置2300による情報検索処理手順を示すフローチャートである。まず、情報検索装置2300は、入力部2301により、検索文字列群(1つの検索文字列も含む)が入力されるのを待ち受け(ステップS3101:No)、検索文字列群が入力された場合(ステップS3101:Yes)、情報検索装置2300は、未選択の検索文字列があるか否かを判断する(ステップS3102)。未選択の検索文字列がある場合(ステップS3102:Yes)、情報検索装置2300は、未選択の検索文字列を1つ選択し(ステップS3103)、ファイル特定処理を実行して(ステップS3104)、ステップS3102に戻る。
一方、ステップS3102において、未選択の検索文字列がない場合(ステップS3102:No)、情報検索装置2300は、検索条件を判断する(ステップS3105)。検索条件がANDの場合(ステップS3105:AND)、情報検索装置2300は、検索文字列ごとに特定された対象ファイルをAND演算で絞り込み、検索対象ファイルに設定し(ステップS3106)、ステップS3108に移行する。一方、検索条件がORである場合(ステップS3105:OR)、情報検索装置2300は、検索文字列ごとに特定された対象ファイルをOR演算で絞り込み、検索対象ファイルに設定し(ステップS3107)、ステップS3108に移行する。
ステップS3108では、検索対象ファイルごとに検索条件にしたがって検索する(ステップS3108)。そして、検索結果を出力する出力処理を実行して(ステップS3109)、情報検索処理を終了する。
図32−1は、図31に示したファイル特定処理(ステップS3104)の詳細な処理手順を示すフローチャート(その1)である。まず、情報検索装置2300は、対象文字を検索文字列の先頭文字に設定し(ステップS3201)、検索文字列の最長一致検索処理を実行する(ステップS3202)。検索文字列の最長一致検索処理(ステップS3202)の詳細について後述する。
つぎに、情報検索装置2300は、検索文字列の最長一致検索処理(ステップS3202)により、最長一致した基礎単語があるか否かを判断する(ステップS3203)。最長一致した基礎単語がない場合(ステップS3203:No)、図32−2のステップS3211に移行する。一方、最長一致した基礎単語がある場合(ステップS3203:Yes)、情報検索装置2300は、特定基礎単語出現マップM1から最長一致した基礎単語を含む対象ファイルを特定する(ステップS3204)。具体的には、情報検索装置2300は、最長一致した基礎単語、すなわち、特定基礎単語についてビットがONになっている対象ファイルを特定する。
このあと、情報検索装置2300は、対象文字を、最長一致した基礎単語の文字列分シフトする(ステップS3205)。そして、情報検索装置2300は、シフト後の対象文字があるか否かを判断する(ステップS3206)。対象文字がある場合(ステップS3206:Yes)、ステップS3202に戻る。一方、対象文字がない場合(ステップS3206:No)、情報検索装置2300は、絞込み部2304により、ステップS3206までで特定された対象ファイルのAND演算により絞り込みをおこなう(ステップS3207)。そして、ステップS3102に戻る。
図32−2は、図31に示したファイル特定処理(ステップS3104)の詳細な処理手順を示すフローチャート(その2)である。図32−1のステップS3203において、最長一致した基礎単語がない場合(ステップS3203:No)、図32−2において、情報検索装置2300は、対象文字が特定単一文字であるか否かを判断する(ステップS3211)。具体的には、情報検索装置2300は、特定単一文字出現マップM2における特定単一文字項目に登録されているか否かを判断する。
特定単一文字である場合(ステップS3211:Yes)、情報検索装置2300は、特定単一文字出現マップM2から対象文字を含む対象ファイルを特定する(ステップS3212)。すなわち、情報検索装置2300は、対象文字についてビットがONになっている対象ファイルを特定して、ステップS3216に移行する。
一方、ステップS3211において、対象文字が特定単一文字でない場合(ステップS3211:No)、情報検索装置2300は、対象文字列を、上位分割文字コードと下位分割文字コードとに分割する(ステップS3213)。そして、情報検索装置2300は、上位分割文字コード出現マップM3から特定単一文字の上位分割文字コードを含む対象ファイルを特定する(ステップS3214)。具体的には、情報検索装置2300は、上位分割文字コードについてビットがONになっている対象ファイルを特定する。同様に、情報検索装置2300は、下位分割文字コード出現マップM4から特定単一文字の下位分割文字コードを含む対象ファイルを特定する(ステップS3215)。具体的には、情報検索装置2300は、下位分割文字コードについてビットがONになっている対象ファイルを特定する。そして、ステップS3216に移行する。
ステップS3216では、情報検索装置2300は、連接文字列出現マップM5によるファイル特定処理を実行する(ステップS3216)。連接文字列出現マップM5によるファイル特定処理(ステップS3216)の詳細については後述する。このあと、情報検索装置2300は、対象文字を1文字分シフトして(ステップS3217)、図32−1のステップS3206に移行する。
このファイル特定処理(ステップS3104)によれば、検索文字列が特定基礎単語を含んでいれば、特定基礎単語出現マップM1により対象ファイルを絞り込むことができ、そうでない場合は、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算により絞り込むことで対象ファイルを特定することができる。
図33は、図32−2に示した最長一致検索処理(ステップS3202)の詳細な処理手順を示すフローチャートである。まず、情報検索装置2300は、c=1とする(ステップS3301)。cは対象文字からの文字数(対象文字含む)である。c=1の場合は、対象文字だけである。つぎに、情報検索装置2300は、対象文字からc文字目までの対象文字列と前方一致する基礎単語を2分探索する(ステップS3302)。ここで探索対象となるのは、特定基礎単語出現マップM1の特定基礎単語項目に登録されている特定基礎単語群である。
そして、情報検索装置2300は、2分探索により特定基礎単語があるか否かを判断する(ステップS3303)。2分探索により特定基礎単語がヒットしなかった場合(ステップS3303:No)、ステップS3306に移行する。
一方、2分探索により特定基礎単語がヒットした場合(ステップS3303:Yes)、情報検索装置2300は、ヒットした特定基礎単語と対象文字列とが完全一致するか否かを判断する(ステップS3304)。そして、完全一致しない場合(ステップS3304:No)、ステップS3306に移行する。一方、完全一致する場合(ステップS3304:Yes)、情報検索装置2300は、最長一致候補として記憶装置に保持し(ステップS3305)、ステップS3306に移行する。
ステップS3306では、情報検索装置2300は、対象文字列について2分探索が終了したか否かを判断する(ステップS3306)。具体的には、情報検索装置2300は、末尾の特定基礎単語まで2分探索したか否かを判断する。2分探索が終了していない場合(ステップS3306:No)、ステップS3302に移行して、2分探索が終了するまで継続する。
一方、対象文字列について2分探索が終了した場合(ステップS3306:Yes)、情報検索装置2300は、c文字目の文字が検索文字列の末尾文字であるか否かを判断する(ステップS3307)。c文字目の文字が検索文字列の末尾文字である場合(ステップS3307:Yes)、ステップS3310に移行する。一方、c文字目の文字が検索文字列の末尾文字でない場合(ステップS3307:No)、情報検索装置2300は、c>cmaxであるか否かを判断する(ステップS3308)。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
c>cmaxでない場合(ステップS3308:No)、cをインクリメントして(ステップS3309)、ステップS3302に戻る。一方、c>cmaxである場合(ステップS3308:Yes)、情報検索装置2300は、最長一致候補があるか否かを判断する(ステップS3310)。具体的には、情報検索装置2300は、ステップS3305において1つでも最長一致候補が記憶装置に保持されているか否かを判断する。
最長一致候補がある場合(ステップS3310:Yes)、情報検索装置2300は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定する(ステップS3311)。そして、ステップS3203に移行する。一方、ステップS3310において、最長一致候補が1つもない場合(ステップS3310:No)、ステップS3203に移行する。
これにより、最長一致検索処理(ステップS3202)を終了する。この最長一致検索処理(ステップS3202)によれば、特定基礎単語出現マップM1に登録された特定基礎単語群の中から、完全一致した文字列の中でかつ最長の文字列を特定基礎単語として検索することができる。
図34は、図32−2で示した連接文字列出現マップM5によるファイル特定処理(ステップS3216)の詳細な処理手順を示すフローチャートである。まず、情報検索装置2300は、対象文字を、検索文字列の先頭文字にする(ステップS3401)。ここでの検索文字列は、分割文字コードに分割されていれば、分割文字コードも1文字として扱う。
つぎに、情報検索装置2300は、対象文字が分割文字コードであるか否かを判断する(ステップS3402)。分割文字コードでない場合(ステップS3402:No)、対象文字の1つ前の文字があるか否かを判断する(ステップS3403)。たとえば、対象文字が下位分割文字コードである場合は、1つ前の文字は上位分割文字コードとなる。また、対象文字が特定単一文字または上位分割文字コードである場合は、1つ前で分割されていれば、1つ前の文字は下位分割文字コードとなる。
1つ前の文字がある場合(ステップS3403:Yes)、情報検索装置2300は、1つ前の文字が分割文字コードであるか否かを判断する(ステップS3404)。分割文字コードでない場合(ステップS3404:No)、2グラムの特定単一文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3405)。具体的には、情報検索装置2300は、2グラムの特定単一文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3404において、1つ前の文字が分割文字コードである場合(ステップS3404:Yes)、情報検索装置2300は、分割文字コードと特定単一文字からなる連接文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3406)。具体的には、分割文字コードと特定単一文字からなる連接文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3403において、対象文字の1つ前の文字がない場合(ステップS3403:No)、対象ファイルを特定せずに、ステップS3217に移行する。
一方、ステップS3402において、対象文字が分割文字コードである場合(ステップS3402:Yes)、情報検索装置2300は、対象文字の1つ前の文字の文字があるか否かを判断する(ステップS3407)。
1つ前の文字がある場合(ステップS3407:Yes)、情報検索装置2300は、1つ前の文字が分割文字コードであるか否かを判断する(ステップS3408)。分割文字コードでない場合(ステップS3408:No)、情報検索装置2300は、特定単一文字と上位分割文字コードからなる連接文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3409)。具体的には、情報検索装置2300は、特定単一文字と上位分割文字コードからなる連接文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3408において、1つ前の文字が分割文字コードである場合(ステップS3408:Yes)、情報検索装置2300は、2連接の分割文字コードからなる連接文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3410)。具体的には、情報検索装置2300は、2連接の分割文字コードからなる連接文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3407において、対象文字の1つ前の文字がない場合(ステップS3407:No)、対象ファイルを特定せずに、ステップS3217に移行する。
この連接文字列出現マップM5によるファイル特定処理(ステップS3216)によれば、特定単一文字のみからなる連接文字列、分割文字コードのみからなる連接文字列、特定単一文字と分割文字コードが混在する連接文字列が検索文字列に存在する対象ファイルを特定することができる。
このように、上述した情報検索によれば、検索文字列に特定基礎単語があれば、特定基礎単語出現マップM1から対象ファイルを特定することができるため、高速な検索処理を実現することができる。また、検索文字列に特定基礎単語がない場合でも、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5を用いることにより、対象ファイルの効率的な絞り込みをおこなうことができる。たとえば、「婚活」といった新しい短縮語については,特定基礎単語として登録されていないため、このような場合に、対象ファイルの絞り込みをおこなうことができる。
<マップ突き出し>
つぎに、マップ突き出しについて説明する。マップ突き出しとは、対象ファイル群Fに対し、あらたに対象ファイルが追加される場合がある。このような場合、追加された対象ファイルについても、図1〜図3に示したように、(A)〜(D)のフェーズを実行する。これにより、特定基礎単語出現マップM1、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5において、追加された対象ファイルについて、ビット行を生成する処理を、マップ突き出しという。
図35は、マップ突き出しを示す説明図である。図35では、特定基礎単語出現マップM1を例に挙げて説明する。(A)では、特定基礎単語群および初期の対象ファイル群Fである対象ファイルF1〜FnからなるビットマップをセグメントS1とする。
追加された対象ファイルの数が所定数貯まった場合は、あらたなセグメントを設定する。図35では、一例として、セグメントS1と同数のn個の対象ファイルが追加された場合に、あらたなセグメントとしてセグメントS2とする。なお、セグメントS1と同数である必要はない。(B)では、セグメントS2が設定された状態を示す。
(C)は、セグメントS2の設定後に、あらたに対象ファイルが追加され、その追加された対象ファイルについてビット行が生成された状態を示す。(D)このようにして、特定基礎単語出現マップM1が、特定基礎単語群およびセグメントS1〜SNからなるビットマップを生成することができる。
図36は、対象ファイルの追加により複数個にセグメント化された出現マップ群を用いた場合の情報検索処理手順を示すフローチャートである。まず、情報検索装置2300は、セグメント番号jをj=1とし(ステップS3601)、セグメントSjを用いた情報検索処理を実行する(ステップS3602)。この情報検索処理(ステップS3602)では、図31に示したステップS3101〜ステップS3108を実行する。すなわち、図32−1および図32−2に示したファイル特定処理(ステップS3104)、図33に示した最長一致検索処理(ステップS3202)も実行する。ただし、図32−2については、一部異なる処理があるため、図37で説明する。
そして、情報検索装置2300は、j>Nであるか否かを判断する(ステップS3603)。j>Nでない場合(ステップS3603:No)、情報検索装置2300は、jをインクリメントしてつぎのセグメントSjを指定して(ステップS3604)、ステップS3602に戻る。一方、ステップS3603において、j>Nである場合(ステップS3603:Yes)、情報検索装置2300は、出力部2306による出力処理を実行する(ステップS3605)。ここでは、セグメントS1〜SNを用いた各検索結果を出力することとなる。
図37は、図36に示した情報検索処理(ステップS3602)における、ファイル特定処理(ステップS3104)の一部を示すフローチャートである。なお、図37では、図32−2と同一ステップには同一ステップ番号を付し、その説明を省略する。図37において、ステップS3212により、ファイル特定できたセグメントSj内の対象ファイルがあるか否かを判断する(ステップS3700)。
ファイル特定できたセグメントSj内の対象ファイルがある場合(ステップS3700:Yes)、ステップS3216に移行する。一方、ファイル特定できたセグメントSj内の対象ファイルがない場合(ステップS3700:No)、ステップS3603に移行する。すなわち、対象文字である特定単一文字を含む対象ファイルがセグメントSjに存在しない場合、後続の単一文字を対象文字にしてファイル特定できても、ステップS3207のファイル絞り込みをおこなっても、対象ファイルが得られない。
したがって、1文字でも対象ファイルが特定できなかった場合は、情報検索装置2300は、ステップS3603に移行して、つぎのセグメントSjを指定することで、無駄な検索を省略することができ、検索速度の高速化を図ることができる。
以上説明したように、本情報生成プログラム、情報生成装置、および情報生成方法によれば、基礎単語や文字の存否を示すインデックス情報の生成の高速化およびインデックス情報のサイズの最適化を図ることができる。また、本情報検索プログラム、情報検索装置、および情報検索方法によれば、検索ノイズの低減化を図ることができる。
なお、本実施の形態で説明した方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報生成プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報生成プログラムは、インターネット等のネットワークを介して配布してもよい。
以下に添付図面を参照して、この発明にかかる情報生成プログラム、情報検索プログラム、情報生成装置、情報検索装置、情報生成方法、および情報検索方法の実施の形態を詳細に説明する。
[情報生成プログラム/装置/方法]
まず、情報生成プログラム、情報生成装置、および情報生成方法について説明する。
<情報生成の一例(その1)>
図1は、情報生成装置における情報生成の一例(その1)を示す説明図である。図1において、対象ファイル群Fは、対象ファイルの集合である。各対象ファイルは、文字列が記述された電子データである。対象ファイルは、たとえば、辞書や辞典、電子書籍、Webページなどの電子データであり、テキスト、HTML(HyperText Markup Language)、XML(Extensible Markup Language)形式で記述されている。
情報生成装置は、(A)対象ファイル群Fからの集計、(B)出現頻度の降順でのソート、(C)目標出現率の順位までの抽出、(D)マップ生成、という4つのフェーズを実行する。以下、基礎単語と単一文字に分けて説明する。
(A1)まず、情報生成装置は、対象ファイル群Fを読み込んで、基礎単語の出現頻度を計数する。ここで、基礎単語とは、単語群のうちあらかじめ指定された単語を意味する。たとえば、辞書の場合、見出し語が基礎単語に該当する。情報生成装置は、基礎単語を集めた基礎単語構造体を参照して、基礎単語構造体内の基礎単語に一致する文字列が対象ファイルに存在する場合に、当該基礎単語の出現頻度(初期値は0)を1加算する。基礎単語構造体とは、基礎単語が記述されたデータ構造体である。
(B1)対象ファイル群Fにおいて基礎単語の集計が終了すると、情報生成装置は、基礎単語出現頻度テーブル101を、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い基礎単語から順位付けをおこなう。
(C1)つぎに、情報生成装置は、(B1)ソート後の基礎単語出現頻度テーブル101を参照して、目標出現率Pwまでの順位の基礎単語を抽出する。具体的には、情報生成装置は、全基礎単語の出現頻度の総和(総出現頻度)を分母とし、順位が1位の基礎単語から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。
たとえば、総出現頻度が50000、1位からx位までの基礎単語群の累計出現頻度が45000とすると、x位までの出現頻度は、(45000/50000)×100=90[%]となる。ここで、目標出現率Pwが90[%]である場合は、上位x位までの基礎単語を抽出することとなる。なお、(C1)で抽出された基礎単語を、元の基礎単語群と区別するために、「特定基礎単語(群)」と称す。
(D1)最後に、情報生成装置は、特定基礎単語群について、特定基礎単語出現マップM1を生成する。特定基礎単語出現マップM1とは、特定基礎単語ごとに、特定基礎単語の存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。各対象ファイルにおいて、1回でも出現した場合は該当する対象ファイルのビットをONにし、1回も出現しなかった場合は該当する対象ファイルのビットをOFFのままにしておく。
なお、本明細書では、「ビットをON」とした場合は、そのビットの値を“1”にし、「ビットをOFF」とした場合は、そのビットの値を“0”として説明する。なお、「ビットをON」とした場合は、そのビットの値を“0”にし、「ビットをOFF」とした場合は、そのビットの値を“1”にしてもよい。つぎに、単一文字について説明する。
(A2)まず、情報生成装置は、対象ファイル群Fを読み込んで、単一文字の出現頻度を計数する。ここで、単一文字とは、所定ビット長の文字コードで表現された文字である。たとえば、UTF(UCS/Unicode Transformation Format)16ビット文字コードの文字などがある。情報生成装置は、単一文字を集めた単一文字構造体を参照して、単一文字構造体内の単一文字に一致する単一文字が対象ファイルに存在する場合に、当該単一文字の出現頻度(初期値は0)を1加算する。単一文字構造体とは、単一文字が記述されたデータ構造体である。
(B2)対象ファイル群Fにおいて単一文字の集計が終了すると、情報生成装置は、単一文字出現頻度テーブル102を、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い単一文字から順位付けをおこなう。
(C21)つぎに、情報生成装置は、(B2)ソート後の単一文字出現頻度テーブル102を参照して、目標出現率Pcまでの順位の単一文字を抽出する。具体的には、情報生成装置は、全単一文字の出現頻度の総和(総出現頻度)を分母とし、順位が1位の単一文字から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。
たとえば、総出現頻度が50000、1位からy位までの単一文字群の累計出現頻度が40000とすると、y位までの出現頻度は、(50000/40000)×100=80[%]となる。ここで、目標出現率Pcが80[%]である場合は、上位y位までの単一文字を抽出することとなる。なお、(C21)で抽出された単一文字を、元の単一文字群と区別するために、「特定単一文字(群)」と称す。
(C22)また、単一文字群のうち特定単一文字群から外された単一文字(以下、「非特定単一文字(群)」)は、出現頻度が各特定単一文字よりも低いため、その文字コードを分割する。具体的には、非特定単一文字の文字コードを、上位ビットの文字コードと、下位ビットの文字コードに分割する。
たとえば、単一文字がUTF16ビット文字コードで表現されている場合は、上位8ビットの文字コードと下位8ビットの文字コードに分割する。この場合、分割されたいずれの文字コードも、0x00〜0xFFのコードで表現される。このように、上位ビットの文字コードを「上位分割文字コード(群)」と称し、下位ビットの文字コードを「下位分割文字コード(群)」と称す。
(D2)そして、情報生成装置は、(C21)で抽出された特定単一文字群について、特定単一文字出現マップM2を生成する。特定単一文字出現マップM2とは、特定単一文字ごとに、特定単一文字の存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。各対象ファイルにおいて、1回でも出現した場合は該当する対象ファイルのビットをONにし、1回も出現しなかった場合は該当する対象ファイルのビットをOFFのままにしておく。
(D3)また、情報生成装置は、(C22)で分割された上位分割文字コード群について、上位分割文字コード出現マップM3を生成する。上位分割文字コード出現マップM3とは、上位分割文字コードごとに、上位分割文字コードの存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。上位分割文字コードおよび下位分割文字コードは、ともに0x00〜0xFFの範囲で表現されるが、上位分割文字コード出現マップM3では、下位分割文字コードとしてではなく、上位分割文字コードとして出現した場合に、該当する対象ファイルのビットがONになる。
(D4)同様に、情報生成装置は、(C22)で分割された下位分割文字コード群について、下位分割文字コード出現マップM4を生成する。下位分割文字コード出現マップM4とは、下位分割文字コードごとに、下位分割文字コードの存否を対象ファイルごとに示したビットマップ形式のインデックス情報である。上位分割文字コードおよび下位分割文字コードは、ともに0x00〜0xFFの範囲で表現されるが、下位分割文字コード出現マップM4では、上位分割文字コードとしてではなく、下位分割文字コードとして出現した場合に、該当する対象ファイルのビットがONになる。
このように、目標出現率Pw,Pcにより、特定基礎単語および特定単一文字を制限するため、目的や用途に応じて目標出現率Pw,Pcを設定することで、必要最小限のマップサイズで各種出現マップを生成することができる。換言すれば、すべての基礎単語や単一文字についてマップ上でレコードを割り当てると、出現頻度の低い基礎単語や単一文字については、“0”のビット列が長くなり、マップ内で無駄が発生する。
このため、目的や用途に応じて目標出現率Pw,Pcを設定し、その目標出現率Pw,Pcに応じた分だけ特定基礎単語や特定単一文字として登録してマップ生成することで、マップサイズの縮小化を図ることができる。また、特定基礎単語から外された基礎単語であっても、基礎単語を構成する単一文字の各々が特定単一文字出現マップM2に設定されるため問題ない。また、非特定単一文字についても分割されて上位分割文字コード出現マップM3と下位分割文字コード出現マップM4に設定されるため問題ない。
また、文字の連続性についても、後述する連接文字列出現マップM5で設定可能であるため問題ない。このように、非特定基礎単語については、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、および連接文字列出現マップM5で設定可能となる。したがって、これらの出現マップのANDをとることで、非特定基礎単語の存否を判断することができる。
なお、(A)〜(D)のフェーズは、基礎単語と単一文字とにわけて実行してもよいが、1文字ずつシフトすることで、基礎単語と単一文字とを特定して、同時並行で実行することでマップ生成の高速化を実現することができる。
<非特定単一文字の分割例>
図2は、非特定単一文字の分割例を示す説明図である。図2では、(A)非特定単一文字「芝」と(B)非特定単一文字「兆」を例に挙げて説明する。「芝」の文字コードは「9D82」であるため、上位ビットの「0x9D」と下位ビットの「0x82」に分割される。同様に、「兆」の文字コードは「5146」であるため、上位ビットの「0x51」と下位ビットの「0x46」に分割される。
<情報生成の一例(その2)>
図3は、情報生成装置における情報生成の一例(その2)を示す説明図である。(D5)図3に示したように、情報生成装置は、図1の(D)フェーズにおいて、連接文字列出現マップM5も生成する。連接文字列とは、2以上の文字が連続する文字列である。たとえば、「結婚」は、特定単一文字「結」と特定単一文字「婚」の2連接文字列である。また、単一文字「芝」は非特定単一文字であるため、上位分割文字コード“0x9D”と下位分割文字コード“0x82”に分割される。このように、上位分割文字コードと下位分割文字コードが連続する場合も、2連接文字列である。
また、文字列「芝居」については、上位分割文字コード“0x9D”と下位分割文字コード“0x82”と特定単一文字「居」との3連接文字列である。「芝」と「居」の文字境界に着目すると、下位分割文字コード“0x82”と特定単一文字「居」との2連接文字列となる。同様に、文字列「人工芝」については、特定単一文字「人」,「工」と上位分割文字コード“0x9D”と下位分割文字コード“0x82”との4連接文字列である。「工」と「芝」の文字境界に着目すると、特定単一文字「工」と上位分割文字コード“0x9D”との2連接文字列となる。なお、本明細書では、説明の簡略化のため、2連接文字列を用いて説明することとする。
<情報生成装置のハードウェア構成>
図4は、実施の形態にかかる情報生成装置のハードウェア構成例を示すブロック図である。図4において、情報生成装置は、CPU(Central Processing Unit)401と、ROM(Read Only Memory)402と、RAM(Random Access Memory)403と、磁気ディスクドライブ404と、磁気ディスク405と、光ディスクドライブ406と、光ディスク407と、ディスプレイ408と、I/F(Interface)409と、キーボード410と、マウス411と、スキャナ412と、プリンタ413と、を備えている。また、各構成部はバス400によってそれぞれ接続されている。
ここで、CPU401は、情報生成装置の全体の制御を司る。ROM402は、ブートプログラムなどのプログラムを記憶している。RAM403は、CPU401のワークエリアとして使用される。磁気ディスクドライブ404は、CPU401の制御にしたがって磁気ディスク405に対するデータのリード/ライトを制御する。磁気ディスク405は、磁気ディスクドライブ404の制御で書き込まれたデータを記憶する。
光ディスクドライブ406は、CPU401の制御にしたがって光ディスク407に対するデータのリード/ライトを制御する。光ディスク407は、光ディスクドライブ406の制御で書き込まれたデータを記憶したり、光ディスク407に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ408は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ408は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)409は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク414に接続され、このネットワーク414を介して他の装置に接続される。そして、I/F409は、ネットワーク414と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F409には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード410は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス411は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ412は、画像を光学的に読み取り、情報生成装置内に画像データを取り込む。なお、スキャナ412は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ413は、画像データや文書データを印刷する。プリンタ413には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
<情報生成装置の機能的構成>
図5は、情報生成装置の機能的構成例を示すブロック図である。情報生成装置500は、設定部501と、集計部502と、順位特定部503と、検出部504と、分割部505と、生成部506とを備えている。設定部501〜生成部506は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。
設定部501は、目標出現率Pw,Pcを設定する機能を有する。具体的には、たとえば、キーボード410やマウス411の操作によって入力された目標出現率Pw,Pcを記憶装置に保存する。
集計部502は、文字列が記述された対象ファイル群Fの中から指定単語ごとの出現頻度を集計する。具体的には、たとえば、集計部502は、図1に示したように、基礎単語構造体を参照して、注目する単一文字を先頭文字とする基礎単語を、注目する単一文字からの最長一致検索により検索する。そして、最長一致検索された基礎単語のレコードを基礎単語出現頻度テーブル101に追加登録する。すでに追加登録済である場合は、追加登録する必要はない。そして、最長一致検索された基礎単語のレコードにおいて出現頻度を1加算する。
また、集計部502は、文字列が記述された対象ファイル群Fの中から単一文字ごとの出現頻度を集計する。具体的には、たとえば、集計部502は、図1に示したように、単一文字構造体を参照して、注目する単一文字のレコードを基礎単語出現頻度テーブル101に追加登録する。すでに追加登録済である場合は、追加登録する必要はない。そして、注目する単一文字のレコードにおいて出現頻度を1加算する。
順位特定部503は、集計部502によって集計された指定単語ごとの出現頻度に基づいて、指定単語に関する目標出現率までの降順の順位を特定する。具体的には、たとえば、順位特定部503は、設定部501によって設定された基礎単語に関する目標出現率Pwまでの降順の順位を特定する。すなわち、図1で説明したように、基礎単語出現頻度テーブル101を出現頻度の降順にソートしておく。
そして、注目する順位を第x位とし、xをx=1からインクリメントしながら、第1位から第x位までの基礎単語群の累積出現頻度を全基礎単語の総出現頻度で除算することで、第x位までの出現率を算出する。算出された出現率が目標出現率Pw以内であれば、xをインクリメントして、再度第x位までの出現率を算出する。
そして、目標出現率Pwを超えた場合、xを1つデクリメントすることで、目標出現率Pwまでの順位(デクリメント後のxの値)を特定することとなる。これにより、出現頻度の降順で第1位の基礎単語から目標出現率Pwとなる順位の基礎単語までの基礎単語群が、特定基礎単語群となる。
また、順位特定部503は、集計部502によって集計された単一文字ごとの出現頻度に基づいて、単一文字に関する目標出現率までの降順の順位を特定する。具体的には、たとえば、順位特定部503は、設定部501によって設定された単一文字に関する目標出現率Pcまでの降順の順位を特定する。すなわち、図1で説明したように、単一文字出現頻度テーブル102を出現頻度の降順にソートしておく。
そして、注目する順位を第y位とし、yをy=1からインクリメントしながら、第1位から第y位までの単一文字群の累積出現頻度を全単一文字の総出現頻度で除算することで、第y位までの出現率を算出する。算出された出現率が目標出現率Pc以内であれば、yをインクリメントして、再度第y位までの出現率を算出する。
そして、目標出現率Pcを超えた場合、yを1つデクリメントすることで、目標出現率Pcまでの順位(デクリメント後のyの値)を特定することとなる。これにより、出現頻度の降順で第1位の単一文字から目標出現率Pcとなる順位の単一文字までの単一文字群が、特定単一文字群となる。
検出部504は、対象ファイル群Fの中から選ばれた対象ファイルの中から順位特定部503によって特定された降順の順位までの特定の指定単語を検出する。具体的には、たとえば、対象ファイル内の注目単一文字を先頭から1文字ずつシフトしていく。このとき、順位特定部503によって特定された特定基礎単語群のうち、注目する単一文字を先頭文字とする特定基礎単語を、最長一致検索により検出する。
また、検出部504は、対象ファイル群Fの中から選ばれた対象ファイルの中から順位特定部503によって特定された降順の順位までの特定の単一文字を検出する。具体的には、たとえば、対象ファイル内の注目単一文字を先頭から1文字ずつシフトしていく。このとき、順位特定部503によって特定された特定単一文字に一致する注目単一文字を検出する。
分割部505は、順位特定部503によって特定された降順の順位よりも下位の順位となる単一文字の文字コードを上位ビットの分割文字コードと下位ビットの分割文字コードとに分割する。具体的には、たとえば、図2に示したように、非特定単一文字について上位8ビットの上位分割文字コードと下位8ビットの下位分割文字コードに分割する。
生成部506は、検出部504によって検出された特定の指定単語ごとに、当該特定の指定単語の存否を対象ファイルごとに示すインデックス情報を生成する。具体的には、たとえば、生成部506は、検出部504によって検出された特定基礎単語ごとに、特定基礎単語の存否を対象ファイルごとに示す特定基礎単語出現マップM1を生成する。
また、生成部506は、検出部504によって検出された特定の単一文字ごとに、当該特定の単一文字の存否を対象ファイルごとに示すインデックス情報を生成する。具体的には、たとえば、生成部506は、検出部504によって検出された特定単一文字ごとに、特定単一文字の存否を対象ファイルごとに示す特定単一文字出現マップM2を生成する。
また、生成部506は、分割部505によって分割された上位ビットの分割文字コードごとに、当該分割文字コードの存否を対象ファイルごとに示すインデックス情報(上位分割文字コード出現マップM3)を生成する。また、生成部506は、分割部505によって分割された下位ビットの分割文字コードごとに、当該分割文字コードの存否を対象ファイルごとに示すインデックス情報(下位分割文字コード出現マップM4)を生成する。
また、生成部506は、連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報(連接文字列出現マップM5)を生成する。連接文字列としては、具体的には、たとえば、順位特定部503によって特定された降順の順位までの複数の特定単一文字による連接文字列や特定単一文字と分割文字コードが混在する連接文字列がある。たとえば、2連接文字列には、特定単一文字の2連接文字列がある。
また、2連接文字列には、特定単一文字、上位分割文字コードの順で連続する連接文字列がある。また、2連接文字列には、下位分割文字コード、特定単一文字の順で連続する連接文字列がある。また、2連接文字列には、上位分割文字コード、下位分割文字コードの順で連続する連接文字列(すなわち、分割された非特定文字)がある。また、2連接文字列には、下位分割文字コード、上位分割文字コードの順で連続する連接文字列(すなわち、分割された2連接非特定文字の境界)がある。連接文字列出現マップM5では、このような連接文字列が出現した対象ファイルに対してビットをONにすることとなる。
<マップ生成の具体例>
つぎに、マップ生成の具体例について説明する。なお、本例では、連接文字列の連接数を2とする。また、マップ生成では、単一文字、2連接文字列、基礎単語について、まだ1回も出現していない場合は、そのマップ(ファイル番号1〜nまでのn個のビット列(値は“0”))を生成し、今回対象となっている対象ファイルFiのビットをONにすることとなる。一方、すでに対象ファイルF1〜F(i−1)までに生成済みの場合は、対象ファイルFiのビットをONにすることとなる。
図6は、マップ生成例(その1)を示す説明図である。図6では、対象ファイルFi内に『私の結婚活動の記録』という文字列が記述されているものとする。マップ生成では、先頭文字を対象文字として、1文字ずつ末尾方向へシフトしていく。図中、矢印で指している文字が対象文字である。
(A)まず、先頭文字「私」が対象文字である。対象文字「私」は特定単一文字であるため、特定単一文字「私」の特定単一文字出現マップM2を指定する。そして、特定単一文字「私」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。さらに、対象文字「私」を先頭文字とする「私の結婚活動の記録」の中から対象文字「私」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(B)つぎに、対象文字を1文字シフトして、対象文字を「の」にする。まず、対象文字「の」は特定単一文字であるため、特定単一文字「の」の特定単一文字出現マップM2を指定する。そして、特定単一文字「の」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「の」にシフトされた場合、「私の」という2連接文字列が得られるため、2連接文字列「私の」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「私の」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「の」を先頭文字とする「の結婚活動の記録」の中から対象文字「の」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(C)つぎに、対象文字を1文字シフトして、対象文字を「結」にする。まず、対象文字「結」は特定単一文字であるため、特定単一文字「結」の特定単一文字出現マップM2を指定する。そして、特定単一文字「結」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「結」にシフトされた場合、「の結」という2連接文字列が得られるため、2連接文字列「の結」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「の結」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「結」を先頭文字とする「結婚活動の記録」の中から対象文字「結」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「結婚」が最長一致するため、特定基礎単語「結婚」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「結婚」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(D)つぎに、対象文字を1文字シフトして、対象文字を「婚」にする。まず、対象文字「婚」は特定単一文字であるため、特定単一文字「婚」の特定単一文字出現マップM2を指定する。そして、特定単一文字「婚」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「婚」にシフトされた場合、「結婚」という2連接文字列が得られるため、2連接文字列「結婚」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「結婚」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「婚」を先頭文字とする「婚活動の記録」の中から対象文字「婚」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(E)つぎに、対象文字を1文字シフトして、対象文字を「活」にする。まず、対象文字「活」は特定単一文字であるため、単一文字「活」の単一文字出現マップを指定する。そして、特定単一文字「活」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「活」にシフトされた場合、「婚活」という2連接文字列が得られるため、2連接文字列「婚活」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「結活」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「活」を先頭文字とする「活動の記録」の中から対象文字「活」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「活動」が最長一致するため、特定基礎単語「活動」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「活動」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(F)つぎに、対象文字を1文字シフトして、対象文字を「動」にする。まず、対象文字「動」は特定単一文字であるため、特定単一文字「動」の特定単一文字出現マップM2を指定する。そして、特定単一文字「動」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「動」にシフトされた場合、「活動」という2連接文字列が得られるため、2連接文字列「活動」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「活動」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「動」を先頭文字とする「動の記録」の中から対象文字「動」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(G)つぎに、対象文字を1文字シフトして、対象文字を「の」にする。まず、対象文字「の」は特定単一文字であるため、特定単一文字「の」の特定単一文字出現マップM2を指定する。そして、対象文字「の」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(B)でONになっているため、何もしないこととなる。また、対象文字が「の」にシフトされた場合、「動の」という2連接文字列が得られるため、2連接文字列「動の」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「動の」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「の」を先頭文字とする「の記録」の中から対象文字「の」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(H)つぎに、対象文字を1文字シフトして、対象文字を「記」にする。まず、対象文字「記」は特定単一文字であるため、単一文字「記」の単一文字出現マップを指定する。そして、特定単一文字「記」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「記」にシフトされた場合、「の記」という2連接文字列が得られるため、2連接文字列「の記」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「の記」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「記」を先頭文字とする「記録」の中から対象文字「記」を先頭文字とする基礎単語の最長一致検索を実行する。この場合、「記録」が最長一致するため、特定基礎単語「記録」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「記録」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(I)つぎに、対象文字を1文字シフトして、対象文字を「録」にする。まず、対象文字「録」は特定単一文字であるため、特定単一文字「録」の特定単一文字出現マップM2を指定する。そして、特定単一文字「録」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「録」にシフトされた場合、「記録」という2連接文字列が得られるため、2連接文字列「記録」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「記録」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「録」を先頭文字とする「録」の中から対象文字「録」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
図7は、マップ生成例(その2)を示す説明図である。図7では分割文字コードを含む場合のマップ生成例を示す。単一文字を分割した場合は、分割文字コードを1文字として扱ってシフトすることとなる。図7では、対象ファイルFi内に『竜馬は脱藩した』という文字列が記述されているものとする。
(A)まず、先頭文字「竜」が対象文字である。対象文字「竜」は特定単一文字であるため、特定単一文字「竜」の特定単一文字出現マップM2を指定する。そして、特定単一文字「竜」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。さらに、対象文字「竜」を先頭文字とする「竜馬は脱藩した」の中から対象文字「竜」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(B)つぎに、対象文字を1文字シフトして、対象文字を「馬」にする。まず、対象文字「馬」は特定単一文字であるため、特定単一文字「馬」の特定単一文字出現マップM2を指定する。そして、特定単一文字「馬」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「馬」にシフトされた場合、「竜馬」という2連接文字列が得られるため、2連接文字列「竜馬」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「竜馬」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「馬」を先頭文字とする「馬は脱藩した」の中から対象文字「馬」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(C)つぎに、対象文字を1文字シフトして、対象文字を「は」にする。まず、対象文字「は」は特定単一文字であるため、特定単一文字「は」の特定単一文字出現マップM2を指定する。そして、特定単一文字「は」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「は」にシフトされた場合、「馬は」という2連接文字列が得られるため、2連接文字列「馬は」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「馬は」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「は」を先頭文字とする「は脱藩した」の中から対象文字「は」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(D)つぎに、対象文字を1文字シフトして、対象文字を「脱」にする。まず、対象文字「脱」は特定単一文字ではないため、対象文字「脱」の文字コード「0x8131」を、上位分割文字コード「0x81」と下位分割文字コード「0x31」に分割する。そして、対象文字を上位分割文字コード「0x81」にし、上位分割文字コード「0x81」の上位分割文字コード出現マップM3を指定する。つぎに、上位分割文字コード「0x81」の上位分割文字コード出現マップM3について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が上位分割文字コード「0x81」にシフトされた場合、「は 0x81」という2連接文字列が得られるため、2連接文字列「は 0x81」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「は 0x81」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0x81」を先頭文字とする「0x81 0x31 藩した」の中から対象文字「0x81」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(E)つぎに、対象文字を1文字シフトして、対象文字を下位分割文字コード「0x31」にする。まず、下位分割文字コード「0x31」の下位分割文字コード出現マップM4を指定する。つぎに、下位分割文字コード「0x31」の下位分割文字コード出現マップM4について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が下位分割文字コード「0x31」にシフトされた場合、「0x81 0x31」という2連接文字列が得られるため、2連接文字列「0x81 0x31」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0x81 0x31」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0x31」を先頭文字とする「0x31 藩した」の中から対象文字「0x31」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(F)つぎに、対象文字を1文字シフトして、対象文字を「藩」にする。まず、対象文字「藩」は特定単一文字ではないため、対象文字「藩」の文字コード「0xE985」を、上位分割文字コード「0xE9」と下位分割文字コード「0x85」に分割する。そして、対象文字を上位分割文字コード「0xE9」にし、上位分割文字コード「0xE9」の上位分割文字コード出現マップM3を指定する。
つぎに、上位分割文字コード「0xE9」の上位分割文字コード出現マップM3について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が上位分割文字コード「0xE9」にシフトされた場合、「0x31 0xE9」という2連接文字列が得られるため、2連接文字列「0x31 0xE9」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0x31 0xE9」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0xE9」を先頭文字とする「0xE9 0x85 した」の中から対象文字「0xE9」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(G)つぎに、対象文字を1文字シフトして、対象文字を下位分割文字コード「0x85」にする。まず、下位分割文字コード「0x85」の下位分割文字コード出現マップM4を指定する。つぎに、下位分割文字コード「0x85」の下位分割文字コード出現マップM4について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が下位分割文字コード「0x85」にシフトされた場合、「0xE9 0x85」という2連接文字列が得られるため、2連接文字列「0xE9 0x85」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0xE9 0x85」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「0x85」を先頭文字とする「0x85 した」の中から対象文字「0x85」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(H)つぎに、対象文字を1文字シフトして、対象文字を「し」にする。まず、対象文字「し」は特定単一文字であるため、特定単一文字「し」の特定単一文字出現マップM2を指定する。そして、特定単一文字「し」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「し」にシフトされた場合、「0x85 し」という2連接文字列が得られるため、2連接文字列「0x85 し」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「0x85 し」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「し」を先頭文字とする「した」の中から対象文字「し」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
(I)つぎに、対象文字を1文字シフトして、対象文字を「た」にする。まず、対象文字「た」は特定単一文字であるため、特定単一文字「た」の特定単一文字出現マップM2を指定する。そして、特定単一文字「た」について特定単一文字出現マップM2の対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「た」にシフトされた場合、「した」という2連接文字列が得られるため、2連接文字列「した」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「した」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「た」を先頭文字とする「た」の中から対象文字「た」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、最長一致する特定基礎単語が存在しないため、特定基礎単語出現マップM1は生成されない。
図8−1および図8−2は、マップ生成例(その3)を示す説明図である。図8−1および図8−2では、対象ファイルFi内に英文文字列『that□is□a□pen』が記述されているものとする。なお、「□」はブランクである。ブランクも1文字として扱う。
(A)まず、先頭文字「t」が対象文字である。対象文字「t」は特定単一文字であるため、特定単一文字「t」の特定単一文字出現マップM2を指定する。そして、特定単一文字「t」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。
さらに、対象文字「t」を先頭文字とする「that□is□a□pen」の中から対象文字「t」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「that」(代名詞)が最長一致するため、特定基礎単語「that」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「that」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(B)つぎに、対象文字を1文字シフトして、対象文字を「h」にする。まず、対象文字「h」は特定単一文字であるため、特定単一文字「h」の特定単一文字出現マップM2を指定する。そして、特定単一文字「h」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「h」にシフトされた場合、「th」という2連接文字列が得られるため、2連接文字列「th」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「th」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。なお、英単語では前方一致の検索が重視されるため、英単語の文字列の途中については、特定基礎単語の最長一致検索を行わない。
(C)つぎに、対象文字を1文字シフトして、対象文字を「a」にする。まず、対象文字「a」は特定単一文字であるため、特定単一文字「a」の特定単一文字出現マップM2を指定する。そして、特定単一文字「a」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「a」にシフトされた場合、「ha」という2連接文字列が得られるため、2連接文字列「ha」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「ha」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(D)つぎに、対象文字を1文字シフトして、対象文字を「t」にする。まず、対象文字「t」は特定単一文字であるため、特定単一文字「t」の特定単一文字出現マップM2を指定する。そして、対象文字「t」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(A)でONになっているため、何も変わらないこととなる。また、対象文字が「t」にシフトされた場合、「at」という2連接文字列が得られるため、2連接文字列「at」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「at」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(E)つぎに、対象文字を1文字シフトして、対象文字を「□」にする。まず、対象文字「□」は特定単一文字であるため、特定単一文字「□」の特定単一文字出現マップM2を指定する。そして、特定単一文字「□」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「□」にシフトされた場合、「t□」という2連接文字列が得られるため、2連接文字列「t□」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「t□」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(F)つぎに、対象文字を1文字シフトして、対象文字を「i」にする。対象文字「i」は特定単一文字であるため、特定単一文字「i」の特定単一文字出現マップM2を指定する。そして、特定単一文字「i」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「i」にシフトされた場合、「□i」という2連接文字列が得られるため、2連接文字列「□i」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「□i」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「i」を先頭文字とする「is□a□pen」の中から対象文字「i」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「is」(be動詞)が最長一致するため、特定基礎単語「is」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「is」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(G)つぎに、対象文字を1文字シフトして、対象文字を「s」にする。対象文字「s」は特定単一文字であるため、特定単一文字「s」の特定単一文字出現マップM2を指定する。そして、特定単一文字「s」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「s」にシフトされた場合、「is」という2連接文字列が得られるため、2連接文字列「is」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「is」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(H)つぎに、対象文字を1文字シフトして、対象文字を「□」にする。まず、対象文字「□」は特定単一文字であるため、特定単一文字「□」の特定単一文字出現マップM2を指定する。そして、対象文字「□」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(E)でONになっているため、何も変わらないこととなる。また、対象文字が「□」にシフトされた場合、「s□」という2連接文字列が得られるため、2連接文字列「s□」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「s□」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(I)つぎに、対象文字を1文字シフトして、対象文字を「a」にする。まず、対象文字「a」は特定単一文字であるため、特定単一文字「a」の特定単一文字出現マップM2を指定する。そして、対象文字「a」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(C)でONになっているため、何も変わらないこととなる。また、対象文字が「a」にシフトされた場合、「□a」という2連接文字列が得られるため、2連接文字列「□a」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「□a」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「a」を先頭文字とする「a□pen」の中から対象文字「a」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「a」(不定冠詞)が最長一致するため、特定基礎単語「a」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「a」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(J)つぎに、対象文字を1文字シフトして、対象文字を「□」にする。まず、対象文字「□」は特定単一文字であるため、特定単一文字「□」の特定単一文字出現マップM2を指定する。そして、対象文字「□」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(E)でONになっているため、何もしないこととなる。また、対象文字が「□」にシフトされた場合、「a□」という2連接文字列が得られるため、2連接文字列「a□」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「a□」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(K)つぎに、対象文字を1文字シフトして、対象文字を「p」にする。まず、対象文字「p」は特定単一文字であるため、特定単一文字「p」の特定単一文字出現マップM2を指定する。そして、特定単一文字「p」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「p」にシフトされた場合、「□p」という2連接文字列が得られるため、2連接文字列「□p」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「□p」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。さらに、対象文字「p」を先頭文字とする「pen」の中から対象文字「p」を先頭文字とする特定基礎単語の最長一致検索を実行する。この場合、「pen」(ペン)が最長一致するため、特定基礎単語「pen」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「pen」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(L)つぎに、対象文字を1文字シフトして、対象文字を「e」にする。まず、対象文字「e」は特定単一文字であるため、特定単一文字「e」の特定単一文字出現マップM2を指定する。そして、特定単一文字「e」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「e」にシフトされた場合、「pe」という2連接文字列が得られるため、2連接文字列「pe」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「pe」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(M)つぎに、対象文字を1文字シフトして、対象文字を「n」にする。まず、対象文字「n」は特定単一文字であるため、特定単一文字「n」の特定単一文字出現マップM2を指定する。そして、特定単一文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「n」にシフトされた場合、「en」という2連接文字列が得られるため、2連接文字列「en」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「en」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
図9は、マップ生成例(その4)を示す説明図である。図9では、対象ファイルFi内に英単語『internal』が記述されているものとする。
(A)まず、先頭文字「i」が対象文字である。対象文字「i」は特定単一文字であるため、特定単一文字「i」の特定単一文字出現マップM2を指定する。そして、特定単一文字「i」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、先頭文字であるため、2連接文字列出現マップM5は生成されない。さらに、対象文字「i」を先頭文字とする「internal」の中から対象文字「i」を先頭文字とする特定基礎単語の最長一致検索を実行する。
この場合、「internal」は特定基礎単語ではないため最長一致しないが、「inter」(内)が最長一致するため、特定基礎単語「inter」の特定基礎単語出現マップM1を指定する。そして、特定基礎単語「inter」の特定基礎単語出現マップM1について対象ファイルFiのビットをON(“0”→“1”)にする。
(B)つぎに、対象文字を1文字シフトして、対象文字を「n」にする。まず、対象文字「n」は特定単一文字であるため、特定単一文字「n」の特定単一文字出現マップM2を指定する。そして、特定単一文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「n」にシフトされた場合、「in」という2連接文字列が得られるため、2連接文字列「in」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「in」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(C)つぎに、対象文字を1文字シフトして、対象文字を「t」にする。まず、対象文字「t」は特定単一文字であるため、特定単一文字「t」の特定単一文字出現マップM2を指定する。そして、特定単一文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「t」にシフトされた場合、「nt」という2連接文字列が得られるため、2連接文字列「nt」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「nt」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(D)つぎに、対象文字を1文字シフトして、対象文字を「e」にする。まず、対象文字「e」は特定単一文字であるため、特定単一文字「e」の特定単一文字出現マップM2を指定する。また、対象文字が「e」にシフトされた場合、「te」という2連接文字列が得られるため、2連接文字列「te」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「te」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(E)つぎに、対象文字を1文字シフトして、対象文字を「r」にする。まず、対象文字「r」は特定単一文字であるため、特定単一文字「r」の特定単一文字出現マップM2を指定する。そして、特定単一文字「r」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「n」にシフトされた場合、「er」という2連接文字列が得られるため、2連接文字列「er」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「er」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(F)つぎに、対象文字を1文字シフトして、対象文字を「n」にする。まず、対象文字「n」は特定単一文字であるため、特定単一文字「n」の特定単一文字出現マップM2を指定する。そして、対象文字「n」の特定単一文字出現マップM2について対象ファイルFiのビットは、すでに、(B)でONになっているため、何も変わらないこととなる。また、対象文字が「n」にシフトされた場合、「rn」という2連接文字列が得られるため、2連接文字列「rn」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「rn」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(G)つぎに、対象文字を1文字シフトして、対象文字を「a」にする。対象文字「a」は特定単一文字であるため、特定単一文字「a」の特定単一文字出現マップM2を指定する。そして、特定単一文字「a」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「a」にシフトされた場合、「na」という2連接文字列が得られるため、2連接文字列「na」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「na」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
(H)最後に、対象文字を1文字シフトして、対象文字を「l」にする。対象文字「l」は特定単一文字であるため、特定単一文字「l」の特定単一文字出現マップM2を指定する。そして、特定単一文字「l」の特定単一文字出現マップM2について対象ファイルFiのビットをON(“0”→“1”)にする。また、対象文字が「l」にシフトされた場合、「al」という2連接文字列が得られるため、2連接文字列「al」の2連接文字列出現マップM5を指定する。
そして、2連接文字列「al」の2連接文字列出現マップM5において対象ファイルFiのビットをON(“0”→“1”)にする。
<情報生成処理手順>
図10は、情報生成装置500による情報生成処理手順を示すフローチャートである。情報生成装置500は、集計処理(ステップS1001)、マップ割当数決定処理(ステップS1002)、マップ生成処理(ステップS1003)を実行する。集計処理(ステップS1001)、マップ割当数決定処理(ステップS1002)、マップ生成処理(ステップS1003)の詳細については後述する。
図11は、図10に示した集計処理(ステップS1001)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、ファイル番号iをi=1に設定し(ステップS1101)、対象ファイルFiを読み込む(ステップS1102)。そして、情報生成装置500は、対象ファイルFiの集計処理を実行する(ステップS1103)。このあと、情報生成装置500は、ファイル番号iがi>n(nは対象ファイルF1〜Fnの総数)であるか否かを判断する(ステップS1104)。
i>nでない場合(ステップS1104:No)、情報生成装置500は、iをインクリメントし(ステップS1105)、ステップS1102に戻る。一方、i>nである場合(ステップS1104:Yes)、情報生成装置500は、マップ割当数決定処理(ステップS1002)に移行して、集計処理(ステップS1001)を終了する。この集計処理(ステップS1001)によれば、対象ファイルFiごとに対象ファイルFiの集計処理(ステップS1103)を実行することができる。
図12は、図11に示した対象ファイルFiの集計処理(ステップS1103)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字を対象ファイルFiの先頭文字とし(ステップS1201)、基礎単語集計処理を実行する(ステップS1202)。このあと、情報生成装置500は、単一文字出現頻度テーブル102において対象文字の出現回数を1増加する(ステップS1203)。そして、情報生成装置500は、対象文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS1204)。
対象文字が対象ファイルFiの末尾文字でない場合(ステップS1204:No)、情報生成装置500は、対象文字を末尾方向へ1文字シフトし(ステップS1205)、ステップS1202に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合(ステップS1204:Yes)、情報生成装置500は、ステップS1104に移行して、対象ファイルFiの集計処理(ステップS1103)を終了する。この対象ファイルFiの集計処理(ステップS1103)によれば、対象ファイル群Fに存在する基礎単語および単一文字の出現頻度を集計することができる。
図13は、図12に示した基礎単語集計処理(ステップS1202)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、最長一致検索処理を実行し(ステップS1301)、最長一致した基礎単語があったか否かを判断する(ステップS1302)。最長一致した基礎単語があった場合(ステップS1302:Yes)、情報生成装置500は、基礎単語出現頻度テーブル101において最長一致した基礎単語の出現回数を1増加し(ステップS1303)、ステップS1203に移行する。
一方、最長一致した基礎単語がなかった場合(ステップS1302:No)、ステップS1203に移行する。これにより、基礎単語集計処理(ステップS1202)を終了する。この基礎単語集計処理(ステップS1202)によれば、最長一致検索処理(ステップS1301)により基礎単語を計数することができるため、文字列が長い基礎単語を優先的に計数することができる。
図14は、図13に示した最長一致検索処理(ステップS1301)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、c=1とする(ステップS1401)。cは対象文字からの文字数(対象文字含む)である。c=1の場合は、対象文字だけである。つぎに、情報生成装置500は、対象文字からc文字目までの対象文字列と前方一致する基礎単語を、基礎単語構造体を検索する(ステップS1402)。そして、情報生成装置500は、検索により基礎単語があるか否かを判断する(ステップS1403)。2分探索により基礎単語がヒットしなかった場合(ステップS1403:No)、ステップS1406に移行する。
一方、2分探索により基礎単語がヒットした場合(ステップS1403:Yes)、情報生成装置500は、ヒットした基礎単語と対象文字列とが完全一致するか否かを判断する(ステップS1404)。そして、完全一致しない場合(ステップS1404:No)、ステップS1406に移行する。一方、完全一致する場合(ステップS1404:Yes)、情報生成装置500は、最長一致候補として記憶装置に保持し(ステップS1405)、ステップS1406に移行する。
ステップS1406では、情報生成装置500は、対象文字列について2分探索が終了したか否かを判断する(ステップS1406)。具体的には、情報生成装置500は、末尾の基礎単語まで2分探索したか否かを判断する。2分探索が終了していない場合(ステップS1406:No)、情報生成装置500は、ステップS1402に移行して、2分探索が終了するまで継続する。
一方、対象文字列について2分探索が終了した場合(ステップS1406:Yes)、情報生成装置500は、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS1407)。c文字目の文字が対象ファイルFiの末尾文字である場合(ステップS1407:Yes)、ステップS1410に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合(ステップS1407:No)、情報生成装置500は、c>cmaxであるか否かを判断する(ステップS1408)。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
c>cmaxでない場合(ステップS1408:No)、情報生成装置500は、cをインクリメントして(ステップS1409)、ステップS1402に戻る。一方、c>cmaxである場合(ステップS1408:Yes)、情報生成装置500は、最長一致候補があるか否かを判断する(ステップS1410)。具体的には、情報生成装置500は、ステップS1405において1つでも最長一致候補がメモリに保持されているか否かを判断する。
最長一致候補がある場合(ステップS1410:Yes)、情報生成装置500は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定する(ステップS1411)。そして、ステップS1302に移行する。一方、ステップS1410において、最長一致候補が1つもない場合(ステップS1410:No)、ステップS1302に移行する。これにより、最長一致検索処理(ステップS1301)を終了する。この最長一致検索処理(ステップS1301)によれば、基礎単語構造体にある基礎単語の中から、完全一致した文字列の中でかつ最長の文字列を基礎単語として検索することができる。
図15は、図10に示したマップ割当数決定処理(ステップS1002)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、集計処理(ステップS1001)による基礎単語ごとの出現頻度を示す基礎単語出現頻度テーブル101と単一文字ごとの出現頻度を示す単一文字出現頻度テーブル102を出現頻度の高い順にソートする(ステップS1501)。そして、情報生成装置500は、ソート後の基礎単語出現頻度テーブル101を参照して、基礎単語の出現順位RwをRw=1とし(ステップS1502)、出現順位Rwまでの累積出現回数Arwを計数する(ステップS1503)。そして、情報生成装置500は、下記式(1)を満たすか否かを判断する(ステップS1504)。
Arw>Pw×Aw・・・(1)
Awは集計された基礎単語の総出現回数である。
上記(1)式を満たさない場合(ステップS1504:No)、情報生成装置500は、出現順位Rwをインクリメントして(ステップS1505)、ステップS1503に戻る。すなわち、上記式(1)を満たすまで出現順位Rwを下げ続ける。
そして、上記式(1)を満たした場合(ステップS1504:Yes)、情報生成装置500は、基礎単語のマップ割当数NwをNw=Rw−1とする(ステップS1506)。ここで、マップ割当数Nwとは、特定基礎単語出現マップM1のレコード数(行数)を意味する。
また、情報生成装置500は、単一文字の出現順位RcをRc=1とし(ステップS1507)、出現順位Rcまでの累積出現回数Arcを計数する(ステップS1508)。そして、情報生成装置500は、下記式(2)を満たすか否かを判断する(ステップS1509)。
Arc>Pc×Ac・・・(2)
Acは集計された単一文字の総出現回数である。
上記(2)式を満たさない場合(ステップS1509:No)、情報生成装置500は、出現順位Rcをインクリメントして(ステップS1510)、ステップS1508に戻る。すなわち、上記式(2)を満たすまで出現順位Rcを下げ続ける。
そして、上記式(2)を満たした場合(ステップS1509:Yes)、情報生成装置500は、単一文字のマップ割当数NcをNc=Rc−1とする(ステップS1511)。ここで、マップ割当数Ncとは、特定単一文字出現マップM2のレコード数(行数)を意味する。この後、マップ生成処理(ステップS1003)に移行して、マップ割当数決定処理(ステップS1002)を終了する。
このマップ割当数決定処理(ステップS1002)によれば、目標出現率Pwに応じた数の基礎単語分について特定基礎単語出現マップM1を生成することができる。したがって、すべての基礎単語についてマップ割当をおこなう必要はなく、目標出現率Pwにしたがって決められるため、マップサイズの最適化を図ることができる。
また、単一文字についても、目標出現率Pcに応じた数の単一文字分について特定単一文字出現マップM2を生成することができる。したがって、すべての単一文字についてマップ割当をおこなう必要はなく、目標出現率Pcにしたがって決められるため、マップサイズの最適化を図ることができる。
図16は、図10に示したマップ生成処理(ステップS1003)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、ファイル番号iをi=1に設定し(ステップS1601)、対象ファイルFiを読み込む(ステップS1602)。そして、情報生成装置500は、対象ファイルFiのマップ生成処理を実行する(ステップS1603)。このあと、情報生成装置500は、ファイル番号iがi>n(nは対象ファイルF1〜Fnの総数)であるか否かを判断する(ステップS1604)。
i>nでない場合(ステップS1604:No)、情報生成装置500は、iをインクリメントし(ステップS1605)、ステップS1602に戻る。一方、i>nである場合(ステップS1604:Yes)、マップ生成処理(ステップS1003)が終了する。このマップ生成処理(ステップS1003)によれば、対象ファイルFiごとに対象ファイルFiのマップ生成処理(ステップS1603)を実行することができる。
図17は、図16に示した対象ファイルFiのマップ生成処理(ステップS1603)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字を対象ファイルFiの先頭文字とし(ステップS1701)、特定基礎単語出現マップ生成処理(ステップS1702)、特定単一文字出現マップ生成処理(ステップS1703)、連接文字列出現マップ生成処理(ステップS1704)を実行する。このあと、情報生成装置500は、対象文字が対象ファイルFiの末尾文字であるか否かを判断する(ステップS1705)。
対象文字が対象ファイルFiの末尾文字でない場合(ステップS1705:No)、情報生成装置500は、対象文字を末尾方向へ1文字シフトし(ステップS1706)、ステップS1702に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合(ステップS1705:Yes)、ステップS1604に移行して、対象ファイルFiのマップ生成処理(ステップS1603)を終了する。
この対象ファイルFiのマップ生成処理(ステップS1603)によれば、特定基礎単語出現マップM1、特定単一文字出現マップM2および連接文字列出現マップM5を、対象文字を1文字ずつシフトしながら、同時並行で生成することができる。
図18は、図17で示した特定基礎単語出現マップ生成処理(ステップS1702)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字について最長一致検索処理を実行する(ステップS1801)。最長一致検索処理(ステップS1801)の詳細な処理手順は、図14に示した最長一致検索処理(ステップS1301)と同一処理内容である。
そして、情報生成装置500は、最長一致した基礎単語、すなわち、特定基礎単語があるか否かを判断する(ステップS1802)。最長一致した基礎単語がない場合(ステップS1802:No)、特定単一文字出現マップ生成処理(ステップS1703)に移行する。一方、最長一致した基礎単語がある場合(ステップS1802:Yes)、情報生成装置500は、その最長一致した基礎単語について、特定基礎単語出現マップM1が設定済みであるか否かを判断する(ステップS1803)。
設定済みである場合(ステップS1803:Yes)、ステップS1805に移行する。一方、設定済みでない場合(ステップS1803:No)、情報生成装置500は、最長一致した基礎単語について、特定基礎単語出現マップM1を設定して(ステップS1804)、ステップS1805に移行する。
具体的には、情報生成装置500は、最長一致した基礎単語を特定基礎単語として、特定基礎単語出現マップM1の特定基礎単語項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS1805では、最長一致した基礎単語についての特定基礎単語出現マップM1の対象ファイルFiのビットをONにする(ステップS1805)。
これにより、特定基礎単語出現マップ生成処理(ステップS1702)を終了し、特定単一文字出現マップ生成処理(ステップS1703)に移行する。この特定基礎単語出現マップ生成処理(ステップS1702)によれば、対象文字ごとに最長一致した基礎単語を特定基礎単語としてマップ生成することができる。
図19は、図17で示した特定単一文字出現マップ生成処理(ステップS1703)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、単一文字構造体に対して対象文字の2分探索をおこない(ステップS1901)、一致したか否かを判断する(ステップS1902)。一致する単一文字がなかった場合(ステップS1902:No)、情報生成装置500は、分割文字コード出現マップ生成処理を実行して(ステップS1903)、連接文字列出現マップ生成処理(ステップS1704)に移行する。分割文字コード出現マップ生成処理(ステップS1903)の詳細については後述する。
一方、ステップS1902において、2分探索により対象文字と一致する単一文字があった場合(ステップS1902:Yes)、情報生成装置500は、その2分探索された対象文字について、特定単一文字出現マップM2が設定済みであるか否かを判断する(ステップS1904)。設定済みである場合(ステップS1904:Yes)、ステップS1906に移行する。一方、設定済みでない場合(ステップS1904:No)、情報生成装置500は、2分探索された単一文字について、特定単一文字出現マップM2を設定して(ステップS1905)、ステップS1906に移行する。
具体的には、情報生成装置500は、2分探索された単一文字を特定単一文字として、特定単一文字出現マップM2の特定単一文字項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS1906では、情報生成装置500は、2分探索された単一文字についての特定単一文字出現マップM2の対象ファイルFiのビットをONにする(ステップS1906)。
これにより、特定単一文字出現マップ生成処理(ステップS1703)を終了し、連接文字列出現マップ生成処理(ステップS1704)に移行する。この特定単一文字出現マップ生成処理(ステップS1703)によれば、2分探索された対象文字を特定単一文字としてマップ生成することができる。
図20は、図19で示した分割文字コード出現マップ生成処理(ステップS1903)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字を分割し(ステップS2001)、対象文字から分割された上位分割文字コードについて、上位分割文字コード出現マップM3が設定済みであるか否かを判断する(ステップS2002)。設定済みである場合(ステップS2002:Yes)、ステップS2004に移行する。一方、設定済みでない場合(ステップS2002:No)、情報生成装置500は、対象文字から分割された上位分割文字コードについて、上位分割文字コード出現マップM3を設定して(ステップS2003)、ステップS2004に移行する。
具体的には、情報生成装置500は、対象文字から分割された上位分割文字コードを、上位分割文字コード出現マップM3の上位分割文字コード項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS2004では、情報生成装置500は、対象文字から分割された上位分割文字コードについての上位分割文字コード出現マップM3の対象ファイルFiのビットをONにする(ステップS2004)。
また、情報生成装置500は、対象文字から分割された下位分割文字コードについて、下位分割文字コード出現マップM4が設定済みであるか否かを判断する(ステップS2005)。設定済みである場合(ステップS2005:Yes)、ステップS2007に移行する。一方、設定済みでない場合(ステップS2005:No)、情報生成装置500は、対象文字から分割された下位分割文字コードについて、下位分割文字コード出現マップM4を設定して(ステップS2006)、ステップS2007に移行する。
具体的には、情報生成装置500は、対象文字から分割された下位分割文字コードを、下位分割文字コード出現マップM4の下位分割文字コード項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS2007では、情報生成装置500は、対象文字から分割された下位分割文字コードについての下位分割文字コード出現マップM4の対象ファイルFiのビットをONにする(ステップS2007)。
これにより、分割文字コード出現マップ生成処理(ステップS1903)を終了し、連接文字列出現マップ生成処理(ステップS1704)に移行する。この分割文字コード出現マップ生成処理(ステップS1903)によれば、目標出現率Pcに応じた順位よりも下位の単一文字については、出現頻度が低いため、OFFのビットが多数出現することとなる。
しかしながら、特定単一文字出現マップM2の生成対象外とすることで、特定単一文字出現マップM2のマップサイズの最適化を図ることができる。また、分割することで、目標出現率Pcに応じた順位よりも下位の単一文字については、上位分割文字コード出現マップM3および下位分割文字コード出現マップM4といったマップサイズが固定化されたマップに設定される。したがって、目標出現率Pcをどのような出現率に設定しても、上位分割文字コード出現マップM3および下位分割文字コード出現マップM4は変わらないため、マップサイズの増大化を防止でき、省メモリ化を図ることができる。
図21は、図17で示した連接文字列出現マップ生成処理(ステップS1704)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字に対し、連接文字列特定処理を実行する(ステップS2101)。連接文字列特定処理(ステップS2101)の詳細については後述する。情報生成装置500は、連接文字列特定処理(ステップS2101)のあと、対象文字に関する連接文字列がない場合(ステップS2102:No)、ステップS1705に移行する。
一方、対象文字に関する連接文字列がある場合(ステップS2102:Yes)、情報生成装置500は、対象文字に関する連接文字列に対し、連接文字列出現マップM5が設定済みであるか否かを判断する(ステップS2103)。設定済みである場合(ステップS2103:Yes)、ステップS2105に移行する。一方、設定済みでない場合(ステップS2103:No)、情報生成装置500は、対象文字に関する連接文字列について、連接文字列出現マップM5を設定して(ステップS2104)、ステップS2105に移行する。
具体的には、情報生成装置500は、対象文字に関する連接文字列を、連接文字列出現マップM5の連接文字列項目に登録し、そのファイル番号分のビット列をオール0にする。このあと、ステップS2105では、情報生成装置500は、対象文字に関する連接文字列についての連接文字列出現マップM5の対象ファイルFiのビットをONにする(ステップS2105)。これにより、連接文字列出現マップ生成処理(ステップS1704)を終了し、ステップS1705に移行する。この連接文字列出現マップ生成処理(ステップS1704)によれば、対象文字に関する連接文字列ごとにマップ生成することができる。
図22は、図21で示した連接文字列特定処理(ステップS2101)の詳細な処理手順を示すフローチャートである。まず、情報生成装置500は、対象文字に対し、対象文字は分割されたか否かを判断する(ステップS2201)。すなわち、情報生成装置500は、対象文字が分割文字コードか否かを判断する。分割されていない場合(ステップS2201:No)、すなわち、単一文字の場合、情報生成装置500は、1つ前の文字があるか否かを判断する(ステップS2202)。
1つ前の文字がある場合(ステップS2202:Yes)、情報生成装置500は、1つ前の文字は分割されたか否かを判断する(ステップS2203)。すなわち、情報生成装置500は、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合(ステップS2203:No)、すなわち、単一文字の場合、情報生成装置500は、対象文字の1つ前の単一文字と対象文字(単一文字)からなる文字列を、連接文字列に決定する(ステップS2204)。そして、ステップS2102に移行する。
一方、ステップS2203において、1つ前の文字が分割された場合(ステップS2203:Yes)、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報生成装置500は、1つ前の文字である下位分割文字コードと対象文字からなる文字列を、連接文字列に決定する(ステップS2205)。そして、ステップS2102に移行する。
また、ステップS2202において、1つ前の文字がない場合(ステップS2202:No)、対象文字だけとなるため、連接文字列を決定せずに、ステップS2102に移行する。
また、ステップS2201において、対象文字が分割された場合(ステップS2201:Yes)、すなわち、分割文字コードである場合、情報生成装置500は、その分割文字コードが上位分割文字コードか下位分割文字コードであるかを判断する(ステップS2206)。
上位分割文字コードである場合(ステップS2206:上位)、情報生成装置500は、1つ前の文字は分割されたか否かを判断する(ステップS2207)。すなわち、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合(ステップS2207:No)、すなわち、単一文字の場合、情報生成装置500は、対象文字の1つ前の単一文字と対象文字から分割された上位分割文字コードからなる文字列を、連接文字列に決定する(ステップS2208)。そして、ステップS2102に移行する。
一方、ステップS2207において、1つ前の文字が分割された場合(ステップS2207:Yes)、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報生成装置500は、1つ前の文字である下位分割文字コードと対象文字から分割された上位分割文字コードからなる文字列を、連接文字列に決定する(ステップS2209)。そして、ステップS2102に移行する。
また、ステップS2206において、下位分割文字コードである場合(ステップS2206:下位)、情報生成装置500は、対象文字から分割された上位分割文字コードおよび下位分割文字コードからなる文字列を、連接文字列に決定する(ステップS2210)。そして、ステップS2102に移行する。
この連接文字列特定処理(ステップS2101)によれば、対象文字が分割された場合であっても連接文字列を特定することができる。また、1文字シフトにしたがって連接文字列を特定するため、特定基礎単語出現マップM1および特定単一文字出現マップM2と同時並行で生成することができる。
このように、上述した情報生成によれば、目標出現率Pw,Pcにより、マップ生成される基礎単語数および単一文字数が制限されるため、無駄なマップ生成がなくなり、マップ生成の高速化およびマップサイズの最適化を同時に実現することができる。また、1文字シフトにより複数種類のマップ生成を同時並行で実行することができ、高精度な検索に用いる複数種類のマップ生成の効率化を図ることができる。
[情報検索プログラム/装置/方法]
つぎに、情報検索プログラム、情報検索装置、および情報検索方法について説明する。情報検索プログラム、情報検索装置、および情報検索方法では、情報生成プログラム、情報検生成索装置、および情報生成方法により生成された各種マップを用いて検索を実行する。なお、情報検索装置のハードウェア構成例は、図4に示したハードウェア構成例と同一である。また、情報検索装置は、情報生成装置500と一体型のコンピュータとしてもよく、別々のコンピュータとしてもよい。
<情報検索装置の機能的構成>
図23は、情報検索装置の機能的構成例を示すブロック図である。情報検索装置2300は、入力部2301と、分割部2302と、ファイル特定部2303と、絞込み部2304と、検索部2305と、出力部2306とを備えている。入力部2301〜出力部2306は、具体的には、たとえば、図4に示したROM402、RAM403、磁気ディスク405、光ディスク407などの記憶装置に記憶されたプログラムをCPU401に実行させることにより、または、I/F409により、その機能を実現する。
入力部2301は、検索文字列の入力を受け付ける。具体的には、たとえば、キーボード410やマウス411などの入力装置の操作入力により、検索文字列の入力を受け付ける。
分割部2302は、検索文字列を構成する単一文字のうち特定の単一文字に該当しない単一文字の文字コードを上位ビットの分割文字コードと下位ビットの分割文字コードとに分割する。具体的には、たとえば、上述した特定単一文字出現マップM2の特定単一文字項目に登録されている特定単一文字に該当しない単一文字の文字コードを、上位分割文字コードと下位分割文字コードに分割する。
ファイル特定部2303は、文字列が記述された対象ファイル群Fに存在する指定単語のうち当該指定単語に関する目標出現率に応じた降順の順位以内の特定の指定単語の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列が存在する対象ファイルを特定する。具体的には、たとえば、上述した特定基礎単語出現マップM1を参照することにより、検索文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、文字列が記述された対象ファイル群Fに存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位以内の特定の単一文字の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する各単一文字が存在する対象ファイルを特定する。具体的には、たとえば、上述した特定単一文字出現マップM2を参照することにより、検索文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、分割部2302によって分割された上位ビットの分割文字コードの存否を対象ファイルごとに示すインデックス情報を参照することにより、上位ビットの分割文字コードが存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した上位分割文字コード出現マップM3を参照することにより、分割部2302により分割された上位分割文字コードが存在する対象ファイルを特定する。
同様に、ファイル特定部2303は、分割部2302によって分割された下位ビットの分割文字コードの存否を対象ファイルごとに示すインデックス情報を参照することにより、下位ビットの分割文字コードが存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した下位分割文字コード出現マップM4を参照することにより、分割部2302により分割された下位分割文字コードが存在する対象ファイルを特定する。
また、ファイル特定部2303は、対象ファイル群Fに存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの単一文字が連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、対象ファイル群Fに存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの特定の単一文字と上位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する、特定の単一文字と上位ビットの分割文字コードとが連続する連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、下位ビットの分割文字コードとファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの特定の単一文字とが連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する、下位ビットの分割文字コードと特定の単一文字とが連続する連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
また、ファイル特定部2303は、上位ビットの分割文字コードと下位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を対象ファイルごとに示すインデックス情報を参照することにより、検索文字列を構成する、上位ビットの分割文字コードと下位ビットの分割文字コードとが連続する連接文字列が存在する対象ファイルを特定する。具体的には、たとえば、ファイル特定部2303は、上述した連接文字列出現マップM5を参照することにより、検索文字列を構成する各連接文字列が存在する対象ファイルを特定する。
絞込み部2304は、ファイル特定部2303によって特定された対象ファイル群Fの中から検索文字列を構成する各単一文字がすべて存在する対象ファイルを絞り込む。具体的には、たとえば、絞込み部2304は、特定単一文字出現マップM2において、検索文字列を構成するすべての単一文字のビットがONになっている対象ファイルを、ファイル特定部2303によって特定された対象ファイルの中から絞り込む。
また、絞込み部2304は、ファイル特定部2303によって特定された対象ファイル群Fの中から検索文字列を構成する各単一文字および各連接文字列がすべて存在する対象ファイルを絞り込む。具体的には、たとえば、絞込み部2304は、特定単一文字出現マップM2において、検索文字列を構成するすべての特定単一文字のビットがONになっており、かつ、連接文字列出現マップM5において、検索文字列を構成するすべての連接文字列のビットがONになっている対象ファイルを、ファイル特定部2303によって特定された対象ファイルの中から絞り込む。
また、絞込み部2304は、ファイル特定部2303によって特定された対象ファイル群Fの中から検索文字列を構成する各単一文字、各上位ビットの分割文字コード、各下位ビットの分割文字コード、および各連接文字列がすべて存在する対象ファイルを絞り込む。
具体的には、たとえば、絞込み部2304は、特定単一文字出現マップM2において、検索文字列を構成するすべての特定単一文字のビットがONになっており、かつ、上位分割文字コード出現マップM3において、検索文字列を構成するすべての上位分割文字コードのビットがONになっており、かつ、下位分割文字コード出現マップM4において、検索文字列を構成するすべての下位分割文字コードのビットがONになっており、かつ、連接文字列出現マップM5において、検索文字列を構成するすべての連接文字列のビットがONになっている対象ファイルを、ファイル特定部2303によって特定された対象ファイルの中から絞り込む。
検索部2305は、ファイル特定部2303によって特定された対象ファイルの中から検索文字列に関する情報を検索する。具体的には、たとえば、検索部2305は、検索文字列が特定基礎単語に該当する場合、ファイル特定部2303により、特定基礎単語出現マップM1を参照して特定された対象ファイルの中から、検索文字列に一致する文字列を検索する。また、検索部2305は、検索文字列が特定基礎単語に該当しない場合、絞込み部2304により絞り込まれた対象ファイルの中から、検索文字列に一致する文字列を検索する。
出力部2306は、検索部2305によって検索された検索結果を出力する。具体的には、たとえば、出力部2306は、検索結果をディスプレイに表示出力したり、検索結果を印刷出力したり、検索結果を音声により読み上げたり、検索結果を記憶装置に保存したり、検索結果を外部に送信したりする。
また、検索結果は、検索文字列に一致する文字列を出力したり、検索文字列に一致する文字列に関連する情報を出力する。関連する情報としては、たとえば、検索文字列に一致する文字列が辞書の見出し語である場合には、解説文を出力する。これとは逆に、検索文字列に一致する文字列が辞書の解説文内の文字列である場合には、その解説文の見出し語を出力することとしてもよい。
<情報検索処理の具体例>
つぎに、情報検索処理の具体例について説明する。
図24は、情報検索処理の具体例(その1)を示す説明図である。図24では、検索文字列を「結婚活動」とする。なお、検索文字列「結婚活動」の中には、特定基礎単語「結婚」,「活動」が含まれている。したがって、図24に示した特定基礎単語「結婚」,「活動」の特定基礎単語出現マップM1のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図24の場合は、対象ファイルF3,Fn内に、検索文字列「結婚活動」が存在する可能性が高い。
図25は、情報検索処理の具体例(その2)を示す説明図である。図25では、検索文字列を「婚活」とする。なお、検索文字列「婚活」の中には、特定単一文字「婚」,「活」が含まれている。さらに、2連接文字列「婚活」が含まれている。特定基礎単語は含まれていない。
したがって、図25に示した特定単一文字出現マップM2、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図25の場合は、対象ファイルFn内に、検索文字列「婚活」が存在する。また、対象ファイルFn内に、「婚活」を含む文字列(たとえば、「結婚活動」)が存在する可能性が高く、いわゆる泣き別れによる検索性能の劣化を防止することができる。
図26は、情報検索処理の具体例(その3)を示す説明図である。図26では、検索文字列を「脱藩」とする。なお、検索文字列「脱藩」の単一文字「脱」,「藩」は特定単一文字でないため、単一文字「脱」の上位分割文字コード「0x81」,下位分割文字コード「0x31」、単一文字「藩」の上位分割文字コード「0xE9」,下位分割文字コード「0x85」が含まれている。また、2連接文字列「0x81 0x31」,「0x31 0xE9」,「0xE9 0x85」が含まれている。なお、検索文字列「脱藩」には特定基礎単語は含まれていない。
したがって、図26に示した上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図26の場合は、対象ファイルFn内に、検索文字列「脱藩」が存在する可能性が高い。
図27は、情報検索処理の具体例(その4)を示す説明図である。図27では、検索文字列を「離脱」とする。なお、検索文字列「離脱」の単一文字「離」は特定単一文字であるが、「脱」は特定単一文字でない。したがって、検索文字列「離脱」には、特定単一文字「離」,単一文字「脱」の上位分割文字コード「0x81」,下位分割文字コード「0x31」が含まれている。また、2連接文字列「離 0x81」,「0x81 0x31」が含まれている。なお、検索文字列「離脱」には特定基礎単語は含まれていない。
したがって、図27に示した特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図27の場合は、対象ファイルFn内に、検索文字列「離脱」が存在する可能性が高い。
図28は、情報検索処理の具体例(その5)を示す説明図である。図28では、検索文字列を「脱出」とする。また、検索文字列「脱出」の単一文字「出」は特定単一文字であるが、「脱」は特定単一文字でない。したがって、検索文字列「脱出」には、特定単一文字「出」,単一文字「脱」の上位分割文字コード「0x81」,下位分割文字コード「0x31」が含まれている。また、2連接文字列「0x81 0x31」,「0x31 出」が含まれている。なお、検索文字列「脱出」には特定基礎単語は含まれていない。
したがって、図28に示した特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図28の場合は、対象ファイルFn内に、検索文字列「脱出」が存在する可能性が高い。
図29は、情報検索処理の具体例(その6)を示す説明図である。図29では、検索文字列を「is」と「a」とし、検索条件をANDとする。なお、検索文字列「is」には、特定基礎単語「is」(be動詞)が含まれており、検索文字列「a」には特定基礎単語「a」(不定冠詞)が含まれている。この検索文字列では、いわゆるis a構文の文章を検索することができる。したがって、図29に示した「is」と「a」の特定基礎単語出現マップM1のAND演算をおこなう。このAND演算によるAND結果でON(1)になったファイル番号の対象ファイルが特定される。図29の場合は、対象ファイルF3,Fn内に、検索文字列「is」および「a」が存在する。
図30は、情報検索処理の具体例(その7)を示す説明図である。図30では、検索文字列を「tern」とする。なお、検索文字列「tern」には、2連接文字列「te」「er」「rn」が含まれている。したがって、図30に示した2連接文字列マップM5でON(1)になったファイル番号の対象ファイルが特定される。図30の場合は、対象ファイルFn内に、検索文字列「tern」が存在する。
<情報検索処理手順>
図31は、情報検索装置2300による情報検索処理手順を示すフローチャートである。まず、情報検索装置2300は、入力部2301により、検索文字列群(1つの検索文字列も含む)が入力されるのを待ち受け(ステップS3101:No)、検索文字列群が入力された場合(ステップS3101:Yes)、情報検索装置2300は、未選択の検索文字列があるか否かを判断する(ステップS3102)。未選択の検索文字列がある場合(ステップS3102:Yes)、情報検索装置2300は、未選択の検索文字列を1つ選択し(ステップS3103)、ファイル特定処理を実行して(ステップS3104)、ステップS3102に戻る。
一方、ステップS3102において、未選択の検索文字列がない場合(ステップS3102:No)、情報検索装置2300は、検索条件を判断する(ステップS3105)。検索条件がANDの場合(ステップS3105:AND)、情報検索装置2300は、検索文字列ごとに特定された対象ファイルをAND演算で絞り込み、検索対象ファイルに設定し(ステップS3106)、ステップS3108に移行する。一方、検索条件がORである場合(ステップS3105:OR)、情報検索装置2300は、検索文字列ごとに特定された対象ファイルをOR演算で絞り込み、検索対象ファイルに設定し(ステップS3107)、ステップS3108に移行する。
ステップS3108では、検索対象ファイルごとに検索条件にしたがって検索する(ステップS3108)。そして、検索結果を出力する出力処理を実行して(ステップS3109)、情報検索処理を終了する。
図32−1は、図31に示したファイル特定処理(ステップS3104)の詳細な処理手順を示すフローチャート(その1)である。まず、情報検索装置2300は、対象文字を検索文字列の先頭文字に設定し(ステップS3201)、検索文字列の最長一致検索処理を実行する(ステップS3202)。検索文字列の最長一致検索処理(ステップS3202)の詳細について後述する。
つぎに、情報検索装置2300は、検索文字列の最長一致検索処理(ステップS3202)により、最長一致した基礎単語があるか否かを判断する(ステップS3203)。最長一致した基礎単語がない場合(ステップS3203:No)、図32−2のステップS3211に移行する。一方、最長一致した基礎単語がある場合(ステップS3203:Yes)、情報検索装置2300は、特定基礎単語出現マップM1から最長一致した基礎単語を含む対象ファイルを特定する(ステップS3204)。具体的には、情報検索装置2300は、最長一致した基礎単語、すなわち、特定基礎単語についてビットがONになっている対象ファイルを特定する。
このあと、情報検索装置2300は、対象文字を、最長一致した基礎単語の文字列分シフトする(ステップS3205)。そして、情報検索装置2300は、シフト後の対象文字があるか否かを判断する(ステップS3206)。対象文字がある場合(ステップS3206:Yes)、ステップS3202に戻る。一方、対象文字がない場合(ステップS3206:No)、情報検索装置2300は、絞込み部2304により、ステップS3206までで特定された対象ファイルのAND演算により絞り込みをおこなう(ステップS3207)。そして、ステップS3102に戻る。
図32−2は、図31に示したファイル特定処理(ステップS3104)の詳細な処理手順を示すフローチャート(その2)である。図32−1のステップS3203において、最長一致した基礎単語がない場合(ステップS3203:No)、図32−2において、情報検索装置2300は、対象文字が特定単一文字であるか否かを判断する(ステップS3211)。具体的には、情報検索装置2300は、特定単一文字出現マップM2における特定単一文字項目に登録されているか否かを判断する。
特定単一文字である場合(ステップS3211:Yes)、情報検索装置2300は、特定単一文字出現マップM2から対象文字を含む対象ファイルを特定する(ステップS3212)。すなわち、情報検索装置2300は、対象文字についてビットがONになっている対象ファイルを特定して、ステップS3216に移行する。
一方、ステップS3211において、対象文字が特定単一文字でない場合(ステップS3211:No)、情報検索装置2300は、対象文字列を、上位分割文字コードと下位分割文字コードとに分割する(ステップS3213)。そして、情報検索装置2300は、上位分割文字コード出現マップM3から特定単一文字の上位分割文字コードを含む対象ファイルを特定する(ステップS3214)。具体的には、情報検索装置2300は、上位分割文字コードについてビットがONになっている対象ファイルを特定する。同様に、情報検索装置2300は、下位分割文字コード出現マップM4から特定単一文字の下位分割文字コードを含む対象ファイルを特定する(ステップS3215)。具体的には、情報検索装置2300は、下位分割文字コードについてビットがONになっている対象ファイルを特定する。そして、ステップS3216に移行する。
ステップS3216では、情報検索装置2300は、連接文字列出現マップM5によるファイル特定処理を実行する(ステップS3216)。連接文字列出現マップM5によるファイル特定処理(ステップS3216)の詳細については後述する。このあと、情報検索装置2300は、対象文字を1文字分シフトして(ステップS3217)、図32−1のステップS3206に移行する。
このファイル特定処理(ステップS3104)によれば、検索文字列が特定基礎単語を含んでいれば、特定基礎単語出現マップM1により対象ファイルを絞り込むことができ、そうでない場合は、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5のAND演算により絞り込むことで対象ファイルを特定することができる。
図33は、図32−2に示した最長一致検索処理(ステップS3202)の詳細な処理手順を示すフローチャートである。まず、情報検索装置2300は、c=1とする(ステップS3301)。cは対象文字からの文字数(対象文字含む)である。c=1の場合は、対象文字だけである。つぎに、情報検索装置2300は、対象文字からc文字目までの対象文字列と前方一致する基礎単語を2分探索する(ステップS3302)。ここで探索対象となるのは、特定基礎単語出現マップM1の特定基礎単語項目に登録されている特定基礎単語群である。
そして、情報検索装置2300は、2分探索により特定基礎単語があるか否かを判断する(ステップS3303)。2分探索により特定基礎単語がヒットしなかった場合(ステップS3303:No)、ステップS3306に移行する。
一方、2分探索により特定基礎単語がヒットした場合(ステップS3303:Yes)、情報検索装置2300は、ヒットした特定基礎単語と対象文字列とが完全一致するか否かを判断する(ステップS3304)。そして、完全一致しない場合(ステップS3304:No)、ステップS3306に移行する。一方、完全一致する場合(ステップS3304:Yes)、情報検索装置2300は、最長一致候補として記憶装置に保持し(ステップS3305)、ステップS3306に移行する。
ステップS3306では、情報検索装置2300は、対象文字列について2分探索が終了したか否かを判断する(ステップS3306)。具体的には、情報検索装置2300は、末尾の特定基礎単語まで2分探索したか否かを判断する。2分探索が終了していない場合(ステップS3306:No)、ステップS3302に移行して、2分探索が終了するまで継続する。
一方、対象文字列について2分探索が終了した場合(ステップS3306:Yes)、情報検索装置2300は、c文字目の文字が検索文字列の末尾文字であるか否かを判断する(ステップS3307)。c文字目の文字が検索文字列の末尾文字である場合(ステップS3307:Yes)、ステップS3310に移行する。一方、c文字目の文字が検索文字列の末尾文字でない場合(ステップS3307:No)、情報検索装置2300は、c>cmaxであるか否かを判断する(ステップS3308)。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
c>cmaxでない場合(ステップS3308:No)、cをインクリメントして(ステップS3309)、ステップS3302に戻る。一方、c>cmaxである場合(ステップS3308:Yes)、情報検索装置2300は、最長一致候補があるか否かを判断する(ステップS3310)。具体的には、情報検索装置2300は、ステップS3305において1つでも最長一致候補が記憶装置に保持されているか否かを判断する。
最長一致候補がある場合(ステップS3310:Yes)、情報検索装置2300は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定する(ステップS3311)。そして、ステップS3203に移行する。一方、ステップS3310において、最長一致候補が1つもない場合(ステップS3310:No)、ステップS3203に移行する。
これにより、最長一致検索処理(ステップS3202)を終了する。この最長一致検索処理(ステップS3202)によれば、特定基礎単語出現マップM1に登録された特定基礎単語群の中から、完全一致した文字列の中でかつ最長の文字列を特定基礎単語として検索することができる。
図34は、図32−2で示した連接文字列出現マップM5によるファイル特定処理(ステップS3216)の詳細な処理手順を示すフローチャートである。まず、情報検索装置2300は、対象文字を、検索文字列の先頭文字にする(ステップS3401)。ここでの検索文字列は、分割文字コードに分割されていれば、分割文字コードも1文字として扱う。
つぎに、情報検索装置2300は、対象文字が分割文字コードであるか否かを判断する(ステップS3402)。分割文字コードでない場合(ステップS3402:No)、対象文字の1つ前の文字があるか否かを判断する(ステップS3403)。たとえば、対象文字が下位分割文字コードである場合は、1つ前の文字は上位分割文字コードとなる。また、対象文字が特定単一文字または上位分割文字コードである場合は、1つ前で分割されていれば、1つ前の文字は下位分割文字コードとなる。
1つ前の文字がある場合(ステップS3403:Yes)、情報検索装置2300は、1つ前の文字が分割文字コードであるか否かを判断する(ステップS3404)。分割文字コードでない場合(ステップS3404:No)、2グラムの特定単一文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3405)。具体的には、情報検索装置2300は、2グラムの特定単一文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3404において、1つ前の文字が分割文字コードである場合(ステップS3404:Yes)、情報検索装置2300は、分割文字コードと特定単一文字からなる連接文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3406)。具体的には、分割文字コードと特定単一文字からなる連接文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3403において、対象文字の1つ前の文字がない場合(ステップS3403:No)、対象ファイルを特定せずに、ステップS3217に移行する。
一方、ステップS3402において、対象文字が分割文字コードである場合(ステップS3402:Yes)、情報検索装置2300は、対象文字の1つ前の文字の文字があるか否かを判断する(ステップS3407)。
1つ前の文字がある場合(ステップS3407:Yes)、情報検索装置2300は、1つ前の文字が分割文字コードであるか否かを判断する(ステップS3408)。分割文字コードでない場合(ステップS3408:No)、情報検索装置2300は、特定単一文字と上位分割文字コードからなる連接文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3409)。具体的には、情報検索装置2300は、特定単一文字と上位分割文字コードからなる連接文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3408において、1つ前の文字が分割文字コードである場合(ステップS3408:Yes)、情報検索装置2300は、2連接の分割文字コードからなる連接文字列の連接文字列出現マップM5から対象ファイルを特定する(ステップS3410)。具体的には、情報検索装置2300は、2連接の分割文字コードからなる連接文字列についてビットがONになっている対象ファイルを特定して、ステップS3217に移行する。
一方、ステップS3407において、対象文字の1つ前の文字がない場合(ステップS3407:No)、対象ファイルを特定せずに、ステップS3217に移行する。
この連接文字列出現マップM5によるファイル特定処理(ステップS3216)によれば、特定単一文字のみからなる連接文字列、分割文字コードのみからなる連接文字列、特定単一文字と分割文字コードが混在する連接文字列が検索文字列に存在する対象ファイルを特定することができる。
このように、上述した情報検索によれば、検索文字列に特定基礎単語があれば、特定基礎単語出現マップM1から対象ファイルを特定することができるため、高速な検索処理を実現することができる。また、検索文字列に特定基礎単語がない場合でも、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5を用いることにより、対象ファイルの効率的な絞り込みをおこなうことができる。たとえば、「婚活」といった新しい短縮語については,特定基礎単語として登録されていないため、このような場合に、対象ファイルの絞り込みをおこなうことができる。
<マップ突き出し>
つぎに、マップ突き出しについて説明する。マップ突き出しとは、対象ファイル群Fに対し、あらたに対象ファイルが追加される場合がある。このような場合、追加された対象ファイルについても、図1〜図3に示したように、(A)〜(D)のフェーズを実行する。これにより、特定基礎単語出現マップM1、特定単一文字出現マップM2、上位分割文字コード出現マップM3、下位分割文字コード出現マップM4、連接文字列出現マップM5において、追加された対象ファイルについて、ビット行を生成する処理を、マップ突き出しという。
図35は、マップ突き出しを示す説明図である。図35では、特定基礎単語出現マップM1を例に挙げて説明する。(A)では、特定基礎単語群および初期の対象ファイル群Fである対象ファイルF1〜FnからなるビットマップをセグメントS1とする。
追加された対象ファイルの数が所定数貯まった場合は、あらたなセグメントを設定する。図35では、一例として、セグメントS1と同数のn個の対象ファイルが追加された場合に、あらたなセグメントとしてセグメントS2とする。なお、セグメントS1と同数である必要はない。(B)では、セグメントS2が設定された状態を示す。
(C)は、セグメントS2の設定後に、あらたに対象ファイルが追加され、その追加された対象ファイルについてビット行が生成された状態を示す。(D)このようにして、特定基礎単語出現マップM1が、特定基礎単語群およびセグメントS1〜SNからなるビットマップを生成することができる。
図36は、対象ファイルの追加により複数個にセグメント化された出現マップ群を用いた場合の情報検索処理手順を示すフローチャートである。まず、情報検索装置2300は、セグメント番号jをj=1とし(ステップS3601)、セグメントSjを用いた情報検索処理を実行する(ステップS3602)。この情報検索処理(ステップS3602)では、図31に示したステップS3101〜ステップS3108を実行する。すなわち、図32−1および図32−2に示したファイル特定処理(ステップS3104)、図33に示した最長一致検索処理(ステップS3202)も実行する。ただし、図32−2については、一部異なる処理があるため、図37で説明する。
そして、情報検索装置2300は、j>Nであるか否かを判断する(ステップS3603)。j>Nでない場合(ステップS3603:No)、情報検索装置2300は、jをインクリメントしてつぎのセグメントSjを指定して(ステップS3604)、ステップS3602に戻る。一方、ステップS3603において、j>Nである場合(ステップS3603:Yes)、情報検索装置2300は、出力部2306による出力処理を実行する(ステップS3605)。ここでは、セグメントS1〜SNを用いた各検索結果を出力することとなる。
図37は、図36に示した情報検索処理(ステップS3602)における、ファイル特定処理(ステップS3104)の一部を示すフローチャートである。なお、図37では、図32−2と同一ステップには同一ステップ番号を付し、その説明を省略する。図37において、ステップS3212により、ファイル特定できたセグメントSj内の対象ファイルがあるか否かを判断する(ステップS3700)。
ファイル特定できたセグメントSj内の対象ファイルがある場合(ステップS3700:Yes)、ステップS3216に移行する。一方、ファイル特定できたセグメントSj内の対象ファイルがない場合(ステップS3700:No)、ステップS3603に移行する。すなわち、対象文字である特定単一文字を含む対象ファイルがセグメントSjに存在しない場合、後続の単一文字を対象文字にしてファイル特定できても、ステップS3207のファイル絞り込みをおこなっても、対象ファイルが得られない。
したがって、1文字でも対象ファイルが特定できなかった場合は、情報検索装置2300は、ステップS3603に移行して、つぎのセグメントSjを指定することで、無駄な検索を省略することができ、検索速度の高速化を図ることができる。
以上説明したように、本情報生成プログラム、情報生成装置、および情報生成方法によれば、基礎単語や文字の存否を示すインデックス情報の生成の高速化およびインデックス情報のサイズの最適化を図ることができる。また、本情報検索プログラム、情報検索装置、および情報検索方法によれば、検索ノイズの低減化を図ることができる。
なお、本実施の形態で説明した方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報生成プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報生成プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)文字列が記述された対象ファイル群の中から指定単語ごとの出現頻度を集計する集計工程と、
前記集計工程によって集計された指定単語ごとの出現頻度に基づいて、前記指定単語に関する目標出現率までの降順の順位を特定する順位特定工程と、
前記対象ファイル群の中から選ばれた対象ファイルの中から前記順位特定工程によって特定された降順の順位までの特定の指定単語を検出する検出工程と、
前記検出工程によって検出された特定の指定単語ごとに、当該特定の指定単語の存否を前記対象ファイルごとに示すインデックス情報を生成する生成工程と、
をコンピュータに実行させることを特徴とする情報生成プログラム。
(付記2)前記検出工程は、
前記対象ファイル内の対象文字を先頭文字とする最長一致検索により前記特定の指定単語を検出することを特徴とする付記1に記載の情報生成プログラム。
(付記3)文字列が記述された対象ファイル群の中から単一文字ごとの出現頻度を集計する集計工程と、
前記集計工程によって集計された単一文字の出現頻度に基づいて、前記単一文字に関する目標出現率までの降順の順位を特定する順位特定工程と、
前記対象ファイル群の中から選ばれた対象ファイルの中から前記順位特定工程によって特定された降順の順位までの特定の単一文字を検出する検出工程と、
前記検出工程によって検出された特定の単一文字ごとに、当該特定の単一文字の存否を前記対象ファイルごとに示すインデックス情報を生成する生成工程と、
をコンピュータに実行させることを特徴とする情報生成プログラム。
(付記4)前記集計工程は、
前記対象ファイル群の中から単一文字の出現頻度を集計し、
前記順位特定工程は、
前記集計工程によって集計された単一文字の出現頻度に基づいて、前記単一文字に関する目標出現率までの降順の順位を特定し、
前記検出工程は、
前記対象ファイル群の中から選ばれた対象ファイルの中から前記順位特定工程によって特定された降順の順位までの特定の単一文字を検出し、
前記生成工程は、
前記順位特定工程によって特定された降順の順位までの特定の単一文字ごとに、当該特定の単一文字の存否を前記対象ファイルごとに示すインデックス情報を生成することを特徴とする付記1または2に記載の情報生成プログラム。
(付記5)前記順位特定工程によって特定された降順の順位よりも下位の順位となる単一文字の文字コードを上位ビットの分割文字コードと下位ビットの分割文字コードとに分割する分割工程を前記コンピュータに実行させ、
前記生成工程は、
前記分割工程によって分割された上位ビットの分割文字コードごとに、当該分割文字コードの存否を前記対象ファイルごとに示すインデックス情報と、前記分割工程によって分割された下位ビットの分割文字コードごとに、当該分割文字コードの存否を前記対象ファイルごとに示すインデックス情報とを生成することを特徴とする付記3または4に記載の情報生成プログラム。
(付記6)前記生成工程は、
前記順位特定工程によって特定された降順の順位までの特定の単一文字が連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を生成することを特徴とする付記3または4に記載の情報生成プログラム。
(付記7)前記生成工程は、
前記順位特定工程によって特定された降順の順位までの特定の単一文字と前記上位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を生成することを特徴とする付記5または6に記載の情報生成プログラム。
(付記8)前記生成工程は、
前記下位ビットの分割文字コードと前記順位特定工程によって特定された降順の順位までの特定の単一文字とが連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を生成することを特徴とする付記5〜7のいずれか一つに記載の情報生成プログラム。
(付記9)前記生成工程は、
前記上位ビットの分割文字コードと前記下位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を生成することを特徴とする付記5〜8のいずれか一つに記載の情報生成プログラム。
(付記10)検索文字列の入力を受け付ける入力工程と、
文字列が記述された対象ファイル群に存在する指定単語のうち当該指定単語に関する目標出現率に応じた降順の順位以内の特定の指定単語の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列が存在する対象ファイルを特定するファイル特定工程と、
前記ファイル特定工程によって特定された対象ファイルの中から前記検索文字列に関する情報を検索する検索工程と、
前記検索工程によって検索された検索結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする情報検索プログラム。
(付記11)検索文字列の入力を受け付ける入力工程と、
文字列が記述された対象ファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位以内の特定の単一文字の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列を構成する各単一文字が存在する対象ファイルを特定するファイル特定工程と、
前記ファイル特定工程によって特定された対象ファイル群の中から前記検索文字列を構成する各単一文字がすべて存在する対象ファイルを絞り込む絞込み工程と、
前記絞込み工程によって絞り込まれた対象ファイルの中から前記検索文字列に関する情報を検索する検索工程と、
前記検索工程によって検索された検索結果を出力する出力工程と、
をコンピュータに実行させることを特徴とする情報検索プログラム。
(付記12)前記ファイル特定工程は、
前記特定の指定単語が存在する対象ファイルが存在しない場合、前記対象ファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位以内の特定の単一文字の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列を構成する各単一文字が存在する対象ファイルを特定することを特徴とする付記10に記載の情報検索プログラム。
(付記13)前記検索文字列を構成する単一文字のうち前記特定の単一文字に該当しない単一文字の文字コードを上位ビットの分割文字コードと下位ビットの分割文字コードとに分割する分割工程を前記コンピュータに実行させ、
前記ファイル特定工程は、
前記分割工程によって分割された上位ビットの分割文字コードの存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記上位ビットの分割文字コードが存在する対象ファイルを特定し、前記分割工程によって分割された下位ビットの分割文字コードの存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記下位ビットの分割文字コードが存在する対象ファイルを特定することを特徴とする付記12に記載の情報検索プログラム。
(付記14)前記ファイル特定工程は、
前記対象ファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの単一文字が連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列を構成する各連接文字列が存在する対象ファイルを特定し、
前記絞込み工程は、
前記ファイル特定工程によって特定された対象ファイル群の中から前記検索文字列を構成する前記各単一文字および前記各連接文字列がすべて存在する対象ファイルを絞り込むことを特徴とする付記12に記載の情報検索プログラム。
(付記15)前記ファイル特定工程は、
前記対象ファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの特定の単一文字と前記上位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列を構成する、前記特定の単一文字と前記上位ビットの分割文字コードとが連続する連接文字列が存在する対象ファイルを特定し、
前記下位ビットの分割文字コードと前記対象ファイル群に存在する単一文字のうち当該単一文字に関する目標出現率に応じた降順の順位までの特定の単一文字とが連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列を構成する、前記下位ビットの分割文字コードと前記特定の単一文字とが連続する連接文字列が存在する対象ファイルを特定し、
前記上位ビットの分割文字コードと前記下位ビットの分割文字コードとが連続する連接文字列ごとに、当該連接文字列の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列を構成する、前記上位ビットの分割文字コードと前記下位ビットの分割文字コードとが連続する連接文字列が存在する対象ファイルを特定し、
前記絞込み工程は、
前記ファイル特定工程によって特定された対象ファイル群の中から前記検索文字列を構成する前記各単一文字、前記各上位ビットの分割文字コード、前記各下位ビットの分割文字コード、および前記各連接文字列がすべて存在する対象ファイルを絞り込むことを特徴とする付記13に記載の情報検索プログラム。
(付記16)文字列が記述された対象ファイル群の中から指定単語ごとの出現頻度を集計する集計手段と、
前記集計手段によって集計された指定単語ごとの出現頻度に基づいて、前記指定単語に関する目標出現率までの降順の順位を特定する順位特定手段と、
前記対象ファイル群の中から選ばれた対象ファイルの中から前記順位特定手段によって特定された降順の順位までの特定の指定単語を検出する検出手段と、
前記検出手段によって検出された特定の指定単語ごとに、当該特定の指定単語の存否を前記対象ファイルごとに示すインデックス情報を生成する生成手段と、
を備えることを特徴とする情報生成装置。
(付記17)検索文字列の入力を受け付ける入力手段と、
文字列が記述された対象ファイル群に存在する指定単語のうち当該指定単語に関する目標出現率に応じた降順の順位以内の特定の指定単語の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列が存在する対象ファイルを特定するファイル特定手段と、
前記ファイル特定手段によって特定された対象ファイルの中から前記検索文字列に関する情報を検索する検索手段と、
前記検索手段によって検索された検索結果を出力する出力手段と、
を備えることを特徴とする情報検索装置。
(付記18)文字列が記述された対象ファイル群の中から指定単語ごとの出現頻度を集計する集計工程と、
前記集計工程によって集計された指定単語ごとの出現頻度に基づいて、前記指定単語に関する目標出現率までの降順の順位を特定する順位特定工程と、
前記対象ファイル群の中から選ばれた対象ファイルの中から前記順位特定工程によって特定された降順の順位までの特定の指定単語を検出する検出工程と、
前記検出工程によって検出された特定の指定単語ごとに、当該特定の指定単語の存否を前記対象ファイルごとに示すインデックス情報を生成する生成工程と、
をコンピュータが実行することを特徴とする情報生成方法。
(付記19)検索文字列の入力を受け付ける入力工程と、
文字列が記述された対象ファイル群に存在する指定単語のうち当該指定単語に関する目標出現率に応じた降順の順位以内の特定の指定単語の存否を前記対象ファイルごとに示すインデックス情報を参照することにより、前記検索文字列が存在する対象ファイルを特定するファイル特定工程と、
前記ファイル特定工程によって特定された対象ファイルの中から前記検索文字列に関する情報を検索する検索工程と、
前記検索工程によって検索された検索結果を出力する出力工程と、
をコンピュータが実行することを特徴とする情報検索方法。