(57)【特許請求の範囲】
【請求項１】
検索処理部とインデックス生成部とを有し、
前記インデックス生成部は、検索対象となるテキストを入力し、前記検索対象テキストを、前記検索処理部が入力した検索文字列の長さの文字列に文字配列をそのままに各文字を先頭に分割し、それぞれの分割された文字列にその文字列が前記検索対象テキストにおいて出現する位置に関する情報を付加してインデックスを作成し、これらのインデックスをソートしてインデックスファイルを作成し、
前記検索処理部は、前記インデックスの中から前記検索文字列と同一の文字列を検索する、ことを特徴とする文字列検索装置。
【請求項２】
検索対象となるテキストと、検索文字列とを入力し、前記検索対象テキストを、前記検索文字列の長さの文字列に文字配列をそのままに各文字を先頭に分割し、それぞれの分割された文字列にその文字列が前記検索対象テキストにおいて出現する位置に関する情報を付加してインデックスを作成し、これらのインデックスをソートし、
前記インデックスの中から前記検索文字列と同一の文字列を検索する、ことを特徴とする文字列検索方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、テキストファイル中から任意の文字列を検索する装置とその方法に係り、特に検索対象のテキストファイルについて機械的な文字列分割によってインデックスファイルを作成し、このインデックスファイルを用いて任意の文字列を効率よく検索することができる文字列検索装置およびその方法に関する。
【０００２】
【従来の技術】
一般に、コンピュータやワードプロセッサの分野では、テキストファイル（文書ファイル）から、任意の文字列を検索する技術は不可欠である。特に、最近ではコンピュータ等が取り扱うテキスト（文書）の量が膨大化しているので、確実かつ効率よく所定の文字列を検索する要求が高まっていた。
【０００３】
また、電子通信分野でも、通信ネットワーク上に多数のユーザーがメッセージを掲載するようになったので、掲載されている大量な情報の中から自分が求める情報を検索するために、大量なテキストから任意の文字列を効率よく検索する技術の開発が求められていた。
【０００４】
ところで、欧米の言語は、単語と単語の間にスペースが挿入されているので、このスペースを標識として一連のテキストから単語を抽出することが容易である。技術的に言えば、欧米の言語は一文字が一バイトになっており、スペースなどをそれを表すバイトによって検出することが簡単である。したがって、検索対象となるテキストについて、スペースを区切りとして単語と、テキストにおけるその単語の位置とを予め抽出してインデックスファイルを作成しておけば、そのインデックスファイルを参照することにより、検索しようとする単語や文字列の有無と、存在する場合の位置とを素早く検索することができる。
【０００５】
しかし、日本語や韓国語や中国語は、句読点があるものの、単語と単語が連続して文章を構成しており、かつ、一文字が複数バイトによって表される言語は（このことからこれらの言語をマルチバイト言語という）、インデックスファイルを作成するのが容易ではない。
【０００６】
すなわち、日本語等の場合は、文字列をいずれの位置で区切って単語として抽出するかは、単純なバイトの照合から判断することが困難である。このため、これらのマルチバイト言語は、辞書を用意しておき、文章の構文解析を行った後なければ、単語を単語として文字列から抽出することができない。
【０００７】
そこで、従来のマルチバイト言語の文字列検索は、主に以下の３つの方法のいずれかの方法によって行っていた。
【０００８】
(1) 単純検索による方法
ワードプロセッサの分野で一般に行われているように、インデックスファイルを作成することなく、文字列を検索するときは、テキスト全体について一致する文字列を検索する方法である。
【０００９】
(2) キーワード検索による方法
ある種のデータベースのように、所定のテキストに対してユーザが予めキーワードを指定することにより、インデックスファイルを作成しておき、そのインデックスファイルを利用して文字列を検索する方法である。
【００１０】
(3) インデックスファイルによる全文検索の方法
辞書を用意し、テキストを形態索解析等の手法を用いてテキスト全部を自動的に単語に分割してインデックスファイルを作成し、そのインデックスファイルを用いてテキストの全文から文字列を検索する方法である。
【００１１】
【発明が解決しようとする課題】
しかしながら、上記従来の文字列検索方法では、最近の、あるいは近い将来さらに顕著になる大テキストからの文字列検索を効率よく行うことはできなかった。
【００１２】
すなわち、上記単純検索の方法では、テキストの最初から逐一的に同一文字列を検索するので、大きなテキストを検索するには時間がかかり過ぎて実用に適していない。
【００１３】
次に、上記キーワード検索の方法では、ユーザーがテキストについてキーワードを入力しなければならないので、入力の時間と手間がかかる上に、入力したキーワード以外の文字列を検索するできないという問題があった。
【００１４】
最後に、上記インデックスファイルによる全文検索の方法では、テキストを構文解析するための時間がかかる上に、その構文解析によっても完全に単語を正確に分割することができなかった。たとえば、現在の構文解析の技術では「新党さきがけ」のような漢字とひらがなとからなる単語は、単語として抽出するのが困難であった。さらに、次々に生み出される新語を辞書に登録しなければ、新語を単語として抽出することができないので、継続的に辞書をメンテナンスしなければならなかった。
【００１５】
このため、検索するための準備を含めて、大量の文字を含むテキストから任意の文字列を簡単に検索する簡便な技術の開発が求められていた。
【００１６】
そこで、本願発明が解決しようとする課題は、辞書のメンテナンスや構文解析を行うことなく文字列検索のためのインデックスファイルを自動作成でき、このインデックスファイルを用いて任意の文字列を検索する文字列検索装置およびその検索方法を提供することにある。
【００１８】
【課題を解決するための手段】
本願発明に係る文字列検索装置は、
検索処理部とインデックス生成部とを有し、
前記インデックス生成部は、検索対象となるテキストを入力し、前記検索対象テキストを、前記検索処理部が入力した検索文字列の長さの文字列に文字配列をそのままに各文字を先頭に分割し、それぞれの分割された文字列にその文字列が前記検索対象テキストにおいて出現する位置に関する情報を付加してインデックスを作成し、これらのインデックスをソートしてインデックスファイルを作成し、
前記検索処理部は、前記インデックスの中から前記検索文字列と同一の文字列を検索する、ことを特徴とするものである。
また、本願発明に係る文字列検索方法は、
検索対象となるテキストと、検索文字列とを入力し、前記検索対象テキストを、前記検索文字列の長さの文字列に文字配列をそのままに各文字を先頭に分割し、それぞれの分割された文字列にその文字列が前記検索対象テキストにおいて出現する位置に関する情報を付加してインデックスを作成し、これらのインデックスをソートし、
前記インデックスの中から前記検索文字列と同一の文字列を検索する、ことを特徴とするものである。
【００１９】
【発明の実施の形態】
次に、本願発明の文字列検索装置およびその検索方法の実施形態について、添付の図面を用いて以下に説明する。
【００２０】
図１は、本発明による文字列検索装置の構成とその処理の流れを示したものである。図１に示すように、本発明による文字列検索装置１は、インデックス生成部２と検索処理部３とからなる。インデックス生成部２は、検索対象となるテキスト４を入力し、これを後述の方法で処理してインデックスファイル５を自動的に作成する。
【００２１】
一方、検索処理部３は、検索対象である検索文字列６を入力し、後述する検索のための処理を行って検索文字列を生成し、インデックスファイル５を参照することにより、検索文字列とその位置７を出力する。
【００２２】
次に上記インデックス生成部２と検索処理部３における処理をさらに説明する。
【００２３】
図２は、インデックス生成部２におけるインデックス生成のための処理の流れを示している。
図２に示すように、インデックス生成部２は、最初に検索対象となるテキストを入力し（ステップ１００）、これを固定長の文字列に分割する（ステップ１１０）。
【００２４】
つまり、インデックス生成部２は、検索対象となるテキストを入力すると、その構文（単語や助詞や接続詞等の別）に拘わらず、一定の長さの文字列（この文字列の長さを固定長という）に分割する。
【００２５】
たとえば、検索対象となるテキストを「辞書や単語分割機能を有する」とし、固定長をｎ＝３とすると、ステップ１１０では上記テキストを、
「辞書や」
「書や単」
「や単語」
「単語分」
「語分割」
「分割機」
「割機能」
「機能を」
「能を有」
「を有す」
「有する」
「する  」
「る    」
の１３個の固定長文字列に分割する。
【００２６】
次に上記固定長文字列にその出現する位置の情報、すなわち、検索対象テキストの最初の文字からその固定長文字列の先頭文字までの文字数を示す数値を付す（ステップ１２０）。
【００２７】
上記検索対象テキスト「辞書や単語分割機能を有する」の例で言えば、
「辞書や，０」
「書や単，１」
「や単語，２」
「単語分，３」
「語分割，４」
「分割機，５」
「割機能，６」
「機能を，７」
「能を有，８」
「を有す，９」
「有する，１０」
「する  ，１１」
「る    ，１２」
というように、各固定長文字列とその位置情報とをペアとして、１３個のインデックスを生成する。
【００２８】
なお、上記位置情報は検索対象テキストの最初の文字から固定長文字列の先頭文字までの文字数に限られず、検索対象テキストの末尾の文字からの文字数でもよく、また、一定の関数として与えてもよい。
【００２９】
次に、これらのインデックスをその先頭文字によって一定の順序に並べ替える（この操作をソートという）（ステップ１３０）。
【００３０】
上記インデックス「辞書や，０」，…，「る    ，１２」の例で言えば、
「する  ，１１」
「や単語，２」
「る    ，１２」
「を有す，９」
「割機能，６」
「機能を，７」
「語分割，４」
「辞書や，０」
「書や単，１」
「単語分，３」
「能を有，８」
「分割機，５」
「有する，１０」
というように、ソートする。ソートしたインデックスはインデックスファイルとして出力する（ステップ１４０）。
【００３１】
上記インデックス生成の処理で注目すべきことは、この処理方法によれば、インデックスを作成するのに、辞書を用意することもなく、また、困難な構文解析も行うことなく、機械的にテキストからインデックスを生成することができる点にある。このインデックスはソートによって後述するように検索が容易となる。
【００３２】
次に、上記インデックスの使用方法、すなわち、検索処理部３による処理を図３を用いて説明する。
図３に示すように、検索処理部３は、検索文字列を入力し（ステップ２００）、その長さを判断して、固定長と比較することによってその後の処理を振り分ける（ステップ２１０）。
【００３３】
最初に、検索文字列の長さｍと固定長ｎが等しい場合について説明する。
検索文字列の長さｍと固定長ｎが等しいときは、検索文字列と同一の文字列をインデックスファイルから検索する（ステップ２２０）。
【００３４】
たとえば、前記インデックスファイルを作成した「辞書や単語分割機能を有する」から、「語分割」という検索文字列を検索する場合がこれに該当する。
【００３５】
すなわち、検索文字列「語分割」の長さは３文字ゆえ、ｍ＝３となり、前述した固定長ｎ＝３と等しい（ｍ＝ｎ）。この場合は、前述したソートしたインデックスから同一の文字列を検索すればよい。インデックスの文字列には位置情報が付加されているので、その文字列の位置も知ることができる。
【００３６】
ここで注目すべきことは、前述したようにインデックスファイルはインデックスをソートしているので、全部を検索する必要がなく、「語」を先頭文字とする「語分割，４」なるインデックスを直ちに検索することができることである。これにより、従来の単純検索の方法に比べてはるかに効率的に検索することができる。
【００３７】
上記例ではインデックス「語分割，４」を得ることにより、テキストの最初の文字から４番目に「語分割」なる文字列が存在することを知ることができる。
【００３８】
次に、検索文字列の長さｍが固定長ｎより小さい場合について説明する。
検索文字列の長さｍが固定長ｎより小さいときは、検索文字列にワイルドカードを補充してワイルドカード文字列を作成し（ステップ２３０）、インデックスファイルから該当する文字列を検索する（ステップ２４０）。
【００３９】
たとえば、前記例の「辞書や単語分割機能を有する」から、「分割」という検索文字列を検索する場合がこれに該当する。この場合、検索文字列「分割」の長さは２文字ゆえ、ｍ＝２となり、前述した固定長ｎ＝３より小さい（ｍ＜ｎ）。
【００４０】
このときは、「分割＊」なるワイルドカード文字列をインデックスファイルから検索する。ここで「＊」がワイドカード文字であり、このワイルドカード文字に該当する部分は任意の文字であってよい。
【００４１】
上記インデックスファイル「辞書や，０」，…，「る    ，１２」の例で言えば、「分割＊」に該当する文字列として「分割機，５」なるインデックスを得ることができる。これによって、検索文字列「分割」はテキストの最初の文字から５番目に存在することを知ることができる。
【００４２】
ここで、注目すべきことは、ｍ＜ｎの場合、ワイルドカード文字＊は検索文字の後尾に付し、先頭文字によってソートされたインデックスの該当部分に直ちにアクセスことができることである。インデックスは、テキストの各文字を先頭として作成されているので、上述方法でも検索漏れを生じることがない。
【００４３】
最後に、検索文字列の長さｍが固定長ｎより大きい場合について説明する。
検索文字列の長さｍが固定長ｎより大きいときは、検索文字列を固定長文字列に分割し（ステップ２５０）、後述するフレーズ式を作成し（ステップ２６０）、インデックスファイルから該当するフレーズ式を検索する（ステップ２７０）。
【００４４】
たとえば、前記例の「辞書や単語分割機能を有する」から「単語分割機能を」という検索文字列を検索する場合がｍ＞ｎの場合に該当する。最初に「単語分割機能を」からフレーズ式を作成する。ここで、フレーズ式とは、文字列「○○○」と文字列「△△△」を含む検索文字列（これをフレーズという）において、文字列「○○○」と文字列「△△△」の先頭文字どうしがｐ文字離れて出現する場合に、これを「○○○」＜ｐ＞「△△△」と表し、この「○○○」＜ｐ＞「△△△」をフレーズ式という。なお、ｐがｎ（＝３）より小さい場合は、文字列「○○○」と文字列「△△△」の一部または全部が重複して場合であるが、これらも全く同一の方法によって上記フレーズ式に表すことができる。
【００４５】
上記文字列「○○○」と文字列「△△△」を含む検索文字列を検索するには、ｐ文字離れた「○○○」というインデックスと「△△△」というインデックスとを検索すればよい。
【００４６】
上記「辞書や単語分割機能を有する」から「単語分割機能を」という検索文字列を検索する例では、「単語分割機能を」から、
「単語分」＜３＞「割機能」＜１＞「機能を」
あるいは、「単語分」＜２＞「分割機」＜２＞「機能を」のようなフレーズ式を作成する。ここで、上記２つのフレーズ式は互いに等価であり、フレーズ式は検索文字列の全体をカバーしていればよい。
【００４７】
次にインデックス「辞書や，０」，…，「る    ，１２」から、上記フレーズ式に該当するインデックスを検索する。
【００４８】
これにより、インデックス「単語分，３」〜「機能を，７」が検索され、検索文字列は検索対象のテキストの最初の文字から３文字目に出現することを知ることができる。
【００４９】
上記フレーズ検索機能によれば、インデックス固定長より長い文字列も予め用意したインデックスファイルを用いて検索でき、インデックスファイルがソートされていることから、目的とする文字列を素早く検索することができる。
【００５０】
以上で上記実施形態の説明を終了するが、上記実施形態は、検索対象テキストについて予め固定長を定めてインデックスファイルを作成し、このインデックスファイルを用いて検索文字列を検索するものである。しかし、本発明の方法を用いれば、異なる検索方法も可能となる。以下にその検索方法について説明する。
【００５１】
上記異なる検索方法とは、予めインデックスファイルを作成することなく、検索する際に、検索文字列の長さに合わせて検索対象のテキストを分割する方法である。
【００５２】
この方法は、比較的少量、かつ、保存すべき期間が短いテキストに対しては有効なものである。
【００５３】
この方法によれば、所定の検索対象テキストに対して検索文字列を入力すると、その文字列の長さを固定長として検索対象テキストを分割してインデックスを作成する。
【００５４】
この場合、検索文字列の長さに満たないテキスト末端部のインデックスは作成を省略する。このようなインデックスは検索文字列と一致しないことが明らかだからである。
【００５５】
たとえば、「辞書や単語分割機能を有する」というテキストから「単語分割機能を有する」という文字列を検索しようとする場合、固定長ｎ＝１０（＝ｍ）として、「辞書や単語分割機能を有する」から、下記のインデックスを作成する。
【００５６】
「辞書や単語分割機能を，０」
「書や単語分割機能を有，１」
「や単語分割機能を有す，２」
「単語分割機能を有する，３」
このとき、９文字以下のインデックス、すなわち、「語分割機能を有する  ，４」〜「る                  ，１２」を作成する必要がない。これらには検索文字列は含まれていないことが明らかだからである。
【００５７】
次にインデックスをソートする。上記例では、下記のように並べ変える。
【００５８】
「や単語分割機能を有す，２」
「辞書や単語分割機能を，０」
「書や単語分割機能を有，１」
「単語分割機能を有する，３」
この状態で検索文字列「単語分割機能を有する」と同一の文字列をインデックスから検索すれば、求める文字列の位置を知ることができる。上記例では文字列「単語分割機能を有する」がテキストの最初の文字から３文字目に存在することを知ることができる。
【００５９】
ここで注目すべき点は、この方法によれば、すべてのテキストについてインデックスを作成しておく必要がなく、記憶装置の利用効率を高くすることができるという点と、長い検索文字列を検索する場合、テキストの後尾のｎより短い文字列についてインデックスを作成する必要がなく、インデックスの作成が簡単であり、かつ、文字列の検索方法が同一文字列の発見であるのできわめて簡単である点にある。
【００６０】
したがって、比較的少量、かつ、保存すべき期間が短いテキストに対しては有効な検索方法であり、特に、長い文字列を検索する場合にきわめて効率よく検索することができる。
【００６１】
【発明の効果】
以上の説明から明らかなように、本発明による文字列検索装置およびその検索方法は、検索対象となるテキストの構文解析することなく、したがって構文解析のための辞書を用意することなく、機械的に一定長の文字列からなるインデックスを作成して、これらのインデックスをソートしておくことができる。
【００６２】
このインデックスを利用し、文字列を検索するときは、同一文字列検索、ワイルドカード文字列検索、フレーズ式検索のいずれかによって、検索文字列の長さに拘わらず、任意の長さの検索文字列を検索することができる。
【００６３】
これにより、大容量のテキストを多数検索する場合も、機械的な処理によってインデックスを作成しておき、任意の文字列を素早く、かつ、確実に検索することが可能となる。
【図面の簡単な説明】
【図１】本願発明による文字列検索装置の構成とその処理の流れを示したブロック図。
【図２】本願発明による文字列検索装置のインデックス生成部における処理を示したフローチャート。
【図３】本願発明による文字列検察装置の検索処理部における処理を示したフローチャート。
【符号の説明】
１  文字列検察装置
２  インデックス生成部
３  検索処理部
４  検索対象となるテキスト
５  インデックスファイル
６  検索文字列
７  検索しようとする文字列とその位置
【図１】
0004183767.tif 000002
【図２】
0004183767.tif 000003
【図３】
0004183767.tif 000004