JP4698738B2 - 複数セグメント文字列の検索 - Google Patents

複数セグメント文字列の検索 Download PDF

Info

Publication number
JP4698738B2
JP4698738B2 JP2008545958A JP2008545958A JP4698738B2 JP 4698738 B2 JP4698738 B2 JP 4698738B2 JP 2008545958 A JP2008545958 A JP 2008545958A JP 2008545958 A JP2008545958 A JP 2008545958A JP 4698738 B2 JP4698738 B2 JP 4698738B2
Authority
JP
Japan
Prior art keywords
string
segment
query
character
component
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
JP2008545958A
Other languages
English (en)
Other versions
JP2009520283A (ja
Inventor
シモニー チャールズ
Original Assignee
インテンショナル ソフトウェア コーポレーション
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 インテンショナル ソフトウェア コーポレーション filed Critical インテンショナル ソフトウェア コーポレーション
Publication of JP2009520283A publication Critical patent/JP2009520283A/ja
Application granted granted Critical
Publication of JP4698738B2 publication Critical patent/JP4698738B2/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/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques

Description

いくつかの状況で、ともにつながれた1つまたは複数のセグメントからなる文字列が生じることがある。例えば、C++プログラミングでは、変数名はスペースを含むことはできないが、プログラマがその変数がどのように使用されるかを理解するのに十分に記述的でなければならない。必要な記述を提供するための一般的な方式の1つは、CamelCaseと呼ばれるものであり、この方式では、変数名が、1つまたは複数の連結された単語または単語の代替(例えば「integer」を表す「int」)からなり、各単語は大文字で始まり、それにより、ラクダのこぶのように名前の中にこぶのような見た目を作り出す(すなわちヒトコブラクダではなくフタコブラクダ)。例えば、コンピュータのディスクドライブの数を保持する変数は、DiskDriveCountと命名することができる。CamelCaseは、コンピュータ科学を越えて使用されている。例えば、多くの企業商標名は、この技法を採用して、複数のセグメントからなる単一の文字列を提供している(すなわちEarthLink(登録商標)、PlayStation(登録商標)、DaimlerChrysler(登録商標)等)。文字列の中でセグメントを区切る他の手法も一般的である。例えば、セグメントは、アンダーバー(すなわち上記のプログラミングの例ではdisc_drive_count)などの特殊文字によって区切る、あるいは、.NETプログラミングで一般的に使用されるように句読法で区切ることが可能である(すなわちSystem.IO。この場合はピリオドを使用してセグメントを区切っている)。
文字列が数個のセグメントから構成される場合、従来の検索方法では、検索者を最良の結果に導かない。例えば、ファイルを削除する関数を探しているプログラマが文字列「file」で単純な部分文字列検索を使用した場合、検索は、ファイル操作関数だけでなく、プロファイルを操作するための関連のない関数も含んだ結果を返す(「profile」が部分文字列「file」を含んでいるため)。プログラマは、探している関数が「De」で始まる単語及び単語「file」の両方を含んでいることは分かっているかもしれないが、その関数の名称が「DelFile」であるか、「DeleteFile」であるか、「DeleteAFile」であるかは覚えていないかもしれない。従来の検索方法を使用すると、「De」及び「file」についての検索は、正しい関数名(例えば「DeleteFile」)を返すかもしれないが、多くの正しくない関数名(例えば「GetProfileDescription」や「LaunchProfileReader」)をも返し、目的の関数を特定するのが難しい場合もある。
複数セグメントからなる文字列を検索する方法およびシステムが提供される。いくつかの実施形態では、検索システムは、クエリセグメントとして突き合わせるセグメントの一部またはすべてを含んでいるクエリ文字列を受け取る。クエリ文字列を受け取ると、検索システムは、そのクエリ文字列で提供されたクエリセグメントを、以前に格納された文字列から収集されたセグメントと比較する。クエリセグメントと一致するセグメントがある場合、検索システムは、一致するセグメントを含んでいる文字列を検索結果として選択する。あるいは、検索システムは、部分一致の文字列を検索結果に含めてもよい。部分一致は、クエリセグメントの一部と一致するが、すべてとは一致しないセグメントを有する文字列である。検索システムは、ユーザが最良の一致する文字列を識別することをより容易にするために一致の近さに基づいて検索結果に順位を付けてもよい。
この概要は、以下の発明を実施するための最良の形態においてさらに説明する概念のいくつかを簡略化した形態で紹介するために提供される。この概要は、クレーム主題の主要な特徴や本質的な特徴を明らかにすることや、クレーム主題の範囲を決定する助けとして使用されることを意図していない。
複数セグメントからなる文字列を検索する方法およびシステムが提供される。いくつかの実施形態では、検索システムは、クエリセグメントとして突き合わせるセグメントの一部またはすべてを含んだクエリ文字列を受け取る。例えば、ファイルを削除する関数を探すプログラマは、「DeFi」と入力し、それにより各セグメントの最初の数文字を指定し、上記のようにCamelCaseを使用することによりそれらの文字を区切る。クエリ文字列を受け取ると、検索システムは、そのクエリ文字列で提供されたクエリセグメント(たとえば「De」と「Fi」)を、以前に格納された文字列から収集されたセグメントと比較する。例えば、文字列「DeleteFile」は、セグメント「Delete」とセグメント「File」を有し、文字列「CopyFile」は、セグメント「Copy」とセグメント「File」を有する。いずれかのセグメントがクエリセグメントと一致した場合、検索システムは、一致したセグメントを含む文字列を検索結果として選択する。例えば、文字列にDeleteFile、CopyFile、DeleteProfileが含まれる場合は、DeleteFileが「De」と「Fi」の両方で始まるセグメントを含んでいるため、一致として選択されることになる。
あるいは、検索システムは、「CopyFile」および「DeleteProfile」のような部分一致の文字列も検索結果に含めてもよい。部分一致は、クエリセグメントの一部と一致するが、すべてとは一致しないセグメントを有する文字列である。例えば、文字列「DeleteProfile」は、クエリセグメント「De」とは一致するが、クエリセグメント「Fi」とは一致しない。検索システムは、ユーザが最良の一致する文字列を識別することをより容易にするために一致の近さに基づいて検索結果に順位を付けてもよい。このようにして、検索システムは、セグメントがクエリ文字列のクエリセグメントと最も一致する文字列を識別することができる。
いくつかの実施形態で、検索システムは、セグメントに基づく検索を行った後にクエリ文字列を使用して従来の検索を行い、一致があれば検索結果に追加する。この追加的な検索では、ユーザがクエリ文字列中のセグメントの1つを正しく綴らなかった状況、あるいはユーザがクエリ文字列中のセグメントを間違って分割した状況で文字列を見つけることができる。例えば、ユーザがファイルを回復する関数を探しており、その関数の名前が「UndeleteFile」である場合に、ユーザは、その関数が「UnDeleteFile」等、3つの単語を含んでいたと考えて、「DeleteFile」を検索する可能性がある。この例では、検索システムがセグメントの冒頭だけを検索した場合には、正しい関数を検索結果に追加しないことになる。しかし、従来の文字列検索も行うことにより、検索システムは、正しい関数を結果に加える。
いくつかの実施形態では、検索システムは、文字列を文字列テーブルに格納する。文字列テーブルは、文字列のセグメントごとに1つのエントリを有する索引を有し、各エントリは、そのセグメントを含んでいる文字列を示す。ユーザが検索を行うと、検索システムは、クエリ文字列をクエリセグメントに分割し、各セグメントを索引中のセグメントと突き合わせる。一致するセグメントが見つかると、それらのセグメントを含んでいる文字列(部分一致と完全一致の両方)が検索結果に加えられる。
いくつかの実施形態では、検索システムは、文字列を文字列テーブルに追加、削除、および更新するためのインタフェースを公開する。例えば、ソフトウェアの開発プロジェクトは、しばしば、複数セグメントからなる文字列である関数名や変数名等の多くの記号とクラスなどの特殊な型を含む。プロジェクトの管理システムは、公開されたインタフェースを使用して自動的にそうした記号を文字列テーブルに追加することができ、プロジェクト管理システムのユーザは、検索システムを使用してプロジェクト内の記号を見つけることができる。ソフトウェアの開発プロジェクトは、公表されたアプリケーションプログラミングインタフェース(API)を通じて利用可能な記号を利用する場合もあり、そうした記号も、公開されたインタフェースを使用して文字列テーブルに追加されることができ、ユーザは、プロジェクトで使用するための利用可能な関数や他の記号を容易に見つけることができる。文字列テーブルに文字列を追加または更新する際、検索システムによって公開されたインタフェースは、文字列自体と併せて、文字列の区切りを指定できるようにすることもできる。これにより、文字列をセグメントに分割するための、特定のプロジェクトまたは問題領域に固有のカスタムコンポーネントを提供することが可能になる。例えば、あるプロジェクトでは、セグメントはダッシュで区切られる(例えば「mod−update−1」)と定義し、別のプロジェクトでは、文字列はあらかじめ定義されたセグメントでのみ構成されることが許される(例えば「UnDelFile」。この場合あらかじめ定義されたセグメントには「Un」、「Del」、および「File」が含まれる)。
いくつかの実施形態では、検索システムは、文字列テーブルが変化するたびに変更されるバージョン番号を維持することにより、文字列テーブルへの同時の操作を可能にする。通常は文字列テーブルへの排他的なアクセス権を必要とする長い操作は、バージョンを監視して変化を検出することにより、他の操作と同時に行われ得る。例えば、あるユーザが文字列テーブルの文字列を列挙しており、別のユーザが文字列テーブルに文字列を追加する場合、文字列を列挙しているユーザは、バージョン番号を調べることにより、文字列が追加されたことを知り、追加された文字列を考慮するように列挙を修正することができる。
いくつかの実施形態では、検索システムは、セグメントを、セグメントの接頭辞に基づくB木として文字列テーブルに格納する。B木の枝ノードは、各自の子ノードを判別するために必要な最小の長さの、アルファベット表記のセグメント接頭辞を含んでいる。葉ノードは、セグメント全体を参照し、各セグメントを含んでいる文字列への参照のリストを保持する。木は、すべての葉ノードが同じレベルにあり、木をアルファベット順に横断するために線形に読み取れるように、均等に成長する。検索が行われると、検索システムは、各クエリセグメントを、根で始まる木ノードと比較する。検索システムは、ノードを固定記憶媒体に記憶し、メモリをより効率的に使用するために必要時のみノードをロードすることができる。検索システムは、すべての一致する葉ノードが見つかるまで木を横断する。そして、葉ノードで参照される一致セグメントが使用されて、検索結果に含める文字列を選択する。
いくつかの実施形態では、検索システムは、クエリ文字列と一致する度合いに従って検索結果に順位を付ける。文字列テーブルで一致するセグメントが見つかると、検索システムは、一致の度合いに基づいてスコアを割り当てる。例えば、文字列テーブル内の文字列のセグメントの冒頭で見つかったクエリ文字列中のクエリセグメントは、中間で見つかる一致セグメントよりも高いスコアを得ることができる。文字列が、2つ以上のクエリセグメントが一致するセグメントを含んでいる場合、検索システムは、その文字列についての検索結果のスコアを増して、1つの一致セグメントを有する文字列よりも高いスコアを与えることができる。最後に、検索システムは、文字列テーブル内での各一致セグメントの順序を基準とした、クエリ文字列中でクエリセグメントが現れる順序を調べ、順序の類似度に基づいて結果にスコアを割り当てることができる。
いくつかの実施形態では、クエリ文字列は、クエリセグメントまたはクエリ文字列全体が正確に一致しなければならないという指示を含む。例えば、クエリセグメントの後の「\」の文字は、それがセグメント全体を指定しており、正確な一致だけを返すべきことを意味することができる。例えば、クエリ文字列「Delete\Fi」の場合は、複数セグメントからなる文字列「DeleteFile」は有効な検索結果になるが、「DeletedFile」はそうでないことになる。クエリ文字列の後に置かれた「\\」は、文字列全体が完全に一致すべきことを意味することができる。例えば、クエリ文字列「DeleteFile\\」の場合は、複数セグメントの文字列「DleteFile」と「UnDeleteFile」は有効な検索結果となるが、「DeleteAFile」は、有効な検索結果にならない。
いくつかの実施形態で、検索システムは、指定された区切り条件のセットを使用してクエリ文字列をクエリセグメントに分割する。例えば、クエリ文字列は、上記のCamelCase(すなわち「DeFi」)や、特殊文字(すなわち「de_fi」や「de.fi」)などの他の手法で分割されることが可能である。ユーザが、文字列中のセグメントおよびクエリ文字列中のクエリセグメントを区切るために使用される規則を設定してもよい。例えば、ユーザは、特定のソフトウェアプロジェクトの命名法に沿った規則を設定することができる。ユーザは、クエリ文字列と同じ区切り条件を含んだ文字列に検索結果を限定するように指定することもできる。例えば、「de_fi」と「DeFi」の両方を検索することによって「DeleteFile」を見つけられるかどうかは、その設定次第である。ユーザは、検索で大文字と小文字を区別するかどうか、および、指定されたクエリセグメントを格納されたリストにあるセグメントの冒頭と突き合わせるか、またはセグメント内の任意の部分文字列あるいはセグメントの末尾と突き合わせるかなどの何らかの他の基準に基づいて突き合わせるかどうかも設定することができる。
図1は、一実施形態における検索システムの構成要素を示すブロック図である。検索システム100は、クエリプロセッサコンポーネント110、テーブルアップデータコンポーネント120、セグメントエクストラクタ(extractor)コンポーネント130、文字列テーブルコンポーネント140、およびテーブルクリエータコンポーネント150を含む。クエリプロセッサ110は、クエリ文字列を受け取り、セグメントエクストラクタ130を使用してクエリ文字列をクエリセグメントに分割し、指定されたクエリセグメントに基づいて文字列テーブル140から一致する文字列を検索する。テーブルアップデータ120は、文字列テーブル140に格納された文字列のリストを追加、削除、および更新する要求を処理する。セグメントエクストラクタ130は、クエリ文字列と格納された文字列をセグメントに分割するために、クエリプロセッサ110、テーブルクリエータ150、およびテーブルアップデータ120によって使用される。文字列テーブル140は、文字列のリストを格納し、文字列に含まれるセグメントに基づくクイック検索と取り出しを提供する。テーブルクリエータ150は、最初の文字列テーブルを作成する。
このシステムが実装されるコンピューティングデバイスは、中央演算処理装置、メモリ、入力装置(例えばキーボードやポインティングデバイス)、出力装置(例えば表示装置)、および記憶装置(例えばディスクドライブ)を備えることができる。メモリと記憶装置は、このシステムを実装する命令を含むことが可能なコンピュータ読取可能媒体である。また、データ構造とメッセージ構造は、格納されても、通信リンクの信号等のデータ伝送媒体を介して送信されてもよい。インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、2地点間ダイアルアップ接続、携帯電話網等の各種の通信リンクが使用されることができる。
本システムの実施形態は、パーソナルコンピュータ、サーバコンピュータ、携帯またはラップトップ機器、マルチプロセッサシステム、マイクロプロセッサを使用したシステム、プログラム可能な家電製品、デジタルカメラ、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは機器のいずれかを含む分散コンピューティング環境等を含む、各種の動作環境で実装されることができる。コンピュータシステムは、携帯電話、携帯情報端末、スマートフォン、パーソナルコンピュータ、プログラム可能な家電製品、デジタルカメラ等である。
本システムは、1つまたは複数のコンピュータまたは他の機器によって実行されるプログラムモジュール等のコンピュータ実行可能な命令の一般的文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを行うか、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等が含まれる。通例、プログラムモジュールの機能は、各種の実施形態で適宜組み合わせても、分散させてもよい。
図2は、一実施形態におけるクエリ処理コンポーネントの動作を説明するフロー図である。クエリ処理コンポーネントは、検索システムがユーザのクエリ文字列を受け取った時に、検索結果を提供するために呼び出される。ブロック210で、コンポーネントがクエリ文字列を受け取る。ブロック220で、コンポーネントは、セグメントエクストラクタコンポーネントを使用して、クエリ文字列からクエリセグメントを抽出する。ブロック230で、コンポーネントは、文字列テーブルから指定されたクエリセグメントと一致するセグメントを検索し、対応する文字列を取得する。ブロック240で、検索の結果得られた文字列が、受け取られたクエリ文字列と一致する度合いに従って順位付けられる。ブロック250で、一致する文字列が検索結果として返される。そしてコンポーネントは完了する。
図3は、一実施形態における文字列テーブルクリエータコンポーネントの動作を説明するフロー図である。文字列テーブルクリエータコンポーネントは、文字列のリストから文字列テーブルを作成するために呼び出される。ブロック310で、コンポーネントは、文字列テーブルに入れるべき次の文字列を文字列のリストから選択する。判定ブロック320ですべての文字列が選択されている場合は、コンポーネントは完了し、そうでない場合は、コンポーネントはブロック330に進む。ブロック330で、コンポーネントは、エクストラクトセグメントコンポーネントを呼び出すことにより、選択された文字列からセグメントを抽出してセグメントリストに入れる。ブロック340〜360で、コンポーネントは、各文字列セグメントを文字列テーブルに追加する処理をループする。ブロック340で、コンポーネントは、セグメントリストの次のセグメントを選択する。判定ブロック350で、すべてのセグメントが選択されている場合は、コンポーネントはブロック310にループして次の文字列を選択し、そうでない限り、コンポーネントはブロック360に進む。ブロック360で、コンポーネントは、選択されたセグメントとそのセグメントを含んでいる文字列への参照とを文字列テーブルに追加する。コンポーネントは次いでブロック340にループして、セグメントリストの次のセグメントを選択する。
図4は、一実施形態におけるセグメントエクストラクタコンポーネントの動作を説明するフロー図である。このコンポーネントは、文字列を文字列セグメントに区切るために呼び出される。ブロック405で、コンポーネントは、セグメントに分割すべき文字列を受け取る。ブロック410で、コンポーネントは、現在のセグメントを初期化する。ブロック420で、コンポーネントはその文字列の次の文字を選択する。判定ブロック430で文字列にそれ以上文字がない場合は、コンポーネントは見つかったセグメントのリストを返し、そうでない限りコンポーネントはブロック440に進む。ブロック440で、コンポーネントは、選択された文字を現在のセグメントに追加する。判定ブロック450で、文字が現在のセグメントの最後である場合、コンポーネントはブロック460に進み、そうでない場合、コンポーネントはブロック420にループし、文字列の次の文字を選択する。ブロック460で、コンポーネントは、現在のセグメントを、見つかったセグメントのリストに追加する。次いで、コンポーネントはブロック410にループして次のセグメントを抽出する。
図5は、一実施形態におけるテーブルアップデータコンポーネントの動作を説明するフロー図である。このコンポーネントは、文字列テーブルの文字列が追加、削除、または更新される時に呼び出される。ブロック510で、コンポーネントは、追加、削除、または更新すべき文字列を受け取る。ブロック520で、コンポーネントは、セグメントエクストラクタを使用して文字列を構成セグメントに分割する。ブロック530で、コンポーネントは、例えば新しい文字列とその構成セグメントを文字列テーブルに追加することにより、文字列テーブルを変更する。次いでコンポーネントは完了する。
図6は、一実施形態で文字列テーブルを検索するクエリ処理コンポーネントの動作を説明するフロー図である。このコンポーネントは、所与のクエリセグメントのリストについて文字列テーブルを検索する。ブロック610で、コンポーネントは、セグメントエクストラクタコンポーネントから、クエリ文字列中のクエリセグメントのリストを受け取る。ブロック620で、コンポーネントは、クエリセグメントリストの次のセグメントを選択する。判定ブロック630で、リストのすべてのセグメントが選択されている場合は、コンポーネントは、一致するエントリのリストを返し、そうでない限り、コンポーネントはブロック640に進む。ブロック640で、コンポーネントは、選択されたセグメントと一致する文字列テーブルのエントリを見つける。ブロック650で、コンポーネントは、見つかったいずれものエントリを一致エントリのリストに追加する。コンポーネントは次いでブロック620にループして、クエリセグメントリストの次のセグメントを選択する。
図7は、一実施形態で、文字列テーブルを検索する際にセグメントの一致エントリを見つけるためのクエリ処理コンポーネントの動作を説明するフロー図である。このコンポーネントは、文字列テーブルから特定のクエリセグメントを検索するために呼び出される。ブロック710で、コンポーネントは、文字列テーブル中のすべてのエントリを選択する。ブロック720で、コンポーネントは、当該セグメントの次の文字を選択する。判定ブロック730で、そのセグメントの文字がすべて選択されている場合、コンポーネントは選択されたエントリを返し、そうでない場合コンポーネントはブロック740に進む。ブロック740で、コンポーネントは、次の文字が、当該セグメントの選択文字と一致しないエントリをいずれも選択から外す。コンポーネントは次いで、ブロック720にループしてセグメントの次の文字を選択する。
図8は、一実施形態で、検索結果を順位付けるクエリ処理コンポーネントの動作を説明する流れ図である。ブロック810で、コンポーネントは、重複する文字列がある結果を除去する。ブロック820で、コンポーネントは、次の検索結果を選択する。判定ブロック830ですべての検索結果が選択されている場合、コンポーネントは、スコア/識別子の対のリストを返し、そうでない限り、コンポーネントはブロック840に進む。ブロック840で、コンポーネントは、選択されたエントリのセグメントとクエリ文字列中のクエリセグメントとの一致の度合いと順序の類似度に基づいて、選択されたエントリにスコアを与える。ブロック850で、コンポーネントは、スコア/識別子の対を作成し、それをリストに追加する。次いで、コンポーネントは、ブロック820にループして次の検索結果を選択する。
図9は、一実施形態における、一致する文字列にスコアを与えるためのクエリ処理コンポーネントの動作を説明するフロー図である。ブロック905で、コンポーネントは、セグメントエクストラクタを使用して、クエリ文字列と一致文字列からセグメントのリストを入手する。ブロック910で、コンポーネントは、一致文字列中の次のセグメントを選択する。判定ブロック915で、すべてのセグメントが選択されている場合、コンポーネントは、一致文字列のスコアを返し、そうでない限り、コンポーネントはブロック920に進む。ブロック920で、コンポーネントは、クエリ文字列中の次のセグメントを選択する。判定ブロック925でクエリ文字列のセグメントがすべて選択されている場合、コンポーネントはブロック910にループして一致文字列中の次のセグメントを選択し、そうでない限り、コンポーネントはブロック930に進む。ブロック930で、コンポーネントは、現在選択されているセグメント対のスコアを初期化する。判定ブロック935で、それらセグメントの接頭辞が一致する場合、コンポーネントは、ブロック940に進み、そうでない場合、コンポーネントはブロック945に進む。ブロック940で、コンポーネントは、一致の長さに基づいてスコアを増分する。判定ブロック945で、2つのセグメントが正確に一致する場合、コンポーネントはブロック950に進み、そうでない場合、コンポーネントはブロック955に進む。ブロック950で、コンポーネントは、正確な一致に基づいてスコアを増分する。ブロック955で、コンポーネントは、一致する文字列中での当該セグメントの位置を基準とする、クエリ文字列中での当該セグメントの位置に基づいてスコアを増分する。ブロック960で、コンポーネントは、一致文字列の合計スコアに現在のセグメントのスコアを加算する。コンポーネントは次いでブロック920にループして、クエリ文字列中の次のセグメントを選択する。
図10は、一実施形態における検索システムを使用した検索の例を示す。この例では、4つの文字列1010が文字列テーブル1020に追加されている。文字列テーブル1020は、セグメントエクストラクタを使用して4つの文字列1010から抽出された各セグメントを指定する列1030と、各セグメント1030を含んでいる文字列各々への参照1040とを含む。受け取られたクエリ文字列1050はクエリセグメントに分割され、各クエリセグメントは、文字列テーブル1020のセグメントと突き合わせられる。一致するセグメントについては、文字列テーブルで参照される文字列1040が、結果のリスト1060に加えられる。結果のリスト1060は、文字列テーブルから取り出された重複する文字列を除去するようにフィルタリングされている。
図11は、一実施形態で文字列テーブルを索引付けるために使用されるB木を示す。木1115は、根ノード1120を含む。根ノードは、それら枝ノードの下位にある葉ノードに共通するテキストを指定する枝ノード1130を含む。枝ノード1130は、文字列テーブルに追加された文字列1110の一部である個々のセグメントを指定する葉ノード1140に接続する。葉ノード1140は、特定の葉ノードで表されるセグメントを含んでいる各文字列1110への参照を含んでいる。
前述の内容から、本明細書にこの検索システムの特定の実施形態が例示の目的で説明されたが、本発明の主旨および範囲から逸脱することなく各種の変更を加えてよいことが理解されよう。例えば、クエリセグメントを文字列テーブルのセグメントの冒頭と突き合わせる観点から付き合わせを説明したが、文字列セグメントの任意の部分に見つかるクエリセグメントに基づく突き合わせ等、他の突き合わせ基準が用いられてよい。ソフトウェア開発システムの文脈で検索システムを説明したが、この検索システムを、文字列が複数のセグメントに分割される場合がある他の分野で使用することも可能である。したがって、本発明は、添付の特許請求の範囲の記載に従う以外には限定されない。
一実施形態における検索システムの構成を示すブロック図である。 一実施形態におけるクエリ処理コンポーネントの動作を説明する流れ図である。 一実施形態における文字列テーブルクリエータコンポーネントの動作を説明するフロー図である。 一実施形態におけるセグメントエクストラクタコンポーネントの動作を説明するフロー図である。 一実施形態におけるテーブルアップデータコンポーネントの動作を説明するフロー図である。 一実施形態における文字列テーブルを検索するクエリ処理コンポーネントの動作を説明するフロー図である。 一実施形態における文字列テーブルを検索する際にセグメントの一致エントリを見つけるためのクエリ処理コンポーネントの動作を説明するフロー図である。 一実施形態における検索結果に順位を付けるクエリ処理コンポーネントの動作を説明するフロー図である。 一実施形態における一致する文字列にスコアを付けるクエリ処理コンポーネントの動作を説明する流れ図である。 一実施形態における検索システムを使用した検索の例を示す図である。 一実施形態における文字列テーブルを索引付けるために使用されるB木を示す図である。

Claims (12)

  1. 情報を自律的に処理するための方法であって、
    プロセッサが、クエリ文字列を受け取る前に、複数の文字列の各々について文字列テーブルを作成するステップであって、
    前記文字列内に含まれる各文字列セグメントを、文字列内の隣接する文字間の変化
    に基づいて識別するステップと、
    前記識別された文字列セグメントを含む文字列に対する各識別された文字列セグメ
    ントのマッピングを、前記文字列テーブルに加えるステップと、
    を含む文字列テーブルを作成するステップと、
    プロセッサが、受け取った各クエリ文字列について、
    前記クエリ文字列中に含まれる各クエリセグメントを、クエリ文字列内の隣接する
    文字間の変化に基づいて識別するステップと、
    前記クエリ文字列のクエリセグメントを、前記文字列テーブル内の文字列セグメン
    トと比較するステップと、
    前記クエリ文字列のクエリセグメントと前記文字列テーブル内の文字列セグメント
    との比較に基づいて、前記クエリ文字列に一致する前記複数の文字列における文字列
    を、検索結果として選択するステップと
    以下のステップによってスコアを与えるステップと、
    前記検索結果における各文字列について、前記検索結果における文字列を選択
    するステップ、
    前記選択された文字列の各文字列セグメントについて、前記選択された文字列
    における文字列セグメントを選択するステップ、
    前記クエリ文字列の各クエリセグメントについて、前記クエリ文字列における
    クエリセグメントを選択するステップであって、
    前記選択されたクエリセグメントが前記選択された文字列セグメント
    と正確に一致すると判定された場合に、前記選択された文字列セグメ
    ント及び前記選択されたクエリセグメントについて、正確に一致する
    量によってセグメントスコアを調整するステップ、
    前記選択されたクエリセグメントが前記選択された文字列セグメン
    トと正確に一致しないと判定された場合及び前記選択されたクエリセ
    グメントが前記選択された文字列セグメントの冒頭部分と一致すると
    判定された場合に、前記選択された文字列セグメント及び前記選択さ
    れたクエリセグメントについて、一致する長さに基づいてセグメント
    スコアを調整するステップ、
    前記選択された文字列セグメント及び前記選択されたクエリセグメ
    ントについて、前記選択された文字列における前記選択された文字列
    セグメントの位置に基づいてセグメントスコアを調整するステップ、
    前記選択された文字列について、前記選択された文字列セグメント
    及び前記選択されたクエリセグメントについての前記調整されたスコ
    アに基づいて文字列スコアを調整するステップ、
    とを含む前記クエリ文字列におけるクエリセグメントを選択するステップと、
    プロセッサが、前記検索結果の各文字列と関連付けられた前記文字列スコアに基づいて
    前記検索結果を順位付けして、前記検索結果をその関連付けられた文字列スコアに基づいてスコアの高いものから低いものへと整理するステップと、
    含むことを特徴とする方法。
  2. 前記クエリ文字列が前記クエリセグメントの最後に特殊文字を含んでいる場合、前記クエリセグメントと正確に一致する文字列セグメントを含んでいる前記文字列のみが検索結果として選択されることを特徴とする請求項1に記載の方法。
  3. 前記クエリ文字列が前記クエリ文字列の最後に特殊文字を含んでいる場合、前記クエリ文字列中のすべてのクエリセグメントと正確に一致する文字列セグメントを含んでいる文字列のみが検索結果として選択されることを特徴とする請求項1に記載の方法。
  4. プロセッサ及びメモリを備えた、文字列を格納及び取り出すシステムであって、
    前記文字列内の隣接する文字間の変化に基づいて、前記文字列の少なくとも1つの文字列セグメントを識別し、前記識別された少なくとも1つの文字列セグメントと前記文字列との間のマッピングを文字列テーブルに格納することにより、複数の文字列のそれぞれを索引付ける文字列テーブル作成コンポーネントと、
    クエリ文字列を受け取るクエリ受取コンポーネントと、
    受け取ったクエリ文字列を該受け取ったクエリ文字列内の隣接する文字間の変化に基づいてセグメントに分割するセグメント抽出コンポーネントであって、前記受け取ったクエリ文字列の各文字は前記受け取ったクエリ文字列の1つのセグメントに属する、セグメント抽出コンポーネントと、
    文字列セグメントと前記文字列テーブルに格納された文字列との間の前記マッピングに基づいて、前記受け取ったクエリ文字列のセグメントと一致する前記複数の文字列内の文字列を選択するクエリ処理コンポーネントと
    を備えることを特徴とするシステム。
  5. 前記文字列テーブルの前記文字列を変更する文字列テーブル更新コンポーネントをさらに含むことを特徴とする請求項4に記載のシステム。
  6. 情報を自律的に処理するための方法であって、
    プロセッサが、複数のマルチセグメント文字列を含むコンピュータプログラムリストを受け取るステップであって、前記マルチセグメント文字列の各文字は前記マルチセグメント文字列の1つのセグメントに正確に属し、前記コンピュータプログラムリストの各マルチセグメント文字列は前記マルチセグメント文字列内の隣接する文字間の変化に基づいて区分される、ステップと、
    プロセッサが、セグメントエントリの索引を作成するステップであって、
    各エントリは、
    前記コンピュータプログラムリストの複数の文字列の中の少なくとも1つに含
    まれる、大文字で始まって小文字で終わるセグメントを識別するセグメント文字
    列、及び、
    前記識別されたセグメントを含む前記コンピュータプログラムリストの複数の
    文字列それぞれに対する参照
    を含み、
    セグメントエントリの前記索引は、
    クエリ文字列を受け取る前に作成され、
    クエリ文字列のクエリセグメントと少なくとも部分的に一致するセグメントを含む
    前記コンピュータプログラムリストの文字列を識別するのに使用され、
    前記クエリ文字列の前記クエリセグメントは、前記クエリ文字列内の隣接する文字間の変化に基づいて識別される、
    ことを特徴とする方法。
  7. 前記セグメントエントリはB木に格納されることを特徴とする請求項に記載の方法。
  8. 情報を自律的に処理するための方法であって、
    プロセッサが、ソフトウェア開発プロジェクト内の文字列を識別する要求を受け取る前に、少なくとも部分的に文字列テーブルを作成するステップであって、
    前記ソフトウェア開発プロジェクトの各文字列について、
    前記ソフトウェア開発プロジェクトの文字列内で識別された少なくとも1つの区
    切り条件のセットに基づいて前記ソフトウェア開発プロジェクトの前記文字列のセ
    グメントを識別し、
    前記ソフトウェア開発プロジェクトの前記文字列の前記識別されたセグメントの
    それぞれと前記ソフトウェア開発プロジェクトの前記文字列との間の関連性を、前
    記文字列テーブルに格納する
    ことによって作成するステップと、
    前記文字列テーブルを作成した後、プロセッサが、
    前記ソフトウェア開発プロジェクト内の文字列を識別する要求を受け取るステップ
    であって、各要求はクエリ文字列を含む、受け取るステップと、
    前記クエリ文字列内の識別された少なくとも1つの区切り条件のセットに基づいて
    受け取った要求の前記クエリ文字列のクエリセグメントを識別するステップと、
    前記受け取った要求の前記クエリ文字列の識別されたクエリセグメントのそれぞれ
    について、前記受け取った要求の前記クエリ文字列の前記識別されたクエリセグメン
    トを含む前記ソフトウェア開発プロジェクト内の文字列を識別するために前記文字列
    テーブルを使用する
    ことを特徴とする方法。
  9. 前記クエリ文字列内のクエリセグメントと検索結果におけるセグメントとが一致する数に基づいて検索結果を順位付けることをさらに含むことを特徴とする請求項8に記載の方法。
  10. 検索結果の文字列内のセグメントが出現する順番と前記クエリ文字列内のクエリセグメントが出現する順番に基づいて検索結果を順位付けることをさらに含むことを特徴とする請求項8に記載の方法。
  11. 前記ソフトウェア開発プロジェクトの前記文字列は前記ソフトウェア開発プロジェクトの記号を含み、該記号は公表されたAPIによって公開された文字列を含むことを特徴とする請求項8に記載の方法。
  12. 前記文字列テーブル内の各文字列セグメントは、大文字で始まって小文字で終わることを特徴とする請求項4に記載のシステム。
JP2008545958A 2005-12-19 2006-12-13 複数セグメント文字列の検索 Active JP4698738B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/311,891 US7756859B2 (en) 2005-12-19 2005-12-19 Multi-segment string search
US11/311,891 2005-12-19
PCT/US2006/062012 WO2007076269A2 (en) 2005-12-19 2006-12-13 Multi-segment string search

Publications (2)

Publication Number Publication Date
JP2009520283A JP2009520283A (ja) 2009-05-21
JP4698738B2 true JP4698738B2 (ja) 2011-06-08

Family

ID=38195167

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008545958A Active JP4698738B2 (ja) 2005-12-19 2006-12-13 複数セグメント文字列の検索

Country Status (4)

Country Link
US (1) US7756859B2 (ja)
EP (1) EP1964004A4 (ja)
JP (1) JP4698738B2 (ja)
WO (1) WO2007076269A2 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657423B1 (en) 2003-10-31 2010-02-02 Google Inc. Automatic completion of fragments of text
US20100121870A1 (en) * 2008-07-03 2010-05-13 Erland Unruh Methods and systems for processing complex language text, such as japanese text, on a mobile device
US9148477B2 (en) * 2009-01-29 2015-09-29 Qualcomm Incorporated Methods and apparatus for communicating in a wireless system
EP2264626B1 (de) * 2009-06-19 2021-02-24 Siemens Aktiengesellschaft Verfahren und Vorrichtung zum speichereffizienten Suchen mindestens eines Anfragedatenelementes
CN101957828B (zh) * 2009-07-20 2013-03-06 阿里巴巴集团控股有限公司 一种对搜索结果进行排序的方法和装置
US8538935B2 (en) * 2009-09-25 2013-09-17 Formrouter Inc. One-to-one and one-to-many relationships in databases
US9392005B2 (en) 2010-05-27 2016-07-12 Samsung Sds Co., Ltd. System and method for matching pattern
US9171311B2 (en) * 2010-08-31 2015-10-27 Microsoft Technology Licensing, Llc Maintaining targetable user inventory for digital advertising
US8407245B2 (en) * 2010-11-24 2013-03-26 Microsoft Corporation Efficient string pattern matching for large pattern sets
US9195716B2 (en) * 2013-02-28 2015-11-24 Facebook, Inc. Techniques for ranking character searches
JP6511874B2 (ja) * 2015-03-09 2019-05-15 富士通株式会社 コンピュータプログラム、検索装置及び検索方法
CA3003061A1 (en) * 2015-10-26 2017-05-04 Intelliresponse Systems Inc. System and method for determining common subsequences
US11429586B2 (en) * 2016-12-22 2022-08-30 Sap Se Expression update validation
US10747819B2 (en) 2018-04-20 2020-08-18 International Business Machines Corporation Rapid partial substring matching
US10169451B1 (en) 2018-04-20 2019-01-01 International Business Machines Corporation Rapid character substring searching
US10782968B2 (en) 2018-08-23 2020-09-22 International Business Machines Corporation Rapid substring detection within a data element string
US10732972B2 (en) 2018-08-23 2020-08-04 International Business Machines Corporation Non-overlapping substring detection within a data element string
US10996951B2 (en) 2019-09-11 2021-05-04 International Business Machines Corporation Plausibility-driven fault detection in string termination logic for fast exact substring match
US11042371B2 (en) 2019-09-11 2021-06-22 International Business Machines Corporation Plausability-driven fault detection in result logic and condition codes for fast exact substring match
CN112597345B (zh) * 2020-10-30 2023-05-12 深圳市检验检疫科学研究院 一种实验室数据自动采集与匹配方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020169755A1 (en) * 2001-05-09 2002-11-14 Framroze Bomi Patel System and method for the storage, searching, and retrieval of chemical names in a relational database

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6126176A (ja) * 1984-07-17 1986-02-05 Nec Corp 言語処理用辞書
US5469354A (en) * 1989-06-14 1995-11-21 Hitachi, Ltd. Document data processing method and apparatus for document retrieval
AU620994B2 (en) * 1989-07-12 1992-02-27 Digital Equipment Corporation Compressed prefix matching database searching
US5276616A (en) * 1989-10-16 1994-01-04 Sharp Kabushiki Kaisha Apparatus for automatically generating index
US5867812A (en) * 1992-08-14 1999-02-02 Fujitsu Limited Registration apparatus for compound-word dictionary
US5768423A (en) * 1994-09-02 1998-06-16 Panasonic Technologies Inc. Trie structure based method and apparatus for indexing and searching handwritten databases with dynamic search sequencing
US5995921A (en) * 1996-04-23 1999-11-30 International Business Machines Corporation Natural language help interface
US5978797A (en) * 1997-07-09 1999-11-02 Nec Research Institute, Inc. Multistage intelligent string comparison method
US6018735A (en) * 1997-08-22 2000-01-25 Canon Kabushiki Kaisha Non-literal textual search using fuzzy finite-state linear non-deterministic automata
US6108444A (en) * 1997-09-29 2000-08-22 Xerox Corporation Method of grouping handwritten word segments in handwritten document images
US6240409B1 (en) * 1998-07-31 2001-05-29 The Regents Of The University Of California Method and apparatus for detecting and summarizing document similarity within large document sets
DE19960081A1 (de) * 1999-06-09 2000-12-14 Grateach Gmbh Suchmaschine
US7483828B2 (en) * 2001-03-16 2009-01-27 Meaningful Machines, L.L.C. Multilingual database creation system and method
US6785677B1 (en) * 2001-05-02 2004-08-31 Unisys Corporation Method for execution of query to search strings of characters that match pattern with a target string utilizing bit vector
US7610189B2 (en) * 2001-10-18 2009-10-27 Nuance Communications, Inc. Method and apparatus for efficient segmentation of compound words using probabilistic breakpoint traversal
US20050131926A1 (en) 2003-12-10 2005-06-16 Siemens Corporate Research Inc. Method of hybrid searching for extensible markup language (XML) documents
US20050149499A1 (en) * 2003-12-30 2005-07-07 Google Inc., A Delaware Corporation Systems and methods for improving search quality
US7277029B2 (en) * 2005-06-23 2007-10-02 Microsoft Corporation Using language models to expand wildcards

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020169755A1 (en) * 2001-05-09 2002-11-14 Framroze Bomi Patel System and method for the storage, searching, and retrieval of chemical names in a relational database

Also Published As

Publication number Publication date
WO2007076269A3 (en) 2008-05-02
EP1964004A4 (en) 2010-10-20
JP2009520283A (ja) 2009-05-21
US7756859B2 (en) 2010-07-13
WO2007076269A2 (en) 2007-07-05
US20070150469A1 (en) 2007-06-28
EP1964004A2 (en) 2008-09-03

Similar Documents

Publication Publication Date Title
JP4698738B2 (ja) 複数セグメント文字列の検索
US11423216B2 (en) Providing extraction results for a particular field
US10783318B2 (en) Facilitating modification of an extracted field
US10102253B2 (en) Minimizing index maintenance costs for database storage regions using hybrid zone maps and indices
US7085761B2 (en) Program for changing search results rank, recording medium for recording such a program, and content search processing method
US7827181B2 (en) Click distance determination
US20120310630A1 (en) Tokenization platform
US20150149879A1 (en) Advanced field extractor with multiple positive examples
CN107153647B (zh) 进行数据压缩的方法、装置、系统和计算机程序产品
US9020951B2 (en) Methods for indexing and searching based on language locale
US20070174261A1 (en) Database retrieval apparatus, retrieval method, storage medium, and progam
JP4237813B2 (ja) 構造化文書管理システム
CN116150093A (zh) 一种对象存储列举对象的实现方法及电子设备
US10963476B2 (en) Searching and visualizing data for a network search based on relationships within the data
JP2675958B2 (ja) 情報検索用計算機システム及びその記憶装置の動作方法
Olsson Using Elasticsearch for full-text searches on unstructured data
KR100434718B1 (ko) 문서 색인 시스템 및 그 방법
JP4304226B2 (ja) 構造化文書管理システム、構造化文書管理方法及びプログラム
JP2001134598A (ja) T木インデックス構築方法及びt木インデックス検索方法及びt木インデックス構築装置及びt木インデックス検索装置及びt木インデックス構築プログラムを格納した記憶媒体及びt木インデックス検索プログラムを格納した記憶媒体
KR100797848B1 (ko) 표지 데이터를 이용한 데이터 검색 방법 및 시스템
CN113449522A (zh) 一种文本模糊匹配方法和装置
KR20190064750A (ko) 토픽맵 구성 방법, 이를 이용한 의도 기반 검색 서비스 제공 방법 및 그 장치
JP2008077673A (ja) 構造化文書管理システム
JPH10198704A (ja) データベースシステム
JP2002063202A (ja) 情報検索システムおよび方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101214

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: 20110222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110301

R150 Certificate of patent or registration of utility model

Ref document number: 4698738

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250