説明

コード列検索装置、検索方法及びプログラム

【課題】構造を有するコード列の構造に基づいた検索を行うことができ、従来よりも短時間で作成することのできる索引のデータ構造を求め、それを用いたコード列検索手法を提供する。
【解決手段】コード毎にそのコードIDの範囲を格納したコード別ID範囲表と各コードIDの次に位置するコードIDである次コードIDを格納したID関係表を作成し、データを表すコードあるいはコード列とコード区切コードからなる第1の検索コード列により、検索対象のコード列から部分コード列を検索する。次にコード区切コードからなる第2の検索コード列により、検索された部分コード列からコード区切コードで区切られたコードあるいはコード列を求める。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ビット列で構成される文字コードあるいは文字コード列を検索する文字列検索のように、コンピュータにより、ビット列で構成されるコードあるいはコード列を検索するコード列検索、特に構造を有するコード列の検索に関するものである。
【背景技術】
【0002】
近年、ビジネス文書を作成するためにワードプロセッサを使用することが通例となり、またインターネットが普及したことにより、ビット列からなる文字コードを用いた、コンピュータで処理可能な電子文書が世の中に大量に存在するようになっている。そのため、これら大量の電子文書の中からコンピュータを利用して必要なものを探し出すために、各種の文字列検索手法が開発されている。
【0003】
これらの文字列検索手法においては、高速な検索を実現するために予め索引を作成することが一般的である。索引としては、例えば、文書中の単語を抽出し、単語毎にそれの含まれている文書名を対応付けた転置インデックスがよく知られている。この転置インデックスはサイズが比較的小さく、検索が高速であり、インデックスの構成も簡単であるという特徴を持っている。しかしながら、単語の抽出が難しい言語もある。また、複数の単語の組み合わせの検索を行おうとすると、文書中の単語位置を突き合わせる処理が必要になるという欠点も存在する。そして、一文中の任意の文字列を検索することも難しい。
【0004】
そこで、任意の文字列を検索可能とする接尾辞配列という索引が開発されている。下記特許文献1及び非特許文献1には、接尾辞配列とそれを用いた検索手法が開示されている。
図1Aは、上述の接尾辞配列に関する従来の検索方法の例を説明するものである。図1Aには、検索対象の文字列10が例示されている。文字列10は、アルファベットの文字A、B、C、Eと区切り文字$で構成されている。文字Aは文字列10の文字位置1、4、7に位置している。文字Bは文字列10の文字位置2、5に位置している。文字Cは文字列10の文字位置6、8に位置している。文字Eは文字列10の文字位置3に位置している。区切り文字$は、文字列10の末尾の位置である文字位置9に位置している。
【0005】
さらに図1Aには、文字列10に対応する、文字位置順の接尾辞20、辞書順の接尾辞20a及び接尾辞配列30が記載されている。
文字列10は、文字位置順の接尾辞20に示すようにその部分文字列として9個の接尾辞を持つと考えることができる。各接尾辞の先頭文字の文字位置順に接尾辞を並べた文字位置順の接尾辞20を辞書順にソートすることにより、辞書順の接尾辞20aが得られる。このとき、辞書順に並べ替えた接尾辞の先頭文字の文字位置を配列に格納することにより、接尾辞配列30が得られる。この接尾辞配列により、検索文字列のパターンと一致する検索対象文字列中の部分文字列の先頭の文字位置を求めることができる。
【0006】
図1Bに示すのは、従来の検索方法例の圧縮接尾辞配列による文字列検索の概念を説明するものであり、検索文字列40と接尾辞配列30に対応する圧縮接尾辞配列(概念図)50が示されている。圧縮接尾辞配列(概念図)50の配列番号(i)には、次の配列番号(Ψ)が格納されている。次の配列番号(Ψ)は、接尾辞配列30の配列番号(i)に格納された文字位置に1を加えた文字位置が格納された接尾辞配列30の配列番号である。
【0007】
配列に格納するものを文字位置から次の配列番号(Ψ)に変更することにより、文字毎に格納される値は図に示すように昇順になる。したがって、各配列要素に格納する値は次の配列番号(Ψ)そのものではなく1つ前の配列要素に格納された値の増分とすることができるのでビット幅を狭くすることができ、情報量を圧縮することができる。
【0008】
検索の概念については、例示された検索文字列40の各文字から圧縮接尾辞配列(概念図)50の配列番号(i)への点線の矢印と配列番号(i)の太字で示す3、6、9と次の配列番号(Ψ)の太字で示す6、9との間の矢印の検索ステップで示している。すなわち、検索文字列40の先頭の文字Aに対応する配列番号から例えば3が選ばれ、配列番号3の次の配列番号6が検索文字列40の2番目の文字Bに対応する配列番号であり、配列番号6の次の配列番号9が検索文字列40の3番目の文字Eに対応する配列番号であることにより、検索対象の文字列10が検索文字列40による検索でヒットすることがわかる。
【0009】
また、電子化された文書の中には、表形式のデータのように、構造を有する文書も存在する。下記特許文献2には、一般的な表計算ソフトウェアで作成した一覧表形式のデータを、コンピュータに対する負荷を大きくすることなく高速に検索することを課題とする技術が開示されている。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特許第3、672、242号公報
【特許文献2】特開2003−114901号公報
【非特許文献】
【0011】
【非特許文献1】定兼、「圧縮接尾辞に関する考察」、電子情報通信学会技術研究報告(2000-7-19)Vol.100,No.226,p49-56
【発明の概要】
【発明が解決しようとする課題】
【0012】
本発明の目的は、表形式データのように構造を有するデータをコード列に展開して検索する手法を提供することである。表形式データのある特定の列(フィールド)の値を指定し、特定の列(フィールド)に格納されたデータがその値を有する行(レコード)の他の列(フィールド)のデータ値を求める検索がしばしば必要になる。本発明の目的は、表形式データのように構造を有するデータをコード列に展開して、このようなタイプの検索を可能とする手法を提供することである。
【0013】
表の各セルに格納されたデータを表すコードあるいはコード列とセルの位置を表すコードを組み合わせることにより、2次元の表形式データを1次元のコード列に展開することができる。そして、例えばコード列検索に圧縮接尾辞配列を用いることにより、任意のコード列の検索を行うことができ、配列の容量も削減することができる。しかし、圧縮接尾辞配列を作成するには、その前に検索対象のコード列から接尾辞を作成しその接尾辞を辞書順にソートして接尾辞配列を作成する必要があり、検索対象のコード列から圧縮接尾辞配列を作成する処理時間が大きなものとなる。
【0014】
そこで本発明の解決しようとする課題は、構造を有するデータを展開したコード列について上述のタイプの検索を行うことができ、その作成時間を従来のものよりも短縮することができる索引データの構造を求め、それを用いたコード列検索手法を提供することである。
【課題を解決するための手段】
【0015】
本発明の構造を有するデータを展開したコード列、すなわち構造を有するコード列は、特定の種類のコードがコード列中に規則的に存在するコード列である。例えば、表形式データであれば、表の各行を、各列のデータを表すコードあるいはコード列とその列を表すコード、及び各行の終端あるいは改行を表すコードからなるコード列(以下、部分コード列という。)に展開することができる。つまり、表形式データは、各行に対応する部分コード列が連結した構造を有するコード列(以下、単にコード列という場合がある。)に展開される。
なお、より一般的には、部分コード列は、改行コードに限らずコード列中のある特定のコード(部分コード列区切コード)により区切られた部分である。また、部分コード列のデータを表すコードあるいはコード列は、特定のコード(コード区切コード)で区切られている。
【0016】
本発明によれば、まず、検索対象であるコード列に位置する全ての各コードを一意に識別するコードIDが、異なるコードの値(以下、誤解の恐れのない場合には、単にコードという場合がある。また、逆に異なるコード値であることを強調して、コード種別ということもある。)間でコードIDの範囲が重ならないように、上記全ての各コードに付与されるものとする。例えばコード毎にコード列中に出現する順に昇順のコードIDを付与することを、コード種別毎に最初のコードIDの値をそれまで付与されたコードIDより大きい値として繰り返すことにより、上記コードIDの付与を実現することができる。
【0017】
そして本発明によれば、コード毎にそのコードIDの範囲を格納したコード別ID範囲表と、部分コード列区切コードを除いた各コードの次に位置するコードのコードIDである次コードIDを各コードのコードIDに対応させて格納し、部分コード列区切コードのコードIDに対応させて部分コード列の先頭のコードのコードIDを次コードIDとして格納したID関係表を作成し、コード別ID範囲表とID関係表を用いて、コード列の構造に基づいたコード列検索を実施する。
【0018】
本発明のコード列検索によれば、まずデータを表すコード(以下、データコードということがある。)あるいはコード列とコード区切コードからなる第1の検索コード列により、検索対象のコード列から第1の検索コード列を含む部分コード列を検索する。次にコード区切コードからなる第2の検索コード列により、検索された部分コード列からコード区切コードで区切られたデータコードあるいはデータコード列を求める。
【0019】
本発明の、第1の検索コード列による検索対象コード列のコード列検索によれば、検索対象コード列のコード別ID範囲表から検索コード列を構成するコードのコードIDの範囲を読み出し、読み出された検索コード列の先頭のコードのコードID範囲に含まれるコードIDに対応して格納された次コードIDをID関係表から読み出すとともに、該次コードIDに対応して格納された次コードIDを順次ID関係表から読み出し、ID関係表から読み出した次コードIDがコード別ID範囲読出表から読み出した次のコードのコードIDの範囲に含まれるか照合する。
【0020】
第1の検索コード列の末尾のコードまで上記照合が成功すると、第1の検索コード列と同一のコード列を含む部分コード列が存在するので、その部分コード列から、第2の検索コード列によりコード区切コードで区切られたコードあるいはコード列を求め、第2の検索コード列に適合する検索結果の出力コード列として出力する。
【発明の効果】
【0021】
本発明によれば、簡単な構造のコード別ID範囲表とID関係表を用いて検索を実施することができるので、接尾辞配列を作成する必要がなく、コンピュータの索引作成の処理負担を小さくすることができる。また、第1の検索コード列で指定されたコード区切コードで区切られたコードあるいはコード列を含む部分コード列から、第2の検索コード列で指定されたコード区切コードで区切られたコードあるいはコード列を求めることができる。
【図面の簡単な説明】
【0022】
【図1A】接尾辞配列に関する従来の検索方法の例を説明する図である。
【図1B】従来の検索方法例の圧縮接尾辞配列を説明する図である。
【図2A】本発明の一実施形態における構造を有するコード列とその部分コード列の概念を説明する図である。
【図2B】本発明の一実施形態における索引データの構造例を説明する図である。
【図2C】本発明の一実施形態における部分コード列検索の概念を説明する図である。
【図2D】本発明の一実施形態における部分コード列検索の概念を説明する図である。
【図3】本発明の一実施形態におけるハードウェア構成例を説明する図である。
【図4】本発明の一実施形態における索引データを作成する処理の概略フロー例を説明する図である。
【図5A】検索対象のコード列に含まれるコードのコード種別毎の出現回数を計数する処理フロー例を説明する図である。
【図5B】出現回数をもとにコード種別毎のコードID範囲を設定する処理フロー例を説明する図である。
【図5C】検索対象コード列に含まれるコードをもとにID関係表を完成させる処理フロー例を説明する図である。
【図6】ID関係表にコードIDを設定する処理フロー例を説明する図である。
【図7A】本発明の一実施形態におけるコード列検索を行う前段の処理フロー例を説明する図である。
【図7B】本発明の一実施形態におけるコード列検索を行う後段の処理フロー例を説明する図である。
【図8】検索コード列が検索対象コード列に含まれているかを判定する処理フロー例を説明する図である。
【図9】第1の検索コード列を含む部分コード列の先頭コードIDを求める処理フロー例を説明する図である。
【図10】第2の検索コード列により出力コード列を順次出力する処理フロー例を説明する図である。
【図11】第2の検索コード列により部分コード列から出力コード列を求める処理フロー例を説明する図である。
【図12】コードIDをコードに変換する処理フロー例を説明する図である。
【図13】本発明の一実施の形態における索引用のデータ構造を作成するための機能ブロック構成例を説明する図である。
【図14A】本発明の一実施の形態におけるコード列検索装置の機能ブロック構成例を説明する図である。
【図14B】本発明の一実施の形態における第1の検索実行部の機能ブロック構成例を説明する図である。
【図14C】本発明の一実施の形態における第2の検索実行部の機能ブロック構成例を説明する図である。
【発明を実施するための形態】
【0023】
以下、本発明を実施するための形態を、図面を参照しながら説明する。
まず、図2A〜図2Dを参照して、本発明の一実施態様における検索手法の概要を説明する。
図2Aは、本発明の一実施の形態における構造を有するコード列とその部分コード列の概念を説明する図である。図2Aに示すのは、検索対象である構造を有するデータの例としての、表形式のデータ12a、CSV形式のデータ12b、キー・バリュー形式のデータ12cと、それらをコード列に展開した、検索対象のコード列10aの例である。索引データを作成する対象となるのは、検索対象のコード列10aである。
【0024】
例示された表形式のデータ12aは、表の各列を示すFS1、FS2、FS3からなるヘッダ行と、第1行にはA、B、EAである値が、第2行にはC、A、CAである値が、第3行にはE、A、BCである値が格納されたデータ行から構成されている。
そして、表形式のデータ12aは、列のヘッダの値をコード区切コードに対応付け、データの値をコードあるいはコード列に対応付け、行を部分コード列区切コードに対応付けて検索対象コード列10aに変換される。なお、コード区切コードは、列のヘッダの値で表記している。また、部分コード列区切コードはRSで表記している。
【0025】
したがって、例示された検索対象コード列10aは、コードA、FS1、B、FS2、E、A、FS3、RS、C、FS1、A、FS2、C、A、FS3、RS、E、FS1、A、FS2、B、C、FS3、RSの24の文字コードから構成され、部分コード列区切コードRSにより3つの部分コード列に区切られている。それぞれの文字コードの下に記載されたP1〜P24は、検索対象コード列10aにおけるコードの位置を表している。コード位置ポインタ11は、検索対象コード列10aにおけるコードの位置を示すポインタであり、図の例ではコード位置P1を指している。個々の検索対象コード列に対して、索引データとして、コード別ID範囲表とID関係表が生成される。
【0026】
CSV形式のデータ12b、及びキー・バリュー形式のデータ12cも表形式データ12aと同様に検索対象コード列10aに変換することができる。図の例では、CSV形式のデータ12b及びキー・バリュー形式のデータ12cのデータの値は表形式データ12aのデータの値と同一である。
CSV形式のデータ12bにおいては、ヘッダ行のコンマで区切られた列の名称に表形式データ12aと同一の表の各列を示すFS1、FS2、FS3が用いられ、コード区切コードに変換されている。また、改行コードCRLFは、部分コード列区切コードRSに変換されている。
【0027】
キー・バリュー形式のデータ12cにおいては、キーの表記に、表形式データ12aの表の各列を示すFS1、FS2、FS3が用いられ、コード区切コードに変換されている。また、改行コードCRLFは、部分コード列区切コードRSに変換されている。
【0028】
図2Bに示すのは、コード列検索のための索引のデータ構造例であり、図2Aに示す検索対象コード列10aに対応して生成されるコード別ID範囲表309とID関係表310が例示されている。
コード別ID範囲表309のエントリは、索引データを作成する対象である検索対象コード列に出現する異なるコードの種別毎に作成される。コード別ID範囲表309の左側に表示しているように、図に示す例では、部分コード列区切コードRS(以下、コードRSという場合がある。)、コード区切コードFS1、FS2、FS3(以下、コードFS1のようにいう場合がある。)、及びコードA〜Eからなるコード列である検索対象コード列が索引データを作成する対象であり、各コードに対応してエントリが作成されている。コード種別ポインタ311は、コード別ID範囲表309のエントリを指すポインタであり、図の例では、部分コード列区切コードRSに対応するエントリを指している。
なお、各コードはビット列で構成されることから、そのビット列のビット値により表現される値を持つ。したがって、コード別ID範囲表309の各コードに対応するエントリの位置は各コードの値と対応付けることができることは明らかである。つまり、コード種別ポインタ311のとる値をコードそのものとすることもできる。そこで、以下の説明においては、各コードに対応するエントリを、各コードの指すエントリと表記することがある。
【0029】
コード別ID範囲表309の下側に表示しているように、コード別ID範囲表309のエントリは、設定表示、出現回数、先頭コードID、末尾コードID、コード別IDカウンタの項目で構成されている。設定表示は、1あるいは0で対応する検索対象コード列にそのコードが出現するかを示すものであり、図の例では、検索対象コード列10aにはコードDが出現しないので、コードDのエントリは0であり、他のエントリでは、空欄の部分を除いて1である。出現回数は、検索対象コード列にそのコードが出現する回数であり、図の例では、検索対象コード列10aに対応して、コードAからコードEに対して、5、2、3、0、2が格納され、コードRS、コードFS1〜コードFS3に対しては、それぞれ3が格納されている。
【0030】
先頭コードID及び末尾コードIDは、コード別のコードIDの範囲を示すものである。コードIDは、コード間で重ならないように、コード毎に検索対象コード列中の出現順に付与されたものであり、図に示す例では、コードRSについては出現回数が3であるのでID1からID3の範囲であり、次のコードFS1については出現回数が3であるのでID4からID6の範囲である。以下同様に、コードFS2についてはID7からID9、コードFS3についてはID10からID12、コードAについてはID13からID17、コードBについてはID18からID19、コードCについてはID20からID22、コードEについては、ID23からID24である。
【0031】
なお、ID1等の値は具体的には1から始まる整数値とすることが好適であるが、それに限ることなく、コード別のID範囲を識別することのできるものであればよい。また、図の例では、コードIDの範囲を先頭コードIDと末尾コードIDで示しているが、可変長データとなることをいとわなければ、すべてのコードIDを列挙することで示すこともできる。
【0032】
コード別IDカウンタは、コード別ID範囲表を生成したのちID関係表を生成するときに必要なカウンタであり、索引データとして必要なものではない。したがって、異なるコードの種別毎にコード別ID範囲表とは別のカウンタとして設けることもできる。
【0033】
ID関係表310のエントリは、検索対象コード列10aのコードに対して付けられたコードID毎に作成される。ID関係表310の左側に表示しているように、図に示す例では、コードID1〜コードID24に対応してエントリが作成されている。各エントリは、コード位置と次コードIDの項目から構成されている。コードIDポインタ312は、ID関係表310のエントリを指すポインタであり、図の例ではID1を指している。
【0034】
各コードIDのエントリのコード位置は、そのコードIDのコードの位置する検索対象コード列10aにおけるコード位置であり、図に示す例では、ID1に対してP8、ID2に対してP16、ID3に対してP24、ID4に対してP2、ID5に対してP10、ID6に対してP18、ID7に対してP4、ID8に対してP12が格納されている。以下同様に、ID9に対してP20、ID10に対してP7、ID11に対してP15、ID12に対してP23、ID13に対してP1、ID14に対してP6、ID15に対してP11、ID16に対してP14、ID17に対してP19、ID18に対してP3、ID19に対してP21、ID20に対してP9、ID21に対してP13、ID22に対してP22、ID23に対してP5、ID24に対してP17が格納されている。
【0035】
図の点線の矢印313rで示すように、ID関係表310の1〜3番目のエントリはコードRSに対応するものである。また、4〜6番目、7〜9番目及び10〜12番目のエントリはそれぞれ点線の矢印313FS1、313FS2および313FS3で示すように、コードFS1、FS2及びFS3に対応するものである。同様に、図の点線の矢印313aで示すように、13〜17番目のエントリはコードAに、点線の矢印313bで示すように、18、19番目のエントリはコードBに、点線の矢印313cで示すように、20〜22番目のエントリはコードCに、点線の矢印313eで示すように、23、24番目のエントリはコードEに対応する。
【0036】
各コードIDのエントリの次コードIDは、検索対象コード列10aにおけるそのコードIDのコードの次に位置するコードのコードIDである。図に示す例では、ID1に対してID13、ID2に対してID20、ID3に対してID24、ID4に対してID18、ID5に対してID15、ID6に対してID17、ID7に対してID23、ID8に対してID21が格納されている。以下同様に、ID9に対してID19、ID10に対してID1、ID11に対してID2、ID12に対してID3、ID13に対してID4、ID14に対してID10、ID15に対してID8、ID16に対してID11、ID17に対してID9、ID18に対してID7、ID19に対してID22、ID20に対してID5、ID21に対してID16、ID22に対してID12、ID23に対してID14、ID24に対してID6が格納されている。なお、検索対象コード列10aの各部分コード列の末尾のコードRS(コードID1、ID2、ID3)に対しては、それぞれの部分コード列の先頭のコードA、コードC、コードEのコードIDであるID13、ID20、ID24が格納されている。
【0037】
ID関係表310は、コードIDで表した2つのコードが検索対象コード列において連続した位置関係にあることを索引データとして保持している。ID関係表310を図1Bに示す従来例の圧縮接尾辞配列50と比較すると、圧縮接尾辞配列50では文字毎に次の配列番号がソートされているのに対して、ID関係表310では異なるコードの種別毎にコード位置がソートされている。したがって、同一コードを逐次検索する場合には、キャッシュ効果により高速化を図ることができる。
【0038】
図2Cは、本発明の一実施の形態におけるコード列検索の第1の検索コード列による検索の概念を説明する図である。第1の検索コード列は、データを表すコードあるいはコード列とコード区切コードからなるコード列である。第1の検索コード列による検索では、第1の検索コード列を含む部分コード列を求める。具体的には、下記に示す例では、上記部分コード列の先頭のコードのコードIDを求めている。なお、以下の説明において、先頭のコードのコードIDを、コード別ID範囲表の先頭コードIDと混同する恐れのないときには、同じく先頭コードIDということがある。
【0039】
検索対象コード列を図2Aに例示した検索対象コード列10aとし、検索コード列を図2Cに示す第1の検索コード列40aとして、第1の検索コード列による検索の概念を説明する。検索対象コード列10aに対応して、コード別ID範囲表309とID関係表310が生成されているものとする。
【0040】
第1の検索コード列40aには、図に示すように、先頭からデータコードであるコードA、区切コードであるコードFS2が位置している。そこで、図に点線の矢印331aで示すように、1番目のコード332aであるコードAが読み出され、点線の矢印333aで示すようにコード別ID範囲表309のコードAに対応するエントリ309aが読み出される。そして点線の矢印334aで示すように、そのエントリからID範囲336aに含まれるコードID、図の例ではコードID15に対応するエントリ310aがID関係表310からさらに読み出される。
【0041】
次に点線の矢印331bで示すように、2番目のコード332bであるコードFS2が読み出され、点線の矢印333bで示すように、コード別ID範囲表309のコードFS2に対応するエントリ309bが読み出される。そして、双方向の点線の矢印335bで示すように、点線の矢印334aでID関係表310から読み出されたコードID15に対応するエントリ310aの次コードID337aであるID8が、点線の矢印333bで読み出されたコードFS2に対応するエントリ309bのコードIDの範囲336b(ID7〜ID9)に含まれるかを判定する。図の例では、この判定はイエスになる。このことは、コードA、コードFS2のコードの並びが、検索対象コード列10aに存在することを意味している。
【0042】
次にコードA、コードFS2のコードの並びが含まれる部分コード列の先頭のコードのコードIDを求める。そこで、さらに点線の矢印334bで示すように、次コードID337aであるID8に対応するエントリ310bの次コードID337bであるID21が読み出される。一方、点線の矢印333cで示すように、部分コード列コード332dであるコードRSが読み出され、コード別ID範囲表309のコードRSに対応するエントリ309cが読み出される。そして、双方向の点線の矢印335cで示すように、点線の矢印334bでID関係表310から読み出されたコードID8に対応するエントリ310bの次コードID337bであるID21が、点線の矢印333cで読み出されたコードRSに対応するエントリ309cのコードIDの範囲336c(ID1〜ID3)に含まれるかを判定する。
【0043】
上記判定は否定的なものとなるので、点線の矢印334cで示すように、エントリ310bの次コードID337bであるID21に対応するエントリ310cの次コードID337cであるID16が読み出され、双方向の点線の矢印335dで示すように、コードRSのコードID範囲に含まれるかの判定が行われる。この判定も否定的なものになるので、以下同様に、点線の矢印334dで示すように、エントリ310cの次コードID337cであるID16に対応するエントリ310dの次コードID337dであるID11が読み出され、双方向の点線の矢印335eで示すように、コードRSのコードID範囲に含まれるかの判定が行われる。
【0044】
この判定も否定的なものになるので、次に、点線の矢印334eで示すように、エントリ310dの次コードID337dであるID11に対応するエントリ310eの次コードID337eであるID2が読み出され、双方向の点線の矢印335fで示すように、点線の矢印334eでID関係表310から読み出されたコードID11に対応するエントリ310eの次コードID337eであるID2が、点線の矢印333cで読み出されたコードRSに対応するエントリ309cのコードIDの範囲336c(ID1〜ID3)に含まれるかを判定する。図の例では、この判定はイエスになる。つまり、ID2は、部分コード列の末尾コードのコードID(末尾コードID)であることが分かる。
【0045】
そこで、点線の矢印334fで示すように、エントリ310eの次コードID337eであるID2に対応するエントリ310fの次コードID337fであるID20が、部分コード列の先頭コードIDとして読み出される。なお、検索された部分コード列を特定するものとして、部分コード列の末尾コードのコードID(末尾コードID)を出力することも可能である。
【0046】
図2Dは、本発明の一実施の形態におけるコード列検索の第2の検索コード列による検索の概念を説明する図である。第2の検索コード列は、コード区切コードからなるコード列である。第2の検索コード列による検索は、第1の検索コード列による検索で求められた部分コード列内の、第2の検索コード列で指定されたコード区切コードで区切られるコードあるいはコード列を求めるものである。
【0047】
図2Cに例示した第1の検索コード列40aにより、検索対象コード列10aの部分コード列の先頭コードのコードIDとして、ID20が求められているものとする。検索コード列は、図2Dに示す第2の検索コード列40bとして、第2の検索コード列による検索の概念を説明する。
【0048】
第2の検索コード列40bには、図に示すように、先頭からコード区切コードFS1、FS2が位置している。そこで、点線の矢印441aで示すように、1番目のコード442aであるコードFS1が読みだされ、点線の矢印433aで示すようにコード別ID範囲表309のコードFS1に対応するエントリ409aが読み出される。
【0049】
一方、部分コード列の先頭コードID410bには、図2Cに示す第1の検索コード列の検索により得られた部分コード列の先頭のコードのコードIDであるID20が設定されている。先頭コードIDであるID20は、第2の検索コード列による検索の最初の検索開始コードIDである。そして、双方向の点線の矢印435sで示すように、ID20が、点線の矢印433aで読み出されたコードFS1に対応するコード別ID範囲表309のエントリ409aのコードIDの範囲436a(ID4〜ID6)に含まれるか判定する。
上記判定は否定的なものとなるので、点線の矢印の矢印438aで示すように、コード別ID範囲表309のエントリ409dが、ID20をコード範囲436dに含むものとして求められ、点線の矢印489dで示すように、エントリ409dに対応するコードCが、一時記憶領域499dに検索回答候補として設定される。
【0050】
また、点線の矢印434aで示すように、部分コード列の先頭コードID410bに設定されたID20に対応するID関係表310のエントリ410aが読み出される。そして、双方向の点線の矢印435aで示すように、そのエントリ410aの次コードID437aであるID5が、点線の矢印433aで読み出されたコードFS1に対応するコード別ID範囲表309のエントリ409aのコードIDの範囲436a(ID4〜ID6)に含まれるか判定する。
上記判定は肯定的なものとなるので、一時記憶領域499dに設定されているコードCは、検索回答候補から検索回答として出力される出力コードとなる。
【0051】
引き続き、点線の矢印434bで示すように、エントリ410aの次コードID437aであるID5に対応するエントリ410bが読み出され、エントリ410bの次コードID437bであるID15が次の検索開始コードIDとして求められる。
【0052】
以上によりコード区切コードFS1で区切られる出力コードとしてコードCが得られたので、次に点線の矢印441bで示すように、第2の検索コード列40bの2番目のコード442bであるコードFS3が読み出され、点線の矢印433bで示すようにコード別ID範囲表309のコードFS3に対応するエントリ409bが読み出される。そして、双方向の点線の矢印435bで示すように、先に読み出されたエントリ410bの次コードID437bであるID15が、点線の矢印433bで読み出されたコードFS3に対応するコード別ID範囲表309のエントリ409bのコードIDの範囲436b(ID10〜ID12)に含まれるか判定する。
上記判定は否定的なものとなるので、点線の矢印438bで示すように、コード別ID範囲表309のエントリ409eが、エントリ410bの次コードID437bとして求められたID15をコード範囲436eに含むものとして求められ、点線の矢印489eで示すように、エントリ409eに対応するコードAが、一時記憶領域499eに検索回答候補として設定される。
【0053】
また、点線の矢印434cで示すように、エントリ410bの次コードID437bとして求められたID15に対応するID関係表310のエントリ410cが読み出される。そして、双方向の点線の矢印435cで示すように、そのエントリ410cの次コードID437cであるID8が、点線の矢印433bで読み出されたコードFS3に対応するコード別ID範囲表309のエントリ409bのコードIDの範囲436b(ID10〜ID12)に含まれるか判定する。
上記判定は否定的なものとなるので、点線の矢印438cで示すように、コード別ID範囲表309のエントリ409cが、エントリ410cの次コードID437cとして求められたID8をコード範囲436cに含むものとして求められる。
しかし、エントリ409cに対応するコードFS2はデータコードではないので、一時記憶領域499eに設定されているコードAはクリアされ、検索回答としての出力コードとはならない。
【0054】
引き続き、点線の矢印434dで示すように、エントリ410cの次コードID437cであるID8に対応するエントリ410dが読み出さる。そして、双方向の点線の矢印435dで示すように、そのエントリ410dの次コードID437dであるID21が、点線の矢印433bで読み出されたコードFS3に対応するコード別ID範囲表309のエントリ409bのコードIDの範囲436b(ID10〜ID12)に含まれるか判定する。
上記判定は否定的なものとなるので、点線の矢印438dで示すように、コード別ID範囲表309のエントリ409fが、エントリ410dの次コードID437dとして求められたID21をコード範囲436fに含むものとして求められ、点線の矢印489fで示すように、エントリ409fに対応するコードCが、一時記憶領域499fに検索回答候補として設定される。
【0055】
また、点線の矢印434eで示すように、エントリ410dの次コードID437dとして求められたID21に対応するID関係表310のエントリ410eが読み出される。そして、双方向の点線の矢印435eで示すように、そのエントリ410eの次コードID437eであるID16が、点線の矢印433bで読み出されたコードFS3に対応するコード別ID範囲表309のエントリ409bのコードIDの範囲436b(ID10〜ID12)に含まれるか判定する。
上記判定は否定的なものとなるので、点線の矢印438eで示すように、コード別ID範囲表309のエントリ409gが、エントリ410eの次コードID437eとして求められたID16をコード範囲436gに含むものとして求められ、点線の矢印489gで示すように、エントリ409gに対応するコードAが、一時記憶領域499gに検索回答候補として設定される。
【0056】
さらに、点線の矢印434fで示すように、エントリ410eの次コードID437eとして求められたID16に対応するID関係表310のエントリ410fが読み出される。そして、双方向の点線の矢印435fで示すように、そのエントリ410fの次コードID437fであるID11が、点線の矢印433bで読み出されたコードFS3に対応するコード別ID範囲表309のエントリ409bのコードIDの範囲436b(ID10〜ID12)に含まれるか判定する。
上記判定は肯定的なものとなるので、一時記憶領域499f、499gに設定されているコードCとコードAからなるコード列CAは、検索回答としての出力コード列となる。
以上のようにして、本発明の一実施の形態によるコード列検索が実施される。
【0057】
図3は、本発明の一実施の形態におけるハードウェア構成例を説明する図である。
本発明のコード列検索装置による検索処理及び索引生成処理は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。コードID範囲表309とコードID関係表310を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
【0058】
図3の例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできる。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。以下の説明では、一時記憶領域に格納されたあるいは設定された値を一時記憶領域の名前で呼ぶことがある。
【0059】
次に、本発明の一実施の形態における索引データの作成処理を説明する。
図4は、本発明の一実施形態における索引データを作成する処理の概略フローを説明する図である。
【0060】
まず、ステップS401において、検索対象のコード種別数をもとにコード別ID範囲表の領域を確保すると共に、検索対象コード列に含まれるコードを順次読み出してコード種別毎の出現回数とコードの総数を求める。ステップS401の処理の詳細は、後に図5Aを参照して説明する。
次に、ステップS402で、コード種別毎の出現回数をもとに、コード別ID範囲表にコード種別毎のコードIDの範囲を設定する。ステップS402の処理の詳細は、後に図5Bを参照して説明する。
【0061】
次にステップS403で、コード総数をもとにID関係表の領域を確保すると共に、コード別ID範囲表を参照しながら、検索対象コード列に含まれるコードを順次読み出してID関係表を完成させ、処理を終了する。ステップS403の処理の詳細は、後に図5Cを参照して説明する。
【0062】
図5Aは、図4に示すステップS401の処理の詳細なフロー例を示すものであり、検索対象のコード列に含まれるコードのコード種別毎の出現回数を計数する処理フローを説明する図である。
【0063】
図に示すように、ステップS501において、検索対象コード列を設定する。検索対象コード列の設定は、データ格納装置に格納された検索対象となるコード列の集合から、1つのコード列を読み出して、図示しない検索対象コード列設定エリアに設定することを意味する。なお、上述の検索対象コード列設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置」の1つである。以下の説明では、「図示しない検索対象コード列設定エリアに設定する」のような表現に変えて、「検索対象コード列として設定する」あるいは単に「検索対象コード列に設定する」のように記述することもある。検索対象コード列以外についても同様である。
【0064】
次にステップS502において、コードの種別数を設定する。コードの種別数は、コード体系により決定されるものであり、予め与えられるものとする。次にステップS503に進み、ステップS502で設定されたコードの種別数をもとにコード別ID範囲表の格納領域を確保し、出現回数を0に初期化する。続いてステップS504でコード位置ポインタに、ステップS501で設定したコード列の先頭位置を設定し、ステップS505でコード数カウンタに値0を設定する。以上のステップS501〜ステップS505の処理は、初期処理である。
【0065】
初期処理に続いてステップS506に進み、コード列より、コード位置ポインタの指すコードを取り出す。次にステップS507で、取り出したコードのコード種別に対応するコード別ID範囲表のエントリ(以下、コードの指すコード別ID範囲表ということがある。)の出現回数に値1を加え、ステップS508でコード数カウンタに値1を加えてステップS509に進む。
【0066】
ステップS509では、コード位置ポインタがコード列の末尾位置であるか判定し、末尾位置でなければステップS510でコード位置ポインタを次の位置に進めてステップS506に戻る。コード位置ポインタがコード列の末尾位置であれば、ステップS511でコード総数にコード数カウンタを設定して処理を終了する。上記ステップS509のコード位置ポインタがコード列の末尾位置であるかの判定は、例えば図1Aに例示したように、区切り文字を利用して行うことができる。
以上の処理により、コード別ID範囲表の出現回数が設定されると共に、コード総数が設定される。
【0067】
図5Bは、図4に示すステップS402の処理の詳細なフロー例を示すものであり、図5Aに示す処理により設定された出現回数をもとにコード種別毎のコードID範囲を設定する処理フローを説明する図である。
【0068】
まずステップS521において、コード種別ポインタに、コード別ID範囲表の先頭位置を設定し、次にステップS522において、コードIDカウンタに初期値を設定する。次にステップS523に進み、コード種別ポインタの指すコード別ID範囲表より、出現回数を取り出し、ステップS524で取り出した出現回数が0か判定する。
【0069】
出現回数が0でなければ、ステップS525でコード種別ポインタの指すコード別ID範囲表の設定表示に「あり」を設定すると共に、先頭コードIDとコード別IDカウンタにコードIDカウンタの値を設定する。コード別IDカウンタは、後に説明するID関係表を作成するときに用いられるものである。コード種別ごとのコードIDの初期値として、先頭コードIDが設定される。
次にステップS526でコードIDカウンタに出現回数を加え、ステップS527でコード種別ポインタの指すコード別ID範囲表の末尾コードIDに、コードIDカウンタの値より1を減じた値を設定してステップS529に進む。
【0070】
一方、ステップS524の判定で出現回数が0となった場合は、ステップS528でコード種別ポインタの指すコード別ID範囲表の設定表示に「なし」を設定してステップS529に進む。
【0071】
ステップS529では、コード種別ポインタはコード別ID範囲表の終端位置であるか判定し、終端位置でなければステップS530でコード種別ポインタを、コード別ID範囲表の次のコード種別の位置に進めてステップS523に戻る。終端位置であれば、コード別ID範囲表の設定は完了しているので、処理を終了する。
【0072】
図5Cは、図4に示すステップS403の処理の詳細なフロー例を示すものであり、検索対象コード列に含まれるコードをもとにID関係表を完成させる処理フローを説明する図である。図5Cに示す処理フローは、ステップS541〜ステップS545の初期設定処理、ステップS546、ステップS546aからなる、ID関係表の値を検索対象コード列のコードの位置順に設定するループ処理、及びステップS555の後処理から構成されている。
【0073】
まずステップS541で、図5Bに示す処理により求めたコード総数をもとに、ID関係表の格納領域を確保し、ステップS542で、コード位置ポインタに、検索対象コード列の先頭位置を設定する。次にステップS543で、検索対象コード列より、コード位置ポインタの指すコードを取り出し、ステップS544で、その取り出したコードの指すコード別ID範囲表のコード別IDカウンタを読み出し、コードIDポインタに設定する。次にステップS545で、先頭コードIDに、コードIDポインタを設定し、ステップS546に進む。
【0074】
図2Aに示す検索対象コード列10aに対しては、上述のステップS541〜ステップS545の初期設定処理において、コード位置ポインタにP1、コードにA、コードIDポインタにID13、先頭コードIDにID13が設定される。
ステップS546では、コード位置ポインタは検索対象コード列の末尾位置か判定し、末尾位置でなければ、ステップS546aに進み、該当するコードIDの指すID関係表のコード位置と次コードIDを設定してステップS546に戻る。コード位置ポインタの更新は、ステップS546aの処理で行われる。ステップS546aの処理の詳細は、後に図6を参照して説明する。
【0075】
上記ステップS546aの処理をコード位置ポインタが検索対象コード列の末尾位置を指すまで繰り返し、コード位置ポインタが検索対象コード列の末尾位置になるとステップS555に分岐する。ステップS555では、検索対象コード列の末尾に位置するコードのコードIDに対応するID関係表のエントリを設定するために、コードIDポインタの指すID関係表の、コード位置にコード位置ポインタを、次コードIDに先頭コードIDを設定して処理を終了する。コードIDポインタは検索対象コード列のコード毎に、先頭コードIDは1つの部分コード列の設定終了毎に、ステップS546aの処理で更新される。
【0076】
図6は、コードIDの指すID関係表のコード位置と次コードIDを設定する処理フロー例を説明する図であり、図5Cに示すステップS546aの処理の詳細を説明するものである。
【0077】
図に示すように、まずステップS601において、前回のコードにコードを設定する。そして、ステップS602において、コードIDポインタの指すID関係表のコード位置に、コード位置ポインタを設定する。
【0078】
次にステップS603で、ステップS543あるいは後記ステップS605で設定したコードの指すコード別ID範囲表のコード別IDカウンタに1を加え、ステップS604で、コード位置ポインタを次のコード位置に進める。
【0079】
次にステップS605において検索対象コード列より、コード位置ポインタの指すコードを取り出し、ステップS606で、その取り出したコードの指すコード別ID範囲表のコード別IDカウンタを読み出し、コードIDに設定する。
【0080】
次にステップS607において、ステップS601で設定した前回のコードは部分コード列区切コードか判定する。前回のコードが部分コード列区切コードでなければステップS608において、コードIDポインタの指すID関係表の次コードに、ステップS605で設定したコードIDを設定してステップS611に進む。
【0081】
ステップS607において、前回のコードは部分コード列区切コードであると判定されると、ステップS609で、コードIDポインタの指すID関係表の次コードIDに先頭コードIDを設定し、ステップS610で、先頭コードIDにコードIDを設定してステップS611に進む。
ステップS611では、コードIDポインタに、コードIDを設定して処理を終了する。
【0082】
次に、図7A、図7Bを参照して、本発明の一実施の形態におけるコード列検索の処理の概要を説明する。
図7Aは、本発明の一実施の形態におけるコード列検索の前段の処理フロー例を説明する図である。
【0083】
まず、ステップS701において、検索コード列に、第1の検索コード列を設定する。
次に、ステップS702で検索コード列のコードが検索対象コード列に含まれているか判定する。ステップS702の処理の詳細は、後に図8を参照して説明する。
【0084】
次にステップS703において、ステップS702での判定結果が、検索コード列のコードが検索対象コード列に含まれていない、というものであれば処理失敗とし、検索コード列のコードが検索対象コード列に含まれている、というものであれば、ステップS704に進み、検索コード列に第2の検索コード列を設定する。
【0085】
次にステップS705において、検索コード列のコードが検索対象コード列に含まれているか判定する。ステップS705の処理の詳細は、ステップS702の処理の詳細と同様に後に図8を参照して説明する。
【0086】
そして、ステップS706において、ステップS705での判定結果が、検索コード列のコードが検索対象コード列に含まれていない、というものであれば処理失敗とし、検索コード列のコードが検索対象コード列に含まれている、というものであれば、ステップS710に進み、検索先頭位置に第1の検索コード列の先頭位置を設定する。
【0087】
次にステップS711において、検索末尾位置に、第1の検索コード列の末尾位置を設定する。次にステップS712で、ステップS710で設定した検索先頭位置の指す第1の検索コード列より、検索コードを取り出す。そしてステップS713で、該取り出した検索コードの指すコード別ID範囲表より先頭コードIDと末尾コードIDを取り出し、それぞれ検索開始コードIDと検索終了コードIDに設定し、図7Bに示すステップS720に進む。
【0088】
図7Bは、本発明の一実施の形態におけるコード列検索の後段の処理フロー例を説明する図である。
図に示すように、ステップS720で検索コードIDに、前段の処理で設定された検索開始コードIDを設定し、ステップS721で、検索進行位置に、前段の処理で設定された検索先頭位置を設定してステップS723に進む。
【0089】
ステップS723では、第1の検索コード列を用いて、検索コードIDより検索対象コード列を検索して、第1の検索コード列を含む部分コード列の先頭コードのコードIDを求める。ステップS723の処理の詳細は、後に図9を参照して説明する。
【0090】
次にステップS724で先頭コードIDが求められたか判定し、この判定が否定的なものであれば、ステップS730に進み、肯定的であって先頭コードIDが求められたならば、ステップS725で、第2の検索コード列を用いて、先頭コードIDより部分コード列を検索して、第2の検索コード列に適合する出力コード列を求め、ステップS730に進む。ステップS725の処理の詳細は、後に図10を参照して説明する。
【0091】
ステップS730では、検索開始コードIDは検索終了コードIDか判定し、検索開始コードIDが検索終了コードIDであれば処理を終了し、そうでなければ、ステップS731において、検索開始コードIDに値1を加えて検索開始コードIDに設定し、ステップS720に戻る。
【0092】
上述の、ステップS730の判定からステップS731での検索開始コードIDの更新を経由してステップS720に戻る処理は、検索コード列の先頭コードの指すコード別ID範囲表の先頭コードIDから末尾コードIDまで検索開始コードIDを切り替えて、上述のステップS723の第1の検索コード列による検索とステップS725の第2の検索コード列による検索を行うためのものである。別の言い方をすれば、検索対象コード列の、第1の検索コード列の先頭コードと同一種別のコードが位置するコード位置を切り替えて、第1の検索コード列の先頭コードから末尾コードにかけて照合処理を行い、照合が成功して先頭コードIDが求まった場合に第2の検索コード列による検索を行って出力コード列を求めることを繰り返すためのものである。
【0093】
ステップS730で検索開始コードIDは検索終了コードIDと等しい判定されるのは、第1の検索コード列の先頭コードと同一種別のコードが検索対象コード列において位置する全てのコード位置についての照合処理が終了したときであるから、全体の処理を終了する。処理結果は、ステップS725において出力されている。
【0094】
図8は、検索コード列のコードが検索対象コード列に含まれているかを判定する処理フロー例を説明する図であり、図7Aに示すステップS702とステップS705の処理の詳細を説明する図である。
図に示すように、まずステップS801で、検索進行位置に、検索コード列の先頭位置を設定してステップS802に進む。
【0095】
ステップS802では、検索進行位置の指す検索コード列より、検索コードを取り出し、次にステップS803で、検索コードの指すコード別範囲表より、設定表示を取り出し、ステップS804において、該取り出した設定表示は「あり」であるか判定する。設定表示が「あり」でなければ、検索コード列中の検索コードに検索対象コード列中に存在しないコードがあるということであるから、「コードが含まれていない」を返して処理を終了する。
【0096】
ステップS804の判定の結果が設定表示は「あり」であれば、ステップS805に進み、ステップS801あるいは後記ステップS806で設定した検索進行位置は検索コード列の末尾位置か判定する。検索進行位置が検索コード列の末尾位置でなければステップS806で検索コード位置に次の検索コードの位置を設定し、ステップS802に戻る。
【0097】
上述のステップS802〜ステップS806のループ処理を、ステップS805で検索進行位置は検索コード列の末尾位置であると判定されるまで繰り返し、ステップS607で検索進行位置は検索コード列の末尾位置であると判定されると、「コードが含まれている」を返して処理を終了する。
以上の図8に示す処理により、検索コード列中の検索コードが検索対象コード列中に存在することが保証される。
【0098】
図9は、第1の検索コード列を含む部分コード列の先頭コードIDを求める処理フロー例を説明する図であり、図7Bに示すステップS723の処理の詳細を説明する図である
図2B及び図2Cに示す例では、第1の検索コード列は<A、FS2>である。また、図9に示す処理、すなわち図7Bに示すステップS723の処理が、ステップS720〜ステップS731のループ処理の最初の処理として開始されるときには、検索コードにA、検索コードIDにID13、検索進行位置に検索先頭位置が設定されている。
図に示すように、まずステップS901において、検索コードIDの指すID関係表より次コードIDを取り出し、検索コードIDに設定する。上記図2C及び図2Dに示す例の最初の処理においては、次コードIDとしてID4が取り出され、検索コードIDに設定される。
【0099】
次にステップS902で検索進行位置は検索末尾位置か判定し、検索末尾位置でなければステップS903において、検索進行位置を第1の検索コード列の次の検索コードの位置に進め、ステップS904で、検索進行位置の指す第1の検索コード列より検索コードを取り出し、ステップS905で、該取り出した検索コードの指すコード別ID範囲表より先頭コードIDと末尾コードIDを取り出す。ステップS902の判定が肯定的なものであれば、ステップS907に進む。図2C及び図2Dに示す例では、検索コードとしてFS2が取り出され、先頭コードIDと末尾コードIDとして、ID7、ID9が取り出される。
【0100】
そしてステップS906において、ステップS901で設定した検索コードIDがステップS905で取り出した先頭コードIDと末尾コードIDの範囲内か判定し、範囲内であればステップS901に戻り、範囲内でなければ「先頭コードなし」を返して処理を終了し、図7Bに示すステップS724に進む。
【0101】
図2B及び図2Cに示す例の最初の処理では、検索コードIDとしてID4がステップS901で設定されており、ステップS905で取り出した先頭コードIDと末尾コードIDはそれぞれID7、ID9であることから、ステップS906の判定により「先頭コードなし」を返して処理を終了し、図7Bに示すステップS724に進む。そして、ステップS720〜ステップS731のループ処理が繰り返され、検索開始コードIDがID15となり、ステップS720で検索コードIDがID15とされたときに、図9に示すステップS906の判定は肯定的なものとなり、ステップS903で検索進行位置が進められていることから、ステップS903の判定も肯定的なものとなるので、ステップS907以降の処理に移行する。その際、ステップS901において、検索コードIDは、ID8に更新されている。
【0102】
ステップS907では、部分コード列区切コードの指すコード別ID範囲表より先頭コードIDと末尾コードIDを取り出す。そして、ステップS908で、検索コードIDはステップS907で取り出した先頭コードIDと末尾コードIDの範囲内か判定する。 範囲内でなければ、ステップS909で、検索コードIDの指すID関係表より次コードIDを取り出し、検索コードIDに設定してステップS908に戻り、判定処理を繰り返す。
【0103】
一方、ステップS908で検索コードIDは先頭コードIDと末尾コードIDの範囲内であると判定されると、その検索コードIDは、部分コード列区切コードのものである。そして、部分コード列区切コードの指すID関係表の次コードIDは、その部分コード列の先頭のコードのコードIDであるので、ステップS910において、検索コードIDの指すID関係表より次コードIDを取り出し、先頭コードIDに設定して処理を終了し、「先頭コードあり」を返して図7Bに示すステップS724に進む。なお、この際、検索コードID、すなわち部分コード列区切コードのコードIDを部分コード列の末尾のコードのコードID(末尾コードID)として出力することもできる。
【0104】
図2B及び図2Cに示す例では、ステップS907において、コードRSの先頭コードIDと末尾コードIDとしてID1とID3が取り出される。そして、検索コードIDをID8から、図2Cの点線の矢印334c〜334eで示すように、更新しながらステップS908の判定を繰り返し、検索コードIDがID2となったときにステップS910において、ID2の指すID関係表より次コードIDであるID20を取り出し、先頭コードIDに設定する。この際、先に述べたように、ID2を部分コード列の末尾コードIDとして出力することもできる。
【0105】
図10は、図9に示す処理により先頭コードIDが求められた部分コード列から、第2の検索コード列に適合する出力コード列を求める処理フロー例を説明する図であり、図7Bに示すステップS725の処理の詳細を説明する図である
図2B及び図2Dに示す例では、第2の検索コード列は<FS1、FS3>である。また、図9に示す処理により先頭コードIDには、ID20が設定されている。
【0106】
図に示すように、まずステップS1001において、先頭コード位置に、第2の検索コード列の先頭位置を設定し、ステップS1002において、末尾コード位置に、第2の検索コード列の末尾位置を設定する。また、ステップS1003で、コードIDに、先頭コードIDを設定し、ステップS1004で、検索進行位置に先頭コード位置を設定してステップS1005に進む。
【0107】
ステップS1005では、検索進行位置の指す第2の検索コード列より検索コードを取り出し、検索コードに設定する。次にステップS1006で、検索開始コードIDに、コードIDを設定し、ステップS1007で、検索コードを用いて、検索開始コードよりコード列を検索し、出力コード列を求める。ステップS1007の処理の詳細は、後に図11を参照して説明する。
【0108】
次にステップS1008で、出力コード列を出力し、ステップS1009に進み、検索進行位置は末尾コード位置か判定する。検索進行位置が検索末尾位置であれば処理を終了し、検索進行位置が検索末尾位置でなければ、ステップS1010において、検索進行位置を、第2の検索コード列の次のコードの位置(検索コード位置)に進めてステップS1005に戻る。
上述のステップS1005〜ステップS1010のループ処理を、ステップS1009で検索進行位置は末尾コード位置であると判定されるまで繰り返し、検索進行位置は末尾コード位置であると判定されると、処理を終了する。
【0109】
図11は、部分コード列から第2の検索コード列を構成するコード区切コードに対応する出力コード列を求める処理フロー例を説明する図であり、図10に示すステップS1007の処理の詳細を説明するものである。
図11に示すように、まず、ステップS1101において、コードIDに、検索開始コードIDを設定する。図2B及び図2Dに示す例の最初の処理では、コードIDにはID20が設定される。
【0110】
次にステップS1102において、検索コードの指すコード別ID範囲表より先頭コードIDと末尾コードIDを取り出す。また、ステップS1103において、出力コード列を初期化する。図2B及び図2Dに示す例の最初の処理では、検索コードにはFS1が設定されているので、先頭コードIDと末尾コードIDとして、ID4とID6が取り出される。
【0111】
次にステップS1104において、コードIDは先頭コードIDと末尾コードIDの範囲内か判定する。範囲内でなければ、ステップS1105に進み、コードIDをコードに変換する。ステップS1105の処理の詳細は、後に図12を参照して説明する。図2B及び図2Dに示す例の最初の処理では、コードIDはID20、先頭コードIDと末尾コードIDは、それぞれID4とID6であるから、ステップS1104の判定は否定的なものとなり、ステップS1105では、コードとしてCが得られる。
【0112】
次にステップS1106において、変換して得られたコードの種別が区切コードのものか判定する。この判定が否定的なものであれば、ステップS1107において、出力コード列にコードを追記してステップS1109に進む。一方、ステップS1106の判定が肯定的なものであれば、ステップS1107において、出力コード列を初期化してステップS1109に進む。
【0113】
ステップS1109では、コードIDの指すID関係表より次コードIDを取り出し、コードIDに設定してステップS1104に戻る。
図2B及び図2Dに示す例の最初の処理では、ステップS1107で出力コード列にCが追記され、ステップS1109では、ID20の指すID関係表の次コードIDであるID5がコードIDに設定される。
【0114】
上述のステップS1104で、コードIDは先頭コードIDと末尾コードIDの範囲内であると判定されると、ステップS1110において、コードIDの指すID関係表より次コードIDを取り出し、コードIDに設定して処理を終了する。
【0115】
図2B及び図2Dに示す例の最初の処理により、ステップS1109において、ID20の指すID関係表の次コードIDであるID5がコードIDに設定されるので、次のステップS1104の処理では、コードIDは先頭コードIDと末尾コードIDの範囲内であると判定され、次のコードIDにはステップS1110においてID15が設定される。そして、図10に示すステップS1005〜ステップS1010のループ処理に戻り、2番目のコード区切コードFS3に対応する出力コード列を出力する2番目の処理に移行する。
【0116】
図2B及び図2Dに示す例の上述の2番目の処理では、検索コードはFS3、その先頭コードIDと末尾コードIDはそれぞれID10、ID12であり、最初のコードIDにはID15が設定されている。コードIDであるID15は、ステップS1105でコードAに変換され、ステップS1107で出力コード列に追記されるが、次のコードIDであるID8は、先頭コードIDであるID10と末尾コードIDであるID12の範囲に含まれないのでコードFS2に変換され、変換後のコード種別が区切コードのものであるので、ステップS1108でクリアされる。
【0117】
ID8以降のコードIDは、図2Dに点線の矢印434e、434fで示すようにID21、ID16、ID11のように遷移し、ID21、ID16が返還されたコードC、コードAが出力コード列に追記され、ID11が先頭コードIDであるID10と末尾コードIDであるID12の範囲に含まれるので、コード列CAが出力コード列として出力される。
【0118】
図12は、コードIDをコードに変換する処理フロー例を説明する図であり、図11に示すステップS1105の処理の詳細を説明する図である。
図に示すように、まず、ステップS1201において、検索コードIDにコードIDを設定し、ステップS1202で、検索コードにコード別ID範囲表の先頭位置を設定する。
先に図2Bを参照して説明したように、コード別ID範囲表の各コードに対応するエントリの位置は各コードの値と対応することができる。そこで、図12においては、コード別ID範囲表の各コードに対応するエントリの位置を各コードで表現することとし、「検索コードにコード別ID範囲表の先頭位置を設定する」あるいは「検索コードの指すコード別ID範囲表」のように表記する。
【0119】
次にステップS1203において、検索コードの指すコード別ID範囲表より、設定表示を取り出し、ステップS1204で、設定表示は「あり」であるか判定する。設定表示が「あり」であれば、ステップS1205に進み、「あり」でなければ、ステップS1207で検索コードを次の位置の検索コードとしてステップS1203に戻る。
【0120】
一方、ステップS1204で設定表示が「あり」と判定されると、ステップS1205に進み、検索コードの指すコード別ID範囲表より先頭コードIDと末尾コードIDを取り出す。次にステップS1206において、検索コードIDは先頭コードIDと末尾コードIDの範囲内であるか判定し、範囲内でなければ、先に説明したステップS1207を介してステップS1203に戻る。
【0121】
ステップS1206において、検索コードIDは先頭コードIDと末尾コードIDの範囲内であると判定されると、ステップS1208に進み、コードに検索コードを設定して処理を終了する。
なお、上記コード列検索処理の説明では、第2の検索コード列を構成するコード区切コードが、部分コード列における位置の順番と同一の順番で位置するとしたが、第2の検索コード列におけるコード区切コードの順番は、任意の順番として検索を実行することができる。すなわち、その場合には、常に部分コード列の先頭から第2の検索コード列による検索を開始するようにすればよく、そのために、例えば図10に示すステップS1006において、検索開始コードIDに先頭コードIDを設定すればよい。
【0122】
以上詳細に説明した本発明のコード列検索方法を例えば図3に例示するデータ処理装置301のようなコンピュータに実行させるプログラムにより、本発明に係るコード列検索装置をコンピュータ上に構築可能なことは明らかである。また、同様に、本発明のコード列検索方法で用いる索引データを作成する索引データ作成装置をコンピュータ上に構築可能なことは明らかである。
そこで、本発明の索引データ作成装置及びコード列検索装置に関する機能ブロック構成例について、以下に説明する。
【0123】
図13は、本発明の一実施の形態における索引用のデータ構造を作成するための機能ブロック構成例を説明する図である。検索対象コード列が検索対象コード列読出手段101で読み出され、コード別ID範囲表生成手段102と、ID関係表生成手段103に渡される。コード別ID範囲表生成手段102は、コード毎にそのコードIDの範囲を格納したコード別ID範囲表を作成し、ID関係表生成手段103は、第2の区切コードを除いた各コードの次に位置するコードのコードIDである次コードIDを前記コードIDに対応して格納し、第2の区切コードのコードIDに対応して該第2の区切コードに係る部分コード列の先頭のコードのコードIDを次コードIDとして格納したID関係表を生成する。これらのコード別ID範囲表とID関係表は検索対象のコード列毎に生成される。
【0124】
図14Aは、本発明の一実施の形態におけるコード列検索装置の機能ブロック構成例を説明する図である。第1の検索実行部110は、第1の検索コード列に基づいて検索対象のコード列を検索して部分コード列の先頭のコードのコードIDを第2の検索実行部120における最初の検索開始コードIDとして求める。
第2の検索実行部120は、第2の検索コード列に基づいて部分コード列をその先頭のコードから検索し、第2の検索コード列に適合するコード列を検索結果として出力する。
【0125】
図14Bは、本発明の一実施の形態における第1の検索実行部の機能ブロック構成例を説明する図である。第1の検索コード列読出手段111は、第1の検索コード列を読み出し、第1のコード別ID範囲読出手段112に渡す。第1のコード別ID範囲読出手段112は、コード別ID範囲表生成手段102で生成されたコード別ID範囲表より、第1の検索コード列読出手段111から渡された第1の検索コード列を構成するコードのコードIDの範囲を読み出して第1のID関係読出手段113と第1のコードID照合手段114に渡す。
【0126】
第1のID関係読出手段113は、第1のコード別ID範囲読出手段112から渡された第1の検索コード列の先頭のコードのコードID範囲に含まれるコードIDに対応して格納された次コードIDを、ID関係表生成手段103で生成されたID関係表から読み出すとともに、次のコードに対応して格納された次コードIDを順次ID関係表から読み出して第1のコードID照合手段114に渡す。
【0127】
第1のコードID照合手段114は、第1のID関係読出手段113から渡された次コードIDが第1のコード別ID範囲読出手段から渡されたコードIDの範囲に含まれるか照合し、照合結果を部分コード列取出手段115に渡す。部分コード列取出手段115は、第1のID関係読出手段113で読み出された次コードIDが第1のコード別ID範囲読出手段112で読み出された第1の検索コード列の第1の区切コードのコードID範囲に含まれるとの照合結果を受けると、その次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出し、読み出した次コードIDが第2の区切コードのコードID範囲に含まれるか判定し、読み出した次コードIDが第2の区切コードのコードID範囲に含まれると判定すると、読み出した次コードIDに対応して前記ID関係表に格納された次コードIDを部分コード列の検索開始コードIDとして設定する。
【0128】
図14Cは、本発明の一実施の形態における第2の検索実行部の機能ブロック構成例を説明する図である。第2の検索コード列読出手段121は、第2の検索コード列を読み出し、第2のコード別ID範囲読出手段122は、第2の検索コード列読出手段121により読み出された第2の検索コード列を構成する先頭のコードからコード毎に、コードの種別のコードID範囲をコード別ID範囲表から順次読み出す。
【0129】
検索開始コードID読出手段123は、部分コード列取出手段115により設定された検索開始コードID、あるいは出力コード列出力手段128により更新された検索開始コードIDを読み出す。第2のID関係読出手段124は、検索開始コードID読出手段123により読み出された検索開始コードIDに対応して格納された次コードIDをID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次ID関係表から読み出す。
【0130】
第2のコードID照合手段125は、第2のID関係読出手段124により読み出された次コードIDが第2のコード別ID範囲読出手段122により読み出されたコードIDの範囲に含まれるか判定する。コードID変換手段126は、検索開始コードID読出手段123で読み出された検索開始コードID及び第2のID関係読出手段124で読み出された次コードIDをコードに変換する。
【0131】
出力コード列記憶手段127は、コードID変換手段126で変換されたコードを順次追記して出力コード列として記憶する。
出力コード列出力手段128は、第2のコードID照合手段125により、第2のID関係読出手段124で読み出した次コードIDが第2のコード別ID範囲読出手段122で読み出した第2の検索コード列の第1の区切コードのコードID範囲に含まれると判定されると、出力コード列記憶手段127に記憶された出力コード列を、第2の検索コード列に適合する検索結果のコード列として出力するとともに、第2のID関係読出手段124で読み出した次コードIDに対応して格納された次コードIDをID関係表から読み出し、読み出した次コードIDにより検索開始コードIDを更新する。
【0132】
以上本発明を実施するための形態について詳細に説明したが、本発明の実施の形態はそれに限ることなく種々の変形が可能であることは当業者に明らかである。
また、図5A〜図5C、図6に示したコード列検索のための索引データを作成する処理とその均等物をコンピュータに実行させるプログラムにより、本発明の索引データ作成方法が実現可能であることも明らかである。さらに、図7A〜図12に示したコード列検索のため処理とその均等物をコンピュータに実行させるプログラムにより、本発明のコード列検索方法が実現可能であることも明らかである。
【0133】
したがって、上記プログラム、及びプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の実施の形態に含まれる。さらに、本発明のコード列検索のための索引データのデータ構造及びそのデータ構造を有する索引データを記録したコンピュータ読み取り可能な記録媒体も、本発明の実施の形態に含まれる。
【符号の説明】
【0134】
10 文字列
10a 検索対象コード列
11 コード位置ポインタ
20 文字位置順の接尾辞
20a 辞書順の接尾辞
30 接尾辞配列
40 検索文字列
40a 第1の検索コード列
40b 第2の検索コード列
50 圧縮接尾辞配列
101 検索対象コード列読出手段
102 コード別ID範囲表生成手段
103 ID関係表生成手段
110 第1の検索実行部
111 第1の検索コード列読出手段
112 第1のコード別ID範囲読出手段
113 第1のID関係読出手段
114 第1のコードID照合手段
115 部分コード列取出手段
120 第2の検索実行部
121 第2の検索コード列読出手段
122 第2のコード別ID範囲読出手段
123 検索開始コードID読出手段
124 第2のID関係読出手段
125 第2のコードID照合手段
126 コードID変換手段
127 出力コード列記憶手段
128 出力コード列出力手段
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 コード別ID範囲表
310 ID関係表
311 コード種別ポインタ
312 コードIDポインタ

【特許請求の範囲】
【請求項1】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索装置において、
前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表と、
前記検索対象コード列において前記第2の区切コードを除いた各コードの次に位置するコードのコードIDである次コードIDを前記コードIDに対応して格納し、前記第2の区切コードのコードIDに対応して該第2の区切コードに係る前記部分コード列の先頭のコードのコードIDを次コードIDとして格納したID関係表と、
前記コード別ID範囲表と前記ID関係表を参照して前記第1の検索コード列による検索を実行する第1の検索実行部と、
前記コード別ID範囲表と前記ID関係表を参照して前記第2の検索コード列による検索を実行する第2の検索実行部と
を備え、
前記第1の検索実行部は、
前記第1の検索コード列を読み出す第1の検索コード列読出手段と、
前記第1の検索コード列読出手段により読み出された第1の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第1のコード別ID範囲読出手段と、
前記第1のコード別ID範囲読出手段により読み出された前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれるコードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第1のID関係読出手段と、
前記第1のID関係読出手段により読み出された次コードIDが前記第1のコード別ID範囲読出手段により読み出されたコードIDの範囲に含まれるか判定する第1のコードID照合手段と、
前記第1のコードID照合手段で、前記第1のID関係読出手段で読み出した次コードIDが前記第1のコード別ID範囲読出手段で読み出した前記第1の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、該次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出し、該読み出した次コードIDが前記第2の区切コードのコードID範囲に含まれるか判定し、該読み出された次コードIDが前記第2の区切コードのコードID範囲に含まれると判定すると、該読み出された次コードIDに対応して前記ID関係表に格納された次コードIDを部分コード列の検索開始コードIDとして設定する部分コード列取出手段と、
を備え、
前記第2の検索実行部は、
前記第2の検索コード列を読み出す第2の検索コード列読出手段と、
前記第2の検索コード列読出手段により読み出された第2の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第2のコード別ID範囲読出手段と、
前記部分コード列取出手段により設定された前記検索開始コードID、あるいは後記出力コード列出力手段により更新された検索開始コードIDを読み出す検索開始コードID読出手段と、
前記検索開始コードID読出手段により読み出された前記検索開始コードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第2のID関係読出手段と、
前記第2のID関係読出手段により読み出された次コードIDが前記第2のコード別ID範囲読出手段により読み出されたコードIDの範囲に含まれるか判定する第2のコードID照合手段と、
前記検索開始コードID読出手段で読み出された検索開始コードID及び前記第2のID関係読出手段で読み出された次コードIDをコードに変換するコードID変換手段と、
前記コードID変換手段で変換されたコードを順次追記して出力コード列として記憶する出力コード列記憶手段と、
前記第2のコードID照合手段により、前記第2のID関係読出手段で読み出した次コードIDが前記第2のコード別ID範囲読出手段で読み出した前記第2の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、前記出力コード列記憶手段に記憶された出力コード列を、前記第2の検索コード列に適合する検索結果のコード列として出力するとともに、該次コードIDに対応して格納された次コードIDを前記ID関係表から読み出し、該読み出した次コードIDにより前記検索開始コードIDを更新する出力コード列出力手段と、
を備えることを特徴とするコード列検索装置。
【請求項2】
請求項1に記載のコード列検索装置において、
前記第1のコードID照合手段は、前記第1のID関係読出手段により読み出された、前記第1の検索コード列の先頭のコードである第1のコードの種別のコードID範囲に含まれるコードIDである先頭コードIDを第1コードIDとしたとき該第1コードIDに対応して格納された前記次コードIDが、前記検索対象コード列において前記第1のコードの次に位置するコードである第2のコードの種別のコードID範囲に含まれるか照合し、以後、前記第1のコードと第2のコードの前記検索コード列における位置が前記第1のコード別ID範囲読出手段及び第1のID関係読出手段の読出動作により更新されると、該位置の更新された第1のコードのコードIDに対応して格納された前記次コードIDが、該位置の更新された第2のコードの種別の前記コードID範囲に含まれるかを照合する、
ことを特徴とするコード列検索装置。
【請求項3】
請求項2に記載のコード列検索装置において、
前記出力コード列出力手段は、前記コードID変換手段により前記次コードから変換されたコードがデータコードではなく、かつ、該次コードが、前記第2のコード別ID範囲読出手段により読み出されたコードIDの範囲に含まれないと第2のコードID照合手段により判定された場合に、前記出力コード列記憶手段に記憶されている出力コード列を消去する
ことを特徴とするコード列検索装置。
【請求項4】
請求項3に記載のコード列検索装置において、
前記第1のコードID照合手段は、前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれる全てのコードIDを前記先頭コードIDとして、前記第1のID関係読出手段により読み出された次コードIDが前記コード別ID範囲読出手段により読み出されたコードIDの範囲に含まれるかを照合する、
ことを特徴とするコード列検索装置。
【請求項5】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索装置によるコード列検索方法において、
前記コード列検索装置は、
前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表と、
前記検索対象コード列において前記第2の区切コードを除いた各コードの次に位置するコードのコードIDである次コードIDを前記コードIDに対応して格納し、前記第2の区切コードのコードIDに対応して該第2の区切コードに係る前記部分コード列の先頭のコードのコードIDを次コードIDとして格納したID関係表と、
前記コード別ID範囲表と前記ID関係表を参照して前記第1の検索コード列による検索を実行する第1の検索実行部と、
前記コード別ID範囲表と前記ID関係表を参照して前記第2の検索コード列による検索を実行する第2の検索実行部とを備え、
前記第1の検索実行部により、
前記第1の検索コード列を読み出す第1の検索コード列読出ステップと、
前記第1の検索コード列読出ステップにおいて読み出された第1の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第1のコード別ID範囲読出ステップと、
前記第1のコード別ID範囲読出ステップにおいて読み出された前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれるコードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第1のID関係読出ステップと、
前記第1のID関係読出ステップにおいて読み出された次コードIDが前記第1のコード別ID範囲読出ステップにおいて読み出されたコードIDの範囲に含まれるか判定する第1のコードID照合ステップと、
前記第1のコードID照合ステップにおいて、前記第1のID関係読出ステップで読み出した次コードIDが前記第1のコード別ID範囲読出ステップで読み出した前記第1の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、該次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出し、該読み出した次コードIDが前記第2の区切コードのコードID範囲に含まれるか判定し、該読み出された次コードIDが前記第2の区切コードのコードID範囲に含まれると判定すると、該読み出された次コードIDに対応して前記ID関係表に格納された次コードIDを部分コード列の検索開始コードIDとして設定する部分コード列取出ステップと、
を実行し、
前記第2の検索実行部により、
前記第2の検索コード列を読み出す第2の検索コード列読出ステップと、
前記第2の検索コード列読出ステップにおいて読み出された第2の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第2のコード別ID範囲読出ステップと、
前記部分コード列取出ステップにおいて設定された前記検索開始コードID、あるいは後記出力コード列出力ステップにおいて更新された検索開始コードIDを読み出す検索開始コードID読出ステップと、
前記検索開始コードID読出ステップにおいて読み出された前記検索開始コードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第2のID関係読出ステップと、
前記第2のID関係読出ステップにおいて読み出された次コードIDが前記第2のコード別ID範囲読出ステップにおいて読み出されたコードIDの範囲に含まれるか判定する第2のコードID照合ステップと、
前記検索開始コードID読出ステップにおいて読み出された検索開始コードID及び前記第2のID関係読出ステップにおいて読み出された次コードIDをコードに変換するコードID変換ステップと、
前記コードID変換ステップにおいて変換されたコードを順次追記して出力コード列として記憶する出力コード列記憶ステップと、
前記第2のコードID照合ステップにおいて、前記第2のID関係読出ステップで読み出した次コードIDが前記第2のコード別ID範囲読出ステップで読み出した前記第2の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、前記出力コード列記憶ステップにおいて記憶された出力コード列を、前記第2の検索コード列に適合する検索結果のコード列として出力するとともに、該次コードIDに対応して格納された次コードIDを前記ID関係表から読み出し、該読み出した次コードIDにより前記検索開始コードIDを更新する出力コード列出力ステップと、
を実行することを特徴とするコード列検索方法。
【請求項6】
請求項5に記載のコード列検索方法において、
前記第1のコードID照合ステップは、
前記第1のID関係読出ステップで読み出された、前記第1の検索コード列の先頭のコードである第1のコードの種別のコードID範囲に含まれるコードIDである先頭コードIDを第1コードIDとしたとき該第1コードIDに対応して格納された前記次コードIDが、前記検索対象コード列において前記第1のコードの次に位置するコードである第2のコードの種別のコードID範囲に含まれるか照合し、
以後、前記第1のコードと第2のコードの前記第1の検索コード列における位置が前記第1のコード別ID範囲読出ステップ及び第1のID関係読出ステップの読出動作により更新されると、該位置の更新された第1のコードのコードIDに対応して格納された前記次コードIDが、該位置の更新された第2のコードの種別の前記コードID範囲に含まれるかを照合する、
ことを特徴とするコード列検索方法。
【請求項7】
請求項6に記載のコード列検索方法において、
前記出力コード列出力ステップは、前記コードID変換ステップにおいて前記次コードから変換されたコードがデータコードではなく、かつ、該次コードが、前記第2のコード別ID範囲読出ステップにおいて読み出されたコードIDの範囲に含まれないと第2のコードID照合ステップにおいて判定された場合に、前記出力コード列記憶ステップにおいて記憶された出力コード列を消去する、
ことを特徴とするコード列検索方法。
【請求項8】
請求項7に記載のコード列検索方法において、
前記第1のコードID照合ステップは、前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれる全てのコードIDを前記先頭コードIDとして、前記第1のID関係読出ステップで読み出された次コードIDが前記第1のコード別ID範囲読出ステップで読み出されたコードIDの範囲に含まれるかを照合する、
ことを特徴とするコード列検索方法。
【請求項9】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索装置であって、前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表と、前記検索対象コード列において前記第2の区切コードを除いた各コードの次に位置するコードのコードIDである次コードIDを前記コードIDに対応して格納し、前記第2の区切コードのコードIDに対応して該第2の区切コードに係る前記部分コード列の先頭のコードのコードIDを次コードIDとして格納したID関係表と、第1の検索実行部と、第2の検索実行部を備えたコード列検索装置の機能をコンピュータに実現させるコード列検索プログラムにおいて、
コンピュータに、
前記第1の検索実行部の機能として、
前記第1の検索コード列を読み出す第1の検索コード列読出機能と、
前記第1の検索コード列読出機能により読み出された第1の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第1のコード別ID範囲読出機能と、
前記第1のコード別ID範囲読出機能により読み出された前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれるコードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第1のID関係読出機能と、
前記第1のID関係読出機能により読み出された次コードIDが前記第1のコード別ID範囲読出機能により読み出されたコードIDの範囲に含まれるか判定する第1のコードID照合機能と、
前記第1のコードID照合機能により、前記第1のID関係読出機能で読み出した次コードIDが前記第1のコード別ID範囲読出機能で読み出した前記第1の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、該次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出し、該読み出した次コードIDが前記第2の区切コードのコードID範囲に含まれるか判定し、該読み出された次コードIDが前記第2の区切コードのコードID範囲に含まれると判定すると、該読み出された次コードIDに対応して前記ID関係表に格納された次コードIDを部分コード列の検索開始コードIDとして設定する部分コード列取出機能、
を実現させ、
前記第2の検索部の機能として、
前記第2の検索コード列を読み出す第2の検索コード列読出機能と、
前記第2の検索コード列読出機能により読み出された第2の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第2のコード別ID範囲読出機能と、
前記部分コード列取出機能により設定された前記検索開始コードID、あるいは後記出力コード列出力機能により更新された検索開始コードIDを読み出す検索開始コードID読出機能と、
前記検索開始コードID読出機能により読み出された前記検索開始コードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第2のID関係読出機能と、
前記第2のID関係読出機能により読み出された次コードIDが前記第2のコード別ID範囲読出機能により読み出されたコードIDの範囲に含まれるか判定する第2のコードID照合機能と、
前記検索開始コードID読出機能により読み出された検索開始コードID及び前記第2のID関係読出機能により読み出された次コードIDをコードに変換するコードID変換機能と、
前記コードID変換機能により変換されたコードを順次追記して出力コード列として記憶する出力コード列記憶機能と、
前記第2のコードID照合機能により、前記第2のID関係読出機能で読み出した次コードIDが前記第2のコード別ID範囲読出機能で読み出した前記第2の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、前記出力コード列記憶機能により記憶された出力コード列を、前記第2の検索コード列に適合する検索結果のコード列として出力するとともに、該次コードIDに対応して格納された次コードIDを前記ID関係表から読み出し、該読み出した次コードIDにより前記検索開始コードIDを更新する出力コード列出力機能、
を実現させることを特徴とするコード列検索プログラム。
【請求項10】
請求項9に記載のコード列検索プログラムにおいて、
前記第1のコードID照合機能は、
前記第1のID関係読出機能により読み出された、前記第1の検索コード列の先頭のコードである第1のコードの種別のコードID範囲に含まれるコードIDである先頭コードIDを第1コードIDとしたとき該第1コードIDに対応して格納された前記次コードIDが、前記検索対象コード列において前記第1のコードの次に位置するコードである第2のコードの種別のコードID範囲に含まれるか照合する機能と、
以後、前記第1のコードと第2のコードの前記第1の検索コード列における位置が前記第1のコード別ID範囲読出機能及び第1のID関係読出機能による読出動作により更新されると、該位置の更新された第1のコードのコードIDに対応して格納された前記次コードIDが、該位置の更新された第2のコードの種別の前記コードID範囲に含まれるかを照合する機能を含む、
ことを特徴とするコード列検索プログラム。
【請求項11】
請求項10に記載のコード列検索プログラムにおいて、
前記出力コード列出力機能は、前記コードID変換機能により前記次コードから変換されたコードがデータコードではなく、かつ、該次コードが、前記第2のコード別ID範囲読出機能により読み出されたコードIDの範囲に含まれないと第2のコードID照合機能により判定された場合に、前記出力コード列記憶機能により記憶されている出力コード列を消去する機能を含む、
ことを特徴とするコード列検索プログラム。
【請求項12】
請求項11に記載のコード列検索プログラムにおいて、
前記第1のコードID照合機能は、前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれる全てのコードIDを前記先頭コードIDとして、前記第1のID関係読出機能により読み出された次コードIDが前記コード別ID範囲読出機能により読み出されたコードIDの範囲に含まれるかを照合する機能を含む、
ことを特徴とするコード列検索プログラム。
【請求項13】
請求項9〜請求項12のいずれか1項に記載のコード列検索プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項14】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索のためのデータ構造において、
前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表と、前記検索対象コード列において前記第2の区切コードを除いた各コードの次に位置するコードのコードIDである次コードIDを前記コードIDに対応して格納し、前記第2の区切コードのコードIDに対応して該第2の区切コードに係る前記部分コード列の先頭のコードのコードIDを次コードIDとして格納したID関係表と
を備え、
第1の検索実行部と、第2の検索実行部と、前記コード別ID範囲表と前記ID関係表を記憶する記憶部を備えたコード列検索装置が、
前記第1の検索実行部により、
前記第1の検索コード列を読み出す第1の検索コード列読出ステップと、
前記第1の検索コード列読出ステップにおいて読み出された第1の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第1のコード別ID範囲読出ステップと、
前記第1のコード別ID範囲読出ステップにおいて読み出された前記第1の検索コード列の先頭のコードの種別のコードID範囲に含まれるコードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第1のID関係読出ステップと、
前記第1のID関係読出ステップにおいて読み出された次コードIDが前記第1のコード別ID範囲読出ステップにおいて読み出されたコードIDの範囲に含まれるか判定する第1のコードID照合ステップと、
前記第1のコードID照合ステップにおいて、前記第1のID関係読出ステップで読み出した次コードIDが前記第1のコード別ID範囲読出ステップで読み出した前記第1の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、該次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出し、該読み出した次コードIDが前記第2の区切コードのコードID範囲に含まれるか判定し、該読み出された次コードIDが前記第2の区切コードのコードID範囲に含まれると判定すると、該読み出された次コードIDに対応して前記ID関係表に格納された次コードIDを部分コード列の検索開始コードIDとして設定する部分コード列取出ステップと、
を実行し、
前記第2の検索実行部により、
前記第2の検索コード列を読み出す第2の検索コード列読出ステップと、
前記第2の検索コード列読出ステップにおいて読み出された第2の検索コード列を構成する先頭のコードからコード毎に、該コードの種別のコードID範囲を前記コード別ID範囲表から順次読み出す第2のコード別ID範囲読出ステップと、
前記部分コード列取出ステップにおいて設定された前記検索開始コードID、あるいは後記出力コード列出力ステップにおいて更新された検索開始コードIDを読み出す検索開始コードID読出ステップと、
前記検索開始コードID読出ステップにおいて読み出された前記検索開始コードIDに対応して格納された前記次コードIDを前記ID関係表から読み出し、以後、読み出された次コードIDに対応して格納された次コードIDを順次前記ID関係表から読み出す第2のID関係読出ステップと、
前記第2のID関係読出ステップにおいて読み出された次コードIDが前記第2のコード別ID範囲読出ステップにおいて読み出されたコードIDの範囲に含まれるか判定する第2のコードID照合ステップと、
前記検索開始コードID読出ステップにおいて読み出された検索開始コードID及び前記第2のID関係読出ステップにおいて読み出された次コードIDをコードに変換するコードID変換ステップと、
前記コードID変換ステップにおいて変換されたコードを順次追記して出力コード列として記憶する出力コード列記憶ステップと、
前記第2のコードID照合ステップにおいて、前記第2のID関係読出ステップで読み出した次コードIDが前記第2のコード別ID範囲読出ステップで読み出した前記第2の検索コード列の前記第1の区切コードのコードID範囲に含まれると判定されると、前記出力コード列記憶ステップにおいて記憶された出力コード列を、前記第2の検索コード列に適合する検索結果のコード列として出力するとともに、該次コードIDに対応して格納された次コードIDを前記ID関係表から読み出し、該読み出した次コードIDにより前記検索開始コードIDを更新する出力コード列出力ステップと、
を実行することにより、
前記検索対象コード列の前記第1の検索コード列と第2の検索コード列による検索の実行を可能とする
ことを特徴とするコード列検索のためのデータ構造。
【請求項15】
請求項14に記載されたデータ構造を有するデータが記録されたコンピュータ読み取り可能な記録媒体。
【請求項16】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索のための索引データ作成装置において、
前記検索対象コード列を読み出し、該読み出した検索対象コード列のコードの種別毎の出現回数を求める検索対象コード列読出手段と
前記検索対象コード列読出手段が求めたコードの種別毎の出現回数に基づいて、前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表を生成するコード別ID範囲表生成手段と、
前記検索対象コード列読出手段が読み出した検索対象コード列と前記コード別ID範囲表に基づき、前記コードIDに対応して、前記検索対象コード列において該コードIDに係るコードの次に位置するコードのコードIDである次コードIDを格納したID関係表を生成するID関係表生成手段と、
を備え、
前記ID関係表生成手段は、前記第2の区切コードのコードIDに対応して、該第2の区切コードが区切る前記部分コード列の先頭のコードのコードIDを、該第2の区切コードの次に位置するコードのコードIDに替えて、前記ID関係表に格納する、
ことを特徴とする索引データ作成装置。
【請求項17】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索のための索引データ作成装置による索引データ作成方法において、
前記検索対象コード列を読み出し、該読み出した検索対象コード列のコードの種別毎の出現回数を求める検索対象コード列読出ステップと
前記検索対象コード列読出ステップで求めたコードの種別毎の出現回数に基づいて、前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表を生成するコード別ID範囲表生成ステップと、
前記検索対象コード列読出ステップで読み出した検索対象コード列と前記コード別ID範囲表生成ステップで生成されたコード別ID範囲表に基づき、前記コードIDに対応して、前記検索対象コード列において該コードIDに係るコードの次に位置するコードのコードIDである次コードIDを格納したID関係表を生成するID関係表生成ステップと、
を備え、
前記ID関係表生成ステップにおいて、前記第2の区切コードのコードIDに対応して、該第2の区切コードが区切る前記部分コード列の先頭のコードのコードIDを、該第2の区切コードの次に位置するコードのコードIDに替えて、前記ID関係表に格納する、
ことを特徴とする索引データ作成方法。
【請求項18】
データを表すデータコードあるいはデータコード列と該データコードあるいはデータコード列の区切位置を示す第1の区切コードと、前記データコードあるいはデータコード列と前記第1の区切コードの組み合わせからなる部分コード列の区切位置を示す第2の区切コードから構成される検索対象である検索対象コード列を、前記データコードあるいはデータコード列と前記第1の区切コードから構成される第1の検索コード列により検索して該第1の検索コード列を含む前記部分コード列を求め、該求められた部分コード列を、前記第1の区切コードあるいは第1の区切コードから構成されるコード列である第2の検索コード列により検索し、該第2の検索コード列に適合する前記データコードあるいはデータコード列を出力コード列として出力するコード列検索のための索引データ作成方法をコンピュータに実行させる索引データ作成プログラムにおいて、
前記検索対象コード列を読み出し、該読み出した検索対象コード列のコードの種別毎の出現回数を求める検索対象コード列読出ステップと
前記検索対象コード列読出ステップで求めたコードの種別毎の出現回数に基づいて、前記検索対象コード列に位置する全ての各コードを一意に識別するコードIDの範囲であるコードID範囲を同一種別のコード毎に格納したコード別ID範囲表を生成するコード別ID範囲表生成ステップと、
前記検索対象コード列読出ステップで読み出した検索対象コード列と前記コード別ID範囲表生成ステップで生成されたコード別ID範囲表に基づき、前記コードIDに対応して、前記検索対象コード列において該コードIDに係るコードの次に位置するコードのコードIDである次コードIDを格納したID関係表を生成するID関係表生成ステップと、
を備え、
前記ID関係表生成ステップにおいて、前記第2の区切コードのコードIDに対応して、該第2の区切コードが区切る前記部分コード列の先頭のコードのコードIDを、該第2の区切コードの次に位置するコードのコードIDに替えて、前記ID関係表に格納する、
索引データ作成方法をコンピュータに実行させることを特徴とする索引データ作成プログラム。
【請求項19】
請求項18に記載の索引データ作成プログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。

【図1A】
image rotate

【図1B】
image rotate

【図2A】
image rotate

【図2B】
image rotate

【図2C】
image rotate

【図2D】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図5C】
image rotate

【図6】
image rotate

【図7A】
image rotate

【図7B】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14A】
image rotate

【図14B】
image rotate

【図14C】
image rotate


【公開番号】特開2011−145991(P2011−145991A)
【公開日】平成23年7月28日(2011.7.28)
【国際特許分類】
【出願番号】特願2010−8245(P2010−8245)
【出願日】平成22年1月18日(2010.1.18)
【出願人】(506235616)株式会社エスグランツ (32)
【Fターム(参考)】