(57)【要約】【課題】検索対象となる文の構造を解析せず、かつ、アドレスを保持しない形でテキスト検索を高速に実施すること。【解決手段】検索装置１００は、検索条件外文字列に包含される検索条件文字列の数に１を加算した数のスタック枠をスタック１５０ｃに作成し、テキスト中の文字列をオートマトンデータ１５０ｂに順次入力し、テキスト中の文字列が検索条件文字または検索条件外文字列にヒットするか否かを判断して、スタック１５０ｃに該当をプッシュ、あるいは該当を非該当に変更することにより、検索対象のテキストであるか否かを判定する。【選択図】        図４
2010049650.tif 000002
【特許請求の範囲】
【請求項１】
検索装置が、
テキストの検索条件となるキーワードを示す検索条件文字列と、前記検索条件の対象外となるキーワードを示す検索条件外文字列とを取得するステップと、
複数のテキストを記憶した記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を記憶部に登録し、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記記憶部に登録された該当を非該当に変更するステップと、
前記記憶部に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力するステップと、
を有することを特徴とする検索方法。
【請求項２】
前記検索条件文字列と前記検索条件外文字列とを取得した場合に、前記検索条件外文字列に包含される前記検索条件文字列の数に１を加算した数のスタック枠を前記記憶部に作成し、前記記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を前記スタック枠にプッシュし、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする請求項１に記載の検索方法。
【請求項３】
前記スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする請求項２に記載の検索方法。
【請求項４】
前記検索条件文字列と前記検索条件外文字列とを取得した場合に、前記検索条件文字列を受理するノードと前記検索条件外文字列を受理するノードとを有するＡＣオートマトンを作成し、前記記憶装置から抽出したテキストの文字列を前記ＡＣオートマトンに入力し、前記検索条件文字列を受理するノードに遷移した場合には、該当を前記スタック枠にプッシュし、前記検索条件外文字列を受理するノードに遷移した場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする請求項２または３に記載の検索方法。
【請求項５】
コンピュータに、
テキストの検索条件となるキーワードを示す検索条件文字列と、前記検索条件の対象外となるキーワードを示す検索条件外文字列とを取得する取得手順と、
複数のテキストを記憶した記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を記憶部に登録し、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記記憶部に登録された該当を非該当に変更する変更手順と、
前記記憶部に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力する出力手順と、
を実行させることを特徴とする検索プログラム。
【請求項６】
前記変更手順は、前記検索条件外文字列に包含される前記検索条件文字列の数に１を加算した数のスタック枠を前記記憶部に作成し、前記記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を前記スタック枠にプッシュし、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記出力手順は、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする請求項５に記載の検索プログラム。
【請求項７】
前記出力手順は、前記スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする請求項６に記載の検索プログラム。
【請求項８】
前記検索条件文字列と前記検索条件外文字列とを取得した場合に、前記検索条件文字列を受理するノードと前記検索条件外文字列を受理するノードとを有するＡＣオートマトンを作成する作成手段を更にコンピュータに実行させ、前記変更手順は、前記記憶装置から抽出したテキストの文字列を前記ＡＣオートマトンに入力し、前記検索条件文字列を受理するノードに遷移した場合には、該当を前記スタック枠にプッシュし、前記検索条件外文字列を受理するノードに遷移した場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記出力手順は、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする請求項６または７に記載の検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、テキストを検索する検索方法および検索プログラムに関し、特に、検索対象となる文の構造を解析せず、かつ、アドレスを保持しない形でテキスト検索を高速に実施することができる検索方法および検索プログラムに関するものである。
【背景技術】
【０００２】
検索条件となるキーワード（以下、検索条件文字列）を指定して全文テキスト検索を行う場合に、検索条件文字列に類似したキーワードのみが含まれるテキストを誤って検索してしまうという問題を解消する必要があった。例えば、検索条件文字列を「京都」として検索すると、「東京都で実施されている」等のテキストが検索されてしまう場合があった（東京都と京都は別物であるため、「東京都で実施されている」は検索されるべきではない）。
【０００３】
従来、テキスト検索技術として、形態素解析方式およびＮｇｒａｍ方式が有名だが、各技術について以下に示す欠点がある。まず、形態素解析方式では、「京都」で検索しても「東京都」でヒットすることはない。しかし、形態素解析方式では、検索辞書を予め定義する必要があり、新しい語句・マイナーな語句・検索としては一般的でない変った検索語句等は辞書定義から漏れてしまい、頻繁に再定義しても完全な定義は不可能であり、また、定義作業にかかる負担が大きかった。
【０００４】
これに対して、Ｎｇｒａｍ方式では、入力された文章を「Ｎ文字の文字列として区切る」方式で、文章に含まれる単語を無視し、Ｎ文字単位を単語として認識されるため、形態素解析方式のような辞書は不要となる。しかし、「京都」で検索すると、「東京都」を含むテキストが出力される一方で、「東京都」を除外条件に指定した検索（除外条件文字列に検索条件文字列が包含された場合の検索）をすると、「京都」と「東京都」との両方を含むテキスト（例えば、「京都と東京都で実施されている」等のテキスト）まで出力されなくなってしまう。
【０００５】
上記したＮｇｒａｍ方式の欠点を補うものとして、ヒットしたキーワードの存在場所（アドレス）を保持しておき、ヒットしたキーワード前後の文字列を取り出して除外条件文字列であるか否かを確認することで、例えば、検索条件文字列「京都」、除外条件文字列「東京都」を指定した場合でも、検索条件文字列を含むテキスト（例えば、「京都と東京都で実施されている」等のテキスト）を検索することができる（例えば、特許文献１参照）。
【０００６】
【特許文献１】特開２００３−２０３０９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、Ｎｇｒａｍ方式の欠点を補う従来の検索方式を用いたとしても、アドレスを保持するためのメモリ消費量が多くなると共に、再度、除外条件文字列であるか否かを確認する必要があるため、高速に検索処理を実行することができないという問題があった。
【０００８】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、検索対象となる文の構造を解析せず、かつ、アドレスを保持しない形でテキスト検索を高速に実施することができる検索方法および検索プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、この検索方法は、検索装置が、テキストの検索条件となるキーワードを示す検索条件文字列と、前記検索条件の対象外となるキーワードを示す検索条件外文字列とを取得するステップと、複数のテキストを記憶した記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を記憶部に登録し、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記記憶部に登録された該当を非該当に変更するステップと、前記記憶部に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力するステップと、を有することを要件とする。
【発明の効果】
【００１０】
この検索方法によれば、検索対象となるテキストの構造を解析せず、かつ、テキスト中に含まれる文字のアドレスを保持することなく、テキスト中の文字列と、検索条件文字列および検索条件外文字列とを順次照合し、照合結果に応じて記憶部に該当を登録、または登録した該当を非該当に変更し、最終的に、記憶部に該当が残っている場合に、記憶装置から抽出したテキストを検索結果として出力するので、ハードウェア資源を節約でき、高速にテキスト検索を実行することができる。
【発明を実施するための最良の形態】
【００１１】
以下に添付図面を参照して、この発明に係る検索方法および検索プログラムの好適な実施の形態を詳細に説明する。
【実施例１】
【００１２】
まず、本実施例１にかかる検索装置の概要および特徴について説明する。図１および図２は、本実施例１にかかる検索装置の概要および特徴を説明するための図である。本実施例１にかかる検索装置は、テキストの検索条件となるキーワードと、検索条件の対象外となるキーワードとを取得する（以下の説明において、テキストの検索条件となるキーワードを検索条件文字列と表記し、検索条件の対象外となるキーワードを検索条件外文字列と表記する）。
【００１３】
そして、検索装置は、検索条件外文字列に包含される検索条件文字列の数に１を加算した数のスタック枠を作成し、記憶装置からテキストを抽出して、抽出したテキスト中の文字列と検索条件文字列および検索条件外文字列とを順次照合し、テキスト中の文字列が検索条件文字列にヒットした場合には、該当をスタック枠にプッシュする。
【００１４】
一方、テキスト中の文字列が検索対象外文字列にヒットした場合には、検索条件外文字列中に含まれる検索条件文字列の数だけ、スタック枠に最後に登録された該当から順に該当を非該当に変更する。検索装置は、スタック枠に該当が残っている場合には、記憶装置から抽出したテキストを検索結果として出力する。
【００１５】
あるいは、検索装置は、スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、記憶装置から抽出したテキストを検索結果として出力する。
【００１６】
ここで、具体的な例をあげて、検索装置の概要を説明する。一例として、検索条件文字列を「タン」、検索条件外文字列を「タンタン麺」とし、記憶装置から抽出したテキストを「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」とする。
【００１７】
まず、検索装置は、検索条件外文字列に包含される検索条件文字列の数に１を加算した数のスタック枠を作成する。検索条件外文字列「タンタン麺」は、検索条件文字列「タン」を２個包含しているので、検索装置は、２に１を加算した３個のスタック枠を作成する（ステップＳ１０）。
【００１８】
続いて、検索装置は、テキスト中の文字列「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」と検索条件文字列「タン」および検索条件外文字列「タンタン麺」とを順次照合し、テキスト中の文字列が検索条件文字列にヒットした場合には、該当（○）をスタック枠にプッシュし、テキスト中の文字列が検索条件外文字列にヒットした場合には、検索条件外文字列中に含まれる検索条件文字列の数だけ、スタック枠に最後に登録された該当（○）から順に、該当（○）を非該当（×）に変更する。
【００１９】
図１に示す例では、まず、テキスト中の文字列２文字目で、「タン」にヒットするので、検索装置は、スタックに該当（○）をプッシュする（ステップＳ１１）。そして、テキスト中の文字列４文字目で、「タン」にヒットするので、検索装置は、スタックに該当（○）をプッシュする（ステップＳ１２）。
【００２０】
図２の説明に移ると、テキスト中の文字列５文字目で、「タンタン麺」にヒットするので、検索装置は、「タンタン麺」中に含まれる「タン」の数「２」だけ、スタック枠に最後に登録された該当（○）から順に該当（○）を非該当（×）に変更する（ステップＳ１３）。
【００２１】
続いて、テキスト中の文字列１２文字目で、「タン」にヒットするので、検索装置は、スタックに該当（○）をプッシュする（ステップＳ１４）。また、テキスト中の文字列１９文字目で、「タン」にヒットするので、スタックに該当（○）をプッシュする（ステップＳ１５）。
【００２２】
また、テキスト中の文字列２１文字目で、「タン」にヒットするので、検索装置は、スタックに該当（○）をプッシュする（ステップＳ１６）。ステップＳ１６において、スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当（○）がプッシュされるので、記憶装置から抽出したテキスト「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」を検出結果として出力する。
【００２３】
このように、本実施例１にかかる検索装置は、テキストと検索条件文字列および検索条件外文字列とを順次照合して、スタックに該当（○）をプッシュ、あるいは、スタックにプッシュした該当（○）を非該当（×）に変更することにより、検索対象となるテキストを検出するので、検索対象となる文の構造を解析することや、各キーワードのアドレスを保持しなくても検索対象となるテキストを高速に検索でき、メモリ使用量を抑えることができる。
【００２４】
次に、本実施例１にかかる検索装置を備えた検索システムの構成について説明する。図３は、本実施例１にかかる検索装置を備えた検索システムの構成を示す図である。同図に示すように、この検索システムは、クライアント端末５０と検索装置１００とを有し、クライアント端末５０および検索装置１００は、ネットワーク１０によって接続されている。
【００２５】
クライアント端末５０は、入力装置（図示略）を介して利用者から検索クエリを入力された場合に、検索クエリを検索装置１００に送信し、検索装置１００からの検索結果を出力装置（図示略）に出力する装置である。なお、クライアント端末５０から送信される検索クエリには、検索条件文字列および検索条件外文字列の情報が含まれている。
【００２６】
検索装置１００は、クライアント端末５０から検索クエリを受信した場合に、検索クエリに含まれる検索条件文字列および検索条件外文字列を基にして該当するテキストを検索し、検索結果をクライアント端末５０に出力する装置である。
【００２７】
図４は、本実施例１にかかる検索装置１００の構成を示す機能ブロック図である。同図に示すように、この検索装置１００は、入力部１１０と、出力部１２０と、通信制御ＩＦ部１３０と、通信制御ＩＦ部１３０と、入出力制御ＩＦ部１４０と、記憶部１５０と制御部１６０とを有する。
【００２８】
このうち、入力部１１０は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ（出力部１２０）も、マウスと協働してポインティングデバイス機能を実現する。
【００２９】
出力部１２０は、各種の情報を出力する手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成される。通信制御ＩＦ部１３０は、主にクライアント端末５０との間における通信を制御する手段である。なお、入出力制御ＩＦ部１４０は、入力部１１０、出力部１２０、通信制御ＩＦ部１３０、記憶部１５０、制御部１６０によるデータの入出力を制御する手段である。
【００３０】
記憶部１５０は、制御部１６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段である。特に本発明に密接に関連するものとして、記憶部１５０は、テキスト管理テーブル１５０ａと、オートマトンデータ１５０ｂと、スタック１５０ｃと、受理状態管理テーブル１５０ｄと、判定結果テーブル１５０ｅとを有する。
【００３１】
テキスト管理テーブル１５０ａは、検索対象となる複数のテキストを記憶するテーブルである。図５は、本実施例１にかかるテキスト管理テーブル１５０ａのデータ構造の一例を示す図である。同図に示すように、このテキスト管理テーブル１５０ａは、テキスト識別番号と、テキストとを対応付けて記憶している。例えば、テキスト識別番号「１００１」に対応するテキストは「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」となる。
【００３２】
オートマトンデータ１５０ｂは、検索条件文字列を受理するノードおよび検索条件外文字列を受理するノードを有するＡＣ（Aho,Alfred  V.,MargaretJ.Corasick）オートマトン（エイホ−コラシック法に基づくオートマトン）のデータである。
【００３３】
図６は、本実施例１にかかるオートマトンデータ１５０ｂのデータ構造の一例を示す図である。ここでは説明の便宜上、図６に示すオートマトンデータ１５０ｂは、一例として、検索条件文字列「Ａ」を受理するノードと、検索条件外文字列「ＢＡ」、「ＡＢＡ」を受理するノードとを含んでいるものとする。
【００３４】
具体的には、オートマトンデータ１５０ｂは、ノード１〜６を有しており、ノード１が初期ノードとなっている。また、検索条件文字列「Ａ」を受理するノードは、ノード３，４，６となり、検索条件外文字列「ＢＡ」を受理するノードは、ノード３，６となり、検索条件外文字列「ＡＢＡ」を受理するノードは、ノード６となる。
【００３５】
なお、図６では、表記簡略のため、ノード１（ｉｎｉ）への遷移およびノード１の遷移先への遷移は省略して記述している。対応する文字の遷移がない場合には、ノード１あるいはノード１の対応する文字の遷移先に戻る。例えば、現在のノードがノード４で、次に入力される文字が「Ｂ」、「Ａ」以外の場合には、ノード１に遷移する。現在のノードがノード４で、次に入力される文字が「Ａ」の場合には、ノード１からＡへの遷移先である、ノード４に遷移する。
【００３６】
検索装置１００は、初期ノード（ノード１）を起点として、テキストに含まれる文字列中の各文字をオートマトンデータ１５０ｂに順次代入していき、検索条件文字列を受理するノードあるいは検索条件外文字列を受理するノードに遷移したか否かによって、検索条件文字列、検索条件外文字列にヒットしたか否かを判定することができる。
【００３７】
スタック１５０ｃは、該当（○）または非該当（×）を格納するスタックである。スタック１５０ｃのスタック枠の数は、検索条件外文字列に包含される検索条件文字列の数に１を加算した数となる。また、テキスト中の文字列が検索条件文字列にヒットした場合には、該当（○）がスタック１５０ｃにプッシュされ、検索条件外文字列にヒットした場合には、所定条件に応じて該当（○）が非該当（×）に変更される（図１〜２参照）。
【００３８】
受理状態管理テーブル１５０ｄは、オートマトンデータ１５０ｄにおいて、検索条件文字列を受理するノードあるいは検索条件外文字列を受理するノードに遷移した場合の処理内容を管理するテーブルである。図７は、本実施例１にかかる受理状態管理テーブル１５０ｄのデータ構造の一例を示す図である。
【００３９】
図７に示すように、この受理状態管理テーブル１５０ｄは、ノードＩＤと、スタック処理指示欄とを対応付けて記憶している。ノードＩＤは、オートマトンデータ１５０ｂの各ノードを識別する情報であり、ノードＩＤ「１〜６」は、図６のノード１〜６にそれぞれ対応している。
【００４０】
処理指示欄は、各ノードに遷移した場合のスタック１５０ｃに対する処理内容を示す情報である。処理指示欄の１列目は、スタック１５０ｃに該当（○）をプッシュする回数を定義している。処理指示欄の１列目が「１」の場合には、スタック１５０ｃに該当（○）を１回プッシュする。例えば、テキストの文字列をオートマトン（図６参照）に入力し、ノード３（ノードＩＤ「３」に対応する）に遷移した場合には、スタック１５０ｃに該当（○）が１回プッシュされる。なお、処理指示欄の１列目が「０」の場合には、スタック１５０ｃに対する該当（○）のプッシュは実行されない。
【００４１】
処理指示欄の２列目は、スタック１５０ｃに格納された該当（○）を非該当（×）に変更する個数を定義している。処理指示欄の２列目が「−１」の場合には、スタック１５０ｃに格納された該当（○）のうち、最後にプッシュされた該当（○）を非該当（×）に変更する。例えば、テキストの文字列をオートマトン（図６参照）に入力し、ノード３に遷移した場合には、最後にプッシュされた該当（○）を非該当（×）に変更する。
【００４２】
ところで、ノードＩＤ「３」等のように、処理指示欄の１列目および２列目に「０」以外の数値が入力されている場合には、１列目の数に従って、該当（○）をスタック１５０ｃにプッシュした後に、２列目の数に従って、該当（○）を非該当（×）に変更する。
【００４３】
判定結果テーブル１５０ｅは、検索条件外文字列を除く、検索条件文字列にヒットしたか否かを管理するテーブルである。図８は、本実施例１にかかる判定結果テーブル１５０ｅのデータ構造の一例を示す図である。図８に示すように、この判定結果テーブル１５０ｅは、テキスト識別番号と、判定結果とを対応付けて記憶している。
【００４４】
判定結果テーブル１５０ｅにおいて、判定結果が「０」となっているテキストは、検索条件文字列にヒットしていない旨を示し、判定結果が「１」となっているテキストは、検索条件文字列にヒットしている旨を示す。
【００４５】
図４の説明に戻ると、制御部１６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段である。特に本発明に密接に関連するものとして、制御部１６０は、検索クエリ解析部１６０ａと、オートマトン生成部１６０ｂと、照合処理部１６０ｃと、検索結果出力部１６０ｄとを有する。
【００４６】
検索クエリ解析部１６０ａは、クライアント端末５０から検索クエリを受信した場合に、検索クエリに含まれる検索条件文字列と検索条件外文字列とを抽出し、抽出した検索条件文字列と検索条件外文字列をオートマトン生成部１６０ｂに出力する手段である。
【００４７】
また、検索クエリ解析部１６０ａは、検索条件文字列と検索条件外文字列とを基にして、スタック１５０ｃのスタック枠の数を設定する。具体的に、検索クエリ解析部１６０ａは、検索条件文字列と検索条件外文字列とを比較して、検索条件外文字列に包含される検索条件文字列の数に１を加算した数を判定し、判定した数のスタック枠をスタック１５０ｃに作成する。
【００４８】
なお、検索クエリ解析部１６０ａは、複数の検索条件外文字列が存在する場合には、各検索条件外文字列と検索条件文字列とを比較して、スタック枠の数をそれぞれ判定し、判定結果から得られる複数種類の数の内、最大の数をスタック枠の数に設定する。スタック枠の数を設定する処理は、後述するオートマトン生成部１６０ｂが実行しても良い。
【００４９】
オートマトン生成部１６０ｂは、検索条件文字列を受理するノードおよび検索条件外文字列を受理するノードを有するオートマトンデータ（ＡＣオートマトン）１５０ｂを生成する手段である。
【００５０】
オートマトン生成部１６０ｂがオートマトンデータ１５０ｂを作成する場合には、例えば、従来技術となるエイホ−コラシック法や、技術文献（Aho,Alfred  V.,Margaret  J.Corasick(1975年6月)."Efficient  string  matching:An  aid  to  bibliographic  search".Communications  of  the  ACM18(6):333-340.DOI10.1145/360825.360855）に基づいてオートマトンデータ１５０ｂ（図６参照）を作成することができる。図６に示すオートマトンデータ１５０ｂは、検索条件文字列「Ａ」、検索条件外文字列「ＢＡ」、「ＡＢＡ」を受理するオートマトンデータ１５０ｂである。
【００５１】
一方、オートマトン生成部１６０ｂは、オートマトンデータ１５０ｂ、検索条件文字列、検索条件外文字列に基づいて、受理状態管理テーブル１５０ｄ（図７参照）を作成する。図６に示すオートマトンデータ１５０ｂでは、ノード３，４，６が、検索条件文字列「Ａ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄ中のノードＩＤ「３，４，６」に対応するスタック処理指示欄の１列目に「１」を設定する。
【００５２】
また、オートマトンデータ１５０ｂでは、ノード３が、検索条件外文字列「ＢＡ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄ中のノードＩＤ「３」に対応するスタック処理指示欄の２列目に「−１」を設定する（検索条件外文字列「ＢＡ」に検索条件文字列「Ａ」が１つ含まれるため、−１を設定する）。
【００５３】
また、オートマトンデータ１５０ｂでは、ノード６が、検索条件外文字列「ＢＡ」、「ＡＢＡ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄ中のノードＩＤ「６」に対応するスタック処理指示欄の２列目に「−２」を設定する（検索条件外文字列「ＢＡ」に検索条件文字列「Ａ」が１つ含まれ、検索条件外文字列「ＡＢＡ」に検索条件文字列「Ａ」が２つ含まれるため、大きいほうの数２に「−」を付加した−２を設定する）。
【００５４】
照合処理部１６０ｃは、テキスト管理テーブル１５０ａからテキストを抽出し、抽出したテキスト中の文字列をオートマトンデータ１５０ｂに順次入力して照合することにより、検索対象となるテキストであるか否かを判定する手段である。照合処理部１６０ｃは、検索対象となるテキストであると判定した場合には、判定結果テーブル１５０ｅの判定結果に「１」を設定し、検索対象となるテキストでないと判定した場合には、判定結果テーブル１５０ｅの判定結果に「０」を設定する。
【００５５】
具体的に、照合処理部１６０ｃは、テキスト中の文字列をオートマトンデータ１５０ｂに順次入力してオートマトンデータ１５０ｂ中の各ノードを遷移し、遷移先のノードと、受信状態管理テーブル１５０ｄとを比較して、スタック１５０ｃに該当をプッシュ、またはプッシュした該当を非該当に変更する。
【００５６】
例えば、照合処理部１６０ｃは、テキストの文字列をオートマトン（図６参照）に入力し、ノード３（ノードＩＤ「３」に対応する）に遷移した場合には、ノードＩＤ「３」に対応するスタック処理指示欄の１列目が「１」となっているので、スタック１５０ｃに該当（○）が１回プッシュする。また、照合処理部１６０ｃは、ノードＩＤ「３」に対応するスタック処理指示欄の２列目が「−１」となっているので、スタック１５０ｃに最後にプッシュされた該当（○）を非該当（×）に変更する。
【００５７】
そして、照合処理部１６０ｃは、テキスト中の文字列を全てオートマトンデータ１５０ｂに入力した段階で、スタックに１つでも該当が格納されている場合には、抽出したテキストを検索対象のテキストとして判定する。一方、照合処理部１６０ｃは、テキスト中の文字列を全てオートマトンデータ１５０ｂに入力した段階で、スタックに該当が１つも格納されていない場合には、抽出したテキストを検索対象のテキストではないと判定する。
【００５８】
また、照合処理部１６０ｃは、テキスト中の文字列を全てオートマトンデータ１５０ｂに入力していない段階であっても、スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、抽出したテキストを検索対象のテキストとして判定する。
【００５９】
検索結果出力部１６０ｄは、検索結果となるテキストをクライアント端末５０に送信する手段である。具体的に、検索結果出力部１６０ｄは、判定結果テーブル１５０ｅを参照し、判定結果が「１」となっているテキスト識別番号のテキストをテキスト管理テーブル１５０ａから抽出し、抽出したテキストをクライアント端末５０に出力する。
【００６０】
次に、具体例を用いて、検索装置１００の処理を説明する。ここでは、説明の便宜上、検索条件文字列を「Ａ」とし、検索条件外文字列を「ＡＡＢＡＡＢＣＸ」、「ＡＡＢＣＡＣ」、「ＢＡＡＢ」とする。
【００６１】
まず、検索クエリ解析部１６０ａは、検索条件文字列「Ａ」と、検索条件外文字列「ＡＡＢＡＡＢＣＸ」、「ＡＡＢＣＡＣ」、「ＢＡＡＢ」とを比較し、各検索条件外文字列が検索条件文字列を包含する数を判定する。そして、検索クエリ解析部１６０ａは、各数の内、最大の数に１を加算した数のスタック枠をスタック１５０ｃに設定する。
【００６２】
検索条件外文字列「ＡＡＢＡＡＢＣＸ」には、検索条件文字列「Ａ」が４つ含まれ、検索条件外文字列「ＡＡＢＣＡＣ」には、検索条件文字列「Ａ」が３つ含まれ、検索条件外文字列「ＢＡＡＢ」には、検索条件文字列「Ａ」が２つ含まれるので、最大の数「４」に１を加算した数「５」のスタック枠をスタック１５０ｃに設定する。
【００６３】
続いて、オートマトン生成部１６０ｃは、検索条件文字列「Ａ」を受理するノードおよび検索条件外文字列「ＡＡＢＡＡＢＣＸ」、「ＡＡＢＣＡＣ」、「ＢＡＡＢ」を受理するノードを有するオートマトンデータ（ＡＣオートマトン）１５０ｂを作成する。図９は、Ａ、ＡＡＢＡＡＢＣＸ、ＡＡＢＣＡＣ、ＢＡＡＢを受理するオートマトンデータを示す図である。
【００６４】
図９に示すオートマトンデータ１５０ｂは、ノード２０〜３５を有しており、ノード２０が初期ノードとなっている。また、検索条件文字列「Ａ」を受理するノードは、ノード２１，２２，２５，２７，２８，３３，３４となる。検索条件外文字列「ＡＡＢＡＡＢＣＸ」を受理するノードは、ノード３１となる。検索条件外文字列「ＡＡＢＣＡＣ」を受理するノードは、ノード２６となる。検索条件外文字列「ＢＡＡＢ」を受理するノードは、ノード２９、３５となる。
【００６５】
なお、図９では、表記簡略のため、ノード１（ｉｎｉ）への遷移およびノード１の遷移先への遷移は省略して記述している。対応する文字の遷移がない場合には、ノード１あるいはノード１の対応する文字の遷移先に戻る。例えば、ノード３５で「Ｂ」が入力された場合には、ノード２０（ｉｎｉ）からＢへの遷移先であるノード３２に遷移し、ノード３５で、「Ｃ」が入力された場合には、ノード２０に遷移する。
【００６６】
続いて、オートマトン生成部１６０ｃは、オートマトンデータ１５０ｂ（図９参照）、検索条件文字列「Ａ」、検索条件外文字列「ＡＡＢＡＡＢＣＸ」、「ＡＡＢＣＡＣ」、「ＢＡＡＢ」に基づいて、受理状態管理テーブル１５０ｄを作成する。図９に示すオートマトンデータ１５０ｂでは、ノード２１,２２，２５，２６，２７，２８，３３，３４が、検索条件文字列「Ａ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄのノードＩＤ「２１,２２，２５，２６，２７，２８，３３，３４」に対応するスタック処理指示欄の１列目に「１」を設定する。
【００６７】
また、オートマトンデータ１５０ｂ（図９参照）では、ノード３１が、検索条件外文字列「ＡＡＢＡＡＢＣＸ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄ中のノードＩＤ「３１」に対応するスタック処理指示欄の２列目に「−４」を設定する（検索条件外文字列「ＡＡＢＡＡＢＣＸ」に検索条件文字列「Ａ」が４つ含まれるため、−４を設定する）。
【００６８】
また、オートマトンデータ１５０ｂ（図９参照）では、ノード２６が、検索条件外文字列「ＡＡＢＣＡＣ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄ中のノードＩＤ「２６」に対応するスタック処理指示欄の２列目に「−３」を設定する（検索条件外文字列「ＡＡＢＣＡＣ」に検索条件文字列「Ａ」が３つ含まれるため、−３を設定する）。
【００６９】
また、オートマトンデータ１５０ｂ（図９参照）では、ノード２９、３５が、検索条件外文字列「ＢＡＡＢ」を受理する。従って、オートマトン生成部１６０ｂは、受理状態管理テーブル１５０ｄ中のノードＩＤ「２９，３５」に対応するスタック処理指示欄の２列目に「−２」を設定する（検索条件外文字列「ＢＡＡＢ」に検索条件文字列「Ａ」が２つ含まれるため、−２を設定する）。図１０は、図９に示したオートマトンデータ１５０ｂに対応する受理状態管理テーブル１５０ｄの一例を示す図である。
【００７０】
続いて、照合処理部１６０ｃは、オートマトンデータ１５０ｂにテキスト中の文字列を順次入力して照合することにより、検索対象となるテキストであるか否かを判定する。まず、照合処理部１６０ｃが、テキスト「ＡＡＢＡＡＢＣＡＣ」をオートマトンデータ１５０ｂ（図９参照）に入力して、検索対象となるテキストであるか否かを判定する処理について説明する。図１１〜図１９は、テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図であり、図２０〜図２２は、テキスト「ＡＢ」の照合処理を示す図であり、図２３〜図２７は、テキスト「ＢＡＡＢ」の照合処理を示す図である。なお、ここでは説明の便宜上、スタックにプッシュされる該当を「１」とし、非該当を「０」とする。
【００７１】
まず、照合処理部１６０ｃは、起点を、オートマトンデータ１５０ｂの初期ノードとなるノード２０に設定し（図１１参照）、テキストの１文字目となる「Ａ」をオートマトンデータ１５０ｂに入力すると、ノード２０からノード２１に遷移する。ノード２１は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２１」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図１２参照）。
【００７２】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの２文字目となる「Ａ」を入力すると、ノード２１からノード２２に遷移する。ノード２２は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２２」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図１３参照）。
【００７３】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの３文字目となる「Ｂ」を入力すると、ノード２２からノード２３に遷移する（図１４参照）。また、テキストの４文字目となる「Ａ」を入力すると、ノード２３からノード２７に遷移する。ノード２７は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２７」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図１５参照）。
【００７４】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの５文字目となる「Ａ」を入力すると、ノード２７からノード２８に遷移する。ノード２８は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２７」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図１６参照）。
【００７５】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの６文字目となる「Ｂ」を入力すると、ノード２８からノード２９に遷移する。ノード２９は、検索条件外文字列「ＢＡＡＢ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２９」に対応するスタック処理指示欄の２列目が−２であるため）、スタックに最後にプッシュされた該当（１）とその前の該当（１）を非該当（０）に変更する（図１７参照）。
【００７６】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの７文字目となる「Ｃ」を入力すると、ノード２９からノード３０に遷移する（図１８参照）。また、テキストの８文字目となる「Ａ」を入力すると、ノード３０からノード２５に遷移する。ノード２５は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２５」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図１９参照）。
【００７７】
ここで、照合処理部１６０ｃは、スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域（位置）に該当（１）がプッシュされたので、テキスト「ＡＡＢＡＡＢＣＡＣ」を検索対象のテキストであると判定する。照合処理部１６０ｃは、判定結果テーブル１５０ｅにおいて、テキスト「ＡＡＢＡＡＢＣＡＣ」に対応する判定結果を「１」に設定する。
【００７８】
次に、図２０の説明に移ると、まず、照合処理部１６０ｃは、起点を、オートマトンデータ１５０ｂの初期ノードとなるノード２０に設定し（図２０参照）、テキストの１文字目となる「Ａ」をオートマトンデータ１５０ｂに入力すると、ノード２０からノード２１に遷移する。ノード２１は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「２１」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図２１参照）。
【００７９】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの２文字目となる「Ｂ」を入力すると、ノード２１からノード２０に遷移する（図２２参照）。照合処理部１６０ｃは、テキスト中の文字列「ＡＢ」を全てオートマトンデータ１５０ｂに入力した段階で、スタックに該当（１）が格納されているので、テキスト「ＡＢ」を検索対象のテキストであると判定する。
【００８０】
次に、図２３の説明に移ると、まず、照合処理部１６０ｃは、起点を、オートマトンデータ１５０ｂの初期ノードとなるノード２０に設定し（図２３参照）、テキストの１文字目となる「Ｂ」をオートマトンデータ１５０ｂに入力すると、ノード２０からノード３２に遷移する（図２４参照）。
【００８１】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの２文字目となる「Ａ」を入力すると、ノード３２からノード３３に遷移する。ノード３３は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「３３」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図２５参照）。
【００８２】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの３文字目となる「Ａ」を入力すると、ノード３３からノード３４に遷移する。ノード３４は、検索条件文字列「Ａ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「３４」に対応するスタック処理指示欄の１列目が１であるため）、スタックに該当（１）をプッシュする（図２６参照）。
【００８３】
照合処理部１６０ｃは、オートマトンデータ１５０ｂに、テキストの４文字目となる「Ｂ」を入力すると、ノード３４からノード３５に移行する。ノード３５は、検索条件外文字列「ＢＡＡＢ」を受理するノードであるため（受理状態管理テーブル１５０ｄ（図１０）において、ノードＩＤ「３４」に対応するスタック処理指示欄の２列目が−２であるため）、スタックに最後にプッシュされた該当（１）とその前の該当（１）を非該当（０）に変更する（図２７参照）。
【００８４】
照合処理部１６０ｃは、テキスト中の文字列「ＢＡＡＢ」を全てオートアントンデータ１５０ｂに入力した段階で、スタックに該当（１）が１つも格納されていないので、テキスト「ＢＡＡＢ」を検索対象のテキストではないと判定する。
【００８５】
次に、本実施例１にかかる検索装置１００の処理手順について説明する。図２８は、本実施例１にかかる検索装置１００の処理手順を示すフローチャートである。図２８に示すように、検索装置１００は、検索クエリ解析部１６０ａが、クライアント端末５０から検索クエリを受信する（ステップＳ１０１）。
【００８６】
そして、オートマトン生成部１６０ｂが、オートマトン作成処理を実行し（ステップＳ１０２）、照合処理部１６０ｃが照合処理を実行し（ステップＳ１０３）、検索結果出力部１６０ｄが検索結果を出力する（ステップＳ１０４）。
【００８７】
次に、図２８のステップＳ１０２に示したオートマトン作成処理を具体的に説明する。図２９は、本実施例１にかかるオートマトン作成処理の処理手順を示すフローチャートである。図２９によるオートマトン作成処理を実行することにより、オートマトンデータ１５０ｂ、スタック１５０ｃ、受信状態管理テーブル１５０ｄが作成される。
【００８８】
図２９に示すように、オートマトン生成部１６０ｂは、検索条件文字列と、検索条件外文字列とを受理するＡＣオートマトン（オートマトンデータ１５０ｂ）を作成し（ステップＳ２０１）、検索条件文字列がヒットした場合のスタック処理指示欄（受理状態管理テーブル１５０ｄ中のスタック処理指示欄１列目）に「１」を登録する（ステップＳ２０２）。
【００８９】
そして、オートマトン生成部１６０ｂは、検索条件外文字列がヒットした場合のスタック指示欄（受理状態管理テーブル１５０ｄ中のスタック処理指示欄２列目）に、各検索条件外文字列に含まれる検索条件文字列数の最大値の符号を反転させて登録する（ステップＳ２０３）。
【００９０】
続いて、オートマト制御部１６０ｂは、検索条件外文字列の中で検索条件文字列が出現する最大数に１を加算した長さ（スタック枠の数）のスタック１５０ｃを用意する（ステップＳ２０４）。
【００９１】
次に、図２８のステップＳ１０３に示した照合処理を具体的に説明する。図３０および図３１は、本実施例１にかかるオートマトン作成処理の処理手順を示すフローチャートである。図３０、図３１による照合処理を実行することにより、検索対象となるテキストを特定することができる。
【００９２】
図３０に示すように、照合処理部１６０ｃは、テキスト管理テーブル１５０ａからテキストを読み出し（ステップＳ３０１）、テキストの先頭の文字を読み出して、オートマトンデータ１５０ｂに入力し（ステップＳ３０２）、受理状態か否かを判定する（ステップＳ３０３）。
【００９３】
照合処理部１６０ｃは、受理状態でない場合には（ステップＳ３０４，Ｎｏ）、ステップＳ３１２に移行する。一方、受理状態の場合には（ステップＳ３０４，Ｙｅｓ）、受理状態管理テーブルのスタック処理指示欄（スタック処理指示欄の１列目）を参照する（ステップＳ３０５）。
【００９４】
照合処理部１６０ｃは、スタック処理指示欄が１か否かを判定し（ステップＳ３０６）、スタック処理指示欄が１である場合には（ステップＳ３０７，Ｙｅｓ）、スタックに１（該当）をプッシュし（ステップＳ３０８）、最古のスタック（最後にプッシュされるべきスタック領域）が１であるか否かを判定する（ステップＳ３０９）。
【００９５】
照合処理部１６０ｃは、最古のスタックが１（該当）でない場合には（ステップＳ３１０，Ｎｏ）、ステップＳ３１１に移行する。一方、最古のスタックが１（該当）の場合には（ステップＳ３１０，Ｙｅｓ）、ステップＳ３１７に移行する。
【００９６】
ところで、照合処理部１６０ｃは、スタック処理指示欄（１列目）が１でない場合には（ステップＳ３０７，Ｎｏ）、最新のスタック値からスタック処理指示欄（２列目）の−値分のスタック値を全て０に変更する（ステップＳ３１１）。
【００９７】
照合処理部１６０ｃは、読み出した文字がテキスト中の最後の文字であるか否かを判定し（ステップＳ３１２）、最後の文字でない場合には（ステップＳ３１３，Ｎｏ）、次の文字を読み出して、オートマトンデータ１５０ｂに入力し（ステップＳ３１４）、ステップＳ３０３に移行する。
【００９８】
一方、照合処理部１６０ｃは、読み出した文字がテキスト中の最後の文字である場合には（ステップＳ３１３，Ｙｅｓ）、スタック１５０ｃに１（該当）が残っているか否かを判定し（ステップＳ３１５）、残っている場合には（ステップＳ３１６，Ｙｅｓ）、テキストに対応する判定結果に１（真）を登録し（ステップＳ３１７）、ステップＳ３１９に移行する。
【００９９】
一方、照合処理部１６０ｃは、スタック１５０ｃに１（該当）が残っていない場合には（ステップＳ３１６，Ｎｏ）、テキストに対応する判定結果に０（偽）を登録し（ステップＳ３１８）、最後のテキストデータであるか否かを判定する（ステップＳ３１９）。
【０１００】
照合処理部１６０ｃは、最後のテキストデータでない場合には（ステップＳ３２０，Ｎｏ）、次のテキストデータをテキスト管理テーブル１５０ａから取り出し（ステップＳ３２１）、ステップＳ３０２に移行する。一方、最後のテキストデータの場合には（ステップＳ３２０，Ｙｅｓ）、照合処理を終了する。
【０１０１】
上述してきたように、本実施例１にかかる検索装置１００は、検索条件外文字列に包含される検索条件文字列の数に１を加算した数のスタック枠をスタック１５０ｃに作成し、テキスト中の文字列をオートマトンデータ１５０ｂに順次入力し、テキスト中の文字列が検索条件文字または検索条件外文字列にヒットするか否かを判断して、スタック１５０ｃに該当をプッシュ、あるいは該当を非該当に変更する（検索条件外文字列中に含まれる検索条件文字列の数だけ、スタック枠に最後に登録された該当から順に該当を非該当に変更する）ことにより、検索対象のテキストであるか否かを判定するので、検索対象となるテキストの構造を解析することや、各文字のアドレスを保持しなくても検索対象となるテキストを高速に検索でき、メモリ使用量を抑えることができる。
【０１０２】
また、本実施例１にかかる検索装置１００は、スタック１５０ｃ中の各スタック領域のうち、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、テキスト中の全ての文字列をオートマトンデータ１５０ｂに入力していなくても、検索対象のテキストとして判定するので、不要な処理を省くことができ、テキスト検索にかかる処理を高速化することができる。
【実施例２】
【０１０３】
さて、これまで本発明の実施例について説明してきたが、本発明は上述した実施例１以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例２として、本発明に含まれる他の実施例を説明する。
【０１０４】
（１）照合処理について
例えば、上記の実施例１では、検索装置が、検索条件外文字列に包含される検索条件文字列の数に１を加算した数のスタック枠を作成し、検索対象となるテキストを判定していたが、これに限定されるものではなく、スタックの代わりに配列を利用して、検索対象となるテキストを判定することもできる。
【０１０５】
図３２および図３３は、本実施例２にかかる検索装置の処理を説明するための図である。ここでは一例として、検索文字列を「タン」、検索条件外文字列を「タンタン麺」とし、記憶装置から抽出したテキストを「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」とする。
【０１０６】
まず、検索装置は、記憶装置中に、配列を作成する（ステップＳ２０）。そして、検索装置は、テキスト中の文字列「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」と検索条件文字列「タン」および検索条件外文字列「タンタン麺」とを順次照合し、テキスト中の文字列が検索条件文字列にヒットした場合には、該当（○）を配列に登録する。
【０１０７】
一方、テキスト中の文字列が検索条件外文字列にヒットした場合には、検索条件外文字列中に含まれる検索条件文字列の数だけ、配列中の該当（○）を非該当（×）に変更する。検索装置は、テキストを全て読み終わった後に、配列に１つでも該当（○）が格納されていれば、読み込んだテキストを、検索対象のテキストであると判定する。なお、検索装置が、検索条件文字列または検索条件外文字列にヒットしたか否かを判定する場合には、例えば、実施例１に示したＡＣオートマトンを利用して判定することができる。
【０１０８】
図３２に示す例では、まず、テキスト中の文字列２文字目で、「タン」にヒットするので、検索装置は、配列に該当（○）を登録する（ステップＳ２１）。そして、テキスト中の文字列４文字目で、「タン」にヒットするので、検索装置は、配列に該当（○）を登録する（ステップＳ２２）。
【０１０９】
図３３の説明に移ると、テキスト中の文字列５文字目で、「タンタン麺」にヒットするので、検索装置は、「タンタン麺」に含まれる「タン」の数「２」だけ、配列に含まれる該当（○）を非該当（×）に変更する（ステップＳ２３）。
【０１１０】
続いて、テキスト中の文字列１２文字目で、「タン」にヒットするので、検索装置は、配列に該当（○）を登録する（ステップＳ２４）。また、テキスト中の文字列１９文字目で、「タン」にヒットするので、配列に該当（○）を登録する（ステップＳ２５）。
【０１１１】
また、テキスト中の文字列２１文字目で、「タン」にヒットするので、検索装置は、配列に該当（○）を登録する（ステップＳ２６）。また、テキスト中の文字列２２文字目で、「タンタン麺」にヒットするので、検索装置は、「タンタン麺」に含まれる「タン」の数「２」だけ、配列に含まれる該当（○）を非該当（×）に変更する。
【０１１２】
テキストを全て読み終わった時点において、配列内に該当（○）が１つ以上残っているので、検索装置は、テキスト「タンタン麺とロースとタンを頼んで、タンタン麺を食べた。」を検索対象のテキストとして判定する。
【０１１３】
上述してきたように、本実施例２にかかる検索装置は、スタック枠を算出することなく、記憶装置中に配列を用意し、テキスト中の文字列と、検索条件文字列および検索条件外文字列とを順次照合し、照合結果に基づいて該当を配列に格納、または格納された該当を非該当に変更することで検索対象となるテキストを判定するので、スタック枠を算出する処理を省略することができ、検索処理を単純化することができる。
【０１１４】
（２）システムの構成など
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１１５】
また、図４に示した検索装置１００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１１６】
図３４は、本実施例１にかかる検索装置１００を構成するコンピュータのハードウェア構成を示す図である。図３４に示すように、このコンピュータ（検索装置）２００は、入力装置２０１、モニタ２０２、ＲＡＭ（Random  Access  Memory）２０３、ＲＯＭ（Read  Only  Memory）２０４、記憶媒体からデータを読み取る媒体読取装置２０５、他の装置（クライアント端末５０）との間でデータの送受信を行う通信装置２０６、ＣＰＵ（Central  Processing  Unit）２０７、ＨＤＤ（Hard  Disk  Drive）２０８をバス２０９で接続している。
【０１１７】
そして、ＨＤＤ２０８は、上述した検索装置１００の機能と同様の機能を発揮する検索プログラム２０８ｂが記憶されている。ＣＰＵ２０７が、検索プログラム２０８ｂを読み出して実行することにより、検索プロセス２０７ａが起動される。
【０１１８】
ここで、検索プロセス２０７ａは、図４の検索クエリ解析部１６０ａ、オートマトン生成部１６０ｂ、照合処理部１６０ｃ、検索結果出力部１６０ｄに対応する。また、ＨＤＤ２０８は、検索装置１００の記憶部１５０に記憶される情報に対応する各種データ２０８ａを記憶する。ＣＰＵ２０７は、ＨＤＤ２０８に格納された各種データ２０８ａを読み出して、ＲＡＭ２０３に格納し、ＲＡＭ２０３に格納された各種データ２０３ａを利用して、検索対象となるテキストを判定し、判定結果をクライアント端末５０に出力する。
【０１１９】
ところで、図３４に示した検索プログラム２０８ｂは、必ずしも最初からＨＤＤ２０８に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などに検索プログラム２０８ｂを記憶しておき、コンピュータがこれらから検索プログラム２０８ｂを読み出して実行するようにしてもよい。
【０１２０】
上記の実施例１，２を含む実施形態に関し、以下の付記を開示する。
【０１２１】
（付記１）検索装置が、
テキストの検索条件となるキーワードを示す検索条件文字列と、前記検索条件の対象外となるキーワードを示す検索条件外文字列とを取得するステップと、
複数のテキストを記憶した記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を記憶部に登録し、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記記憶部に登録された該当を非該当に変更するステップと、
前記記憶部に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力するステップと、
を有することを特徴とする検索方法。
【０１２２】
（付記２）前記検索条件文字列と前記検索条件外文字列とを取得した場合に、前記検索条件外文字列に包含される前記検索条件文字列の数に１を加算した数のスタック枠を前記記憶部に作成し、前記記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を前記スタック枠にプッシュし、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする付記１に記載の検索方法。
【０１２３】
（付記３）前記スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする付記２に記載の検索方法。
【０１２４】
（付記４）前記検索条件文字列と前記検索条件外文字列とを取得した場合に、前記検索条件文字列を受理するノードと前記検索条件外文字列を受理するノードとを有するＡＣオートマトンを作成し、前記記憶装置から抽出したテキストの文字列を前記ＡＣオートマトンに入力し、前記検索条件文字列を受理するノードに遷移した場合には、該当を前記スタック枠にプッシュし、前記検索条件外文字列を受理するノードに遷移した場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする付記２または３に記載の検索方法。
【０１２５】
（付記５）コンピュータに、
テキストの検索条件となるキーワードを示す検索条件文字列と、前記検索条件の対象外となるキーワードを示す検索条件外文字列とを取得する取得手順と、
複数のテキストを記憶した記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を記憶部に登録し、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記記憶部に登録された該当を非該当に変更する変更手順と、
前記記憶部に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力する出力手順と、
を実行させることを特徴とする検索プログラム。
【０１２６】
（付記６）前記変更手順は、前記検索条件外文字列に包含される前記検索条件文字列の数に１を加算した数のスタック枠を前記記憶部に作成し、前記記憶装置からテキストを抽出して、当該テキスト中の文字列と前記検索条件文字列および検索条件外文字列とを順次照合し、前記テキスト中の文字列が前記検索条件文字列にヒットした場合には、該当を前記スタック枠にプッシュし、前記テキスト中の文字列が前記検索条件外文字列にヒットした場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記出力手順は、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする付記５に記載の検索プログラム。
【０１２７】
（付記７）前記出力手順は、前記スタック枠に含まれる各スタック領域の内、最後にプッシュされるべきスタック領域に該当がプッシュされた場合には、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする付記６に記載の検索プログラム。
【０１２８】
（付記８）前記検索条件文字列と前記検索条件外文字列とを取得した場合に、前記検索条件文字列を受理するノードと前記検索条件外文字列を受理するノードとを有するＡＣオートマトンを作成する作成手段を更にコンピュータに実行させ、前記変更手順は、前記記憶装置から抽出したテキストの文字列を前記ＡＣオートマトンに入力し、前記検索条件文字列を受理するノードに遷移した場合には、該当を前記スタック枠にプッシュし、前記検索条件外文字列を受理するノードに遷移した場合には、当該検索条件外文字列中に含まれる前記検索条件文字列の数だけ、前記スタック枠に最後に登録された該当から順に該当を非該当に変更し、前記出力手順は、前記スタック枠に該当が残っている場合に、前記記憶装置から抽出したテキストを検索結果として出力することを特徴とする付記６または７に記載の検索プログラム。
【図面の簡単な説明】
【０１２９】
【図１】本実施例１にかかる検索装置の概要および特徴を説明するための図（１）である。
【図２】本実施例１にかかる検索装置の概要および特徴を説明するための図（２）である。
【図３】本実施例１にかかる検索装置を備えた検索システムの構成を示す図である。
【図４】本実施例１にかかる検索装置の構成を示す機能ブロック図である。
【図５】本実施例１にかかるテキスト管理テーブルのデータ構造の一例を示す図である。
【図６】本実施例１にかかるオートマトンデータのデータ構造の一例を示す図である。
【図７】本実施例１にかかる受理状態管理テーブルのデータ構造の一例を示す図である。
【図８】本実施例１にかかる判定結果テーブルのデータ構造の一例を示す図である。
【図９】Ａ、ＡＡＢＡＡＢＣＸ、ＡＡＢＣＡＣ、ＢＡＡＢを受理するオートマトンデータを示す図である。
【図１０】図９に示したオートマトンデータ１５０ｂに対応する受理状態管理テーブルの一例を示す図である。
【図１１】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（１）である。
【図１２】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（２）である。
【図１３】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（３）である。
【図１４】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（４）である。
【図１５】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（５）である。
【図１６】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（６）である。
【図１７】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（７）である。
【図１８】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（８）である。
【図１９】テキスト「ＡＡＢＡＡＢＣＡＣ」の照合処理を示す図（９）である。
【図２０】テキスト「ＡＢ」の照合処理を示す図（１）である。
【図２１】テキスト「ＡＢ」の照合処理を示す図（２）である。
【図２２】テキスト「ＡＢ」の照合処理を示す図（３）である。
【図２３】テキスト「ＢＡＡＢ」の照合処理を示す図（１）である。
【図２４】テキスト「ＢＡＡＢ」の照合処理を示す図（２）である。
【図２５】テキスト「ＢＡＡＢ」の照合処理を示す図（３）である。
【図２６】テキスト「ＢＡＡＢ」の照合処理を示す図（４）である。
【図２７】テキスト「ＢＡＡＢ」の照合処理を示す図（５）である。
【図２８】本実施例１にかかる検索装置の処理手順を示すフローチャートである。
【図２９】本実施例１にかかるオートマトン作成処理の処理手順を示すフローチャートである。
【図３０】本実施例１にかかるオートマトン作成処理の処理手順を示すフローチャート（１）である。
【図３１】本実施例１にかかるオートマトン作成処理の処理手順を示すフローチャート（２）である。
【図３２】本実施例２にかかる検索装置の処理を説明するための図（１）である。
【図３３】本実施例２にかかる検索装置の処理を説明するための図（２）である。
【図３４】本実施例１にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
【符号の説明】
【０１３０】
１０    ネットワーク
５０    クライアント端末
１００    検索装置
１１０    入力部
１２０    出力部
１３０    通信制御ＩＦ部
１４０    入出力制御ＩＦ部
１５０    記憶部
１５０ａ  テキスト管理テーブル
１５０ｂ  オートマトンデータ
１５０ｃ  スタック
１５０ｄ  受理状態管理テーブル
１５０ｅ  判定結果テーブル
１６０    制御部
１６０ａ  検索クエリ解析部
１６０ｂ  オートマトン生成部
１６０ｃ  照合処理部
１６０ｄ  検索結果出力部
２００    コンピュータ
２０１    入力装置
２０２    モニタ
２０３    ＲＡＭ
２０３ａ  各種データ
２０４    ＲＯＭ
２０５    媒体読取装置
２０６    通信装置
２０７    ＣＰＵ
２０７ａ  検索プロセス
２０８    ＨＤＤ
２０８ａ  各種データ
２０８ｂ  検索プログラム
２０９    バス
【図１】
2010049650.tif 000003
【図２】
2010049650.tif 000004
【図３】
2010049650.tif 000005
【図４】
2010049650.tif 000006
【図５】
2010049650.tif 000007
【図６】
2010049650.tif 000008
【図７】
2010049650.tif 000009
【図８】
2010049650.tif 000010
【図９】
2010049650.tif 000011
【図１０】
2010049650.tif 000012
【図１１】
2010049650.tif 000013
【図１２】
2010049650.tif 000014
【図１３】
2010049650.tif 000015
【図１４】
2010049650.tif 000016
【図１５】
2010049650.tif 000017
【図１６】
2010049650.tif 000018
【図１７】
2010049650.tif 000019
【図１８】
2010049650.tif 000020
【図１９】
2010049650.tif 000021
【図２０】
2010049650.tif 000022
【図２１】
2010049650.tif 000023
【図２２】
2010049650.tif 000024
【図２３】
2010049650.tif 000025
【図２４】
2010049650.tif 000026
【図２５】
2010049650.tif 000027
【図２６】
2010049650.tif 000028
【図２７】
2010049650.tif 000029
【図２８】
2010049650.tif 000030
【図２９】
2010049650.tif 000031
【図３０】
2010049650.tif 000032
【図３１】
2010049650.tif 000033
【図３２】
2010049650.tif 000034
【図３３】
2010049650.tif 000035
【図３４】
2010049650.tif 000036