JP6072922B2 - 文字列検索装置、文字列検索方法および文字列検索プログラム - Google Patents

文字列検索装置、文字列検索方法および文字列検索プログラム Download PDF

Info

Publication number
JP6072922B2
JP6072922B2 JP2015532688A JP2015532688A JP6072922B2 JP 6072922 B2 JP6072922 B2 JP 6072922B2 JP 2015532688 A JP2015532688 A JP 2015532688A JP 2015532688 A JP2015532688 A JP 2015532688A JP 6072922 B2 JP6072922 B2 JP 6072922B2
Authority
JP
Japan
Prior art keywords
prefix
character string
search
score
specified
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015532688A
Other languages
English (en)
Other versions
JPWO2015025467A1 (ja
Inventor
穣 岡嶋
穣 岡嶋
康高 山本
康高 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Solutions Innovators Ltd
Original Assignee
NEC Solutions Innovators Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Solutions Innovators Ltd filed Critical NEC Solutions Innovators Ltd
Application granted granted Critical
Publication of JP6072922B2 publication Critical patent/JP6072922B2/ja
Publication of JPWO2015025467A1 publication Critical patent/JPWO2015025467A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)

Description

本発明は、入力された文字列に部分一致するキーを検索する文字列検索装置、文字列検索方法および文字列検索プログラムに関する。
人間のテキスト入力を支援する方法が普及し、我々の生活に欠かせないものになっている。入力支援として、例えば、検索エンジンの入力フォームに検索候補の検索キーワードを表示したり、WebブラウザのURL(Uniform Resource Locator)入力フォームに候補とするURLを表示したりすることが挙げられる。他にも、IME(Input Method Editor )の予測変換時に変換候補を表示したり、スペルチェッカーにおいて正しいスペルの候補を表示したりすることも入力支援の一例である。
このような入力支援は、辞書の検索として実現される。ユーザが入力しそうな文字列を、あらかじめ辞書にキーとして登録しておく。ユーザが新たに文字列の入力を開始したとき、ユーザが入力した文字列を検索クエリとして辞書を検索し、入力候補として適切なキーを取得して、画面上に表示する。例えば、検索キーワードの推薦では、過去にユーザが入力した検索キーワードをあらかじめ辞書に登録しておき、入力の候補として用いる。
実際の場面では、候補に該当する全てのキーを列挙する必要はない。例えば、検索キーワードを推薦する場面では、入力頻度が高い上位k個を候補として推薦すればよい。このように、スコアが大きい上位k個のキーを検索する問題は、Top−k検索(Top−k辞書検索)と呼ばれる。
非特許文献1では、RMQ Trieという、トライ(trie)とRMQ(Ranged Minimum Query)構造を利用することで、前方一致するキーの中から上位のキーを高速に取得するデータ構造が記載されている。
図9は、RMQ Trieを示す説明図である。図9に示す例では、検索クエリPを接頭辞として持つノードvを見つけ、ノードvの配下のキーの範囲[a,b]を得る。[a,b]に含まれるキーは、全て検索クエリPを接頭辞として持つ。このとき、各キーに対応づけて並べられたスコアの配列Rのうち範囲[a,b]の範囲のスコアを検索することで、検索クエリPを接頭辞として持つスコア上位k個のキーを得る。
非特許文献1には、RMQ Trieと同様に、前方一致するキーの中から上位のキーを高速に取得するために用いられるデータ構造が、他に2種類記載されている。
また、非特許文献2には、文書検索におけるTop−k検索について記載されている。この手法は、文書検索用のデータ構造を基礎として、そのデータ構造にTop−k検索に必要な付加データを追加することで、Top−k検索を実現する。
Bo-June (Paul) Hsu and Giuseppe Ottaviano, "Space-Efficient Data Structures for Top-k Completion", WWW '13 Proceedings of the 22nd international conference on World Wide Web, p583-594, May, 2013 Wing-Kai Hon, Rahul Shah, Sharma V. Thankachan, "Towards an Optimal Space-and-Query-Time Index for Top-k Document Retrieval", CPM'12 Proceedings of the 23rd Annual conference on Combinatorial Pattern Matching, p173-184
辞書に含まれるキーが大規模化すると、入力文字列に該当するキーの数も多くなるため、検索に時間がかかってしまう。そのため、候補とするキーを高速に取得することが求められる。
一方、非特許文献1に記載された各データ構造を利用することで、前方一致するキーの候補を高速に取得することは可能であるが、部分一致するキーの候補を取得することは困難である。
また、非特許文献2に記載されたデータ構造を用いることで、文書検索におけるTop−k検索を実現することができる。しかし、文書検索の際に用いられるデータはサイズが大きいため、文書検索に用いられる検索方法をそのまま辞書向けに適用した場合、対象とするデータサイズが大きくなってしまうという問題がある。
そこで、本発明は、データ量を削減しつつ高速に文字列の部分一致検索を行うことができる文字列検索装置、文字列検索方法および文字列検索プログラムを提供することを目的とする。
本発明による文字列検索装置は、優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列の集合から、入力された文字列を含む検索候補文字列を検索する文字列検索装置であって、各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定する接頭辞集合特定部と、入力された文字列で終わる接頭辞の集合の中から、接頭辞ごとにその接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコアが最大の接頭辞を特定する接頭辞特定部と、特定された接頭辞で始まる検索候補文字列の中から、文字列スコアが最大の検索候補文字列を特定する文字列特定部とを備えたことを特徴とする。
本発明による文字列検索方法は、優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列の集合から、入力された文字列を含む検索候補文字列を検索する文字列検索方法であって、各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定する接頭辞集合特定ステップと、入力された文字列で終わる接頭辞の集合の中から、接頭辞ごとにその接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコアが最大の接頭辞を特定する接頭辞特定ステップと、特定された接頭辞で始まる検索候補文字列の中から、文字列スコアが最大の検索候補文字列を特定する文字列特定ステップとを含むことを特徴とする。
本発明による文字列検索プログラムは、優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列の集合から、入力された文字列を含む検索候補文字列を検索するコンピュータに適用される文字列検索プログラムであって、コンピュータに、各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定する接頭辞集合特定処理、入力された文字列で終わる接頭辞の集合の中から、接頭辞ごとにその接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコアが最大の接頭辞を特定する接頭辞特定処理、および、特定された接頭辞で始まる検索候補文字列の中から、文字列スコアが最大の検索候補文字列を特定する文字列特定処理を実行させることを特徴とする。
本発明によれば、データ量を削減しつつ高速に文字列の部分一致検索を行うことができる。
本発明による文字列検索装置の第1の実施形態の構成例を示すブロック図である。 キーに対応するトライ木の例を示す説明図である。 第1のXBWの例を示す説明図である。 第2のXBWの例を示す説明図である。 検索情報記憶部が記憶するデータ構造の例を示す説明図である。 第1の実施形態の文字列検索装置の動作例を示すフローチャートである。 文字列スコアの大きいキーを選択する処理の例を示す説明図である。 本発明による文字列検索装置の概要を示すブロック図である。 RMQ Trieを示す説明図である。
まず初めに、本発明の文字列検索装置の概略を説明する。本発明は、辞書向けデータ構造であるXBWをTop−k検索に拡張することにより、入力された文字列に部分一致する上位のキーを検索するデータ構造を、省スペースかつ高速に実現するものである。
本発明では、検索候補文字列であるキーごとに、優先的に検索すべき度合いを示すスコア(以下、文字列スコアと記す。)が割り当てられ、キーの集合は、トライ木の構造で表わされる。
また、キーの集合に含まれるキーの全ての接頭辞は、辞書検索に用いられるXBW構造で表される。本発明の文字列検索装置は、このXBW構造を利用して、入力された文字列で終わる接頭辞の範囲を特定する。また、各接頭辞には、その接頭辞で始まるキーの中で最大のスコア(以下、接頭辞スコアと記す。)が対応付けられる。そこで、文字列検索装置は、特定した接頭辞の範囲の中で、最大の接頭辞スコアの接頭辞を特定する。
本発明では、特定された接頭辞の範囲内で最大の接頭辞スコアを特定するために、RMQ構造が用いられる。以下、最大の接頭辞スコアを特定するため、接頭辞と接頭辞スコアとの関係を表わすために用いられるRMQ構造を、第一のRMQ構造と記す。文字列検索装置は、この第一のRMQ構造を用いて、特定された接頭辞の範囲内で最大の接頭辞スコアの接頭辞を特定する。
さらに、文字列検索装置は、特定された接頭辞で始まるキーの中で最大の文字列スコアのキーを特定する。このとき、特定された接頭辞は、トライ木における一つのノードに対応する。そこで、各ノード配下に存在するキーの範囲の中で最大の文字列スコアを特定するため、最大の接頭辞スコアと特定する場合と同様、RMQ構造が用いられる。以下、キーと文字列スコアとの関係を表わすために用いられるRMQ構造を、第二のRMQ構造と記す。文字列検索装置は、この第二のRMQ構造を用いて、特定された接頭辞で始まるキーの範囲の中から最大の文字列スコアのキーを特定する。
最大の文字列スコアのキーを特定した後、文字列検索装置は、この文字列検索をTop−k検索に適用するため、文字列スコアが2番目以降のキーを検索する処理を行う。2番目以降のキーが存在する位置は、既に特定された接頭辞で始まるキーの2番目以降か、まだ特定されていない接頭辞の1番目以降である。
そこで、文字列検索装置は、特定された接頭辞の接頭辞スコアと特定されたキーの文字列スコアを保持しておく。文字列検索装置は、保持する文字列スコアと接頭辞スコアのうち、最大のスコアとなるキーまたは接頭辞を選択する。それがキーであれば、そのキーと同じ接頭辞で始まるキーの中で、次に文字列スコアが大きいキーを検索する。また、それが接頭辞であれば、その接頭辞の次に接頭辞スコアが大きい接頭辞を検索する。これを繰り返すことで、入力された文字列を含むキーのうち、文字列スコアが上位となるものを効率的に検索できる。
以下、本発明の文字列検索装置の実施形態を、図面を参照してより具体的に説明する。
実施形態1.
図1は、本発明による文字列検索装置の第1の実施形態の構成例を示すブロック図である。本実施形態の文字列検索装置は、入力部10と、接頭辞集合特定部20と、検索管理部30と、接頭辞特定部31と、文字列特定部32と、出力部40と、検索情報記憶部50とを備えている。
入力部10は、一文字以上の文字列を入力する。本実施形態の文字列検索装置は、入力された文字列に部分一致するキーを検索する。以下の説明では、入力される文字列のことを検索クエリ(または、単にクエリ)Pと記す。
検索情報記憶部50は、検索候補文字列であるキーの集合を記憶する。本実施形態で用いられるキーには、上述するように文字列スコアが対応づけられる。すなわち、本実施形態の文字列検索装置は、キーの集合から、より文字列スコアが大きいキーを優先的に検索する。
本実施形態では、データ量を削減するため、検索対象とするキーは、トライ木の構造を利用して表わされる。図2は、キーに対応するトライ木の例を示す説明図である。例えば、図2に例示する4つの単語(aba,abcc,cab,cac)が存在する場合、トライ木は、共通する文字を共通のノードに配置するように構成される。検索情報記憶部50は、トライ木で表わされたキーそのものを記憶してもよく、後述するように、トライ木の構造のみを記憶してもよい。
また、木構造で表わされた各葉ノードが、各キーに対応する。そこで、検索情報記憶部50は、図2に例示する各キーのスコア(文字列スコア)を各葉ノードに対応付けて記憶する。これにより、トライ木を探索して葉ノードに到達したとき、その葉ノードが表すキーに対応する文字列スコアを取得できる。
さらに、検索情報記憶部50は、クエリPで終わる文字列を検索できるように、接頭辞pの集合を記憶する。ここで、接頭辞pとは、各キーの先頭文字から抽出される連続する1文字以上の文字列である。この接頭辞pの集合は、末尾から辞書式順序にソートされていてもよい。
本実施形態では、このような接頭辞の集合を表わすため、XBWという構造を利用する。XBWは、ラベルつきの木構造を効率的に表現することができるデータ構造である。トライ木をこのXBW構造を用いて表現することで、クエリPで終わる接頭辞pの範囲検索が可能になる。
XBWは、同等の操作を実現するデータ構造を2種類の方法で実現できることが知られている。第1のXBWは、辞書の各接頭辞について、その接頭辞に対応するトライ木上のノードにおいて子ノードを表す文字を対応付ける構造を有する。第2のXBWは、辞書の各接頭辞について、その接頭辞に対応するトライ木上のノードにおいて親ノードとなる接頭辞のIDを対応付ける構造を有する。以下、それぞれのXBWの内容を説明する。
図3は、第1のXBWの例を示す説明図である。図3に例示する第1のXBWでは、トライ木の各ノードに対応する接頭辞が末尾から辞書式順序で並べられ、それぞれの接頭辞について、子ノードを表す文字が対応づけられる。このような構造により、各接頭辞から特定の文字を表す子ノードに移動することが可能になり、トライ木と同等の動作を実現できる。また、クエリPで終わる接頭辞pを範囲検索することができる。
図4は、第2のXBWの例を示す説明図である。図4に例示する第2のXBWでは、トライ木の各ノードに対応する接頭辞が末尾から辞書式順序で並べられ、各接頭辞にIDが付与される。そして、それぞれの接頭辞について、その親のIDが対応づけられる。このような構造により、次の親ノードに移動することが可能になる。また、第1のXBWと同様に、クエリPで終わる接頭辞pを範囲検索することができる。
なお、第2のXBWでは、親のIDしか持たないため、子ノードを探索することは困難である。ただし、第2のXBWを利用する場合でも、クエリPで終わる接頭辞pの範囲検索は可能である。本実施形態では、いずれのXBWも利用可能である。
第1のXBWについては参照文献1に、第2のXBWについては参照文献2に記載されている。
<参照文献1>Paolo Ferragina, Fabrizio Luccio, Giovanni Manzini and S. Muthukrishnan, "Structuring labeled trees for optimal succinctness, and beyond", FOCS '05 Proceedings of the 46th Annual IEEE Symposium on Foundations of Computer Science, Pages 184-196
<参照文献2>Wing-Kai Hon, Tsung-Han Ku, Rahul Shah, Sharma V. Thankachan, and Jerey Scott Vitter, “Faster compressed dictionary matching”, SPIRE'10 Proceedings of the 17th international conference on String processing and information retrieval, Pages 191-200
また、本実施形態では、接頭辞ごとにスコア(すなわち、接頭辞スコア)を定義する。接頭辞スコアは、その接頭辞で始まるキーに対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される。このスコアを式で表すと式1のようになる。式1における右辺のScoreは、文字列スコアを表わし、式1における左辺のScoreは、接頭辞スコアを表わす。
Score(p)=max{Score(接頭辞pで始まるキー)} ・・・(式1)
本実施形態では、キーの集合が木構造で表わされているため、ある接頭辞で始まるキーは、その接頭辞に対応するノードの配下に存在する。したがって、接頭辞スコアは、そのノード配下に存在するキーの中で最も大きい文字列スコアになる。
本実施形態では、XBW構造に第一のRMQ構造を追加し、その第一のRMQ構造を利用して各ノードに対応する接頭辞スコアを特定できるようにする。具体的には、RMQで用いられる配列に、各接頭辞の接頭辞スコアを格納する。以下、接頭辞スコアが格納される配列を、接頭辞スコア列Rと記す。接頭辞は末尾を基準にソートされているため、同じ文字列で終わる接頭辞は、ひとつながりの範囲で特定される。したがって、第一のRMQ構造を用いることで、接頭辞スコア列Rの任意の範囲における最大値を特定できる。
さらに、本実施形態では、第二のRMQ構造を利用して各キーの文字列スコアを特定できるようにする。具体的には、RMQで用いられる配列に、各キーの文字列スコアを格納する。以下、文字列スコアが格納される配列を、文字列スコア列Rと記す。各キーは、先頭からソートされているため、ある接頭辞で始まるキーは、ひとつながりの範囲で特定される。したがって、第二のRMQ構造を用いることで、文字列スコア列Rの任意の範囲における最大値を特定できる。
図5は、検索情報記憶部が記憶するデータ構造の例を示す説明図である。本実施形態におけるXBW構造は、トライ木のノードごとに3つの要素の組を有する集合Sで表わされる。Slastは、バイナリのフラグであり、ノードの親ノードにとってそのノードが最後の子供である場合に1になり、それ以外は0になる。Sαは、ノードが表わす文字である。Sπは、ノードの親ノードに対応する接頭辞であり、ルートから親ノードまでの文字を順番に結合した文字列である。なお、Sπには、ノード自身の文字は含まれない。3つの要素の組は、各要素に含まれる接頭辞の末尾の文字から先頭の文字までを比較して辞書式順序でソートされる。図5に示す例では、ソートされた各組(Sπ,Sα,Slast)に、先頭から順に行番号が付与される。なお、図5において、$はキーの先頭を示し、#はキーの末尾を示す。
また、図5に示すように、接頭辞ごとに接頭辞スコアRが定義される。接頭辞スコアRは、上述するように、各キーに対応づけられた文字列スコアから算出されるため、明示的に接頭辞スコアは保持されなくてもよい。図5に例示する接頭辞IDは、辞書に含まれる全ての接頭辞を、末尾からソートした順に付与される。したがって、接頭辞IDの順番は、Slastに1が設定されている接頭辞の順番と一致する。
図5に例示する構造によって、クエリPで終わる接頭辞の範囲を特定できる。例えば、クエリ“ab”で終わる接頭辞に対応する行は、行番号7〜9に対応する行(すなわち、“$ab”,“$cab”に相当する行)であることが分かる。また、“$ab”および“$cab”の接頭辞スコアRは、それぞれ接頭辞ID=4,5に対応する9および4であることも分かる。
接頭辞の範囲を特定できれば、その範囲でスコアが最大となる接頭辞のIDを第一のRMQ構造で取得することができる。さらに、第一のRMQ構造を再帰的に利用することで、スコアの大きさが2位以下の接頭辞IDを取得することができる。
以上のことから、XBW構造を用いることで、クエリPで終わる接頭辞pの中から接頭辞スコアが上位となる接頭辞pを任意の数だけ選択することが可能になる。
接頭辞集合特定部20は、検索情報記憶部50に記憶された接頭辞の集合から、入力された文字列を含む接頭辞の集合を特定する。具体的には、接頭辞集合特定部20は、入力された文字列で終わる接頭辞の集合を特定する。例えば、検索情報記憶部50が図5に例示する接頭辞の集合を記憶している場合、文字列として“ab”が入力されると、接頭辞集合特定部20は、行番号7〜9の範囲に存在する接頭辞(すなわち、“$ab”,“$cab”)を接頭辞の集合として特定する。
接頭辞特定部31は、接頭辞集合特定部20によって特定された接頭辞の集合の中から、接頭辞スコアが上位の接頭辞を特定する。接頭辞特定部31は、接頭辞スコアが最も大きい接頭辞または接頭辞スコアの上位n件に該当する接頭辞を特定してもよい(nは任意の自然数)。
文字列特定部32は、特定された接頭辞で始まるキーのうち、文字列スコアが上位のキーを特定する。文字列特定部32は、文字列スコアが最も大きいキーまたは文字列スコアの上位m件に該当するキーを検索してもよい(mは任意の自然数)。
例えば、図5において、接頭辞特定部31が接頭辞を“$ab”と特定したとする。この場合、特定された接頭辞“$ab”で始まるキーは、“aba”と“abcc”である。“aba”の文字列スコアは3であり、“abcc”の文字列スコアは9である。この場合、文字列特定部32は、キーとして“abcc”を選択すればよい。
検索管理部30は、接頭辞特定部31が検索する接頭辞の範囲を特定する。また、検索管理部30は、文字列特定部32が検索するキーの範囲を特定し、文字列特定部32によって特定されたキーを、検索対象のキーと特定する。
具体的には、検索管理部30は、まず、接頭辞集合特定部20が特定した接頭辞の範囲を、接頭辞特定部31が検索する接頭辞の範囲と特定する。そして、検索管理部30は、その特定された範囲内の接頭辞で始まるキーを文字列特定部32が検索するキーの範囲と特定する。そして、検索管理部30は、文字列特定部32によって特定されたキーを、検索対象のキーと特定する。
その後、検索管理部30は、文字列特定部32によって特定されたキーの接頭辞で始まるキーの中から、すでに特定されたキーを除いた範囲を特定する。さらに、検索管理部30は、接頭辞集合特定部20により特定された接頭辞の集合から、接頭辞特定部31により特定された接頭辞を除いた範囲を特定する。
そして、検索管理部30は、接頭辞特定部31および文字列特定部32に、各処理を実行させる。具体的には、接頭辞特定部31は、検索管理部30により特定された接頭辞の範囲から、接頭辞スコアが最大の接頭辞を特定する。さらに、文字列特定部32は、検索管理部30により特定されたキーの範囲から、文字列スコアが最大のキーを特定する。
検索管理部30は、接頭辞の範囲から特定された接頭辞の接頭辞スコアと、キーの範囲の中から特定されたキーの文字列スコアとを比較する。比較した結果、最も大きいスコアが文字列スコアだった場合、そのキーと同じ接頭辞で始まるキーの中で、そのキーの次に文字列スコアが大きいキーを検索する。具体的には、検索管理部30は、そのキーを特定した際に用いたキーの範囲から、そのキーを除外して二分し、その2つの範囲を特定する。文字列特定部32は、その2つの範囲の中から文字列スコアが最大となるキーを特定する。
最も大きいスコアが接頭辞スコアだった場合、その接頭辞の次に接頭辞スコアが大きい接頭辞を検索する。具体的には、検索管理部30は、その接頭辞を特定した際に用いた接頭辞の範囲から、その接頭辞を除外して二分し、その2つの範囲を特定する。接頭辞特定部31は、その範囲の中から接頭辞スコアが最大となる接頭辞を特定する。
出力部40は、検索管理部30により特定されたキーを検索結果として出力する。
接頭辞集合特定部20と、検索管理部30と、接頭辞特定部31と、文字列特定部32とは、プログラム(文字列検索プログラム)に従って動作するコンピュータのCPUによって実現される。例えば、プログラムは、文字列検索装置の記憶部(図示せず)に記憶され、CPUは、そのプログラムを読み込み、プログラムに従って、接頭辞集合特定部20、検索管理部30、接頭辞特定部31および文字列特定部32として動作してもよい。
また、接頭辞集合特定部20と、検索管理部30と、接頭辞特定部31と、文字列特定部32とは、それぞれが専用のハードウェアで実現されていてもよい。
次に、本実施形態の文字列検索装置の動作を説明する。図6は、本実施形態の文字列検索装置の動作例を示すフローチャートである。ここでは、k個のキーを候補として選択するものとする。また、検索管理部30が、接頭辞特定部31が特定した接頭辞および接頭辞スコアのペアと、文字列特定部32が特定したキーおよび文字列スコアのペアとを保持する優先度付きキュー(図示せず)を含んでいるものとする。この優先度付きキューは、候補とする情報を保持するためのキューである。以下の説明では、優先度付きキューのことを、単にキューと記す。
入力部10は、検索する文字列を入力する(ステップS11)。接頭辞集合特定部20は、検索情報記憶部50を参照して、入力された文字列を含む接頭辞の集合を特定する(ステップS12)。
接頭辞特定部31は、接頭辞集合特定部20が特定した接頭辞の集合の中から、接頭辞スコアが最も大きい接頭辞を特定し、特定した接頭辞と接頭辞スコアのペアをキューに保持する(ステップS13)。
文字列特定部32は、特定された接頭辞で始まるキーの中から、文字列スコアが最も大きいキーを特定し、特定したキーと文字列スコアのペアをキューに保持する(ステップS14)。
次に、検索管理部30は、キューに保持された接頭辞スコアまたは文字列スコアのうち、最大のスコアの接頭辞またはキーを特定する(ステップS15)。そして、検索管理部30は、最大のスコアが、接頭辞スコアか文字列スコアかを判断する(ステップS16)。
最大のスコアが文字列スコアだった場合(ステップS16における「文字列スコア」)、検索管理部30は、その文字列スコアのキーを、出力対象として特定し、キューからは除外する(ステップS17)。そして、文字列特定部32は、除外されたキーを特定する際に用いられたキーの範囲の中で、除外したキーの次に大きい文字列スコアのキーを特定し、特定したキーと文字列スコアのペアをキューに保持する(ステップS18)。
一方、最大のスコアが接頭辞スコアだった場合(ステップS16における「接頭辞スコア」)、検索管理部30は、その接頭辞スコアの接頭辞を、キューから除外する(ステップS19)。そして、接頭辞特定部31は、除外された接頭辞を特定する際に用いられた接頭辞の範囲の中で、除外した接頭辞の次に大きい接頭辞スコアの接頭辞を特定し、特定した接頭辞と接頭辞スコアのペアをキューに保持する(ステップS20)。
さらに、文字列特定部32は、ステップS20で特定された接頭辞で始まるキーの中から、文字列スコアが最も大きいキーを特定し、特定したキーと文字列スコアのペアをキューに保持する(ステップS21)。
キューが空になった、または、キューの中で最大のスコアが、それまでに見つかっているk番目に大きい文字列スコアを下回った場合(ステップS22におけるYes)、検索管理部30は、それまでに見つかったキーを上位のキーとして出力する(ステップS23)。一方、キーが空でなく、かつ、キューの中で最大のスコアが、それまでに見つかっているk番目に大きい文字列スコアを下回っていない場合(ステップS22におけるNo)、ステップS15以降の処理が繰り返される。
このように、接頭辞特定部31によって特定された接頭辞と接頭辞スコアのペア、および、文字列特定部32によって特定されたキーと文字列スコアのペアを、同じ優先度付きキューに入れておくことで、接頭辞スコアまたは文字列スコアのうち、最も大きいスコアのペアを取り出すことができる。
以下、図6に例示する動作を具体例を用いて説明する。図7は、文字列スコアの大きいキーを選択する処理の例を示す説明図である。図7に示す例では、文字列“gres”が入力され、この文字列に部分一致するキーを3つ(k=3)検索する方法を示している。図7の左側の枠内に例示するリストが、XBW構造を模式的に示したリストであり、数字が接頭辞スコアを表わし、文字が接頭辞を表わす。また、図7の右側の枠内に例示するリストが、トライ木を模式的に示したリストであり、数字が文字列スコアを表わし、文字がキーを表わす。
接頭辞集合特定部20は、文字列“gres”に部分一致するキーの範囲をXBW構造で表わされた接頭辞の集合の中から、“aggres”,“congres”,“progres”を候補として特定する。接頭辞が特定されれば、その接頭辞で始まるキーを特定することができる。
接頭辞特定部31は、決定された接頭辞の集合の中から、入力された文字列“gres”で終わる接頭辞の中で接頭辞スコアが最も大きい接頭辞を選択する。図7では、選択された接頭辞を接頭辞スコアが高い順に並べた状態を示している。図7に示す例では、“congres”の接頭辞スコアが45で最も大きい。そこで、接頭辞特定部31は、“congres”を接頭辞として特定する。
文字列特定部32は、選択された接頭辞で始まるキーの中から文字列スコアが最も大きいキーを選択する。図7に示す例では、“congres”が接頭辞になるキーは、“congress”,“congressional”,“congressmen”の3つ存在する。このうち、文字列スコアが最も大きいキーは、“congress”である。そこで、文字列特定部32は、1つ目のキーとして、“congress”を特定し、検索管理部30は、特定された“congress”を検索対象のキーと特定する。
この段階では、まだキーは1つしか特定されていないため、キーを特定する処理が繰り返される。
検索管理部30は、上述するように、候補とする情報を保持するための優先度付きキュー(図示せず)を備えておき、このキューにこれまで見つかった接頭辞およびキーをそのスコアとともに保持しておく。
検索管理部30は、キューを参照し、キューに保持されている接頭辞及びキーの中から、最大のスコアのものを選択する。選択されたものがキーであった場合、文字列特定部32は、そのキーを検索したときと同じキーの範囲のなかで、次に文字列スコアが大きいキーを検索する。選択されたものが接頭辞であった場合、接頭辞特定部31は、その接頭辞を検索したときと同じ接頭辞の範囲のなかで、その接頭辞の次に接頭辞スコアが大きい接頭辞を検索する。
この例の場合、接頭辞スコア45の接頭辞“congres”と、文字列スコア45のキー“congress”がキューに保持されている。このときスコアは同値なので、キーと接頭辞のどちらを先に検索しても良い。キーを検索する場合、検索管理部30は、まずキー“congress”をポップしてキューから除外する。そして、文字列特定部32は、キー“congress”を得たときと同じ接頭辞“congres”で始まるキーの中で、キー“congress”の次に大きい文字列スコアを持つキーを検索する。具体的には、検索管理部30は、キー“congress”を得たときに探索したキーの範囲について、今度は“congress”を除外して二分し、文字列特定部32は、その2つの範囲の中で文字列スコアが最大となるキーを検索する。このとき、キー“congress”を除外して二分した2つの範囲のうち、“congress”よりも辞書順で前の範囲にはキーが存在しない。そのため、辞書順が後の範囲で最大の文字列スコアとなるキーだけを求めればよい。そのキーは文字列スコア13のキー“congressmen”である。よって、検索管理部30は、このキーを新たにキューに保持する。
接頭辞を検索する場合、検索管理部30は、まず接頭辞“congres”をポップしてキューから除外する。そして、接頭辞特定部31は、接頭辞“congres”の次に大きい接頭辞スコアを持つ接頭辞を検索する。具体的には、検索管理部30は、接頭辞“congres”を得た時に探索した接頭辞の範囲について、今度は“congres”を除外して二分し、接頭辞特定部31は、その2つの範囲の中で接頭辞スコアが最大となる接頭辞を検索する。このとき、接頭辞“congres”を除外して二分した2つの範囲で接頭辞スコアが大きい接頭辞は、それぞれ、接頭辞スコア12の接頭辞“aggres”および接頭辞スコア21の接頭辞“progres”である。よって、検索管理部30は、この2つの接頭辞を新たにキューに保持する。
さらに続けて、文字列特定部32は、接頭辞“aggres”および接頭辞“progres”について、それぞれの接頭辞で始まる文字列スコアが最大のキーを取得する。これにより、文字列スコア12のキー“aggresive”、および文字列スコア21のキー“progress”が得られる。これにより、さきほど取得した2つの接頭辞のうち、接頭辞“aggres”の接頭辞スコアが12であり、接頭辞“progres”の接頭辞スコアが21であったことを確認できる。
本実施形態では、RMQ構造だけを保持しており、接頭辞スコア自体は保持していない。RMQ構造だけでは、接頭辞スコアが最大となる接頭辞がどれであるかを見つけることはできるが、その具体的な接頭辞スコアは計算できない。よって、その範囲で接頭辞スコアが最大となる接頭辞を取得したあと、その接頭辞スコアが具体的にどんな値であるか判断するためには、その接頭辞で始まるキーのうち最大となる文字列スコアを取得する必要がある。
以上の処理により、キューには5つのスコアが保持されている。接頭辞スコア21の接頭辞“progres”、接頭辞スコア12の接頭辞“aggres”、文字列スコア21のキー“progress”、文字列スコア13のキー“congressmen”、文字列スコア12のキー“aggresive”である。
このうち、スコアが最大であるのは、接頭辞スコア21の接頭辞“progres”もしくは文字列スコア21のキー“progress”なので、このどちらかの接頭辞もしくはキーについて探索すればよい。
この処理を繰り返す。もし、新たに見つかった接頭辞の接頭辞スコアが、それまでに見つかっているk番目に大きい文字列スコアを下回っている場合は、検索管理部30は、その接頭辞をキューに登録しない。その接頭辞の次に接頭辞スコアが大きい接頭辞は、それよりもさらにスコアが小さいからである。同様に、新たに見つかったキーのスコアが、それまでに見つかっているk番目に大きい文字列スコアを下回っている場合、検索管理部30は、そのキーをキューに登録しない。これにより、接頭辞スコアが小さい接頭辞や文字列スコアが小さいキーについては探索せずに済ませることができ、上位k個のキーを効率的に収集できる。
キューが空になるか、キューの中で最大となるスコアが、それまでに見つかっているk番目に大きい文字列スコアを下回ったら探索終了となる。
以上のように、本実施形態によれば、接頭辞集合特定部20が、接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定し、接頭辞特定部31が、入力された文字列で終わる接頭辞の集合の中から、接頭辞スコアが最大の接頭辞を特定する。そして、文字列特定部32が、特定された接頭辞で始まるキーの中から、文字列スコアが最大のキーを特定する。
具体的には、本実施形態では、接頭辞とキーについてのインデックスを作成しているため、全ての部分文字列についてインデックスを作成するよりも辞書サイズを削減できる。また、本実施形態では、接頭辞特定部31が、接頭辞スコアが大きい接頭辞を特定し、文字列特定部32が、その接頭辞の中から文字列スコアの大きいキーを探索するため、スコアが大きい方から探せば、効率的に上位k個のキーを検索できる。したがって、データ量を削減しつつ高速に文字列の部分一致検索を行うことができる。
例えば、日本語辞書や英語辞書、クエリログやURLは、共通する接頭辞を有することが多い。本実施形態の文字列検索装置では、共通する接頭辞をまとめることが可能なデータ構造としてトライ木を利用するため、データサイズを削減できる。なお、本実施形態では、トライ木のデータ構造を利用してキーを表わす場合を例示したが、データ構造は、パトリシア木であってもよい。パトリシア木を用いることで、トライ木の木構造よりもデータサイズを削減できる。
また、本実施形態の文字列検索装置は、検索範囲を管理する検索管理部30を備えている。具体的には、検索管理部30は、文字列特定部32によって特定されたキーの接頭辞で始まるキーの中から、すでに特定されたキーを除く範囲を特定し、接頭辞集合特定部20により特定された接頭辞の集合から、接頭辞特定部31により特定された接頭辞を除く範囲を特定する。そして、接頭辞特定部31が、検索管理部30により特定された接頭辞の範囲から、接頭辞スコアが最大の接頭辞を特定し、文字列特定部32が、検索管理部30により特定されたキーの範囲から、文字列スコアが最大のキーを特定する。このようにすることで、辞書向けのデータ構造として利用されるXBWをTop−k検索に拡張できるため、上位k個の候補を部分一致検索する際、省スペースかつ高速に処理を実現できる。
実施形態2.
次に、本発明による文字列検索装置の第2の実施形態を説明する。本実施形態の文字列検索装置の構成は、第1の実施形態と同様である。ただし、第2の実施形態の文字列検索装置は、第1の実施形態の文字列装置よりも、保持するデータ量をより削減できるようにするものである。
第1の実施形態で説明したトライ木Tからは、2つのデータ構造が生成される。1つは、接頭辞に関するデータ構造であり、もう1つは、キーに関するデータ構造である。
接頭辞に関するデータ構造は、トライ木TのXBW表現であるxbwと、付随する第一のRMQ構造を含む。第1の実施形態で説明したように、xbw上では、接頭辞が末尾からソートされた順序に並んでいる。
また、第1の実施形態で示した接頭辞スコア列Rに対し、第一のRMQ構造が生成される。このとき、検索情報記憶部50は、接頭辞スコア列Rを、明示的に保持しなくてもよく、接頭辞スコア列Rから計算された第一のRMQ構造のみ保持するようにしてもよい。
キーに関するデータ構造は、トライ木Tから生成されるパトリシア木Tと、第二のRMQ構造と、文字列スコア列Rを含む。パトリシア木Tの木構造は、DFUDSで表わされる。さらに、パトリシア木Tにおいて、木構造の葉ノードのみを識別するため、ノード数と同数のビット列が用意される。
一般的なパトリシア木は、各ノードに対応する文字列を保持する。一方、本実施形態の検索情報記憶部50は、各ノードに対応する文字列を除去し、ノード間の親子関係を表わす木構造のみ記憶する。このような木構造のみ記憶する理由については、後述される。
以下の説明では、図5に例示するように、各キーが、先頭の文字から辞書式順序にソートされ、各キーには、その順番にキーIDが振られているものとする。また、各接頭辞も、末尾から辞書式順序にソートされ、各接頭辞には、その順番に接頭辞IDが振られているものとする。また、接頭辞IDの範囲を[s,e]と記し、接頭辞を表わす集合S上の範囲を[s,e]と記す。
接頭辞集合特定部20は、入力された文字列で終わる接頭辞IDの範囲[s,e]を特定する。具体的には、接頭辞集合特定部20は、xbwを用いて、接頭辞の末尾が入力された文字列になっている範囲[s,e]を特定する。ただし、この範囲[s,e]は、集合S上の範囲であるため、接頭辞IDの範囲[s,e]に変換する必要がある。そこで、接頭辞集合特定部20は、Slast上で[s,e]に含まれる最初の1と最後の1が何番目の1であるか特定することで、[s,e]を特定する。Slast上で1になる要素が、接頭辞IDと同じ順序で一対一に対応しているからである。
接頭辞特定部31は、特定された接頭辞IDの範囲[s,e]から、接頭辞スコアが最大の接頭辞を特定する。具体的には、接頭辞特定部31は、第一のRMQ構造を利用して、[s,e]の範囲内で接頭辞スコアが最大になる接頭辞の位置を特定する。なお、ここで特定された接頭辞の位置をiと記す。
検索管理部30は、特定された接頭辞の位置iから、この接頭辞で始まるキーの範囲を特定する。以下、特定された接頭辞で始まるキーの範囲を[s,e]と記す。具体的には、検索管理部30は、まず、S上での対応する位置iとして、接頭辞の位置iに対応する接頭辞を有する最後のノードを特定する。
次に、検索管理部30は、xbwにおいて、この接頭辞を表わす文字列を復元する。具体的には、検索管理部30は、xbwにおけるi行目が表わすノードから親を辿っていったときの文字を結合することで、文字列を復元する。ノードから親に向かって移動する回数は、接頭辞の長さと等しい。
このとき、検索管理部30は、辿ったS上の各位置iについて、iより手前で最も近いSlast[i]=1になる位置iとの差分d=i−iを計算する。そして、検索管理部30は、親に向かって辿った順序と逆の順に、計算した値を配列dへ格納する。ただし、上記のiが存在しない場合、検索管理部30は、i=0とした値を配列dへ格納する。
次に、検索管理部30は、パトリシア木Tにおいて、配列dに保存されている順序に従い、親ノードから子ノードへ対象とする位置を移動させる。ただし、配列dの対応する値が1である場合、検索管理部30は、その値を無視して、次の値について処理を行う。
xbwとTは、同じトライ木Tから生成されているため、ノードの子が1つである場合を除き、各ノードが持つ子の数とその順序は一致する。そのため、配列dに従ってT上の対象とする位置を移動させると、その位置は、接頭辞に対応するT上のノードuに到達する。
検索管理部30は、次に、DFUDSを用いて、到達したノードuの子孫に対応するキーの範囲[s,e]を特定する。[s,e]に含まれるキーは、全てuの子であることから、[s,e]は、特定された接頭辞で始まるキーの範囲を示していると言える。
文字列特定部32は、特定されたキーの範囲[s,e]から、文字列スコアが最大のキーID(以下、iと記す。)を特定する。具体的には、文字列特定部32は、第二のRMQ構造を利用して、[s,e]の範囲内で接頭辞スコアが最大になるキーの位置iを特定する。
文字列特定部32は、特定したキーIDの位置iから、キーの文字列を特定する。iは、パトリシア木T上のi番目の葉ノードuに対応する。そこで、文字列特定部32は、uからパトリシア木Tの親ノードへ辿り、親に向かって辿った順序と逆の順に、子ノードの番号を配列dへ格納する。文字列特定部32は、この配列dに従って、xbwをルートから順に辿ることで、uに対応するxbw上のノードの位置を特定できる。なお、子ノードが1つの場合、配列dを参照せず無条件に葉ノードの方向へ移動させればよい。パトリシア木Tの葉ノードに対応するトライ木のノードの子孫に枝分かれは存在しない。そのため、文字列特定部32は、一本鎖を辿ることで、キーを正確に復元できる。
以上のように、キーの情報はxbwから得られる。そのため、パトリシア木の各ノードが保持している文字列を除外して、ノード間の親子関係だけ残しておけばよい。
例えば、図5において、“$ab”には、ルートから1番目の子供を選択し、さらに、選択したノードで1番目の子供を選択すると辿りつける。そこで、検索管理部30は、選択したノードを特定するための配列dにd=1,1という情報を格納してもよい。
以下、図5に示す例を使って、本実施形態の文字列検索装置の具体的な動作を説明する。ここでは、検索クエリP=“ab”とし、k=2とする。Pで終わるS上の範囲は、[s,e]=[7,9]である。これに対応するR上の範囲は、[s,e]=[4,5]である。この範囲で最大の接頭辞スコアの位置は、i=4である。これは、S上における位置i=8に対応する。このiに対応する接頭辞は、“$ab”であり、どちらも1番目の子であるため、配列d=1,1が得られる。
上で、ルートノードを出発し、1番目の子ノードに移動し、もう一度1番目の子ノードに移動すると、“$ab”に対応するノードに到着する。このノード配下で最大の文字列スコアは9であり、このキーは、キーID=1で識別されるキーである。そこで、キーIDと文字列スコアのペア〈1,9〉が得られる。これが、図5における辞書で、最大の文字列スコアのキーである。
上位2個目のキーは、同じ接頭辞の2番目のキーか、他の接頭辞の1番目のキーである。同じ接頭辞の2番目のキーは、キーID=0で識別されるキーであり、その文字列スコア=3である(以下、〈0,3〉と記す。)。一方、他の接頭辞の1番目のキーを求めるには、最大の接頭辞スコアとしてさきほど特定された接頭辞i=4を除外した接頭辞の範囲を特定する。この接頭辞i=4を除外して接頭辞の範囲を2分することで、範囲[s,e]=[5,5]が特定される。そこで、範囲[s,e]=[5,5]で最大の接頭辞スコアの接頭辞を特定し、その中で最大の文字列スコアのキーを特定する処理が行われる。図5に示す例では、接頭辞“$cab”で始まるキーの中で最大文字列スコアのキーを特定することに相当する。この結果、新たに、キーIDと文字列スコアのペア〈2,4〉が特定される。
ここまでに、3つの候補のペアが特定されるが、スコアが小さい〈0,3〉は除外される。最終的に残ったペアは、〈1,9〉と〈2,4〉である。この2つのペアが特定された後、各ペアからキーを復元する処理が行われる。Tにおけるパスdは、それぞれ、1,2と、2,1である。このキーに対応するもとの辞書におけるキーは、xbwをルートから辿ることで一意に求まり、“$abcc#”と“$cab#”になる。
次に、本実施形態で説明したデータ構造を用いた場合のデータサイズについて説明する。トライ木Tとスコア配列Rが与えられるとすると、ノード数t>キー数lが成り立つ。一般に、ノード数tは、キー数lの10倍程度である。
本実施形態で説明したデータ構造を用いた場合、データサイズは、以下に示す式2で表わされる。
|XBW|+|第一のRMQ構造(接頭辞)|
+|T(パトリシア木)|+|第二のRMQ構造(キー)|+|R(スコア)|
・・・(式2)
式2において、|XBW|は、トライ木Tをxbwで表わした場合のデータサイズを示し、|R(スコア)|は、文字列スコアの配列のサイズを表わす。
また、T(パトリシア木)は、トライ木Tから生成され、その木構造は、DFUDSで表現される。本実施形態では、木構造の葉ノードだけを識別するため、ノード数と同数のビット列が用意され、このビット列の各ビットを用いて葉ノードか否かが識別される。そして、本実施形態のパトリシア木は、文字列が除去され、木構造のみで表わされる。上述するように、文字列の情報は、xbwから得られるためである。
パトリシア木のノード数は、最大2l−1であるが、DFUDSでノード数の2倍、葉ノードを識別するビット列にノード数と同数のビットが必要になる。そのため、|T(パトリシア木)|は、6l+o(l)ビットで表現される。
さらに、キーの文字列スコア配列R(スコア)に対して、第二のRMQ構造(キー)が生成される。|第二のRMQ構造(キー)|は、2l+o(l)ビットで表現される。
|XBW|と|R(スコア)|を、辞書およびスコアの実現に必要な最低限のデータとすると、本実施形態で説明したデータ構造を実現する場合、オーバヘッドは、最大で2t+6l+o(t)となり、一般的な方法に比べ、データ量が削減されている。
次に、本実施形態で説明したデータ構造を用いた場合の計算量について説明する。計算量は、O(k(log(k)+|P|+h))で算出される。ここで、|P|はクエリの長さを示し、hは、辞書に登録されているキーの平均長さを表わす。このように、本実施形態で説明したデータ構造を用いた場合、データサイズには依存せずに検索処理を実行できる。
次に、本発明の概要を説明する。図8は、本発明による文字列検索装置の概要を示すブロック図である。本発明による文字列検索装置は、優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列(例えば、キー)の集合から、入力された文字列を含む検索候補文字列を検索する文字列検索装置であって、各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合(例えば、XBWのデータ構造による接頭辞の集合)から、入力された文字列で終わる接頭辞の集合を決定する接頭辞集合特定部81(例えば、接頭辞集合特定部20)と、入力された文字列で終わる接頭辞の集合の中から、接頭辞ごとにその接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコア(例えば、式1により定義される接頭辞スコア)が最大の接頭辞を特定する接頭辞特定部82(例えば、接頭辞特定部31)と、特定された接頭辞で始まる検索候補文字列の中から、文字列スコアが最大の検索候補文字列を特定する文字列特定部83(例えば、文字列特定部32)とを備えている。
このように、接頭辞特定部82が、接頭辞スコアが大きい接頭辞を特定し、文字列特定部83が、その接頭辞の中から文字列スコアの大きい検索候補文字列を探索するため、スコアが大きい方から探せば、効率的に上位k個の検索候補文字列を検索できる。
さらに、文字列検索装置は、検索範囲を管理する検索管理部(例えば、検索管理部30)を備えていてもよい。検索管理部は、文字列特定部83によって特定された検索候補文字列の接頭辞で始まる検索候補文字列の中から、すでに特定された検索候補文字列を除く検索候補文字列の範囲を特定し、接頭辞集合特定部81により特定された接頭辞の集合から、接頭辞特定部82により特定された接頭辞を除いた接頭辞の範囲を特定してもよい。また、接頭辞特定部82は、検索管理部により特定された接頭辞の範囲から、接頭辞スコアが最大の接頭辞を特定し、文字列特定部83は、検索管理部により特定された検索候補文字列の範囲から、文字列スコアが最大の検索候補文字列を特定してもよい。
このとき、検索管理部は、接頭辞特定部82が特定した接頭辞と接頭辞スコアのペア、および、文字列特定部83が特定した検索対象文字列と文字列スコアのペアを保持するキュー(例えば、優先度付きキュー)を含んでいてもよい。そして、検索管理部は、キューに保持されたペアの中から、接頭辞スコアまたは文字列スコアのうち、最大のスコアの接頭辞または検索対象文字列を特定し、最大のスコアが文字列スコアだった場合、その文字列スコアの検索対象文字列をキューから除外して出力対象と特定し、最大のスコアが接頭辞スコアだった場合、当該接頭辞スコアの接頭辞をキューから除外してもよい。さらに、接頭辞特定部82は、最大のスコアが接頭辞スコアだった場合、キューから除外された接頭辞の次に大きい接頭辞スコアの接頭辞を特定し、文字列特定部83は、最大のスコアが文字列スコアだった場合、キューから除外された検索対象文字列を特定する際に用いられた接頭辞と同じ接頭辞で始まる検索対象文字列の中で、その除外された検索対象文字列の次に大きい文字列スコアを特定し、最大のスコアが接頭辞スコアだった場合、接頭辞特定部82によって特定された接頭辞で始まる検索対象文字列の中から、文字列スコアが最も大きい検索対象文字列を特定してもよい。
このように、接頭辞と接頭辞スコアのペア、および、検索対象文字列と文字列スコアのペアの両方のペアを1つのキューに保持することで、キュー内に保持される接頭辞スコアまたは文字列スコアを基に、最も大きいスコアが接頭辞スコアか文字列スコアかを判断できる。この最も大きいスコアに基づいて接頭辞特定部82および文字列特定部83が上述する処理を繰り返すことで、文字列スコアが上位の検索対象文字列を効率的に特定できる。
また、文字列検索装置は、トライ木のデータ構造で表わされた検索候補文字列の集合から生成され、XBWのデータ構造を有する接頭辞の集合(例えば、xbw)と、トライ木のデータ構造から生成されるパトリシア木であって、そのパトリシア木の各ノードに対応する文字列が除外されノード間の親子関係を表わす木構造のみ有するパトリシア木(例えば、パトリシア木T)とを記憶する検索情報記憶部(例えば、検索情報記憶部50)を備えていてもよい。そして、接頭辞特定部82が、XBWのデータ構造を有する接頭辞の集合から、接頭辞スコアが最大の接頭辞の位置を特定し、検索管理部は、特定された接頭辞の位置から、パトリシア木において対応するノードの位置(例えば、u)を特定してもよい。このような構成により、検索に用いる記憶するデータ量を削減できる。
このとき、文字列特定部83は、検索管理部により特定されたノードの位置配下に存在する検索候補文字列の中から文字列スコアが最大の検索候補文字列の位置(例えば、u)を特定し、XBWのデータ構造を有する接頭辞の集合から、特定した位置に対応する検索候補文字列を特定してもよい。
また、接頭辞特定部82は、第一のRMQ構造で表わされた接頭辞と接頭辞スコアとの関係をもとに、その第一のRMQ構造を用いて、特定された接頭辞の集合を範囲検索することにより、最大の接頭辞スコアの接頭辞を特定してもよい。
また、文字列特定部83は、第二のRMQ構造で表わされた検索候補文字列と文字列スコアとの関係をもとに、その第二のRMQ構造を用いて、特定された接頭辞で始まる検索候補文字列を範囲検索することにより、最大の文字列スコアの検索候補文字列を特定してもよい。
以上、実施形態及び実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、2013年8月21日に出願された日本特許出願2013−171291を基礎とする優先権を主張し、その開示の全てをここに取り込む。
本発明は、入力された文字列に部分一致するキーを検索する文字列検索装置に好適に適用される。本発明による文字列検索装置は、例えば、検索サービスを提供する際に利用可能である。
10 入力部
20 接頭辞集合特定部
30 検索管理部
31 接頭辞特定部
32 文字列特定部
40 出力部
50 検索情報記憶部

Claims (11)

  1. 優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列の集合から、入力された文字列を含む検索候補文字列を検索する文字列検索装置であって、
    各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定する接頭辞集合特定部と、
    入力された文字列で終わる接頭辞の集合の中から、前記接頭辞ごとに当該接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコアが最大の接頭辞を特定する接頭辞特定部と、
    特定された接頭辞で始まる検索候補文字列の中から、前記文字列スコアが最大の検索候補文字列を特定する文字列特定部とを備えた
    ことを特徴とする文字列検索装置。
  2. 検索範囲を管理する検索管理部を備え、
    前記検索管理部は、文字列特定部によって特定された検索候補文字列の接頭辞で始まる検索候補文字列の中から、すでに特定された検索候補文字列を除く検索候補文字列の範囲を特定し、接頭辞集合特定部により特定された接頭辞の集合から、接頭辞特定部により特定された接頭辞を除いた接頭辞の範囲を特定し、
    接頭辞特定部は、前記検索管理部により特定された接頭辞の範囲から、接頭辞スコアが最大の接頭辞を特定し、
    文字列特定部は、前記検索管理部により特定された検索候補文字列の範囲から、文字列スコアが最大の検索候補文字列を特定する
    請求項1記載の文字列検索装置。
  3. 検索管理部は、接頭辞特定部が特定した接頭辞と接頭辞スコアのペア、および、文字列特定部が特定した検索対象文字列と文字列スコアのペアを保持するキューを含み、
    前記検索管理部は、前記キューに保持されたペアの中から、接頭辞スコアまたは文字列スコアのうち、最大のスコアの接頭辞または検索対象文字列を特定し、最大のスコアが文字列スコアだった場合、当該文字列スコアの検索対象文字列をキューから除外して出力対象と特定し、最大のスコアが接頭辞スコアだった場合、当該接頭辞スコアの接頭辞をキューから除外し、
    接頭辞特定部は、最大のスコアが接頭辞スコアだった場合、キューから除外された接頭辞の次に大きい接頭辞スコアの接頭辞を特定し、
    文字列特定部は、最大のスコアが文字列スコアだった場合、キューから除外された検索対象文字列を特定する際に用いられた接頭辞と同じ接頭辞で始まる検索対象文字列の中で、当該除外された検索対象文字列の次に大きい文字列スコアを特定し、最大のスコアが接頭辞スコアだった場合、前記接頭辞特定部によって特定された接頭辞で始まる検索対象文字列の中から、文字列スコアが最も大きい検索対象文字列を特定する
    請求項2記載の文字列検索装置。
  4. トライ木のデータ構造で表わされた検索候補文字列の集合から生成され、XBWのデータ構造を有する接頭辞の集合と、前記トライ木のデータ構造から生成されるパトリシア木であって、当該パトリシア木の各ノードに対応する文字列が除外されノード間の親子関係を表わす木構造のみ有するパトリシア木とを記憶する検索情報記憶部を備え、
    接頭辞特定部は、前記XBWのデータ構造を有する接頭辞の集合から、接頭辞スコアが最大の接頭辞の位置を特定し、
    検索管理部は、特定された前記接頭辞の位置から、前記パトリシア木において対応するノードの位置を特定する
    請求項1から請求項3のうちのいずれか1項に記載の文字列検索装置。
  5. 文字列特定部は、検索管理部により特定されたノードの位置配下に存在する検索候補文字列の中から文字列スコアが最大の検索候補文字列の位置を特定し、XBWのデータ構造を有する接頭辞の集合から、前記特定した位置に対応する検索候補文字列を特定する
    請求項4記載の文字列検索装置。
  6. 接頭辞特定部は、第一のRMQ構造で表わされた接頭辞と接頭辞スコアとの関係をもとに、当該第一のRMQ構造を用いて、特定された接頭辞の集合を範囲検索することにより、最大の接頭辞スコアの接頭辞を特定する
    請求項1から請求項5のうちのいずれか1項に記載の文字列検索装置。
  7. 文字列特定部は、第二のRMQ構造で表わされた検索候補文字列と文字列スコアとの関係をもとに、当該第二のRMQ構造を用いて、特定された接頭辞で始まる検索候補文字列を範囲検索することにより、最大の文字列スコアの検索候補文字列を特定する
    請求項1から請求項6のうちのいずれか1項に記載の文字列検索装置。
  8. 優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列の集合から、入力された文字列を含む検索候補文字列を検索する文字列検索方法であって、
    各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定する接頭辞集合特定ステップと、
    入力された文字列で終わる接頭辞の集合の中から、前記接頭辞ごとに当該接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコアが最大の接頭辞を特定する接頭辞特定ステップと、
    特定された接頭辞で始まる検索候補文字列の中から、前記文字列スコアが最大の検索候補文字列を特定する文字列特定ステップとを含む
    ことを特徴とする文字列検索方法。
  9. 検索範囲を管理する検索管理ステップを含み、
    前記検索管理ステップで、文字列特定ステップで特定された検索候補文字列の接頭辞で始まる検索候補文字列の中から、すでに特定された検索候補文字列を除く検索候補文字列の範囲を特定し、接頭辞集合特定ステップで特定された接頭辞の集合から、接頭辞特定ステップで特定された接頭辞を除いた接頭辞の範囲を特定し、
    接頭辞特定ステップで、前記検索管理ステップで特定された接頭辞の範囲から、接頭辞スコアが最大の接頭辞を特定し、
    文字列特定ステップで、前記検索管理ステップで特定された検索候補文字列の範囲から、文字列スコアが最大の検索候補文字列を特定する
    請求項8記載の文字列検索方法。
  10. 優先的に検索すべき度合いを示す文字列スコアが対応づけられた検索候補文字列の集合から、入力された文字列を含む検索候補文字列を検索するコンピュータに適用される文字列検索プログラムであって、
    前記コンピュータに、
    各検索候補文字列の先頭文字から抽出される連続する1文字以上の文字列である接頭辞の集合から、入力された文字列で終わる接頭辞の集合を特定する接頭辞集合特定処理、
    入力された文字列で終わる接頭辞の集合の中から、前記接頭辞ごとに当該接頭辞で始まる検索候補文字列に対応づけられた文字列スコアのうち最も大きい文字列スコアで定義される接頭辞スコアが最大の接頭辞を特定する接頭辞特定処理、および、
    特定された接頭辞で始まる検索候補文字列の中から、前記文字列スコアが最大の検索候補文字列を特定する文字列特定処理
    を実行させるための文字列検索プログラム。
  11. コンピュータに、
    検索範囲を管理する検索管理処理を実行させ、
    前記検索管理処理で、文字列特定処理で特定された検索候補文字列の接頭辞で始まる検索候補文字列の中から、すでに特定された検索候補文字列を除く検索候補文字列の範囲を特定させ、接頭辞集合特定処理で特定された接頭辞の集合から、接頭辞特定処理で特定された接頭辞を除いた接頭辞の範囲を特定させ、
    接頭辞特定処理で、前記検索管理処理で特定された接頭辞の範囲から、接頭辞スコアが最大の接頭辞を特定させ、
    文字列特定処理で、前記検索管理処理で特定された検索候補文字列の範囲から、文字列スコアが最大の検索候補文字列を特定させる
    請求項10記載の文字列検索プログラム。
JP2015532688A 2013-08-21 2014-07-18 文字列検索装置、文字列検索方法および文字列検索プログラム Active JP6072922B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2013171291 2013-08-21
JP2013171291 2013-08-21
PCT/JP2014/003817 WO2015025467A1 (ja) 2013-08-21 2014-07-18 文字列検索装置、文字列検索方法および文字列検索プログラム

Publications (2)

Publication Number Publication Date
JP6072922B2 true JP6072922B2 (ja) 2017-02-01
JPWO2015025467A1 JPWO2015025467A1 (ja) 2017-03-02

Family

ID=52483264

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015532688A Active JP6072922B2 (ja) 2013-08-21 2014-07-18 文字列検索装置、文字列検索方法および文字列検索プログラム

Country Status (5)

Country Link
US (1) US20160196303A1 (ja)
EP (1) EP3037986A4 (ja)
JP (1) JP6072922B2 (ja)
CN (1) CN105474214A (ja)
WO (1) WO2015025467A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9892789B1 (en) 2017-01-16 2018-02-13 International Business Machines Corporation Content addressable memory with match hit quality indication
EP3376407B1 (en) 2017-03-15 2020-09-16 censhare AG Efficient use of trie data structure in databases
CN110222238B (zh) * 2019-04-30 2022-02-25 上海交通大学 字符串与识别符双向映射的查询方法和***
US11860884B2 (en) * 2021-03-30 2024-01-02 Snap Inc. Search query modification database

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008090606A1 (ja) * 2007-01-24 2008-07-31 Fujitsu Limited 情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法
WO2011104754A1 (ja) * 2010-02-24 2011-09-01 三菱電機株式会社 検索装置及び検索プログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7941310B2 (en) * 2003-09-09 2011-05-10 International Business Machines Corporation System and method for determining affixes of words
US8156156B2 (en) * 2006-04-06 2012-04-10 Universita Di Pisa Method of structuring and compressing labeled trees of arbitrary degree and shape
CN102084363B (zh) * 2008-07-03 2014-11-12 加利福尼亚大学董事会 一种用于在结构化数据上高效地支持交互式模糊搜索的方法
CN101916263B (zh) * 2010-07-27 2012-10-31 武汉大学 基于加权编辑距离的模糊关键字查询方法及***
US8930391B2 (en) * 2010-12-29 2015-01-06 Microsoft Corporation Progressive spatial searching using augmented structures

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008090606A1 (ja) * 2007-01-24 2008-07-31 Fujitsu Limited 情報検索プログラム、該プログラムを記録した記録媒体、情報検索装置、および情報検索方法
WO2011104754A1 (ja) * 2010-02-24 2011-09-01 三菱電機株式会社 検索装置及び検索プログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6014043822; Paolo Ferragina, Fabrizio Luccio, Giovanni Manzini and S. Muthukrishnan: 'Structuring labeled trees for optimal succinctness, and beyond' FOCS '05 Proceedings of the 46th Annual IEEE Symposium on Foundations of Computer Science [online] , 2005, p.184-193 *
JPN7014002974; Bo-June (Paul) Hsu, Giuseppe Ottaviano: 'Space-efficient data structures for Top-k completion' WWW '13 Proceedings of the 22nd international conference on World Wide Web [online] , 20130513, p.583-593 *

Also Published As

Publication number Publication date
US20160196303A1 (en) 2016-07-07
JPWO2015025467A1 (ja) 2017-03-02
CN105474214A (zh) 2016-04-06
WO2015025467A1 (ja) 2015-02-26
EP3037986A1 (en) 2016-06-29
EP3037986A4 (en) 2017-01-04

Similar Documents

Publication Publication Date Title
CN102768681B (zh) 一种用于搜索输入的推荐***及方法
US7912818B2 (en) Web graph compression through scalable pattern mining
CN111159990B (zh) 一种基于模式拓展的通用特殊词识别方法及***
JP6072922B2 (ja) 文字列検索装置、文字列検索方法および文字列検索プログラム
CN103678412B (zh) 一种文档检索的方法及装置
CN109902142B (zh) 一种基于编辑距离的字符串模糊匹配和查询方法
CN104252484A (zh) 一种拼音纠错方法及***
JP2009140161A5 (ja)
CN105843882A (zh) 一种信息匹配方法及装置
CN104199954A (zh) 一种用于搜索输入的推荐***及方法
JPWO2006038498A1 (ja) 配列の生成方法、及び、配列生成プログラム
CN108197315A (zh) 一种建立分词索引库的方法和装置
CN104268176A (zh) 一种基于搜索关键词的推荐方法及***
JP2005165598A (ja) 可変長文字列検索装置及び可変長文字列検索方法並びにプログラム
JP5980520B2 (ja) 効率的にクエリを処理する方法及び装置
CN105608201A (zh) 一种支持多关键词表达式的文本匹配方法
CN113065419B (zh) 一种基于流量高频内容的模式匹配算法及***
KR101089722B1 (ko) 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체
CN111814009B (zh) 一种基于搜索引擎检索信息的模式匹配方法
JP2000194713A (ja) 文字列検索方法及び装置及び文字列検索プログラムを格納した記憶媒体
JP4628258B2 (ja) グラフ検索装置
JP2008102641A (ja) 検索装置、検索方法及びプログラム
JP5628365B2 (ja) 検索装置
KR101080898B1 (ko) 문자열 색인 방법 및 장치
JP5237400B2 (ja) 検索装置

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161228

R150 Certificate of patent or registration of utility model

Ref document number: 6072922

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150