説明

検索装置、プログラム及び方法

【課題】高速に類似する文字列の検索を行う。
【解決手段】本装置は、検索対象文字列の第1検索用データと、1以上第1所定文字数以下の整数Nの各々について各検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2検索用データを格納するデータ格納部と、第1検索用データに対して検索文字列の前方一致検索を行って、第2所定文字数以上前方一致する検索対象文字列を検出する第1検索部と、検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、整数Mについての第2検索用データに対して行って、第2所定文字数以上前方一致する反転文字列を検出し、整数M-2文字一致した反転文字列が存在するか否かを判断する第2検索部と、第2検索部に対して、第2所定文字数から整数Mについての検索指示を、第2検索部により整数M-2文字一致した反転文字列が存在しないと判断された直後を除き出力する制御部とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本技術は、文字列の検索技術に関する。
【背景技術】
【0002】
名寄せとは、名称や住所、電話番号等の複数の属性で表現されるレコードについて、同一実体を表すレコードを収集する処理である。属性毎に、例えば文字列の類似性を評価して、同一実体か否かを判断することになる。同一実体を表すレコードの属性の値は、本来であれば同一の値となるべきであるが、様々な理由で類似した値となる場合がある。例えば、「渡辺商店」とすべきところ「渡邊商店」と異字体が入力される場合や、「AA研究所」とすべきところ「AA研」といったような省略がなされる場合、「AA研究所」とすべきところ「Aっつ研究所」といったように入力ミスがある場合などが想定される。
【0003】
名寄せでは、このような同一の値ではなく類似する値となっている場合でもレコードを抽出して、他の要素と共に評価して同一実体であると推定されるレコード群を特定する。
【0004】
なお、入力URL(Uniform Resource Locator)で、有害Web(ウェブ)サイトのURLを格納しているデータベースを検索する場合、URLの特性を用いて文字列検索を行う技術が存在している。具体的には、URLのホスト+ドメイン部分については右から左方向に詳細になっており、URLのホスト+ドメイン部分のうちホスト部分を簡単に変更できること、ドメイン部分についてもサブドメインの定義が可能であるという特性がある。そこで、ホスト+ドメイン部分については右からの一致を優先すべく、例えばホスト+ドメイン部分がwww.abc.def.co.jpであれば、pj.oc.fed.cba.wwwといったホスト+ドメイン名の区切りで文字の順番を反転させた形でデータベースに登録しておき、検索する際も入力URLのホスト+ドメイン部分をドット毎の区切りで文字の順番を反転させて文字列の前方一致検索を行うものである。しかしながら、この技術は、URLの特性に基づき、ホスト+ドメイン名の区切りで文字の順番を入れ替えているだけで、名寄せにそのまま適用できるようなものではない。すなわち、一般的には文字列間の異なり位置は不確定であり、スラッシュのように確定した区切り位置は存在していない。
【0005】
一般的な検索文字列と一般的な検索対象文字列とを比較する際に、それらの間で相違が発生する文字位置は様々である。大量の検索対象文字列から、検索文字列に前方からだけではなく後方からも類似する検索対象文字列を抽出するには、相違する文字位置のバリエーションを考慮すると、相当の処理時間が掛ってしまう。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006−221294号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
従って、本技術の目的は、一側面において、高速に類似する文字列の検索を行うための技術を提供することである。
【課題を解決するための手段】
【0008】
本検索装置は、(A)検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部と、(B)第1のデータ格納部に格納されている第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された検索対象文字列の識別子を第2のデータ格納部に格納する第1の検索部と、(C)検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、データ格納部に格納されている整数Mについての第2の検索用データに対して行って、第2の所定文字数以上前方一致する反転文字列を検出し、検出された反転文字列に対応する検索対象文字列の識別子を第2のデータ格納部に格納し、整数M−2文字一致した反転文字列が存在するか否かを判断する第2の検索部と、(D)第2の検索部に対して、第2の所定文字数から1まで当該第2の所定文字数から1までのうち整数Mについての検索指示を、第2の検索部により整数M−2文字一致した反転文字列が存在しないと判断された直後を除き出力する制御部とを有する。
【発明の効果】
【0009】
高速に類似する文字列の検索を行うことができるようになる。
【図面の簡単な説明】
【0010】
【図1】図1は、文字列間の比較を説明するための図である。
【図2】図2は、本実施の形態における処理の具体的な例を示す図である。
【図3A】図3Aは、本実施の形態の概要を説明するための図である。
【図3B】図3Bは、本実施の形態の概要を説明するための図である。
【図3C】図3Cは、本実施の形態の概要を説明するための図である。
【図3D】図3Dは、本実施の形態の概要を説明するための図である。
【図4】図4は、本実施の形態に係る検索装置の機能ブロック図である。
【図5】図5は、検索用データ生成部の機能ブロック図である。
【図6】図6は、検索処理部の機能ブロック図である。
【図7】図7は、検索用データ生成処理の処理フローを示す図である。
【図8】図8は、検索対象文字列の一例を示す図である。
【図9】図9は、ソート後の検索対象文字列の一例を示す図である。
【図10A】図10Aは、第1のグループの例を示す図である。
【図10B】図10Bは、第2のグループの例を示す図である。
【図11】図11は、検索用データ生成処理の一例を示す図である。
【図12】図12は、グループについての処理の一例を示す図である。
【図13】図13は、末尾文字「e」の検索用データの一例を示す図である。
【図14】図14は、末尾文字「g」の検索用データの一例を示す図である。
【図15】図15は、検索処理の処理フローを示す図である。
【図16】図16は、検索処理を説明するための具体例を示す図である。
【図17】図17は、検索処理の処理フローを示す図である。
【図18】図18は、検索処理を説明するための具体例を示す図である。
【図19】図19は、検索処理を説明するための具体例を示す図である。
【図20】図20は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0011】
名寄せの目的となるデータベースへのデータ入力において、入力ミス等が同一レコードの同一属性で複数回起きる可能性は小さいので、属性毎の文字列において相違箇所は高々1カ所で、且つ相違箇所の長さは文字列全体と比べて小さいという仮定を導入しても、大きな問題はないと考えられる。
【0012】
相違箇所が1カ所であるなら、相違箇所は、先頭から比較したとき最初に異なる文字が現れる位置から、末尾から比較したときに最初に異なる文字が現れる位置までの区間である。従って、単純な検索方法では、前方一致検索と後方一致検索とを組み合わせることになる。例えば、図1に示すように、文字列Sと文字列Tとを比較する場合には、前方から後方に向けて「a」「b」が一致しており、後方から前方に向けて「g」「f」が一致しているということで、図1の例では、2文字ずつ一致しているでの合計4文字一致していると判断する。
【0013】
本実施の形態では、条件「先頭からの文字の一致数+末端からの文字の一致数≧最低一致文字数」を満たすような文字列を高速に抽出するために、以下のような処理を実施する。
【0014】
具体的には、図2に示すように、(a)に示すような検索対象文字列に対して、(g)に示すような検索文字列「abcde」が入力されて、4文字以上一致する文字列を抽出する場合の処理について説明する。
【0015】
本実施の形態では、(a)をそのまま辞書順でソートした結果(b)と、検索対象文字列の4文字目以降の文字の順番を反転させた反転文字列について辞書順にソートした結果(c)と、検索対象文字列の3文字目以降の文字の順番を反転させた反転文字列について辞書順にソートした結果(d)と、検索対象文字列の2文字目以降の文字の順番を反転させた反転文字列について辞書順にソートした結果(e)と、検索対象文字列の1文字目以降の文字の順番を反転させた反転文字列について辞書順にソートした結果(f)とを用意する。
【0016】
そして、検索文字列の先頭4文字「abcd」で(b)を検索して、4文字以上前方一致する検索対象文字列を抽出する。この例ではID「5」の「abcdg」が特定される。
【0017】
さらに、検索文字列の4文字目以降の文字の順番を反転させた反転文字列(i)「abced」の先頭4文字「abce」で(c)を検索して、4文字以上前方一致する反転文字列を検出する。この例ではID「4」の「abceg」が特定される。なお、本実施の形態では、反転位置(切断点とも呼ぶ)「4」−2=2文字一致している反転文字列が存在するかを判断する。(c)には存在しないことが分かる。存在しない場合には、以下で述べる理由で反転位置「3」についての検索処理をスキップする。一方、存在する場合には、反転位置「3」についての検索処理を実施する。
【0018】
このように途中で検索処理をスキップする理由を図3A乃至図3Dを用いて説明する。
【0019】
例えば図3Aの左側に示すように、切断点(反転位置)が4文字目であり、先頭5文字一致である場合、図3Aの右側に示すように、切断点(反転位置)が3文字目になると、先頭4文字一致になってしまう。すなわち、一致数≧切断点−1の時には、切断点を先頭方向に1ずらすと一致数は必ず1減少してしまう。
【0020】
また、図3Bの左側に示すように、切断点(反転位置)が4文字目であり、先頭1文字一致である場合、図3Bの右側に示すように、切断点(反転位置)が3文字目になると、先頭1文字一致は変わらない。すなわち、一致数<切断点−2の時には、切断点を先頭方向に1ずらしても、一致数は変化しない。
【0021】
さらに、図3Cの左側に示すように、切断点(反転位置)が4文字目であり、先頭2文字が一致する場合、図3Cの右側に示すように、切断点(反転位置)が3の時には、先頭2文字一致は変わらない。なお、上段の元々の文字列は「abcdefg」であり、下段の元々の文字列は「abhefk」であり、末尾文字は不一致である。すなわち、一致数=切断点−2の時であって、末尾文字が不一致である場合には、切断点を先頭方向に1ずらしても、一致数は変化しない。
【0022】
一方、図3Dでは、上段の元々の文字列は「abcdefg」であり、下段の元々の文字列は「abhefg」であり、末尾文字が一致している。このような場合、図3Dの左側に示すように、切断点(反転位置)が4文字目であり、先頭2文字が一致する場合、図3Dの右側に示すように、切断点(反転位置)が3の時には、先頭5文字一致になる。
【0023】
このように、一致数=切断点−2の時、元々の文字列の末尾文字が一致していれば、切断点を左にシフトした場合に一致数が増加し、末尾文字が一致していなければ、切断点を左にシフトした場合に一致数は変化しない、という特性があることが分かる。従って、末尾文字が一致しているか否かに拘わらず、末尾文字が一致している検索対象文字列に対して前方一致検索を行って、一致文字数が切断点−2となる検索対象文字列が存在していれば、切断点を左にシフトした場合において前方一致検索を実施すれば目的の検索対象文字列が得られる可能性がある。
【0024】
なお、末尾文字が一致している検索対象文字列に対してのみ前方一致検索を行うことができるのであれば、より効率的に目的の検索対象文字列が得られるということになる。
【0025】
図2の説明に戻って、上でも述べたように、(c)には切断点「4」−2=2文字一致の反転文字列は存在していないので、切断点「3」(=現在の切断点「4」−1)についての前方一致検索はスキップできる。
【0026】
次に、検索文字列の2文字目以降の文字の順番を反転させた反転文字列(k)「aedcb」の先頭4文字「aedc」で(e)を検索して、4文字以上前方一致する反転文字列を検出する。ここでは該当する反転文字列は存在しない。また、切断点「2」−2=0文字一致の反転文字列が存在するか判断する。図2の(e)の反転文字列の中には「bebdc」が該当するので、切断点「1」の前方一致検索については実行することになる。
【0027】
そして、検索文字列の1文字目以降の文字の順番を反転させた反転文字列(l)「edcba」の先頭4文字「edcb」で(f)を検索して、4文字以上前方一致する反転文字列を検出する。ここでは該当する反転文字列は存在しない。
【0028】
このようにして、最終的な検索結果としては、ID「4」及び「5」の検索対象文字列が得られることになる。
【0029】
このような処理を実施すれば実施すべき前方一致検索が間引かれて、処理負荷が削減され、検索処理が高速化される。
【0030】
なお、前方一致で最低一致文字数を満足する場合を除き、図1に示すように、文字列の中間部分で文字列の不一致が発生している場合に、最低一致文字数を満足するのは、検索対象文字列の末尾文字と検索文字列の末尾文字とが一致している場合のみである。図3A乃至3Dの観点からも末尾文字が一致しているか否かが分かれば、処理負荷をさらに削減することができる。従って、予め検索対象文字列を、末尾文字の種類毎にグループ化しておけば、前方一致検索を行うべき検索対象文字列の数をさらに削減できる。
【0031】
以上のような観点から、図4乃至図19に示すような検索装置を導入するものとする。
【0032】
図4に示すように、本実施の形態に係る検索装置1000は、検索対象文字列格納部3000に格納されている検索対象文字列から検索用データを生成する検索用データ生成部1100と、検索用データ生成部1100によって生成された検索用データを格納する検索用データ格納部1200と、検索条件入力を受け付け且つ検索用データ格納部1200に対して以下で述べる検索処理を実施する検索処理部1300と、検索処理部1300の検索結果を格納する検索結果格納部1400と、検索結果格納部1400に格納されている検索結果を検索用データ格納部1200に基づき出力する出力部1500とを有する。
【0033】
図5に示すように、検索用データ生成部1100は、データ読込部1110と、データ分割部1120と、文字列グループ格納部1130と、文字反転部1140と、反転文字列格納部1150と、ソート処理部1160とを有する。データ読込部1110は、検索対象文字列格納部3000から検索対象文字列を読み出してデータ分割部1120とソート処理部1160に出力する。データ分割部1120は、データ読込部1110から得られた検索対象文字列をグループ化する処理を実施し、処理結果を文字列グループ格納部1130に格納する。文字列反転部1140は、文字列グループ格納部1130に格納されているデータに基づき、文字列グループ毎に、所属する検索対象文字列に対して以下で説明する文字反転処理を実施し、処理結果を反転文字列格納部1150に格納する。ソート処理部1160は、反転文字列格納部1150に格納されている反転文字列をグループ毎にソートして検索インデックスのデータを生成し、検索用データ格納部1200に格納する。
【0034】
また、図6に示すように、検索処理部1300は、検索条件取得部1310と、検索部1320と、制御部1340とを有する。検索条件取得部1310は、検索条件入力を受け付け、検索部1320と制御部1340とに出力する。検索部1320は、第1検索部1321と、第2検索部1322とを有する。第1検索部1321は、検索文字列について、検索用データ格納部1200に格納されている検索用データに対して前方一致検索を行い、検索結果を検索結果格納部1400に格納する。第2検索部1322は、制御部1340からの指示に従って、検索用データ格納部1200に格納されている検索用データに対して前方一致検索を行って、検索結果を検索結果格納部1400に格納する。なお、検索結果のうち一部のデータについては制御部1340に出力する。
【0035】
制御部1340は、検索キー生成部1341と、条件判定部1342とを有している。検索キー生成部1341は、検索文字列の一部の文字を反転させて検索キーを生成する。また、条件判定部1342は、検索キーの出力前に、以下で詳細に説明する条件を満たしているか否かを判断する。なお、第2検索部1322に前方一致検索を実施させるか否かを判断するための検索フラグについては、制御部1340及び第2検索部1322が参照可能なメモリの領域に用意されているものとする。
【0036】
以下、検索装置1000の処理内容を図7乃至図19を用いて説明する。まず、検索用データ生成部1100の処理を図7乃至図14を用いて説明する。データ読込部1110は、検索対象文字列格納部3000から、検索対象文字列を読み込み、データ分割部1120及びソート処理部1160に出力する(図7:ステップS1)。例えば、図8に示すような検索対象文字列が読み込まれたものとする。
【0037】
そして、ソート処理部1160は、検索対象文字列をデータ読込部1110から取得し、当該検索対象文字列を辞書順でソートして、切断なしの前方一致検索用のインデックスデータを生成し、検索用データ格納部1200に格納する(ステップS3)。図8のような検索対象文字列の場合には、図9に示すような形で通常の辞書順にソートされる。このようなソート後のデータからインデックスデータを生成する。
【0038】
また、データ分割部1120は、検索対象文字列をデータ読込部1110から取得し、当該検索対象文字列を、その末尾の文字でグループ化する(ステップS5)。図8の例であれば、末尾文字が「g」のグループ(図10A)と、「e」のグループ(図10B)とがあるので、2つのグループに分けられる。グループ分けについては、様々なバリエーションが可能である。例えば、異なる文字毎にグループを生成しても良いし、複数の種類の文字を纏めてグループ化するようにしてもよい。グループ化の結果については、グループ毎に検索対象文字列を文字列グループ格納部1130に格納する。
【0039】
次に、文字反転部1140は、未処理のグループを1つ特定する(ステップS7)。そして、文字反転部1140は、特定されたグループ内の(最長文字列長−1)をNに設定する(ステップS9)。端子Aを介して図11の処理に移行する。
【0040】
図11の処理の説明に移行して、文字反転部1140は、カウンタiを1に初期化する(ステップS11)。そして、文字反転部1140は、特定されたグループ内の各検索対象文字列について、i文字目以降を反転させた反転文字列を生成し、反転文字列格納部1150に格納する(ステップS13)。
【0041】
例えば、末尾文字が「e」であるグループを処理する場合、図12の(a)に示すような検索文字列が処理の対象となる。そして、i=3であれば、3文字目以降の文字の順番を入れ替えて、(b)に示すような反転文字列が生成される。
【0042】
さらに、ソート処理部1160は、反転文字列格納部1150に格納されており且つ生成した反転文字列を辞書順でソートし、前方一致検索用のインデックスデータを生成して、検索用データ格納部1200に格納する(ステップS15)。図12の例では、ソート結果が図12(c)のようになる。
【0043】
以上まとめると、例えば、末尾文字が「e」であるグループを処理する場合、図13に示すように、i=1であれば(a)のようなデータが生成され、i=2であれば(b)のようなデータが生成され、i=3であれば(c)のようなデータが生成され、i=4であれば(d)のようなデータが生成される。
【0044】
また、末尾文字が「g」であるグループを処理する場合、図14に示すように、i=1であれば(a)のようなデータが生成され、i=2であれば(b)のようなデータが生成され、i=3であれば(c)のようなデータが生成され、i=4であれば(d)のようなデータが生成される。
【0045】
そして、文字反転部1140は、iがN以上となったか判断する(ステップS17)。iがN未満であれば、文字反転部1140は、iを1インクリメントしてステップS13に戻る(ステップS20)。一方、iがN以上である場合、文字反転部1140は、未処理のグループが文字列グループ格納部1130にあるか判断する(ステップS19)。未処理のグループが存在する場合には端子Bを介して図7のステップS7に戻る。一方、未処理のグループが存在しない場合には、処理を終了する。
【0046】
以上のような処理を実施すれば、検索用データ格納部1200には、図9と図13及び図14のような検索用データが格納されることになる。
【0047】
なお、グループ化しない処理の場合には、全検索対象文字列を1つのグループとして設定して、上で述べた処理を実施すればよい。このような場合には、図2上段(b)乃至(f)のデータが、図13及び図14のデータの代わりに生成される。
【0048】
次に、図15乃至図19を用いて、検索時の処理について説明する。まず、検索処理部1300の検索条件取得部1310は、検索者からの検索条件(検索文字列及び最低一致文字数L)の入力を受け付ける(図15:ステップS21)。なお、検索装置1000が、ネットワークに接続されており、当該ネットワークに接続されている他の端末から受信するような場合もある。検索条件取得部1310は、取得した検索条件のデータを、制御部1340と検索部1320に出力する。例えば、最小一致文字数L=4で、検索文字列「abcde」が入力されたものとする。
【0049】
そして、検索部1320の第1検索部1321は、検索用データ格納部1200における、切断なしの検索用インデックスに対して、検索文字列についての前方一致検索を実施し、L文字以上一致する文字列の識別子を抽出して、検索結果格納部1400に格納する(ステップS23)。
【0050】
例えば図16において、(a)に示すような切断なしの検索用データに対して、検索文字列(f)「abcde」について前方一致検索を実施する。より具体的には先頭L文字「abcd」で前方一致検索を実施する。この場合、ID「5」が得られる。
【0051】
一方、制御部1340の条件判定部1342は、切断点Nに対して最小一致文字数Lを設定する(ステップS25)。また、制御部1340は、初期的に、次回の前方一致検索を行うべきことを表す検索フラグをセットする(ステップS27)。そして端子Cを介して図17の処理に移行する。
【0052】
そして、制御部1340の条件判定部1342は、N=0であるか判断する(ステップS29)。N=0ではない場合には、条件判定部1342は、検索フラグがセットされているか判断する(ステップS31)。初回は必ず検索フラグがセットされており、ステップS33に移行する。
【0053】
検索フラグがセットされている場合には、条件判定部1342は、検索フラグをオフにセットする(ステップS32)。
【0054】
その後、条件判定部1342は、検索キー生成部1341に対して指示を出力し、この指示に応じて検索キー生成部1341は、検索文字列におけるN文字目以降の文字の順番を反転させた検索キーを生成し、切断点N及び検索文字列の末尾文字と共に検索キーを第2検索部1322に出力する(ステップS33)。そして、第2検索部1322は、切断点及び検索文字列の末尾文字と共に検索キーを制御部1340から受け取ると、検索用データ格納部1200における、検索文字列の末尾文字についてのグループにおける切断点Nのインデックスに対して、検索キーについての前方一致検索を実施し、最低一致文字数L文字以上一致する反転文字列の識別子(本実施の形態では元の検索対象文字列と同じ)を抽出して、検索結果格納部1400に格納する(ステップS35)。末尾文字に応じたグループ分けを行っていない場合には、1つのグループのみが存在するものとして処理すればよい。
【0055】
「abcde」が検索文字列であるから末尾が「e」のグループにおいて、N=4であれば、図16(b)に示す検索用データに対して前方一致検索を行う。この際4文字目以降の文字が反転されるので、図16(g)に示すように検索キーは「abced」となる。従って、図18に示すように、ID「2」の反転文字列についての一致数は「1」であり、ID「4」の反転文字列についての一致数は「4」であり、ID「3」の反転文字列についての一致数は「0」となる。従って、ID「4」が抽出されて、検索結果格納部1400に格納する。
【0056】
また、第2検索部1322は、一致数が(N−2)の反転文字列が存在しているか判断し、一致数が(N−2)の反転文字列が存在している場合には検索フラグをセットする(ステップS37)。上でも述べたように、最低一致文字数Lの反転文字列が抽出できる可能性がある場合には検索フラグをセットし、そうでない場合には検索フラグをオフにしたままにする。
【0057】
なお、図18の例では、N=4から2を引いた一致数2の反転文字列が存在していないので、検索フラグはオフのままになる。そして、ステップS41に移行する。
【0058】
ステップS41では、条件判定部1342は、Nを1デクリメントする。その後処理はステップS29に戻る。
【0059】
上で述べている具体例ではN=3については第2検索部1322が前方一致検索を行わないように検索フラグがオフにセットされている。従って、ステップS31では、検索フラグはセットされていないと判断されて、条件判定部1342は、検索フラグをセットする(ステップS39)。一度検索フラグがオフにセットされたからといって以降の前方一致検索を全てスキップできるわけではない。従って、ここで次のNについては前方一致検索を実施すべく、検索フラグをセットする。そしてステップS41に移行する。
【0060】
図16の例でもN=3についての検索キー(h)については生成されることなく、検索用データ(c)に対する前方一致検索も行われない。
【0061】
N=2になると、検索フラグがオンになっているので、図16の(i)で示すような2文字目以降の文字の順番が反転された検索キーが生成される。そして、N=2のための検索用データ(d)に対して検索キーについての前方一致検索を実施する。4文字以上一致する反転文字列は存在しない。なお、この場合、図19に示すように、N=2から2を引いた「0」文字一致した反転文字列が存在している。従って、検索フラグがセットされる。
【0062】
そうすると、N=1になって、検索フラグがオンになっているので、図16(j)で示すような1文字目以降の文字の順番が反転された検索キーが生成される。そして、N=1のための検索用データ(e)に対して検索キーについての前方一致検索を実施する。4文字以上一致する反転文字列は存在しない。N=1の場合には、ステップS37の処理についてはスキップしても良い。
【0063】
以上のような処理を実施すれば、検索結果格納部1400には検索対象文字列の識別子{4,5}が格納されることになる。
【0064】
ステップS29で、N=0と判断された場合には、出力部1500は、検索用データ格納部1200から、検索結果格納部1400に格納されている検索対象文字列の識別子に対応する検索対象文字列を抽出して、出力する(ステップS43)。
【0065】
以上のような処理を実施すれば、文字列中高々1カ所しか不一致がないという前提において、前方からの一致文字数と後方からの一致文字数との和が一定以上、という条件を満足する類似文字列を高速に検索することができる。また、前方一致と後方一致の両方を併用することなく、処理も簡略化されている。
【0066】
以上本技術の一実施の形態を説明したが、本技術はこれに限定されるものではない。
【0067】
例えば図4乃至図6の機能ブロック図は一例であって、必ずしも実際のプログラムモジュールと一致しない場合もある。また、処理フローについても、同様の処理結果が得られる限り、ステップの順番を入れ替えたり、並列処理を行っても良い。例えば、第1検索部1321と第2検索部1322についての検索処理については、並列実施するようにしても良い。
【0068】
同様に、1つの検索装置1000に検索用データ生成部1100と検索処理部1300とを実施する場合を示しているが、異なる装置によって実施するようにしても良い。さらに、検索用データ生成部1100の処理についても複数の装置によって実施するようにしても良いし、検索処理部1300の処理についても複数の装置で処理するようにしても良い。
【0069】
なお、上で述べた検索装置1000は、コンピュータ装置であって、図20に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0070】
以上述べた本実施の形態をまとめると以下のようになる。
【0071】
本実施の形態に係る検索装置は、(A)検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部と、(B)第1のデータ格納部に格納されている第1の検索用データに対して検索文字列(例えば検索文字列のうち先頭の第2の所定数部分)の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された検索対象文字列の識別子を第2のデータ格納部に格納する第1の検索部と、(C)検索文字列における整数M文字以降の文字の順番を入れ替えた検索キー(例えば検索キーのうち先頭の第2の所定数部分)の前方一致検索を、データ格納部に格納されている整数Mについての第2の検索用データに対して行って、第2の所定文字数以上前方一致する反転文字列を検出し、検出された反転文字列に対応する検索対象文字列の識別子を第2のデータ格納部に格納し、整数M−2文字一致した反転文字列が存在するか否かを判断する第2の検索部と、(D)第2の検索部に対して、第2の所定文字数から1まで第2の所定文字数から1までのうち整数Mについての検索指示を、第2の検索部により整数M−2文字一致した反転文字列が存在しないと判断された直後を除き出力する制御部とを有する。
【0072】
このようにすれば第2の検索部による前方一致検索の回数を削減することができるため、検索処理が高速化される。
【0073】
また、上で述べた第2の検索用データが検索対象文字列の末尾文字の種類毎にグループ化されている場合もある。その場合、第2の検索部が、検索文字列の末尾文字と一致する末尾文字の種類のグループに属する第2の検索用データに対して前方一致検索を実施するようにしてもよい。このようにすれば、さらに検索対象文字列を絞り込むことができ、検索処理を高速化することができるようになる。
【0074】
なお、上で述べた制御部が、第2の検索部に対して、第2の所定文字数を整数Mとして検索指示を出力し、第2の検索部により整数M−2文字一致した反転文字列が存在すると判断された場合には、整数M−1を新たな整数Mとして検索指示を第2の検索部に出力し、第2の検索部により整数M−2文字一致した反転文字列が存在しないと判断された場合には、整数M−2を新たな整数Mとして検索指示を第2の検索部に出力するようにしてもよい。
【0075】
さらに、上で述べた検索装置が、1以上第1の所定文字数以下の整数Nの各々について各検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列を生成し、当該反転文字列をソートして第2の検索用データを生成する検索用データ生成部をさらに有するようにしてもよい。これによって、自動的に第2の検索用データが生成されるようになる。
【0076】
また、検索装置が、検索対象文字列の末尾文字の種類毎に検索対象文字列をグループ化し、当該グループの各々について、1以上第1の所定文字数以下の整数Nの各々について当該グループに属する各検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列を生成し、当該反転文字列をソートして第2の検索用データを生成する検索用データ生成部をさらに有するようにしても良い。末尾文字でグループ化する場合においても第2の検索用データが自動的に生成されるようになる。
【0077】
なお、上記処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【0078】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0079】
(付記1)
検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部と、
前記第1のデータ格納部に格納されている前記第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された前記検索対象文字列の識別子を第2のデータ格納部に格納する第1の検索部と、
前記検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、前記第1のデータ格納部に格納されている前記整数Mについての前記第2の検索用データに対して行って、前記第2の所定文字数以上前方一致する反転文字列を検出し、検出された前記反転文字列に対応する前記検索対象文字列の識別子を前記第2のデータ格納部に格納し、前記整数M−2文字一致した反転文字列が存在するか否かを判断する第2の検索部と、
前記第2の検索部に対して、前記第2の所定文字数から1まで前記第2の所定文字数から1までのうち整数Mについての検索指示を、前記第2の検索部により前記整数M−2文字一致した反転文字列が存在しないと判断された直後を除き出力する制御部と、
を有する検索装置。
【0080】
(付記2)
前記第2の検索用データが前記検索対象文字列の末尾文字の種類毎にグループ化されており、
前記第2の検索部が、前記検索文字列の末尾文字と一致する末尾文字の種類のグループに属する前記第2の検索用データに対して前方一致検索を実施する
付記1記載の検索装置。
【0081】
(付記3)
前記制御部が、
前記第2の検索部に対して、前記第2の所定文字数を前記整数Mとして検索指示を出力し、
前記第2の検索部により前記整数M−2文字一致した反転文字列が存在すると判断された場合には、前記整数M−1を新たな整数Mとして検索指示を前記第2の検索部に出力し、
前記第2の検索部により前記整数M−2文字一致した反転文字列が存在しないと判断された場合には、前記整数M−2を新たな整数Mとして検索指示を前記第2の検索部に出力する
付記1又は2記載の検索装置。
【0082】
(付記4)
1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列を生成し、当該反転文字列をソートして前記第2の検索用データを生成する検索用データ生成部
をさらに有する付記1乃至3のいずれか1つ記載の検索装置。
【0083】
(付記5)
前記検索対象文字列の末尾文字の種類毎に前記検索対象文字列をグループ化し、当該グループの各々について、1以上第1の所定文字数以下の整数Nの各々について当該グループに属する各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列を生成し、当該反転文字列をソートして前記第2の検索用データを生成する検索用データ生成部
をさらに有する付記2記載の検索装置。
【0084】
(付記6)
検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部に格納されている前記第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された前記検索対象文字列の識別子を第2のデータ格納部に格納するステップと、
前記第2の所定文字数から1まで前記第2の所定文字数から1までのうち整数Mについての検索処理を、当該検索処理において前記整数M−2文字一致した反転文字列が存在しないと判断された直後を除き実施するステップと、
を含み、
前記検索処理が、
前記検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、前記第1のデータ格納部に格納されている前記整数Mについての前記第2の検索用データに対して行って、前記第2の所定文字数以上前方一致する反転文字列を検出し、検出された前記反転文字列に対応する前記検索対象文字列の識別子を前記第2のデータ格納部に格納し、前記整数M−2文字一致した反転文字列が存在するか否かを判断する処理
であり、コンピュータにより実行される検索処理方法。
【0085】
(付記7)
検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部に格納されている前記第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された前記検索対象文字列の識別子を第2のデータ格納部に格納するステップと、
前記第2の所定文字数から1まで前記第2の所定文字数から1までのうち整数Mについての検索処理を、当該検索処理において前記整数M−2文字一致した反転文字列が存在しないと判断された直後を除き実施するステップと、
をコンピュータに実行させ、
前記検索処理が、
前記検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、前記第1のデータ格納部に格納されている前記整数Mについての前記第2の検索用データに対して行って、前記第2の所定文字数以上前方一致する反転文字列を検出し、検出された前記反転文字列に対応する前記検索対象文字列の識別子を前記第2のデータ格納部に格納し、前記整数M−2文字一致した反転文字列が存在するか否かを判断する処理
である検索処理プログラム。
【符号の説明】
【0086】
1000 検索装置
3000 検索対象文字列格納部
1100 検索用データ生成部
1200 検索用データ格納部
1300 検索処理部
1400 検索結果格納部
1500 出力部

【特許請求の範囲】
【請求項1】
検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部と、
前記第1のデータ格納部に格納されている前記第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された前記検索対象文字列の識別子を第2のデータ格納部に格納する第1の検索部と、
前記検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、前記第1のデータ格納部に格納されている前記整数Mについての前記第2の検索用データに対して行って、前記第2の所定文字数以上前方一致する反転文字列を検出し、検出された前記反転文字列に対応する前記検索対象文字列の識別子を前記第2のデータ格納部に格納し、前記整数M−2文字一致した反転文字列が存在するか否かを判断する第2の検索部と、
前記第2の検索部に対して、前記第2の所定文字数から1まで前記第2の所定文字数から1までのうち整数Mについての検索指示を、前記第2の検索部により前記整数M−2文字一致した反転文字列が存在しないと判断された直後を除き出力する制御部と、
を有する検索装置。
【請求項2】
前記第2の検索用データが前記検索対象文字列の末尾文字の種類毎にグループ化されており、
前記第2の検索部が、前記検索文字列の末尾文字と一致する末尾文字の種類のグループに属する前記第2の検索用データに対して前方一致検索を実施する
請求項1記載の検索装置。
【請求項3】
1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列を生成し、当該反転文字列をソートして前記第2の検索用データを生成する検索用データ生成部
をさらに有する請求項1又は2記載の検索装置。
【請求項4】
前記検索対象文字列の末尾文字の種類毎に前記検索対象文字列をグループ化し、当該グループの各々について、1以上第1の所定文字数以下の整数Nの各々について当該グループに属する各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列を生成し、当該反転文字列をソートして前記第2の検索用データを生成する検索用データ生成部
をさらに有する請求項2記載の検索装置。
【請求項5】
検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部に格納されている前記第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された前記検索対象文字列の識別子を第2のデータ格納部に格納するステップと、
前記第2の所定文字数から1まで前記第2の所定文字数から1までのうち整数Mについての検索処理を、当該検索処理において前記整数M−2文字一致した反転文字列が存在しないと判断された直後を除き実施するステップと、
を含み、
前記検索処理が、
前記検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、前記第1のデータ格納部に格納されている前記整数Mについての前記第2の検索用データに対して行って、前記第2の所定文字数以上前方一致する反転文字列を検出し、検出された前記反転文字列に対応する前記検索対象文字列の識別子を前記第2のデータ格納部に格納し、前記整数M−2文字一致した反転文字列が存在するか否かを判断する処理
であり、コンピュータにより実行される検索処理方法。
【請求項6】
検索対象文字列の第1の検索用データと、1以上第1の所定文字数以下の整数Nの各々について各前記検索対象文字列におけるN文字以降の文字の順番を入れ替えた反転文字列についての第2の検索用データとを格納する第1のデータ格納部に格納されている前記第1の検索用データに対して検索文字列の前方一致検索を行って、第2の所定文字数以上前方一致する検索対象文字列を検出し、検出された前記検索対象文字列の識別子を第2のデータ格納部に格納するステップと、
前記第2の所定文字数から1まで前記第2の所定文字数から1までのうち整数Mについての検索処理を、当該検索処理において前記整数M−2文字一致した反転文字列が存在しないと判断された直後を除き実施するステップと、
をコンピュータに実行させ、
前記検索処理が、
前記検索文字列における整数M文字以降の文字の順番を入れ替えた検索キーの前方一致検索を、前記第1のデータ格納部に格納されている前記整数Mについての前記第2の検索用データに対して行って、前記第2の所定文字数以上前方一致する反転文字列を検出し、検出された前記反転文字列に対応する前記検索対象文字列の識別子を前記第2のデータ格納部に格納し、前記整数M−2文字一致した反転文字列が存在するか否かを判断する処理
である検索処理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3A】
image rotate

【図3B】
image rotate

【図3C】
image rotate

【図3D】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10A】
image rotate

【図10B】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2012−190379(P2012−190379A)
【公開日】平成24年10月4日(2012.10.4)
【国際特許分類】
【出願番号】特願2011−55019(P2011−55019)
【出願日】平成23年3月14日(2011.3.14)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】