(57)【要約】【課題】類似部分文字列の検出精度を向上させる。【解決手段】複数の文字列同士、または単数の文字列における一部同士を比較して、文字列の中の類似部分である類似部分文字列を検出する類似部分文字列検出方法は、まず、文字列の中の完全一致部分である一致部分文字列ｓを検出する。次に、一致部分文字列ｓに対して、所定のギャップ内Ｆに存在する他の一致部分文字列ｓを探索して連繋し、連繋先の一致部分文字列ｓに対しても同様に繰り返すことにより、一致部分文字列ｓをギャップＧを介して次々に連繋する。そして、連繋された全ての一致部分文字列を含む類似部分文字列を作成する。【選択図】　図１
2004038329.tif 000002
【特許請求の範囲】
【請求項１】
複数の文字列同士、または単数の文字列における一部同士を比較して、文字列の中の類似部分である類似部分文字列を検出する類似部分文字列検出方法において、
文字列の中の完全一致部分である一致部分文字列を検出する一致部分文字列検出ステップと、
前記一致部分文字列に対して、所定のギャップ内に存在する他の前記一致部分文字列を探索して連繋し、連繋先の一致部分文字列に対しても同様に繰り返すことにより、一致部分文字列を前記ギャップを介して次々に連繋する一致部分文字列連繋ステップと、
連繋された全ての一致部分文字列を含む類似部分文字列を作成する類似部分文字列作成ステップとを含むことを特徴とする類似部分文字列検出方法。
【請求項２】
前記一致部分文字列連繋ステップは、既に連繋された一致部分文字列以外の一致部分文字列に対して繰り返されることを特徴とする請求項１に記載の類似部分文字列検出方法。
【請求項３】
前記一致部分文字列検出ステップは、文字列のうち除外部分以外の部分を対象として、下限値以上の長さを有する一致部分文字列を検出するステップであり、
前記一致部分文字列検出ステップにて検出された全ての一致部分文字列を前記除外部分に含める除外部分追加ステップをさらに含んでおり、
前記一致部分文字列検出ステップ、前記一致部分文字列連繋ステップ、前記類似部分文字列作成ステップ、および前記除外部分追加ステップは、前記下限値を減らして繰り返されることを特徴とする請求項１または２に記載の類似部分文字列検出方法。
【請求項４】
複数の文字列同士、または単数の文字列における一部同士を比較して、文字列の中の類似部分である類似部分文字列を検出する類似部分文字列検出装置において、
文字列の中の完全一致部分である一致部分文字列を検出する一致部分文字列検出手段と、
前記一致部分文字列検出手段にて検出された一致部分文字列に対して、所定のギャップ内に存在する他の前記一致部分文字列を探索して連繋し、連繋先の一致部分文字列に対しても同様に繰り返すことにより、一致部分文字列を前記ギャップを介して次々に連繋する一致部分文字列連繋手段と、
前記一致部分文字列連繋手段にて連繋された全ての一致部分文字列を含む類似部分文字列を作成する類似部分文字列作成手段とを備えることを特徴とする類似部分文字列検出装置。
【請求項５】
前記一致部分文字列連繋手段は、既に連繋された一致部分文字列以外の一致部分文字列に対して繰り返されることを特徴とする請求項４に記載の類似部分文字列検出装置。
【請求項６】
前記一致部分文字列検出手段は、文字列のうち除外部分以外の部分を対象として、下限値以上の長さを有する一致部分文字列を検出するものであり、
前記一致部分文字列検出手段にて検出された全ての一致部分文字列を前記除外部分に含める除外部分追加手段をさらに備えており、
前記一致部分文字列検出手段、前記一致部分文字列連繋手段、前記類似部分文字列作成手段、および前記除外部分追加手段は、前記下限値を減らして繰り返されることを特徴とする請求項４または５に記載の類似部分文字列検出装置。
【請求項７】
請求項１ないし３の何れか１項に記載の類似部分文字列検出方法をコンピュータに実行させるための類似部分文字列検出プログラム。
【請求項８】
請求項７に記載の類似部分文字列検出プログラムを記録したコンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータにおいて、記号、英数字、漢字などの文字からなる複数の文字列同士、または単数の文字列における一部同士を比較して、文字列の中の類似部分である類似部分文字列を検出する類似部分文字列検出方法、類似部分文字列検出装置、類似部分文字列検出プログラム、および該プログラムを記録した記録媒体に関するものである。
【０００２】
【従来の技術】
近時、コンピュータの発達により、電子化された文書データの管理、蓄積および利用が進んでいる。特に、最近のインターネットの利用拡大により、ＷＷＷ（ｗｏｒｌｄ　ｗｉｄｅ　ｗｅｂ）上のＨＴＭＬ（ｈｙｐｅｒｔｅｘｔ　ｍａｒｋｕｐ　ｌａｎｇｕａｇｅ）文書、デジタル図書館や電子出版などにおける電子文書、電子メールなど、莫大な量の文書データがさまざまな形態で管理、蓄積および利用が行なわれている。このため、このような大量の文書データの中から所望の情報を効率よく検索することが望まれている。
【０００３】
文章は、態の変化、文節における活用語尾の変化、動詞の名詞化、名詞の動詞化などによって変化する。このため、文書データを検索するには、キーワードに類似する文字列を検索できることが望ましい。
【０００４】
また、バイオインフォマティクスの分野では、ＤＮＡ（デオキシリボ核酸）の塩基配列、タンパク質のアミノ酸配列などの配列同士を比較して、配列の類似部分や相違部分を検出することが重要である。これらの配列は、ＤＮＡの各塩基を表わすＡ・Ｃ・Ｇ・Ｔやアミノ酸の２０文字アルファベットを用いた文字列に置き換えられて、文字列の類似部分や相違部分が検出されることになる。ここで、文字列の類似部分とは、複数の完全に一致する部分と、それらの間に挟まれている一致しない部分（以下、この部分を「ギャップ」と称する。）とからなる部分をいう。
【０００５】
従来、バイオインフォマティクスの分野において、文字列の中から類似部分である類似部分文字列を検出する方法として、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法、ＢＬＡＳＴプログラム、およびＦＡＳＴＡプログラムが知られている。以下、上記方法のそれぞれの違いを、図１０〜図１４に示されるスキャッタープロットに基づいて説明する。
【０００６】
なお、以下では、説明の便宜上、２つの文字列を入力し、それらの類似部分である類似部分文字列あるいは完全一致部分である一致部分文字列の位置を出力するアルゴリズムについて説明しているが、実際には、用途に応じて１つの文字列を検索したり、３つ以上の文字列を対象としたりする場合も存在する。
【０００７】
図１０〜図１４に示されるスキャッタープロットは、２つの文字列内の一致文字列や類似文字列を示すためのグラフである。これらの図では、行方向（図面の左右方向）に文字列「ａｂｃｅｆｂｃｄｅｂｃｄ」を配置し、列方向（図面の上下方向）に文字列「ａｂｃｄｃｄｅｆｂｃｄｇ」を配置して、これら２つの文字列が比較される。行列の各マス目には、２つの文字列における対応する文字同士が一致する場合に「＼」が記載される。前記２つの文字列に対するスキャッタープロットを図１０に示す。
【０００８】
図１０に示されるようなスキャッタープロットを作成すると、一致部分文字列ｓは、図１１に示されるように、右下方向に伸びる「＼」の並びとして表現されることになる。
【０００９】
また、類似部分文字列ｒは、図１２に示されるように、複数の一致部分文字列ｓ…を所定範囲内のギャップＧを介して連繋したものとなる。スキャッタープロットにおいては、ギャップＧは、或る一致部分文字列ｓの左上端と、別の一致部分文字列ｓの右下端との間として表現される。なお、所定値であるギャップＧの最大値は、アルゴリズムに依存する。
【００１０】
〔Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法〕
Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法は、概略的には、スキャッタープロットの各マス目を順番に調べることにより、一致部分文字列ｓや類似部分文字列ｒを検出する方法である。この方法では、多数の一致部分文字列ｓ…が多数のギャップＧ…を介して連繋された類似部分文字列ｒを全て検出することができるので、類似部分文字列ｒを検出する精度が非常に良好である。しかしながら、この方法では、特に工夫をしない限り、計算時間は、入力となる２つの文字列の長さの積に比例するため、大規模な文字列に適用するには、多大な計算コストが必要となる。
【００１１】
〔ＢＬＡＳＴプログラム〕
ＢＬＡＳＴプログラムでは、２つの文字列のうち、一方は問合せ文字列と呼ばれ、他方はデータベースと呼ばれている。問合せ文字列から、類似部分文字列ｒを検出するための専用のオートマトンを作成し、前記データベースを入力することにより前記オートマトンを実行する。計算時間は、データベース（文字列）の長さに比例する。なお、実用上、問合せ文字列は、データベースと比較して長さが短いことが前提となっている。また、検出する部分文字列の長さに下限が設けられている。
【００１２】
Ｖｅｒ．（バージョン）２以降のＢＬＡＳＴプログラムでは、まず、前述の処理により一致部分文字列ｓを検出する（ステップＳ１００、以下単に「Ｓ１００」と記載する。他のステップについても同様である）。次に、図１３に示されるように、検出された一致部分文字列ｓのそれぞれに関して、一致部分文字列ｓの前後において、例えば前述のＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法のような動的計画法（ダイナミックプログラミング法）を適用することにより、一致部分文字列ｓを含む類似部分文字列ｒを検出する（Ｓ１０１）。
【００１３】
このＢＬＡＳＴプログラムを実行したときに要する計算時間は、ステップＳ１００により一致部分文字列ｓを検出する時間に、ステップＳ１０１にて動的計画法を適用する面積の大きさに比例する時間を追加した時間となる。ステップＳ１００により一致部分文字列ｓを検出する時間は、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法により一致部分文字列ｓを検出する時間よりも短い。また、ステップＳ１０１にて動的計画法を適用する面積は、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法を適用する面積（図示のスキャッタープロットの全面積）よりも狭い。したがって、ＢＬＡＳＴプログラムの計算時間は、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法の計算時間よりも短くなる。
【００１４】
実際のＢＬＡＳＴプログラムでは、さらに、全ての一致部分文字列ｓ…に対して動的計画法を適用するのではなく、１つの対角線上で２つの一致部分文字列ｓ・ｓが近くにに見つかった場合にのみ動的計画法を適用することにより、高速化を図っている。
【００１５】
しかしながら、類似部分文字列ｒの検出精度は、ＢＬＡＳＴプログラムの方がＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法よりも劣っている。なぜなら、ＢＬＡＳＴプログラムでは、類似部分文字列ｒを検出するためには、まず、類似部分文字列ｒに含まれる一致部分文字列ｓが検出されている必要があるため、例えば、下限の長さよりも短い多数の一致部分文字列ｓ…がギャップを介して連繋した類似部分文字列ｒのように、ＢＬＡＳＴプログラムでは検出できない一致部分文字列ｓからなる類似部分文字列ｒは検出できないからである。
【００１６】
〔ＦＡＳＴＡプログラム〕
ＦＡＳＴＡプログラムでは、まず、Ｓｕｆｆｉｘ　ｔｒｅｅを用いたアルゴリズム、ハッシングアルゴリズムなどのように、一致部分文字列ｓを高速に検出する方法を用いて、一致部分文字列ｓを検出する（Ｓ２００）。次に、検出された一致部分文字列ｓのそれぞれに関して、ダイゴナル領域Ｄを設定し、該ダイゴナル領域Ｄに別の一致部分文字列ｓが含まれるか否かを検出する（Ｓ２０１）。ここで、ダイゴナル領域Ｄとは、図１４に示されるように、一致部分文字列ｓを基準として所定の幅をとり、これを対角線方向に延ばすことによって形成される領域をいう。
【００１７】
ダイゴナル領域Ｄに別の一致部分文字列ｓが含まれる場合には、前記ダイゴナル領域Ｄに対して、例えば前述のＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法のような動的計画法を適用することにより、一致部分文字列ｓを含む類似部分文字列ｒを検出する（ステップＳ２０２）。
【００１８】
このＦＡＳＴＡプログラムを実行したときに要する計算時間は、ステップＳ２００により一致部分文字列ｓを検出する時間（文字列の長さの和に比例する時間）に、ステップＳ２０２にて動的計画法を適用する面積の大きさ、すなわち、ダイゴナル領域Ｄの面積に比例する時間を追加した時間となる。したがって、ＦＡＳＴＡプログラムの計算時間は、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法の計算時間よりも短くなる。
【００１９】
しかしながら、ＦＡＳＴＡプログラムによって検出される類似部分文字列ｒは、ダイゴナル領域Ｄに含まれるものに限定される。このため、ダイゴナル領域Ｄが狭いと、類似部分文字列ｒの検出精度は低下し、ダイゴナル領域Ｄが広いと、前記検出精度は向上するが、ダイゴナル領域Ｄの面積が広くなるため計算時間が増大する。
【００２０】
【発明が解決しようとする課題】
以上のように、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法は、類似部分文字列ｒの検出精度が優れているが、多大な計算コストが必要となる。一方、ＢＬＡＳＴプログラムおよびＦＡＳＴＡプログラムは、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて、計算コストが少なくてすむが、検出精度が劣ることとなる。
【００２１】
本発明は上記の問題点を解決するためになされたもので、その目的は、Ｓｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて計算コストが少なく、ＢＬＡＳＴプログラムおよびＦＡＳＴＡプログラムに比べて検出精度を向上することができる類似部分文字列検出方法、類似部分文字列検出装置、類似部分文字列検出プログラム、および該プログラムを記録した記録媒体を提供することにある。
【００２２】
【課題を解決するための手段】
上記の課題を解決するために、本発明の類似部分文字列検出方法は、複数の文字列同士、または単数の文字列における一部同士を比較して、文字列の中の類似部分である類似部分文字列を検出する類似部分文字列検出方法において、文字列の中の完全一致部分である一致部分文字列を検出する一致部分文字列検出ステップと、前記一致部分文字列に対して、所定のギャップ内に存在する他の前記一致部分文字列を探索して連繋し、連繋先の一致部分文字列に対しても同様に繰り返すことにより、一致部分文字列を前記ギャップを介して次々に連繋する一致部分文字列連繋ステップと、連繋された全ての一致部分文字列を含む類似部分文字列を作成する類似部分文字列作成ステップとを含むことを特徴としている。
【００２３】
上記の方法によると、一致部分文字列を前記ギャップを介して次々に連繋し、連繋された全ての一致部分文字列を含む類似部分文字列を作成することにより類似部分文字列を検出している。したがって、スキャッタープロットの全領域を調査するＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて、類似部分文字列を検出する計算コストを減少させることができる。
【００２４】
また、検出される類似部分文字列は、ＦＡＳＴＡプログラムのように、ダイゴナル領域に含まれるものに限定されることはない。したがって、本発明の類似部分文字列検出方法は、ＦＡＳＴＡプログラムよりも類似部分文字列の検出精度が向上する。
【００２５】
さらに、本発明の類似部分文字列検出方法は、上記の方法において、前記一致部分文字列連繋ステップは、既に連繋された一致部分文字列以外の一致部分文字列に対して繰り返されることを特徴としている。
【００２６】
既に連繋された一致部分文字列に対して一致部分文字列連繋ステップを行なっても、既存の連繋が再び行なわれるに過ぎない。したがって、本発明の類似部分文字列検出方法は、既に連繋された一致部分文字列を、一致部分文字列連繋ステップを行なう対象から除外することにより、重複した処理を防止できるから、類似部分文字列の検出速度が向上する。
【００２７】
さらに、本発明の類似部分文字列検出方法は、上記の方法において、前記一致部分文字列検出ステップは、文字列のうち除外部分以外の部分を対象として、下限値以上の長さを有する一致部分文字列を検出するステップであり、前記一致部分文字列検出ステップにて検出された全ての一致部分文字列を前記除外部分に含める除外部分追加ステップをさらに含んでおり、前記一致部分文字列検出ステップ、前記一致部分文字列連繋ステップ、前記類似部分文字列作成ステップ、および前記除外部分追加ステップは、前記下限値を減らして繰り返されることを特徴としている。
【００２８】
一般に、前記下限値が小さいと、検出される一致部分文字列の数が増大して、類似部分文字列の検出速度が低下することになる。これに対し、上記の方法によると、文字列の長い一致部分文字列を先に検出し、その後、検出された一致部分文字列の部分を除外しているから、文字列の短い一致部分文字列を検出する場合には、文字列の一部のみが検索対象となる。したがって、一致部分文字列の検出速度の低下を抑えることができ、その結果、類似部分文字列の検出速度の低下を抑えることができる。
【００２９】
また、本発明の類似部分文字列検出装置は、複数の文字列同士、または単数の文字列における一部同士を比較して、文字列の中の類似部分である類似部分文字列を検出する類似部分文字列検出装置において、文字列の中の完全一致部分である一致部分文字列を検出する一致部分文字列検出手段と、前記一致部分文字列検出手段にて検出された一致部分文字列に対して、所定のギャップ内に存在する他の前記一致部分文字列を探索して連繋し、連繋先の一致部分文字列に対しても同様に繰り返すことにより、一致部分文字列を前記ギャップを介して次々に連繋する一致部分文字列連繋手段と、前記一致部分文字列連繋手段にて連繋された全ての一致部分文字列を含む類似部分文字列を作成する類似部分文字列作成手段とを備えることを特徴としている。
【００３０】
上記の構成によると、一致部分文字列連繋手段にて一致部分文字列を前記ギャップを介して次々に連繋し、類似部分文字列作成手段にて、連繋された全ての一致部分文字列を含む類似部分文字列を作成することにより類似部分文字列を検出している。したがって、スキャッタープロットの全領域を調査するＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて、類似部分文字列を検出する計算コストを減少させることができる。
【００３１】
また、検出される類似部分文字列は、ＦＡＳＴＡプログラムのように、ダイゴナル領域に含まれるものに限定されることはない。したがって、本発明の類似部分文字列検出装置は、ＦＡＳＴＡプログラムよりも類似部分文字列の検出精度が向上する。
【００３２】
さらに、本発明の類似部分文字列検出装置は、上記の構成において、前記一致部分文字列連繋手段は、既に連繋された一致部分文字列以外の一致部分文字列に対して繰り返されることを特徴としている。
【００３３】
上記の構成によると、前述のように、一致部分文字列連繋手段を実行する対象から、既に連繋された一致部分文字列を除外することにより、重複した処理を防止できるから、類似部分文字列の検出速度が向上する。
【００３４】
さらに、本発明の類似部分文字列検出装置は、上記の構成において、前記一致部分文字列検出手段は、文字列のうち除外部分以外の部分を対象として、下限値以上の長さを有する一致部分文字列を検出するものであり、前記一致部分文字列検出手段にて検出された全ての一致部分文字列を前記除外部分に含める除外部分追加手段をさらに備えており、前記一致部分文字列検出手段、前記一致部分文字列連繋手段、前記類似部分文字列作成手段、および前記除外部分追加手段は、前記下限値を減らして繰り返されることを特徴としている。
【００３５】
上記の構成によると、文字列の長い一致部分文字列を先に検出し、その後、検出された一致部分文字列の部分を除外しているから、文字列の短い一致部分文字列を検出する場合には、文字列の一部のみが検索対象となる。したがって、一致部分文字列の検出速度の低下を抑えることができ、その結果、類似部分文字列の検出速度の低下を抑えることができる。
【００３６】
なお、上記の類似部分文字列検出方法を類似部分文字列検出プログラムとしてコンピュータに実行させることができる。さらに、前記類似部分文字列検出プログラムをコンピュータで読取り可能な記録媒体に記憶させることにより、任意のコンピュータ上で上記類似部分文字列検出方法を実行させることができる。
【００３７】
【発明の実施の形態】
〔実施の形態１〕
本発明の一実施形態について図１〜図７に基づいて説明すれば、以下のとおりである。図２は、本実施形態の類似部分文字列検出装置の概略構成を示している。
【００３８】
類似部分文字列検出装置１０は、一般的なコンピュータの構成と同様の構成である。すなわち、類似部分文字列検出装置１０では、ＣＰＵ（中央演算装置）１１、メモリ１２、入力装置１３、出力装置１４、外部記憶装置１５、および通信装置１６がバス１７を介して接続されている。
【００３９】
ＣＰＵ１１は、プログラムを実行することにより、各種データの処理や各種デバイスへの制御および指示を行なうものである。メモリ１２は、ＣＰＵ１１が実行する各種プログラムや各種データを格納しており、一般にＲＡＭ（ｒａｎｄｏｍ　ａｃｃｅｓｓ　ｍｅｍｏｒｙ）およびＲＯＭ（ｒａｎｄｏｍ　ａｃｃｅｓｓ　ｍｅｍｏｒｙ）で構成されている。
【００４０】
入力装置１３は、キーボード、マウスなどのように、利用者が類似部分文字列検出装置１０に対して各種データや各種指示を入力するためのものである。出力装置１４は、ディスプレイ、プリンタなどのように、ＣＰＵ１１にて処理されたデータを出力して利用者に提供するものである。
【００４１】
外部記憶装置１５は、ハードディスク、光ディスク、光磁気ディスクなどのように、各種データベースなどの大容量のデータを記憶するものである。通信装置１６は、モデム、ゲートウェイなどのように、外部端末２０との間で情報の送受を行なうものである。
【００４２】
上記構成の類似部分文字列検出装置１０において、入力装置１３にて類似部分文字列ｒの検出が指示されると、２つ文字列が比較されて、類似部分文字列ｒが検出される。なお、文字列の類似部分文字列検出装置１０への入力は、文字列が記録された記録媒体を、該記録媒体が着脱可能な外部記憶装置１５に配備することにより行なわれてもよいし、外部端末２０から通信装置１６を介して行なわれてもよい。また、一方の文字列を外部記憶装置１５に予め記憶しておき、他方の文字列を、前記記録媒体や通信装置１６を介して入力してもよい。
【００４３】
このときの類似部分文字列ｒを検出する方法を、図３に基づいて説明する。まず、下限値ｂに、予め定められた下限初期値を代入した後（Ｓ１０）、類似部分文字列集合Ｒを空にする（Ｓ１１）。次に、図４に示すような類似部分文字列の検出が行なわれる（Ｓ１２）。このステップの詳細は後述する。次に、下限値ｂを減らした後（Ｓ１３）、下限値ｂが、予め定められた下限終了値よりも小さいか否かを判断する（Ｓ１４）。下限値ｂが下限終了値以上である場合には、ステップＳ１１に戻って、前述の処理を繰り返す。一方、下限値ｂが下限終了値よりも小さい場合には、類似部分文字列ｒの検出処理を終了する。
【００４４】
なお、ステップＳ１３における下限値ｂの減少処理は、減少分を一定としたり、下限値ｂが小さくなるに従って減少分を小さくしたりするなど、任意の減少処理を利用することができる。
【００４５】
次に、類似部分文字列の検出処理（Ｓ１２）の詳細について図４に基づいて説明する。まず、下限値ｂ以上の長さを有する一致部分文字列ｓ…を検出する（Ｓ２０）。この検出には、Ｓｕｆｆｉｘ　ｔｒｅｅを用いたアルゴリズム、ハッシングアルゴリズムなどのように、一致部分文字列ｓを高速に検出する公知の方法を利用することができる。
【００４６】
次に、図１に示されるように、検出された各一致部分文字列ｓの両端にギャップ領域Ｆ・Ｆを設定する（Ｓ２１）。本実施形態では、ギャップ領域Ｆ・Ｆは、一致部分文字列ｓの両端から上下左右に２マスずつ広げた範囲としている。このギャップ領域Ｆの広さは、任意に設定することができる。しかしながら、ＦＡＳＴＡプログラムにおけるダイゴナル領域Ｄの場合と同様に、ギャップ領域Ｆが狭すぎると類似部分文字列の検出精度が低下することになり、反対に広すぎると類似部分文字列の検出速度が低下することになる。
【００４７】
次に、以下に示すステップＳ２３〜Ｓ２７を各一致部分文字列ｓについて繰り返す（Ｓ２２）。まず、一致部分文字列ｓは、「検出済み」であるか否かを判断する（Ｓ２３）。
【００４８】
ここで、「検出済み」であるとは、後述のステップＳ２５〜Ｓ２７から明らかなように、既に繰返し処理の対象となった一致部分文字列ｓであるか、あるいは、後述のステップＳ２６で既に連繋された一致部分文字列ｓである場合をいう。「検出済み」であるか否かの判断は、例えば、ステップＳ２０にて検出された一致部分文字列ｓ…のそれぞれに、「検出済み」であるか否かを示すフラグを設けることによって容易に実行することができる。
【００４９】
「検出済み」である場合には、この繰返し内の処理（Ｓ２３〜Ｓ２７）を終了し、次の一致部分文字列ｓについて繰返し内の処理を行なう。一方、「検出済み」ではない場合には、一致部分文字列集合ａを作成する（Ｓ２４）。次に、一致部分文字列集合ａに一致部分文字列ｓを含めると共に「検出済み」とする（Ｓ２５）。
【００５０】
次に、繰返しの対象となっている一致部分文字列ｓを基準として、ギャップ領域Ｆと他の一致部分文字列ｓとを介して連繋する全ての一致部分文字列を、一致部分文字列集合ａに追加すると共に「検出済み」とする（Ｓ２６）。
【００５１】
次に、一致部分文字列集合ａに含まれる領域から類似部分文字列を作成して、類似部分文字列集合Ｒに追加し（Ｓ２７）、その後、次の一致部分文字列ｓについて繰返し内の処理を行なう。そして、全ての一致部分文字列ｓ点について繰返し内の処理が終了すると、類似部分文字列の検出処理（Ｓ１２）が終了して、次のステップ（Ｓ１３）が行なわれる。
【００５２】
図３および図４に示される処理を行なうことにより、図５に示されるような類似部分文字列集合Ｒが生成される。したがって、本実施形態の類似部分文字列検出装置１０は、一致部分文字列ｓをギャップＧを介して次々に連繋し（Ｓ２６）、連繋された全ての一致部分文字列ｓ…を含む類似部分文字列ｒを作成することにより類似部分文字列ｒを検出している。
【００５３】
これにより、スキャッタープロットの全領域を調査するＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて、類似部分文字列ｒを検出する計算コストを減少させることができる。さらに、厳密に比較すれば、本実施形態における前記計算コストは、ＦＡＳＴＡプログラムにおける前記計算コストと比べて、同程度以下になることが予想される。
【００５４】
また、検出される類似部分文字列ｒは、ＦＡＳＴＡプログラムのように、ダイゴナル領域Ｄ（図１４を参照）に含まれるものに限定されることはないから、類似部分文字列ｒの検出精度が向上する。なお、詳細は後述する。
【００５５】
また、既に連繋された一致部分文字列ｓに対して、一致部分文字列ｓ…をギャップＧを介して連繋させる処理（Ｓ２６）を行なっても、既存の連繋が再び行なわれるに過ぎず、重複した処理が行なわれることになる。これに対して、本実施形態では、一致部分文字列ｓが「検出済み」であれば（Ｓ２３でＹＥＳ）、一致部分文字列ｓ…をギャップＧを介して連繋させる処理（Ｓ２６）を行なわない。すなわち、既に連繋された一致部分文字列ｓは、「検出済み」であるから、前記連繋させる処理が省略されるので、重複した処理を防止することができる。したがって、類似部分文字列ｒの検出の手間は、一致部分文字列ｓの個数に比例する程度で済むため、高速な検出を行なうことができる。
【００５６】
次に、本実施形態における類似部分文字列検出方法と、ＦＡＳＴＡプログラムによる類似部分文字列検出方法との相違を図６および図７に基づいて詳述する。例えば、図６（ｂ）に示されるように、オーバーラップする部分の多い一致部分文字列ｓ１〜ｓ７を検出した場合を考える。
【００５７】
ＦＡＳＴＡプログラムでは、或る一致部分文字列ｓ１に対してダイゴナル領域Ｄを設定し、該ダイゴナル領域Ｄに動的計画法を適用して類似部分文字列を検出している。このため、動的計画法による計算コストを抑えるために、ダイゴナル領域Ｄを狭くすると、図６（ｂ）に示されるように、ダイゴナル領域Ｄに含まれる一致部分文字列ｓ１・ｓ５が少なく、類似部分文字列の検出精度が低下することになる。また、これを回避するために、ダイゴナル領域Ｄを広げると、前記検出精度を向上させることができるが、ダイゴナル領域Ｄの面積が増大するために動的計画法による計算コストが増大することになる。
【００５８】
これに対し、本実施形態における類似部分文字列の検出方法では、一致部分文字列の両端に設定されたギャップ領域Ｆ・Ｆに含まれる他の一致部分文字列を選択して連繋し、これを連繋された一致部分文字列においても繰り返している。これにより、図６（ａ）に示されるように、全ての一致部分文字列を含む類似部分文字列を、計算コストを増大させることなく検出することができる。
【００５９】
また、例えば、一方の文字列に幾つかの文字を挟んだものが他方の文字列となっている場合には、図７に示されるような一致部分文字列ｓ…が検出されることになる。このような状況は、例えば、古いプログラムを拡張して新しいプログラムを作成した場合などに起こる場合が多い。
【００６０】
図７に示されるような場合にＦＡＳＴＡプログラムを用いたときには、著しく広いダイゴナル領域Ｄを設定する必要があり、このことは、計算コストの上で非現実的である。これに対し、本実施形態における類似部分文字列の検出方法を用いたときには、ギャップ領域Ｆに含まれる一致部分文字列ｓを次々に連繋することにより、一致部分文字列ｓ…を含む類似部分文字列を容易に検出することができる。
【００６１】
次に、本実施形態における類似部分文字列検出方法と、ＢＬＡＳＴプログラム（Ｖｅｒ．２以降）による類似部分文字列検出方法との相違を説明する。ＢＬＡＳＴプログラムでは、短い（例えば３文字）一致部分文字列ｓを種（シード）にして前後に伸張することにより類似部分文字列ｒを検出している。このときに動的計画法が利用されるため、検索される領域、すなわち、検出される類似部分文字列ｒの長さの２乗の計算コストが必要となる。
【００６２】
一方、本実施形態では、検出される類似部分文字列ｒに含まれる一致部分文字列ｓの個数に比例する計算コストとなる。したがって、検出される一致部分文字列ｓの長さの下限値ｂが大きくなれば、ＢＬＡＳＴプログラムの計算コストは増大するが、本実施形態では、検出される類似部分文字列ｒに含まれる一致部分文字列ｓの個数が減少するので、本実施形態の計算コストは減少する。
【００６３】
また、本実施形態では、図３に示されるように、前記下限値ｂが大きい方から計算されるから、初期の類似部分文字列ｒの検出（Ｓ１２）は高速で行なうことができる。さらに、下限値ｂに対して検出される類似部分文字列ｒを利用者が参照できるようにすれば、下限値ｂが下限終了値に達する前に、利用者が類似部分文字列ｒの検出が十分であると判断した時点で検出処理を終了することができる。
【００６４】
〔実施の形態２〕
次に、本発明の他の実施形態について図８および図９に基づいて説明すれば、以下のとおりである。本実施形態は、上記実施形態と比べて、除外領域集合ｅを利用する点が異なるのみであり、その他の構成および処理は同様である。除外領域集合ｅを利用することに伴い、図３および図４に示される類似部分文字列の検出方法に比べて、以下の処理が変更または追加される。
【００６５】
本実施形態では、図８に示されるように、下限値ｂに下限初期値を代入する処理（Ｓ１０）の後に、除外領域集合ｅを空にする処理（Ｓ３０）が追加される。これに伴い、ステップＳ１４において、下限値ｂが下限終了値以上である場合には、ステップＳ１１の代わりにステップＳ３０に戻ることになる。
【００６６】
また、図９に示されるように、下限値ｂ以上の長さを有する一致部分文字列ｓ…を検出する処理（図４のＳ２０）が、除外領域集合ｅに含まれない領域でのみ行なわれる処理（Ｓ４０）に変更される。さらに、類似部分文字列を作成して類似部分文字列集合Ｒに追加する処理（Ｓ２７）の後に、一致部分文字列集合ａに含まれる領域から除外領域を作成して、除外領域集合ｅに追加する処理（Ｓ４１）が追加される。
【００６７】
上記の処理を追加することにより、本実施形態の類似部分文字列検出装置は、上記の実施形態による効果に加えて、以下の効果を奏することになる。
【００６８】
一般に、下限値ｂが小さいと、検出される一致部分文字列ｓの数が増大して、類似部分文字列ｒの検出速度が低下することになる。これに対し、本実施形態における類似部分文字列の検出方法では、文字列の長い一致部分文字列ｓを先に検出し、その後、検出された一致部分文字列ｓの部分を除外領域集合ｅに追加することにより、文字列の短い一致部分文字列を検出する場合には、文字列から除外領域集合ｅを除いた部分のみが検索対象となる。したがって、一致部分文字列ｓの検出速度の低下を抑えることができ、その結果、類似部分文字列ｒの検出速度の低下を抑えることができる。
【００６９】
なお、上記の実施形態では、ギャップ領域Ｆを矩形領域としているが、これに限定されるものではなく、ギャップＧの長さの許容範囲によって種々の寸法および形状にギャップ領域Ｆを変更することができる。
【００７０】
本発明は、上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。
【００７１】
例えば、本発明は、プログラムから重複部分を抽出する場合にも適用される。重複部分をまとめるようにプログラムを修正することにより、プログラムの分量を減らすことができるとともに、プログラムが理解しやすくなる。
【００７２】
また、プログラムの不具合を修正したり、機能を変更したりするために、重複部分を修正する必要が生じた場合には、全ての重複部分を同様に修正する必要がある。このような場合に本発明を適用すれば、重複部分の場所を認識できるから重複部分に対する修正が容易となる。また、前述のように、重複部分をまとめるようにプログラムを修正することにより、重複部分に対する修正が容易となる。
【００７３】
現在、産業界では、数百万行以上といった、１人の人間では全体を読むことができないような巨大なプログラムが利用されており、このようなプログラムに対して一貫した修正を行なうためにも、本発明は有効である。
【００７４】
また、本発明は、単一あるいは複数の文書から類似部分を抽出する場合にも適用される。これにより、文章を一部改変して、他人に引用されたり利用されたりしている場合に、改変された文章を発見するのに有効である。また、試験などのように、１つの問題に対する答案を多数の人間が文章として提出して、その答案を採点する場合に、キーワードとなる文が記載されているか否かを調べるのに有効である。
【００７５】
また、ある言語の文書を別の言語の文書に翻訳する場合に、その文書に頻出する文や文節をあらかじめ全て検出しておくことによって、前記文や文節に一貫した訳を与えることが可能となる。特に、複数の翻訳者が分担して翻訳を行なう場合に、一貫した翻訳が可能となる。
【００７６】
【発明の効果】
以上のように、本発明の類似部分文字列検出方法は、文字列の中の完全一致部分である一致部分文字列を検出する一致部分文字列検出ステップと、前記一致部分文字列に対して、所定のギャップ内に存在する他の前記一致部分文字列を探索して連繋し、連繋先の一致部分文字列に対しても同様に繰り返すことにより、一致部分文字列を前記ギャップを介して次々に連繋する一致部分文字列連繋ステップと、連繋された全ての一致部分文字列を含む類似部分文字列を作成する類似部分文字列作成ステップとを含んでいる。
【００７７】
これにより、スキャッタープロットの全領域を調査するＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて、類似部分文字列を検出する計算コストが減少するという効果を奏するとともに、検出される類似部分文字列は、ダイゴナル領域に含まれるものに限定されることはないから、類似部分文字列の検出精度が向上するという効果を奏する。
【００７８】
さらに、本発明の類似部分文字列検出方法は、以上のように、上記の方法において、前記一致部分文字列連繋ステップは、既に連繋された一致部分文字列以外の一致部分文字列に対して繰り返されている。
【００７９】
これにより、既に連繋された一致部分文字列を、一致部分文字列連繋ステップを行なう対象から除外することにより、重複した処理を防止できるから、類似部分文字列の検出速度が向上するという効果を奏する。
【００８０】
さらに、本発明の類似部分文字列検出方法は、以上のように、上記の方法において、前記一致部分文字列検出ステップは、文字列のうち除外部分以外の部分を対象として、下限値以上の長さを有する一致部分文字列を検出するステップであり、前記一致部分文字列検出ステップにて検出された全ての一致部分文字列を前記除外部分に含める除外部分追加ステップをさらに含んでおり、前記一致部分文字列検出ステップ、前記一致部分文字列連繋ステップ、前記類似部分文字列作成ステップ、および前記除外部分追加ステップは、前記下限値を減らして繰り返されている。
【００８１】
これにより、文字列の長い一致部分文字列を先に検出し、その後、検出された一致部分文字列の部分を除外しているから、文字列の短い一致部分文字列を検出する場合には、文字列の一部のみが検索対象となるので、一致部分文字列の検出速度の低下を抑えることができ、その結果、類似部分文字列の検出速度の低下を抑えることができるという効果を奏する。
【００８２】
また、本発明の類似部分文字列検出装置は、以上のように、文字列の中の完全一致部分である一致部分文字列を検出する一致部分文字列検出手段と、前記一致部分文字列検出手段にて検出された一致部分文字列に対して、所定のギャップ内に存在する他の前記一致部分文字列を探索して連繋し、連繋先の一致部分文字列に対しても同様に繰り返すことにより、一致部分文字列を前記ギャップを介して次々に連繋する一致部分文字列連繋手段と、前記一致部分文字列連繋手段にて連繋された全ての一致部分文字列を含む類似部分文字列を作成する類似部分文字列作成手段とを備える構成である。
【００８３】
これにより、スキャッタープロットの全領域を調査するＳｍｉｔｈ−Ｗａｔｅｒｍａｎ法に比べて、類似部分文字列を検出する計算コストが減少するという効果を奏するとともに、検出される類似部分文字列は、ダイゴナル領域に含まれるものに限定されることはないから、類似部分文字列の検出精度が向上するという効果を奏する。
【００８４】
さらに、本発明の類似部分文字列検出装置は、以上のように、上記の構成において、前記一致部分文字列連繋手段は、既に連繋された一致部分文字列以外の一致部分文字列に対して繰り返される構成である。
【００８５】
これにより、既に連繋された一致部分文字列を、一致部分文字列連繋手段を実行する対象から除外することにより、重複した処理を防止できるから、類似部分文字列の検出速度が向上するという効果を奏する。
【００８６】
さらに、本発明の類似部分文字列検出装置は、以上のように、上記の構成において、前記一致部分文字列検出手段は、文字列のうち除外部分以外の部分を対象として、下限値以上の長さを有する一致部分文字列を検出するものであり、前記一致部分文字列検出手段にて検出された全ての一致部分文字列を前記除外部分に含める除外部分追加手段をさらに備えており、前記一致部分文字列検出手段、前記一致部分文字列連繋手段、前記類似部分文字列作成手段、および前記除外部分追加手段は、前記下限値を減らして繰り返される構成である。
【００８７】
これにより、文字列の長い一致部分文字列を先に検出し、その後、検出された一致部分文字列の部分を除外しているから、文字列の短い一致部分文字列を検出する場合には、文字列の一部のみが検索対象となるので、一致部分文字列の検出速度の低下を抑えることができ、その結果、類似部分文字列の検出速度の低下を抑えることができるという効果を奏する。
【００８８】
なお、上記の類似部分文字列検出方法を類似部分文字列検出プログラムとしてコンピュータに実行させることができる。さらに、前記類似部分文字列検出プログラムをコンピュータで読取り可能な記録媒体に記憶させることにより、任意のコンピュータ上で上記類似部分文字列検出方法を実行させることができる。
【図面の簡単な説明】
【図１】２つの文字列に対するスキャッタープロットに関して、本発明の一実施形態である類似部分文字列検出装置が実行する類似部分文字列の検出方法を示すグラフである。
【図２】本実施形態の類似部分文字列検出装置の概略構成を示すブロック図である。
【図３】本実施形態における類似部分文字列の検出方法を示すフローチャートである。
【図４】本実施形態における類似部分文字列の検出方法を示すフローチャートである。
【図５】本実施形態における類似部分文字列の検出方法によって検出された類似部分文字列の集合を示すグラフである。
【図６】同図（ａ）は、本実施形態において検出される類似部分文字列を示すグラフであり、同図（ｂ）は、従来のＦＡＳＴＡプログラムにより設定されたダイゴナル領域に含まれる一致部分文字列を示すグラフである。
【図７】本実施形態において検出される類似部分文字列と、該類似部分文字列を従来のＦＡＳＴＡプログラムによって検出可能とするために設定されるべきダイゴナル領域とを示すグラフである。
【図８】本発明の他の実施形態における類似部分文字列の検出方法を示すフローチャートである。
【図９】本実施形態における類似部分文字列の検出方法を示すフローチャートである。
【図１０】２つの文字列に対するスキャッタープロットを示すグラフである。
【図１１】図１０に示されるグラフに関して、すべての一致部分文字列を示すグラフである。
【図１２】図１０に示されるグラフに関して、２つの一致部分文字列と１つのギャップとからなる類似部分文字列を示すグラフである。
【図１３】図１０に示されるグラフに関して、ＢＬＡＳＴプログラムによる類似部分文字列の検出方法を示すグラフである。
【図１４】図１０に示されるグラフに関して、ＦＡＳＴＡプログラムによる類似部分文字列の検出方法を示すグラフである。
【符号の説明】
ｒ　　類似部分文字列
ｓ　　一致部分文字列
Ｆ　　ギャップ領域
Ｇ　　ギャップ
【図１】
2004038329.tif 000003
【図２】
2004038329.tif 000004
【図３】
2004038329.tif 000005
【図４】
2004038329.tif 000006
【図５】
2004038329.tif 000007
【図６】
2004038329.tif 000008
【図７】
2004038329.tif 000009
【図８】
2004038329.tif 000010
【図９】
2004038329.tif 000011
【図１０】
2004038329.tif 000012
【図１１】
2004038329.tif 000013
【図１２】
2004038329.tif 000014
【図１３】
2004038329.tif 000015
【図１４】
2004038329.tif 000016