(57)【要約】【課題】  大規模なテキストに対して、n-gramインデクスを使用して複数のワイルドカードを含む曖昧な全文検索を行う場合での，高速な検索処理方式を提供する。【解決手段】  ワイルドカード部分での文字位置比較演算を処理する順序を変更して、「n文字以上」の文字位置比較演算より先に「n文字に等しい」の文字位置比較演算を行い、「n文字以上」の文字位置比較演算は左側のものから順に行い、「n文字以上」の文字位置比較演算では条件を満たす部分文字列のうち終端位置が最も左にある１つの位置情報のみを中間結果として出力することにより、複数のワイルドカードを含む全文検索を高速に行う。【選択図】  図８
2005215716.tif 000002
【特許請求の範囲】
【請求項１】
n-gramインデクスを使用して大規模テキストから、ワイルドカードを使用して検索条件式で指定した文字列を含むテキストを見つけ出すテキスト検索方法において、
前記n-gramインデクスを参照し、
検索条件式でワイルドカードによる「n文字に等しい任意の文字列」(以下、ワイルドカード文字「＿」で表す)および「n文字以上の任意の文字列」(以下、ワイルドカード文字「％」で表す)という曖昧な指定を含む検索を実現するために、前記参照したn-gramインデクスに基づいて前記入力したテキストを複数箇所あるワイルドカードによる指定文字間距離の条件判定演算の順序として、ワイルドカード「％」による条件判定演算よりも先にワイルドカード「＿」による条件判定演算を先に行うように変更することを特徴とするテキスト検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字情報の検索処理に関し、特に検索条件式にワイルドカードを含む曖昧検索技術に関する。
【背景技術】
【０００２】
テキストに含まれるn文字の部分文字列をn-gramという。n-gramインデクスは、あらかじめ定めた１以上の数nについて、対象テキストに含まれるn文字以下の部分文字列の出現位置をすべて記録しておくことにより、日本語のような単語間の区切りが無い言語のテキストに対しても、任意の部分文字列の出現位置を漏れなく検索することができる技術である。対象テキスト群に対してn-gramインデクスを作成しておくことにより、検索条件式で指定した文字列を含むテキストを高速に見つけることができる。n文字よりも長い検索条件式の場合，検索条件式をn文字ずつに分解しそれぞれの出現位置をもとめて、元の検索条件式が一続きで出現している場所を求めることができる。
テキストの全文検索において、「ａｂ％ｃｄｅ」のようにワイルドカードを含む検索を行う場合，単語を切り出して登録する方式のインデクスでは、「ａｂ」や「ｃｄｅ」が単語の一部分であった場合はインデクスに登録されてないため検索漏れが生じることになる。n-gramインデクスでは任意の部分文字列を検索できることから、ワイルドカードを含む全文検索にも適している。
従来の技術で検索条件式に複数のワイルドカードを含む検索を行う場合の手順を、検索条件式「Ａ％Ｂ％Ｃ」を例として説明する。
まず検索条件式の中でワイルドカードで区切られた一部分である「Ａ」に一致する部分文字列のすべての出現位置を検索し、中間結果として保存する。「Ａ」の出現位置はn-gramインデクスから取り出すことができる。部分文字列「Ａ」にあたる部分は長い文字列でもよく、その場合はワイルドカードを含まない通常の文字列の検索と同様に部分文字列をn-gramに分解して検索し、部分文字列の出現位置を求める。部分文字列の出現位置は、部分文字列が出現したテキストを識別する「文書番号」と、その文書内の何文字目から何文字目の範囲に出現したかを表す「文字位置」の対で表現する。以下、検索条件式「Ａ」を検索した結果である「A」の位置情報をＰ(Ａ)と表記する。このP(A)を中間結果として保存しておく。同様に「Ｂ」および「Ｃ」の出現位置を検索し中間結果Ｐ(Ｂ)、Ｐ(Ｃ)として保存する。
次に、「Ａ％Ｂ」が表す「ＡとＢの間に任意の０文字以上が含まれている」部分文字列に一致する部分文字列の検索を行う。上記中間結果Ｐ(Ａ)，Ｐ(Ｂ)を探索し「Ａ」および「Ｂ」がともに出現している文書番号を探す。同一テキストで「Ａ」および「Ｂ」がともに出現していたら、その文書で「Ａ」および「Ｂ」それぞれの出現したすべての文字位置の組合せについて文字位置間の距離を検査し、文字位置間の距離がワイルドカードで指定された条件を満たすかを判定する。条件を満たす全ての組合せから得られる部分文字列の文字位置を新たな中間結果Ｐ(Ａ％Ｂ)として保存する。同一テキスト内に複数の「Ａ」および「Ｂ」が出現する場合の「Ａ％Ｂ」の出現位置の例を図１に示す。
次に、上記中間結果Ｐ(Ａ％Ｂ)およびＰ(Ｃ)の出現位置を比較して「Ａ％Ｂに一致する部分文字列とＣの間に任意の０文字以上が含まれている」部分文字列の検索を行い、中間結果Ｐ(Ａ％Ｂ％Ｃ)とする。この最終的な中間結果に含まれる文書番号が、検索条件式「Ａ％Ｂ％Ｃ」に一致する部分文字列を含むテキストを表している。
【０００３】
さらに多数のワイルドカードを含む検索条件式で検索を行う場合も、以下同様にして検索条件式の左側から順に処理を進めていく。
【０００４】
n-gramインデクスの特徴を用いた既存の検索技術として特開平９−１５３０５１がある。これは、類似文書を検索する従来技術のレリバンス・ランキングおよびレリバンス・フィードバックにおいて単語の変わりにn-gramを用いて、日本語における高速で低ノイズのレリバンス・フィードバックを実現している。
【０００５】
【特許文献１】特開平９−１５３０５１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特開平９−１５３０５１では、類似文書を検索する際に文書および検索条件式の特徴を表すベクトルの処理に単語の替わりにn-gramを用いてレリバンス・フィードバックを高速、低ノイズにする方式であり、ワイルドカードを含む検索条件式による全文検索の高速化を行うことはできない。
従来の技術では、複数のワイルドカードを含む検索条件式で検索を行う場合に、最終的な結果を求めるまでに検索漏れが生じないように、中間結果として検索条件を満たす部分文字列の全ての位置情報を求めている。そのため、検索条件式中にワイルドカードを多数含み、対象テキスト中に検索条件式の部分文字列に一致する箇所が多数存在すると、中間結果として保存する位置情報の個数が膨大になることがある。
例えば、「ＡＡＡＡＡＢＢＢＢＢＣＣＣＣＣＤＤＤＤＤ」というテキストに対して検索条件式「Ａ％Ｂ」に一致する部分文字列の出現位置は、25(=5×5)箇所ある。検索条件式「Ａ％Ｂ％Ｃ」では125(=5×5×5)箇所、「Ａ％Ｂ％Ｃ％Ｄ」では625(=5×5×5×5)箇所となる。このように、大規模テキストに対して複数のワイルドカードを含む検索を行った場合，ワイルドカードの個数の増加に伴い、中間結果である検索条件の一部分に一致する部分文字列の出現箇所が急激に増大し、出現位置の比較演算に要する処理時間が膨大になる場合がある。
本発明は、大規模テキストに対して複数のワイルドカードを含むテキスト検索を行う場合の検索処理を高速化することを目的とする。
【課題を解決するための手段】
【０００７】
検索条件式「Ａ％Ｂ」の検索処理において、「Ａ」および「Ｂ」の位置情報を検索して求めた中間結果Ｐ(Ａ)および中間結果Ｐ(Ｂ)から、ワイルドカード「％」含む「Ａ％Ｂ」に一致する部分文字列の位置情報Ｐ(Ａ％Ｂ)を求める処理を、以下「％演算」と呼ぶ。同様に、中間結果Ｐ(Ａ)およびＰ(Ｂ)からワイルドカード「＿」を含む「Ａ＿Ｂ」に一致する部分文字列の位置情報Ｐ(Ａ＿Ｂ)を求める処理を以下「＿演算」と呼ぶ。
【０００８】
検索結果として最終的に必要になるのは、検索条件式を含んでいるテキストがどれかを表す文書番号のみであり、検索条件式に一致した部分文字列が当該テキストのどの位置にあるかという情報は不要となる。よって、ワイルドカード演算を行った結果が最終的な結果となる場合，ワイルドカードの条件を満たすすべての文字列の位置情報を見つける必要は無く、条件を満たすものが１つあるか、１つもないかのみを判定すればよい。しかし、ワイルドカード演算の結果得られる位置情報が、別のワイルドカード演算の入力となる場合，初めのワイルドカード演算で条件を満たすすべての位置情報を出力しないと、次のワイルドカード演算で条件を満たす部分文字列の有無を正しく判定することができず検索漏れを生じる場合がある。
【０００９】
従来の処理方式では、検索条件式に現れるワイルドカードを単純に左端から順に処理していた。しかし、ワイルドカード部分の距離比較の演算は、どのワイルドカードから処理をしても最終的に得られる結果は変わらない。ある演算順序でワイルドカードを処理したときにテキスト中にヒットした部分文字列は、別の演算順序で処理した場合もヒットする。また、ある演算順序でヒットする部分文字列が存在しなかったテキストには、別演算順序で処理した場合もヒットする部分文字列は存在しない。
【００１０】
そこで、本発明ではワイルドカードの演算順序を変更することにより、すべての位置情報を求める必要の無いケースが増えるようにする。そのようなケースのワイルドカード演算では最終的に検索条件式に一致する部分文字列の有無を判別するのに必要最低限の文字位置情報のみを中間結果として保存し、処理を進めることにする。これにより、従来の方式に比べ処理時間を短縮し、また中間結果としてメモリ上に保存する情報量を削減する。
【００１１】
本発明の処理方式では、連続するワイルドカードの演算順序を変更して、以下のような順序で処理を行う。
【００１２】
(ステップ１)「％演算」よりも先に「＿演算」を行う。連続する「＿演算」は左のものから順に行う。
【００１３】
(ステップ２)連続する「％演算」を左から順に行う。
例えば、検索条件式「Ａ＿Ｂ％Ｃ＿Ｄ＿Ｅ％Ｆ」による検索を行う際の演算の優先順序を括弧で表すと、従来の処理方式では「((((Ａ＿Ｂ)％Ｃ)＿Ｄ)＿Ｅ)％Ｆ」、本発明の方式では「((Ａ＿Ｂ)％((Ｃ＿Ｄ)＿Ｅ))％Ｆ」」となる。
【００１４】
本発明の処理方式では、ステップ１として検索条件式の中で「＿演算」で連結された一連の部分に一致する部分文字列の位置情報を先に求めて中間結果とし、その後にステップ２として「％演算」のみを左から順に行うことになる。連続する「＿演算」がある場合，その条件に一致する部分文字列の位置情報をもれなく検索するためには、個々の「＿演算」で条件に一致する部分文字列のすべての位置情報を検索する必要がある。「＿演算」がすべて終わった後には、「％演算」のみが連続しその結果が「＿演算」で使用されないため、以下に述べるようにして、中間結果として出力する条件を満たす部分文字列の位置情報を削減する。
【００１５】
連続する「％演算」では左のものから順に処理を行い、個々の「％演算」では条件を満たす部分文字列のうち、出現したテキストごとに終端位置が最も左になる１つの位置情報のみを中間結果として出力していく。以下、説明を簡略にするためにある一つのテキストのみを検索の対象とする。
【００１６】
「Ａ」の出現位置Ｐ(Ａ)のうち終端位置が最も左である１件のみからなる位置情報をＰ'(Ａ)と表記する。「Ａ％Ｂ」にヒットするものが複数存在する場合、その中で終端位置が最も左である１件は、Ｐ'(Ａ)とＰ(Ｂ)に対して「％演算」を行いヒットしたものの中で終端位置が最も左の１件と一致する。逆に、「Ａ％Ｂ」にヒットするものが存在しない場合，Ｐ'(Ａ)とＰ(Ｂ)に対して「％演算」を行ってもヒットするものはない。したがって、Ｐ'(Ａ)およびＰ(Ｂ)があれば、「Ａ％Ｂ」にヒットするものがあればその中で最も終端位置が左の１件の位置情報を、ヒットするものが無い場合はヒットしないという情報を得ることができる。
【００１７】
以下、例として検索条件式「Ａ％Ｂ％Ｃ」の検索を説明する。
【００１８】
条件式「Ａ％Ｂ％Ｃ」にヒットするかどうかを判定するには、まずＰ(Ａ)およびＰ(Ｂ)からＰ'(Ａ％Ｂ)を求める。ここでヒットするものが無ければ「Ａ％Ｂ％Ｃ」にヒットするものは無い。ヒットするものがあった場合，さらにＰ'(Ａ％Ｂ)およびＰ(Ｃ)からＰ'(Ａ％Ｂ％Ｃ)を求める。これがヒットしたならば、当該テキストには条件式「Ａ％Ｂ％Ｃ」に一致する部分文字列が一つは含まれているということになり、最終的な検索結果として出力する。Ｐ'(Ａ％Ｂ％Ｃ)が存在しない場合，当該テキストには条件式「Ａ％Ｂ％Ｃ」に一致する部分文字列が存在しないということになる。検索条件式により多くの「％演算」が含まれる場合も同様に処理を繰り返せばよい。
【００１９】
したがって、前述したようなワイルドカードの演算順序の変更を行った場合、「％演算」で出力する中間結果は、条件を満たすすべての組合せの中で終端位置が最も左となる１件だけでよい。同一テキストにおける「Ａ」および「Ｂ」の出現位置の個数をＭ，Ｎとすると、「Ａ％Ｂ」を検索するための「％演算」での比較処理の回数は、すべての組合せを検査する従来の処理では最大Ｍ×Ｎ回となるのに対し、本発明の処理方式では最大Ｎ回となり、「％演算」での処理時間を短縮することができる。検索条件式「Ｔ１％Ｔ２％Ｔ３％…％Ｔｎ」の検索でＴ１，Ｔ２、…、Ｔｎが同一文書にそれぞれＫ１，Ｋ２、…、Ｋｎ個出現していた場合，文字位置の比較演算の回数は、従来の方式では最大(Ｋ１×Ｋ２×…×Ｋｎ)回であるのに対し、本発明の処理方式では最大(Ｋ２＋Ｋ３＋…＋Ｋｎ)回となる。よって連続する「％演算」での比較演算の回数を軽減し、処理時間を短縮することができる。また、中間結果として出力する位置情報量も削減するため、検索処理で使用する記憶領域のサイズを軽減する効果もある。
【００２０】
一方、本発明での「＿演算」における比較演算の回数は従来方式と変わらないが、「＿演算」では比較演算回数が最大Ｍ＋Ｎ回であるため、処理時間はそれほど大きくは無い。
【発明の効果】
【００２１】
以上説明したように、本発明の検索方式によれば、n-gramインデクスを使用して大規模テキストに対して複数のワイルドカードを含む曖昧な検索条件式による検索を行う場合、中間結果として処理する位置情報を削減することができるため、検索性能が向上される効果がある。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態を図面を用いて具体的に説明する。
【００２３】
図２は、本発明の位置実施例におけるテキスト全文検索システムの構成を示したものである。
【００２４】
図２において、電子計算機１０にはオンライン処理で使用するオンライン端末１１および外部記憶装置１２が接続されている。電子計算機１０には、n-gramインデクス作成プログラム１３およびn-gramインデクス検索プログラム１４が接続されている。n-gramインデクス作成プログラム１３は、あらかじめ外部記憶装置１２に格納された検索処理対象であるテキストデータ１５を処理してn-gramインデクス１６を作成する。n-gramインデクス検索プログラム１４は、端末１１からの入力により、指定された検索条件式を含むテキストを検索し、結果を端末１１に出力する。
【００２５】
図３はn-gramインデクス検索プログラムの内部プログラムおよびn-gramインデクス検索プログラム内で使用される中間データを示している。n-gramインデクス検索プログラムでは、まず入力された検索条件式を検索条件式構文解析プログラム２１で解析してワイルドカード演算とそれ以外の単純な文字の並びの部分、すなわちタームに分解し、演算順序を表す検索条件木２５を作成する。検索条件木探索プログラム２２は、検索条件木２５を探索しながら、ターム検索プログラム２３およびワイルドカード演算プログラム２４を用いて中間結果２６を生成する。
【００２６】
以下、検索条件式「Ａ＿Ｂ％Ｃ＿Ｄ＿Ｅ％Ｆ」を例として検索処理の手順を説明する。
【００２７】
図４は検索条件式「Ａ＿Ｂ％Ｃ＿Ｄ＿Ｅ％Ｆ」を検索条件式解析プログラム２１で解析して生成した検索条件木２５であり、この構造が本発明による処理方式の演算順序を表している。検索条件木２５は木構造のデータであり、非リーフノードである演算子ノード２７とリーフノードであるタームノード２８から構成される。タームノード２７はワイルドカード文字で区切られた部分文字列に対応する。演算子ノード２８はワイルドカード文字で指定されたワイルドカード演算を表す。演算子ノードでワイルドカード文字の隣の数字は、検索条件式中にある同一の演算子の対応を区別するために、検索条件式で左から何番目のワイルドカード演算かを記述したものである。
【００２８】
図５は検索条件式から検索条件木を作成する処理のフローチャートである。ステップ３１では検索条件式の先頭から最初の「％演算子」までの文字列から検索条件木を作成する。この部分の作成処理の手順は後述する図６で説明する。ステップ３２では「％演算子」があるかを確認し、検索条件式の末尾に到達するまで以下の処理を繰り返す。ステップ３３では、ステップ３１と同様にして次の「％演算子」までの文字列から検索条件木を作成する。ステップ３４では「％演算」ノードを作成し、既存の２つの検索条件木をこのノードの左右の部分木とする。
【００２９】
図６は「％演算子」を含まない検索条件式から検索条件木を作成する処理のフローチャートである。ステップ４１では検索条件式の先頭から最初の「＿演算子」までの文字列をタームとして、タームノードを作成する。ステップ４２では「＿演算子」があるかを確認し、検索条件式の末尾に到達するまで以下の処理を繰り返す。ステップ４３では、ステップ４１と同様にして次の「＿演算子」までの文字列からタームノードを作成する。ステップ４４では「＿演算」ノードを作成し、既存の２つの検索条件木をこのノードの左右の部分木とする。
【００３０】
検索条件木探索プログラム２２は検索条件木を探索し、木構造の下位層から上位層の順に各ノードに対応する中間結果を生成する。図７は検索条件木探索プログラムが検索条件木を探索して各ノードに対応する中間結果を生成する順序を示している。
【００３１】
初めに、木構造の末端になっているタームノードが処理の対象となり、タームノードが表しているタームの出現位置を検索して中間結果が作成される。ターム検索プログラム２３はタームに含まれるn-gramの出現位置をn-gramインデクスから取り出し、n-gramの出現位置が連続しているものを探してタームの出現位置を求める。初めにターム「Ａ」、次にターム「Ｂ」に対応する中間結果が作成される。(図７の(１)、(２))
検索条件木探索プログラム２２は、演算子ノードの直下の層にある２つのノードに対応する中間結果が作成されたら、その２つの中間結果および当該演算子ノードを入力としてワイルドカード演算プログラム２４を実行する。ワイルドカード演算プログラム２４は入力の２つの中間結果に格納されている位置情報に対し、演算子ノードで指定されたワイルドカード演算を実行して当該演算子ノードに対応する中間結果を生成する。図７の(１)、(２)で生成した２つの中間結果Ｐ(Ａ)およびＰ(Ｂ)から「Ａ＿Ｂ」に対応する中間結果Ｐ(Ａ＿Ｂ)を生成する。(図７の(３))
当該演算子ノードがさらに上位の演算子ノードの子になっている場合，同位のもう１つのノードの中間結果を生成後に上位の演算子ノードをワイルドカード演算プログラムで処理して中間結果を生成する。以下、これをルートノードに対応する中間結果を生成するまで繰り返す。
【００３２】
図８はワイルドカード演算プログラムにおける「％演算」の処理手順を示す。ここで、例としてターム「Ｘ」および「Ｙ」の中間結果Ｐ(Ｘ)およびＰ(Ｙ)から、「Ｘ％Ｙ」に一致する部分文字列、すなわち「ＸとＹの間に任意の０文字以上の文字列を含む」部分文字列の出現位置を求める。テキストｋにおける「Ｘ」の出現位置で終端位置が最も左である文字位置（７−７）に対し、「Ｙ」の出現位置を順に調べていき、演算子ノード「％１」の条件を最初に満たすもの、すなわち開始位置が「Ｘ」の終端位置である７文字目よりも後ろのなっているもので最初のものを探す。文字位置（３−３）および（５−５）は条件を満たさず、文字位置（８−８）が条件を満たす最初の文字位置である。これによりテキストｋにおいて７文字目から８文字目が検索条件式「Ｘ％Ｙ」に一致する部分文字列で終端位置が最も左のものとなり、この文字位置（７−８）を「Ｘ％Ｙ」を表す「％演算」の演算子ノードに対応する中間結果として出力する。
【００３３】
もし「Ｘ」の出現位置Ｐ(Ｘ)で最も左の出現位置（７−７）に対して、「Ｙ」のすべての出現位置との距離を確認しても条件に一致する組合せが全く無かった場合，「Ｘ％Ｙ」に一致する部分文字列は存在しないことがわかり、そこで処理を終了する。Ｐ(Ｘ)に含まれる他の文字位置についてＰ(Ｙ)との距離の比較を行わなくてよい。
【００３４】
検索条件木のルートノードに対応する中間結果が作成されたら(図７の(１１))、それが指定された検索条件式による検索の最終的な結果となる。この最終的な中間結果から文書番号を取り出すことで、検索条件式で指定された文字列を含むテキストの一覧を取得できる。
【図面の簡単な説明】
【００３５】
【図１】同一テキスト内に「Ａ」および「Ｂ」が複数出現する場合の「Ａ％Ｂ」の出現位置を示す図
【図２】本発明によるn-gramインデクス検索処理方式を用いるテキスト全文検索システムの構成例を示す図
【図３】n-gramインデクス検索プログラムの内部プログラムおよびn-gramインデクス検索プログラム内で使用される中間データを示す図
【図４】検索条件式「Ａ＿Ｂ％Ｃ＿Ｄ＿Ｅ％Ｆ」を解析して生成した検索条件木を示す図
【図５】検索条件式を解析し検索条件木を作成する処理手順を示すフローチャート
【図６】「％演算」を含まない検索条件式を解析し検索条件木を作成する処理手順を示すフローチャート
【図７】検索条件木を探索し中間結果を生成する順序を示す図
【図８】「％演算」での文字位置比較演算の処理手順を示す図
【符号の説明】
【００３６】
１１…オンライン端末、１２…外部記憶装置、１３…n-gramインデクス登録プログラム、１４…n-gramインデクス検索プログラム、１５…テキストデータ、１６…n-gramインデクス、２１…検索条件式構文解析プログラム、２２…検索条件木探索プログラム、  ２３…ターム検索プログラム、２４…ワイルドカード演算プログラム、２５…検索条件木、２６…中間結果。
【図１】
2005215716.tif 000003
【図２】
2005215716.tif 000004
【図３】
2005215716.tif 000005
【図４】
2005215716.tif 000006
【図５】
2005215716.tif 000007
【図６】
2005215716.tif 000008
【図７】
2005215716.tif 000009
【図８】
2005215716.tif 000010