JP2002229987A - パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体 - Google Patents

パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体

Info

Publication number
JP2002229987A
JP2002229987A JP2001004189A JP2001004189A JP2002229987A JP 2002229987 A JP2002229987 A JP 2002229987A JP 2001004189 A JP2001004189 A JP 2001004189A JP 2001004189 A JP2001004189 A JP 2001004189A JP 2002229987 A JP2002229987 A JP 2002229987A
Authority
JP
Japan
Prior art keywords
pattern
array
search
elements
character string
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.)
Granted
Application number
JP2001004189A
Other languages
English (en)
Other versions
JP3672242B2 (ja
Inventor
Tetsuro Shibuya
哲朗 渋谷
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2001004189A priority Critical patent/JP3672242B2/ja
Priority to US10/043,564 priority patent/US7016896B2/en
Publication of JP2002229987A publication Critical patent/JP2002229987A/ja
Application granted granted Critical
Publication of JP3672242B2 publication Critical patent/JP3672242B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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/90348Query processing by searching ordered data, e.g. alpha-numerically ordered data
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99936Pattern matching access

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

(57)【要約】 【課題】 大規模テキストデータベースの検索におい
て、処理を行うためのデータ構造におけるデータサイズ
の増大を抑えながら、高速な検索を実現する。 【解決手段】 検索対象である文字列中から所望のパタ
ーンを検索するパターン検索方法において、次の範囲検
索ステップと、文字列抽出ステップとを含む。すなわ
ち、範囲検索ステップにおいて、このパターンの最後の
文字から前方へ1文字ずつ順に加えて得られる各中間パ
ターンに関して、この中間パターンの先頭の文字が検索
対象の文字列に対する接尾辞配列のどの範囲に存在する
かを順次検索する。次に、文字列抽出ステップにおい
て、当該接尾辞配列の範囲に含まれる各要素に対応する
文字列の要素を特定し、この文字列の各要素を先頭とし
てこのパターンの要素数と同じ数の要素からなる部分文
字列を抽出する文字列抽出ステップとを含むことを特徴
とする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、文字列などの配列
中に存在する頻出部分配列や、二つ以上の配列に共通な
部分配列を検索するためのデータ構造及びこのデータ構
造を用いたパターン検索方法に関する。
【0002】
【従来の技術】文字列中に存在する頻出部分文字列や、
二つ以上の文字列に共通な部分文字列などを高速で検索
するのに有効なデータ構造として、接尾辞木(Suffix t
ree)が知られている。接尾辞木は、処理対象の文字列
中に存在しない文字$を処理対象の文字列の最後に加え
た文字列における全ての接尾辞を表す木である。接尾辞
木の葉ノード(各枝において他の枝が接続されていない
先端のノード)は、それぞれの接尾辞に対応する。ここ
で、接尾辞とは、所定の文字列において、所定の文字を
特定した場合の当該文字以降の文字列である。図6は、
接尾辞木の例を示す図である。図6には、処理対象の文
字列として「mississippi」の最後に文字$
を加えた文字列「mississippi$」の接尾辞
木を示す。
【0003】接尾辞木において、各枝は、部分文字列に
相当するラベルを持つ。そして、ルートノードから葉ノ
ードまでの各枝が持つラベルを並べたものが、当該葉ノ
ードに対応する接尾辞となる。図6に示す例では、例え
ば、ルートノードから「i」「ssi」「ppi」のラ
ベルを持つ各枝を経て到達する葉ノードに対応する接尾
辞は「issippi」であり、同様に「s」「si」
「ssippi」のラベルを持つ各枝を経て到達する葉
ノードに対応する接尾辞は「ssissippi」であ
る。
【0004】また、接尾辞木における単一のノード(ル
ートノードを含む)から出てゆく各枝に付されているラ
ベルの最初の文字は全て異なり、これらはラベルの最初
の文字でソートされている。図6に示す例では、図の左
側から右側へ向けて英語のアルファベット順(i、m、
p、sの順)に枝が並んでいる。
【0005】接尾辞木を生成するアルゴリズムとして
は、処理対象である文字列の長さをn、文字列を構成す
るアルファベットのサイズ(文字の種類の数)をsとし
た場合、O(n log s)のアルゴリズムが知られてい
る。特にアルファベットが整数アルファベット(1から
nまでの数字)である場合は、O(n)のアルゴリズム
が知られている。ここで、O(func(n))は、実際の計
算時間がtである場合に、n≧kであるようなnに対し
て、 0≦t≦c×func(n) が成り立つような何らかの定数cとkの組が必ず存在す
ることを意味する。したがって、O(n log s)はn
log sの定数倍以内の時間で計算が可能であることを意
味し、O(n)はnの定数倍以内の時間(この場合、n
も定数なので、定数時間内)で計算できることを意味す
る。
【0006】これを用いれば、長さmの部分文字列の検
索は、O(m log s)に相当する時間で行うことがで
きる。通常、アルファベットのサイズは定数サイズなの
で、この時間は線形時間といって良い。英文字テキスト
(n文字)に対するこの接尾辞木を扱うために必要とす
る記憶装置の記憶容量は、20nバイト〜40nバイト
である。
【0007】この接尾辞木のデータサイズは大きいた
め、このデータサイズを抑制する類似のパターン検索用
のデータ構造として、接尾辞配列(suffix array)が知
られている。上述したように、接尾辞木の葉ノードは、
それぞれが文字列の接尾辞に対応している。この接尾辞
を、接尾辞木の一端側(図6の例では左端側)の葉ノー
ドに対応する接尾辞から順に並べると、処理対象の文字
列における全ての接尾辞を辞書的順序で並べた配列が得
られる。ただし、各接尾辞は、最後に終了判定文字$を
付加されているものとする。
【0008】この配列の構成要素である各接尾辞を、処
理対象の文字列における当該接尾辞の最初の文字の位置
を表す情報で置き換える(例えば、「ippi$」を
「8」に、「issippi$」を「5」にというよう
に置き換える)。これにより、処理対象の文字列と同じ
長さの配列(接尾辞配列)が得られる。例えば、図6に
おける「mississippi$」の接尾辞配列は、
「8 5 2 11 110 9 7 4 6 3 1
2」となる。なお、文字$は他の全ての文字よりも辞書
的順序が後であるとしている。
【0009】この接尾辞配列を用いると、接尾辞木を用
いる場合と比較して、文字列検索を行うために必要なメ
モリ容量を削減することができる。また、文字列の検索
に要する時間は、2分探索を行うことから、O(p log
q)となる。ただし、qはデータベースの大きさ、p
は検索しようとする文字列の長さである。通常、必要な
記憶容量は一つの文字に対し4バイトであるから、テキ
ストが英文字(1バイト)の場合、n文字のテキストに
対するこのデータベースのデータサイズは5nバイトで
ある。
【0010】また、データベースに、さらに隣接する接
尾辞の共通接頭辞長のテーブルを持たせることもでき
る。このテーブルを用いると、接尾辞木配列のみを用い
る場合に対して、検索時間をO(p+log q)と短縮す
ることができる。なお、この場合におけるデータベース
のデータサイズは9nバイトとなる。
【0011】
【発明が解決しようとする課題】大規模なテキストデー
タベースを検索するために、上述した接尾辞木や接尾辞
配列をデータ構造として用いる場合、次のような問題が
ある。まず、接尾辞木をデータ構造として用いる場合、
必要とされるデータベースの大きさが大きいという問題
がある。上述したように、処理対象である文字列の長さ
がnである場合、このテキストに対する接尾辞木を扱う
ために必要な記憶装置の記憶容量、すなわちデータベー
スのデータサイズは、20nバイト〜40nバイトであ
る。一般に、データ構造として接尾辞木を用いる場合、
記憶装置に対して、接尾辞配列を用いる場合の4〜6倍
の記憶領域(接尾辞配列では、1バイト文字で文字数n
のテキストの場合、5nバイト)を要する。このため、
大規模なテキストデータベースに対して接尾辞木を使用
することは困難である。
【0012】一方、接尾辞配列をデータ構造として用い
る場合、検索に長時間を要するという問題がある。接尾
辞配列に対して検索を行う場合、2分探索を行うため、
データベースの大きさをq、検索しようとする文字列の
長さをpとして、O(p log q)だけの時間を要す
る。したがって、アルファベットのサイズが定数サイズ
である場合にほぼ線形時間で探索を行うことができる接
尾辞木に比べて、多大な計算時間を要する。また上述し
たように、データサイズが多少大きくなることを許し、
データベースに、接尾辞配列中で隣接する接尾辞の共通
接頭辞長のテーブルを持たせることによって、計算時間
をO(p+log q)に短縮することができる。しかしこ
の場合であっても、依然としてlog qの項が残っている
ため、接尾辞木の場合と比べると、多大な計算時間を要
する。
【0013】そこで本発明は、大規模テキストデータベ
ースの検索において、処理を行うためのデータ構造にお
けるデータサイズの増大を抑えながら、高速な検索を実
現することを目的とする。
【0014】
【課題を解決するための手段】かかる目的のもと、本発
明は、検索対象である文字列中から所望のパターンを検
索するパターン検索方法において、次の範囲検索ステッ
プと、文字列抽出ステップとを含むことを特徴とする。
すなわち、範囲検索ステップにおいて、このパターンの
最後の文字から前方へ1文字ずつ順に加えて得られる各
中間パターンに関して、この中間パターンの先頭の文字
が検索対象の文字列に対する接尾辞配列のどの範囲に存
在するかを順次検索する。この検索をパターンの最後の
文字から順に実行することによって、最終的に、このパ
ターン自体を含む接尾辞配列の範囲が求められる。次
に、文字列抽出ステップにおいて、当該接尾辞配列の範
囲に含まれる各要素に対応する文字列の要素を特定し、
この文字列の各要素を先頭としてこのパターンの要素数
と同じ数の要素からなる部分文字列を抽出する文字列抽
出ステップとを含むことを特徴とする。上記のように構
成されたパターン検索は、アルファベットや日本語のテ
キストなど種々の文字による文字列における検索に用い
ることができるが、バイナリデータや遺伝子配列のよう
な使用される文字の種類が少ない文字列から所望のパタ
ーンを検索する場合には、検索に用いるデータ構造のデ
ータサイズを特に小さくすることができる。
【0015】ここで、この範囲検索ステップは、検索対
象の文字列に対する接尾辞配列の各要素に関して、この
各要素に対応する文字列中の各文字の一つ前に位置する
前置文字を特定するステップと、接尾辞配列中の所定の
要素以前の各要素における前置文字の中に含まれる、こ
のパターン中の所望の文字の個数を求めるステップと、
求められた文字の個数に基づいて、この文字が接尾辞配
列のどの位置に存在するかを検出するステップとを含む
ことを特徴とする。
【0016】また、本発明は、検索対象である配列中か
ら所望のパターンを検索するパターン検索方法におい
て、このパターンの最後の要素が前記配列中のどこに位
置するかを検索するステップと、このパターンが複数の
要素により構成されている場合に、このパターン中の最
後の要素に、この最後の要素の前に位置する要素を後ろ
から順に一つずつ加えて各中間パターンを得、この中間
パターンが配列中のどこに位置するかを順次検索するス
テップとを含むことを特徴とする。
【0017】また、本発明は、上記のように接尾辞配列
を用いるパターン検索だけではなく、接頭辞配列を用い
るパターン検索にも適用することができる。すなわち、
上述した範囲検索ステップにおいて、このパターンの最
初の文字から後方へ1文字ずつ順に加えて得られる各中
間パターンに関して、この中間パターンの最後の文字が
検索対象の文字列に対する接頭辞配列のどの範囲に存在
するかを順次検索する。この検索をパターンの最初の文
字から順に実行することによって、最終的に、このパタ
ーン自体を含む接頭辞配列の範囲が求められる。次に、
文字列抽出ステップにおいて、当該接頭辞配列の範囲に
含まれる各要素に対応する文字列の要素を特定し、この
文字列の各要素を最後尾としてこのパターンの要素数と
同じ数の要素からなる部分文字列を抽出する文字列抽出
ステップとを含む構成とすることができる。
【0018】また、本発明は、検索対象である文字列中
から所望のパターンを検索するパターン検索装置におい
て、この文字列の接尾辞配列に基づいてパターンを検索
するためのデータ構造を構築する前処理部と、この前処
理部により構築されたデータ構造を用いて所望のパター
ンを検索する検索部とを備え、この前処理部は、接尾辞
配列の各要素に関して、この各要素に対応する文字列中
の各文字の一つ前に位置する前置文字を特定し、接尾辞
配列中の所定の要素以前の各要素における前置文字の、
検索対象の文字列を構成する文字の種類ごとの個数を求
めることによりデータ構造を構築することを特徴とす
る。
【0019】ここで、前処理部は、前置文字の個数を、
接尾辞配列における要素の位置と、検索対象の文字列を
構成する文字の種類とに対応付けて格納したテーブルを
持つことができる。ここでさらに、このテーブルを、接
尾辞配列の所定数個おきの要素の位置に関するテーブル
とすることができる。すなわち、テーブルに格納するデ
ータを間引くことにより、当該データ構造のデータサイ
ズを縮小することができる。さらにこの場合、前処理部
は、間引いた範囲の前置文字の個数を算出する際に使用
するため、このテーブルにおいて情報が管理される接尾
辞配列の所定の位置に基づいて、この位置の間における
接尾辞配列の要素に対する前置文字に関する情報を格納
した他のテーブルをさらに持つことができる。
【0020】また、このパターン検索装置において、検
索部は、この接尾辞配列中の所定の要素以前の各要素に
おける前置文字の個数に基づいて、パターンの最後の文
字から前方へ1文字ずつ順に加えて得られる各中間パタ
ーンに関して、この中間パターンの先頭の文字が文字列
に対する接尾辞配列のどの範囲に存在するかを順次検索
する。この検索により、このパターン自体を含む接尾辞
配列の範囲が得られる。そして、この範囲に含まれる各
要素に対応する文字列の要素を特定し、この文字列の各
要素を先頭としてパターンの要素数と同じ数の要素から
なる部分文字列を抽出する。
【0021】また、本発明は、コンピュータに、検索対
象である配列中から所望のパターンを検索する処理を実
行させるコンピュータプログラムにおいて、このパター
ンの最後の要素から前方へ一つずつ順に加えて得られる
各中間パターンに関して、この中間パターンの先頭の要
素が検索対象である配列に対する接尾辞配列のどの範囲
に存在するかを順次検索する処理と、この検索によりこ
のパターン自体に関して得られた接尾辞配列の範囲に含
まれる各要素に対応する配列の要素を特定し、この配列
の各要素を先頭としてこのパターンの要素数と同じ数の
要素からなる部分配列を抽出する処理とをコンピュータ
に実行させることを特徴とする。
【0022】さらにまた、本発明は、コンピュータに、
検索対象である配列中から所望のパターンを検索する処
理を実行させるコンピュータプログラムにおいて、検索
対象である配列に対する接尾辞配列の各要素に関して、
この各要素に対応する配列中の各文字の一つ前に位置す
る要素を特定する処理と、この接尾辞配列中の所定の要
素以前の各要素における前置要素の、配列を構成する要
素の種類ごとの個数を求める処理と、この接尾辞配列中
の所定の要素以前の各要素における前置要素の個数に基
づいて、このパターンの最後の要素から前方へ1文字ず
つ順に加えて得られる各中間パターンに関して、この中
間パターンの先頭の要素がこの配列に対する接尾辞配列
のどの範囲に存在するかを順次検索する処理と、この検
索によりこのパターン自体に関して得られた接尾辞配列
の範囲に含まれる各要素に対応する配列の要素を特定
し、この配列の各要素を先頭としてこのパターンの要素
数と同じ数の要素からなる部分配列を抽出する処理とを
コンピュータに実行させることを特徴とする。これらの
コンピュータプログラムは、例えば磁気ディスクその他
の記憶媒体に格納して提供することができる。また、イ
ンターネットなどのネットワークを介して伝送させるこ
とにより提供することもできる。
【0023】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいてこの発明を詳細に説明する。図1は、本実施
の形態を実現するのに好適なコンピュータ装置のハード
ウェア構成の例を模式的に示した図である。図1に示す
コンピュータ装置は、CPU(中央処理装置)101
と、システムバスを介してCPU101に接続されたM
/B(マザーボード)チップセット102及びメインメ
モリ103と、PCIバスなどの高速なバスを介してM
/Bチップセット102に接続されたビデオカード10
4、ハードディスク105及びネットワークインタフェ
ース106と、さらにブリッジ回路110及びISAバ
スなどの低速なバスを介してM/Bチップセット102
に接続されたフロッピー(登録商標)ディスクドライブ
107、キーボード108及びシリアルI/Oポート1
09とを備える。なお、図1は本実施の形態による検索
方法を実現するコンピュータ装置の構成を例示するに過
ぎず、本実施の形態を適用可能であれば、他の種々のシ
ステム構成を取ることが可能である。
【0024】本実施の形態は、図1に示したメインメモ
リ103に展開されたプログラムにてCPU101を制
御することにより、所定の文字列(文字を要素とする配
列)中から所望の部分文字列を検索する(以下、検索対
象の文字列をテキスト、検索する部分文字列をパターン
と称す)。図2は、プログラム制御されたCPU101
において、本実施の形態におけるデータ構造の構築及び
検索を行うための機能ブロックを示す図である。図2を
参照すると、本実施の形態は、テキストの接尾辞配列を
生成する接尾辞配列生成部10と、接尾辞配列生成部1
0にて生成された接尾辞配列を変換して所望のデータ構
造を構築する前処理部20と、前処理部20にて構築さ
れたデータ構造を用いてパターンの検索を行う検索部3
0とを備える。
【0025】上述したように、これらの構成要素は、プ
ログラム制御されたCPU101により実現される仮想
的なソフトウェアブロックである。当該プログラムは、
磁気ディスクや光ディスク、半導体メモリ、その他の記
憶媒体に格納して提供したり、ネットワークを介して伝
送したりすることができる。本実施の形態は、図1に示
したネットワークインタフェース106やフロッピーデ
ィスクドライブ107、図示しないCD−ROMドライ
ブなどを介して当該プログラムを入力し、ハードディス
ク105に格納する。そして、ハードディスク105に
格納されたプログラムをメインメモリ103に読み込ん
で展開し、CPU101にて実行する。
【0026】図2において、接尾辞配列生成部10は、
図示しないデータベースから検索対象であるテキストを
取得し、接尾辞配列を生成する。接尾辞配列の生成方法
としては、公知の任意のアルゴリズムを用いることがで
きる。検索対象であるテキストや生成された接尾辞配列
は、メインメモリ103に格納される。なお、接尾辞配
列は、公知の種々の方法により生成することが可能であ
り、外部装置において生成された接尾辞配列を本実施の
形態において使用することもできる。したがって、接尾
辞配列生成部10は必須の構成要素ではない。接尾辞配
列生成部10を構成要素として設けない場合は、検索対
象となるテキストと当該テキストの接尾辞配列とがメイ
ンメモリ103に直接格納されることとなる。
【0027】以下の説明において、検索対象となるテキ
ストをT[1・・・n]、検索するパターンをP[1・
・・m]とする。また、テキストTに対する接尾辞配列
をSA[1・・・n]とする。なお、以下の説明では、
テキストTやパターンPの文字列はダブルクオーテーシ
ョンマーク(“ ”)で囲み、その中の文字はクオーテ
ーションマーク(‘ ’)で囲んで示すこととする。例
えば、「mississippi」の最後に文字$を加
えたテキストTは、 T[1・・・12]=“mississippi$” となる。ここで、‘$’は、終了判定文字であり、辞書
的順序が他の全ての文字よりも大きい(すなわち後に位
置する)ものとする。また、テキストT[1・・・1
2]から3文字のパターン「ssi」を検索する場合、
検索パターンPは、 P[1・・・3]=“ssi” となる。さらにここで、テキストTに対し、T[5]=
‘i’(5番目の文字)のように表すと、テキストTに
対する接尾辞配列SAは、 SA[1・・・12]={8 5 2 11 1 10
9 7 4 6 3 12} となる。なお、終了判定文字‘$’は、概念上のものと
して扱い、実際の処理においてはメインメモリ103に
格納しなくても良い。この場合、T[i]にアクセスす
る際、i=12ならば‘$’である、という分岐条件を
入れることとなる。例えば、テキストTの文字数が25
6個あり、‘$’も1文字として扱うと1バイトに収ま
らなくなってしまうような場合は、メインメモリ103
に格納しない方が望ましい。
【0028】前処理部20は、接尾辞配列生成部10に
より生成された接尾辞配列SAを読込み、これに基づい
て、検索対象である文字列からf(i,c)(iはn以
下の正の整数、cは文字)で定義されるデータを検出す
るためのデータ構造を構築する。ここで、f(i,c)
は、T[SA[j]−1]=c(j≦i)であるような
jの数である。配列Bを考え、B[i]=T[SA
[i]−1]とする。すなわち、配列Bは、接尾辞配列
SAの各要素に対応するテキストTの各文字の一つ前に
位置する文字(前置文字)の配列である。例えば、B
[4]=T[SA[4]−1]=T[10]=‘i’と
なる。同様にして配列Bの全ての文字を書き出すと次の
ようになる。 B[1・・・12]=“ssmp$pissiii” したがって、上記のf(i,c)の値は、配列Bにおい
て、インデックスがi以下での文字cの個数で表現する
ことができる。例えば、f(6,‘s’)=2であり、
f(6,‘p’)=2であり、f(6,‘m’)=1で
ある。なお、i>nであるようなiに対しては、f
(i,c)=f(n,c)と定義する。また、i≦0で
あるようなiに対しては、f(i,c)=0と定義す
る。
【0029】f(i,c)のデータ全体をテーブルとし
て保持すれば、パラメータであるi、cを与えれば直ち
に対応するf(i,c)を求めることができる。しか
し、テキストTを構成する文字の種類(s)が極めて少
ない場合、例えばバイナリデータの文字列(2種類:
0、1)やDNA配列(4種類:アデニン(A)、チミ
ン(T)、グアニン(G)、シトシン(C))では可能
であるが、文字の種類(s)が多い場合は、当該テーブ
ルは極めて大きな配列となるため、現実的ではない。そ
こで、前処理部20は、以下のようにしてf(i,c)
を算出するためのデータ構造を構築する。
【0030】(1)テーブルFの作成 kを適当な大きさのn以下の正の整数であるとする。ま
ず、すべての正の整数i(k*i<n+k)に対して、
f(k*i,c)のテーブルを作成する。これは、テキ
ストTをk個の文字ごとに区切り、k番目の文字ごとに
f(i,c)を求めてテーブルを作成することに相当す
る。f()の大きさはn以下であるから、このサイズは
(n*s log n)/kビットである。これは、nが1ワ
ードに入る通常のケースではO(n*s/k)ワード
(すなわち、n*s/kの定数倍以内)のことである。
このテーブルをFとし、 F[i][c]=f(k*i,c) とする。なお、このテーブルFは、テーブルの大きさと
テキストの大きさのうち大きい方に比例した時間で構築
することができる。
【0031】このテーブルFを持つことにより、kの倍
数のインデックスに関しては、fをO(1)の時間で求
めることができる。そこで次に、kの倍数以外のインデ
ックスに関してfの値を求めるためのデータ構造を考え
る。そのため、g(i,c,j)を、T[SA[p]−
1]=cを満たすp(ただし、k*(i−1)<p≦k
*i)のうち、j番目のものとし、まず、このg(i,
c,j)を求めるためのデータ構造について述べる。
【0032】(2)テーブルLの作成 h(i,c)を、f(k*i,c)−f(k*(i−
1),c)とする。これはテーブルFから直ちに計算可
能である。l(i,c)を、h(i,d)(d<c,辞
書順)の総和として、これをテーブルとして持つ。この
テーブルをLとし、 L[i][c]=l(i,c) とする。このテーブルLのサイズは(n*s log k))/
kビットである。
【0033】(3)テーブルGの作成 次に、全てのr(0<k*r<n+k)に対して、0<
q≦kを満たす整数qを、T[SA[q+k*(r−
1)]−1]の値が同じ物ごとに辞書的順序にしたがっ
て並べ替えたものをテーブルG[r][1・・・k]と
する。このとき、T[SA[q+k*(r−1)]−
1]の値における辞書的順序が同じものに関してはqの
値が小さいものが先になるように並べる。ただし、
【数1】 の場合、0<q≦n−(r−1)kのようなqだけを並
べる。これは、数1を満足するrの範囲に含まれる文字
の数がk個に満たない場合があるためである。すなわ
ち、上述したようにテーブルFの作成において、テキス
トTをk個の文字ごとに区切ったが、テキストTの文字
数nがkで割り切れない場合は、最後尾の区分における
文字数はk個に満たない。したがって、0<q≦n−
(r−1)kのようなqを並べることとする。テーブル
Gの配列のサイズは全体でnであり、ビットで表すとn
log kビットということになる。これは、例えば次の
ようにして求めることができる。 ただし、rの値が上記数1を満足する場合、forループ
は(q=1;q≦n−(r−l)k;q++)となる。
【0034】(4)f(i,c)の計算 上記のようにして作成されたテーブルG及びテーブルL
を用いて、g(i,c,j)を示すと、 g(i,c,j)=G[i][L[i][c]+j]+
k*(i−1) である。したがって、g(i,c,j)はG、Lの二つ
テーブルからO(1)時間で得ることができる。次に、
k*(j−1)<j≦k*iであるようなjに対し、T
[SA[p]−1]=c(ただしk*(i−1)<p≦
j)となるようなpの数をf’(j,c)とする。そし
て、x(0<x≦h(i,c))の区間で、g(i,
c,x)の値がj以下となるような最大のxを見つけ出
すと、 f’(j,c)=x となる。このxの値は、g(i,c,x)の値が昇順に
なっているため、2分探索によりO( log h(i,
c))で計算可能である。h(i,c)<kであるか
ら、これは、O( log k)ということである(h
(i,c)の平均値はk/sであるため、実際にはより
短い時間で計算できる)。ただし、このようなxが存在
しない場合は、f’(j,c)=0とする。以上の前提
で、f(j,c)は、 f(j,c)=F[i−1][c]+f’(j,c) と計算できる。したがって、f(j,c)は、以上のデ
ータ構造を用いることにより、O( log k)で計算す
ることができる。
【0035】上述したテーブルF、L、Gを表すのに必
要なビット数は、テーブルFが(n*s log n)/kビ
ット、テーブルLが(n*s log k))/kビット、テー
ブルGがn log kビットであるから、全体で (n*s/k)*(log n+log k)+n log kビッ
ト である。これらのテーブルF、L、Gは、メインメモリ
103に格納される。実際の運用においては、メインメ
モリ103の記憶容量として、これに加えて接尾辞配列
SAのためのn log nビット及びテキストT自身のた
めのn log sビットが必要になる。
【0036】また、前処理部20は、テキストTに関し
て、これらのデータ構造に加えて次に示すテーブルCも
持つこととする。このテーブルの要素C[c]は、テキ
ストTに含まれるc以下の文字の総数を表す。ただし、
c以下の文字とは、cあるいはcより辞書的順序で早い
文字を意味する。テーブルCも他のデータ構造と同様
に、メインメモリ103に格納される。このテーブルC
のサイズはs log nビットである。また、テーブルC
はテキストTに対し、線形時間で計算可能である。な
お、kの値を小さく設定した場合には、j=i*k+d
(d<k)に対して、f(i*k,c)を求める際、テ
ーブルL、Gは持たずに、テーブルFから求められるf
(i*k,c)の値と、i*k+lとに基づいて、T
[SA[j]−1]の値がcであるものの個数を数える
という方法も考えられる。この場合の計算時間はO
(k)であるので、kとlog kの値が近いような小さな
kに対しては有効である。この方法を用いる場合は、テ
ーブルL、Gを持たない分、必要なメモリの記憶容量は
減少する。
【0037】検索部30は、前処理部20にて作成され
た上記のデータ構造を用いて、テキストTから所望のパ
ターンPを検索する。検索は、f(i,c)を用い、次
のように行う。 ただし、文字cに対し、c+1とは、辞書的順序で文字
cの次に来る文字を表し、c−1は辞書的順序で文字c
の前に来る文字を表すものとする。ただし、辞書的順序
で最小のアルファベットaに対しては、c[a−1]は
0を表すものとする。
【0038】図3は、上記の検索アルゴリズムに対応す
るフローチャートである。同図を参照して、本実施の形
態によるパターンの検索手順を説明する。この検索方法
は、パターンを当該パターンの構成文字列の後ろから検
索することが特徴である。図3に示す検索アルゴリズム
により、求めるパターンは、テキストTの接尾辞配列S
Aにおいて、SA[j](start≦j≦end)の
位置から始まる場所に存在するので、それを列挙すれば
よい。
【0039】図3を参照すると、検索部30は、まず、
startにC[P[m]−1]+1を代入し、end
にC[P[m]]を代入し、startとendの値を
求める。また、i=m−1とする(ステップ301)。
次に、iの値が正(i>0)かどうかを調べ、正であれ
ば、次に、c=P[i]として、startにC[c−
1]+f(start,c)を代入し、endにC[c
−1]+f(end,c)を代入し、startとen
dの値を求める。また、i=i−1とする(ステップ3
02、303)。次に、endの値がstartの値を
下回ったかどうかを調べ、下回ったならば、検索パター
ンPにマッチする文字列はテキストTには存在しないこ
とがわかるので、処理を終了する(ステップ304、3
05)。一方、endの値がstartの値を下回って
いなければ、ステップ302に戻って、新たなiに関し
てstart及びendの値を求める(ステップ30
4)。ステップ302において、iの値が0以下になっ
たならば、start及びendの値を用い、star
t≦j≦endであるような全てのjに対して、SA
[j]の位置から始まるテキストTの接尾辞を出力して
処理を終了する(ステップ306)。このとき、当該接
尾辞と検索パターンPとがマッチする。
【0040】次に、 T[1・・・12]=“mississippi$” P[1・・・3]=“ssi” SA[1・・・12] ={8 5 2 11 1 10 9 7 4 6 3
12} の場合について、前処理部20によるデータ構造の構築
及び検索部30によるパターンPの検索の動作例を説明
する。本動作例では、テキストTを区切る基準としてk
=4とする。
【0041】まず、k=4の場合のテーブルFを作成す
る。上述したように、F[i][c]にはf(k*i,
c)が入る。そして、k*i<n+kであり、n=12
であるから、k=4の場合、iの値は1、2、3であ
る。したがって、テーブルFには、i=1、2、3及び
c=‘i’、‘m’、‘p’、‘s’、‘$’の各々に
ついて、f(4*i,c)の値が入り、図4に示すよう
になる。例えば、F[2][‘p’]の場合、f(4*
2,‘p’)であるから、配列B[1・・・12]=
“ssmp$pissiii”において8(=4*2)
番目の文字である‘s’以前に‘p’は2個存在する。
したがって、テーブルFのF[2][‘p’]には2が
入る。なお、図4のテーブルFでは、‘$’に対するエ
ントリーも入れているが、実際には、検索パターンの中
に‘$’が入ることは考えなくて良いので、‘$’に対
する列は省略することができる。
【0042】次に、テーブルLを作成する。上述したよ
うに、h(i,c)をf(4*i,c)−f(4*(i
−1),c)とし、l(i,c)を、h(i,d)(d
<c,辞書順)の総和とすると、文字cの順序は‘i’
<‘m’<‘p’<‘s’<‘$’であるから、テーブ
ルLは、図5に示すようになる。例えば、L[2]
[‘s’]は、h(2,‘i’)とh(2,‘m’)と
h(2,‘p’)との総和であり、図4のテーブルFを
参照すれば、 h(2,‘i’)=f(4*2,‘i’)−f(4*(2−1),‘i’) =f(8,‘i’)−f(4,‘i’)=1−0=1 すなわち、配列B[5・・・8]において、‘i’が一
つ存在することがわかる。同様に、 h(2,‘m’)=f(8,‘m’)−f(4,
‘m’)=1−1=0 h(2,‘p’)=f(8,‘p’)−f(4,
‘p’)=2−1=1 したがって、テーブルLのL[2][‘s’]には2
(=1+0+1)が入る。
【0043】ところで、図4及び図5を参照すると、テ
ーブルLにおいて、 L[i][c+1]=L[i][c]+F[i][c]
−F[i−1][c] という関係がある。ただし、c+1は辞書的順序で文字
cの次にくる文字である。また、F[0][c]=0と
している。例えば、上述したL[2][‘s’]の場
合、 L[2][‘s’] =L[2][‘p’]+F[2][‘p’]−F[1][‘p’] =1+2−1=2 となる。このことから、x個おきの文字に対してのみテ
ーブルLを作成し、間の文字に対する値はテーブルL及
びテーブルFから算出することにより、メモリを節約す
ることができる。ただし、この場合、この部分の計算時
間はx倍となる。なお、図4の場合と同様に、テーブル
Lにおいても‘$’の列は省略することができる。
【0044】次に、テーブルGを作成する。上述したよ
うに、全てのr(0<4*r<n+4)に対して、T
[SA[q+4*(r−1)]−1](ただし、0<q
≦4)の値が同じ物ごとに辞書的順序にしたがって並べ
替えたものがテーブルG[r][1・・・4]である
(ただし、rの値が上述した数1を満足する値である場
合は0<q≦n−(r−1)*4)。ここで、[SA
[q+4*(r−1)]−1]は、配列Bにおいて、B
[1・・・4]、B[5・・・8]、B[9・・・1
2]に対応する。したがって、例えばG[1][1・・
・4]は、B[1・・・4]=“ssmp”であるから
対応するq=1、2、3、4を‘s’‘s’‘m’
‘p’の辞書的順序で並べ替えれば、 G[1][1・・・4]={3,4,1,2} となる(q=1の‘s’とq=2の‘s’については、
qの小さい方を先にしている)。同様に、r=2、3に
ついても考え、結果として、 G[1・・・3][1・・・4]={3,4,1,
2}、{3,2,4,1}、{2,3,4,1} を得る。
【0045】次に、以上のテーブルF、L、Gを用いて
計算されるg(i,c,j)、f’(j,c)及びf
(j,c)について、具体的な算出例を挙げる。まず、
g(3,‘r’,2)について、 g(3,‘r’,2)=G[3][L[3][‘i’]+2]+4*(3−1) =G[3][0+2]+8=11 となる。また、f’(10,‘i’)を求めるには、g
(3,‘i’,x)(0<x≦3)の中から10以下の
値を取る最大のxを求めれば良い。上記と同様にg
(3,‘r’,1)、g(3,‘r’,3)を求める
と、 g(3,‘r’,1)=10 g(3,‘r’,3)=12 であるから、f’(10,‘i’)=x=1が得られ
る。さらに、f(10,‘i’)の値は、 f(10,‘i’)=F[2][‘i’]+f’(1
0,‘i’)=1+1=0 と求まる。
【0046】次に、上記のデータ構造を用いて、 P[1・・・3]=“ssi” の検索を行う。図3のフローチャートに示したアルゴリ
ズムにおいて、まず、startに C[P[3]−1]+1=C[i−1]+1=0+1=
1 が代入され、endに C[P[3]]=C[i]=4 が代入される(ステップ301参照)。これは、検索の
ための中間パターンであるP[3]=“i”が、テキス
トTに対する接尾辞配列SAのどの範囲に位置している
かを示す。すなわち、SA[1・・・4]={8 5
2 11}に対応するテキストTの要素(テキストTの
8番目と5番目と2番目と11番目の要素)が中間パタ
ーン“i”と一致する。
【0047】次に、i=2(=3−1)>0であるので
(ステップ301参照)、cにP[i]が代入される
(ステップ302、303参照)。そして、start
及びendに代入される値を計算する。すなわち、 start =C[P[2]−1]+f(start,P[2]) =C[‘s’−1]+f(1,‘s’)=C[‘p’]
+f(1,‘s’) ここで、f(1,‘s’)は、k*i=1なのでテーブ
ルFから直接は求められず、 C[‘p’]+f(1,‘s’) =7+F[1−1][‘s’]+f’(1,‘s’) ここで、F[0][c]=0であり、f’(1,
‘s’)は、g(1,‘s’,x)でx=1の時に g(1,‘s’,1) =G[1][L[1][‘s’]+1]+4*(1−1)=G[1][2+1] =1 となるので、f’(1,‘s’)=1である。したがっ
て、 C[‘p’]+f(1,‘s’)=7+0+1=8 となり、startには8が代入される。また、 end =C[P[2]−1]+f(end,P[2]) =C[‘p’]+f(4,‘s’) ここで、f(4,‘s’)は、k*i=4*1なので、
テーブルFから直接求められ、F[1][‘s’]=2
であるから、 C[‘p’]+f(4,‘s’)=7+2=9 となり、endには9が代入される。これは、検索のた
めの中間パターンであるP[2 3]=“si”が、テ
キストTに対する接尾辞配列SAのどの範囲に位置して
いるかを示す。すなわち、SA[8]={7}とSA
[9]={4}とに対応するテキストTの要素(テキス
トTの7番目と4番目の要素)から始まる要素数2のパ
ターンが中間パターン“si”と一致する。
【0048】次に、end(=9)>start(=
8)であるからステップ302に戻り(ステップ304
参照)、i=1(=2−1)>0であるので再度ステッ
プ303に進み、cにP[i]が代入される(ステップ
302参照)。そして、start及びendに代入さ
れる値を計算する。すなわち、 start =C[P[1]−1]+f(start,P[1]) =C[‘s’−1]+f(8,‘s’)=C[‘p’]
+f(8,‘s’) ここで、f(8,‘s’)は、k*i=4*2なので、
テーブルFから直接求められ、F[2][‘s’]=3
であるから、 C[‘p’]+f(8,‘s’)=7+3=10 となり、startには10が代入される。また、 end =C[P[1]−1]+f(end,P[1]) =C[‘p’]+f(9,‘s’) ここで、f(9,‘s’)は、k*i=11なのでテー
ブルFから直接は求められず、4*(i−1)<9<=
4*iからi=3であるから、 C[‘p’]+f(9,‘s’) =7+F[3−1][‘s’]+f’(9,‘s’) ここで、F[2][‘s’]はテーブルFから3、f’
(9,‘s’)は、g(3,‘s’,x)でx=1の時
に g(3,‘s’,1) =G[3][L[3][‘s’]+1]+4*(3−1) =G[3][3+1]+8=9 で、解はこれだけなので、f’(9,‘s’)=x=1
である。したがって、 C[‘p’]+f(9,‘s’)=7+3+1=11 となり、endには11が代入される。
【0049】次に、end(=11)>start(=
10)であるからステップ302に戻り(ステップ30
4参照)、i=0(=1−1)となったので(ステップ
302参照)、start≦j≦endであるような全
てのjに対して、SA[j]の位置から始まるテキスト
Tの接尾辞を求める(ステップ306参照)。ここで
は、start=10、end=11であるから、SA
[10]=6、SA[11]=3であり、T[3・・・
5]=T[6・・・8]=“ssi”となっており、パ
ターンPと一致している。
【0050】上記の動作例では、k=4である場合につ
いて説明したが、kの値は、検索対象であるテキストT
の文字数(n)、検索パターンPの文字数(m)、テキ
ストTを構成するアルファベットにおける文字の種類の
数(s)などに応じて適宜に設定することができる。こ
の場合、kの値に応じて、上述した前処理及び検索処理
に必要なメインメモリ103の記憶容量とこれらの処理
に要する時間とが変化する。大まかにはk=O(s)、
すなわちsの定数倍とすると、メインメモリ103に必
要な記憶容量はO(n log n)ビット、検索時間はO
(m log s)となり、従来の接尾辞木を用いる検索方
法における理論値と同じである。例えばk=sのとき、
3n log s+2n log nビットが必要となる。ただ
し、この場合が最小であるわけではない。実際には、メ
インメモリ103の記憶容量は、8ビット、16ビッ
ト、32ビットの倍数(場合によっては約数)であるこ
とがほとんどなので、このことを考慮してkを設定する
ことが好ましい。
【0051】次に、具体的なテキストTに対して本実施
の形態を適用した場合におけるメインメモリ103に必
要な記憶容量(データサイズ)と検索時間とを例示す
る。 〔適用例1〕文字が1バイトで表され、256種類であ
る場合(終了判定文字$も同時に表したい場合は255
種類)。通常の英文テキストなどがこれに該当する。こ
の場合、テキストTの文字数をnとすれば、テキストT
のサイズはnバイト、接尾辞配列SAのサイズは4nバ
イトである。例えば、k=65536(=216)とする
と、k以下の数字は2バイトで表すことができる。これ
により、上述したテーブルF、L、G、Cの合計サイズ
は、2nバイト強となる。したがって、テキストT及び
接尾辞配列SA、テキストTを含んだデータサイズでも
7nバイト強である。これは当該テキストTに対する接
尾辞木のサイズ(20n〜40nバイト程度)の3分の
1程度である。一方、検索速度は、log kに比例するの
で、kを小さくすると速度を上げることが可能である。
例えば、k=256(=28)とすると、k=6553
6の場合に対して2倍の検索速度を見込める。この場
合、テーブルF、L、G、Cを持つために必要なメイン
メモリ103の記憶容量は6nバイトである。すなわ
ち、テキストT及び接尾辞配列SAを加えた総量でも1
1nバイトのデータサイズとなり、やはり接尾辞木より
も小さい。
【0052】〔適用例2〕文字が2バイトで表され、6
5536(=216)種類ある場合。日本語のテキストな
どがこれに該当する。この場合、k=65536とする
と、テーブルF、L、G、Cの合計サイズは、8nバイ
トであり、テキストT及び接尾辞配列SAを加えた総量
でも14nバイトである。なお、この例の場合、k=2
56などの小さい値とするのは、データサイズが大きく
なってしまうので現実的ではない。
【0053】〔適用例3〕DNAの配列(文字の種類数
は4)の場合。2bitの文字、4bitの文字を扱う
ことを許すならば、k=4の場合、テーブルF、L、
G、CとテキストT及び接尾辞配列SAとを加えた総デ
ータサイズは8.75nバイト程度となる。また、k=
16の場合、総データサイズは5.375nバイト程度
となる。特に後者の場合、接尾辞配列SAそのものとほ
とんど変わらないデータサイズとなっている。
【0054】次に、実際のDNA配列に対する検索速度
の測定例を示す。この測定例では、本実施の形態による
検索方法と、接尾辞配列SAを2分探索する従来の検索
方法とを用いて、大腸菌の全配列に対し、同じクエリー
を10000000回繰り返した場合の計算時間を比較
している。なお、計算機は、CPUが333MHzPo
wer PCのRS6000(米国IBM社のワークス
テーション)である。 検索パターンP=“CACATAA” 本実施の形態による検索時間 :0.38秒 従来の2分探索による検索時間:4.30秒 検索パターンP=“AGAGCGGC” 本実施の形態による検索時間 :0.47秒 従来の2分探索による検索時間:4.02秒 検索パターンP=“CCCGCTTCGGC” 本実施の形態による検索時間 :0.76秒 従来の2分探索による検索時間:3.35秒 検索パターンP=“ACCGCGAAATACCGGC
GCGGAAATCAT CGACTTACGCATAGGCGC” 本実施の形態による検索時間 :3.13秒 従来の2分探索による検索時間:3.88秒 検索パターンP=“CGGCGTCAGGTACTGA
CCGCGACCAATGCGA” 本実施の形態による検索時間 :0.84秒 従来の2分探索による検索時間:3.41秒 以上のように、全ての例において、本実施の形態の方が
2分探索よりも計算時間が短縮(高速化)されている。
最も高速化されている例(検索パターンP=“AGAG
CGGC”)では10倍以上高速になっている。また、
短い配列のクエリーほど高速化の効果があることがわか
る。
【0055】なお、本実施の形態では、テキストTの接
尾辞配列SAを探索して所望のパターンPを検索する場
合について説明したが、テキストTの接頭辞配列を探索
してパターンPを検索することも可能である。ここで、
接頭辞とは、所定の文字列において、所定の文字を特定
した場合の当該文字以前の文字列である。この接頭辞に
対して、接尾辞に対する接尾辞木と同様の接頭辞木を生
成することができる。また、接頭辞配列とは、テキスト
Tにおける全ての接頭辞を後から順に並べた文字列を、
辞書的順序で並べ替えた場合のインデックスの配列であ
る。すなわち、文字列の先頭方向と末尾方向(左右)を
逆にしたテキストTに対する接尾辞配列と本質的に同じ
である。したがって、方向を考慮することにより、上述
した手法をそのまま接頭辞配列に対しても用いることが
できる。
【0056】
【発明の効果】以上説明したように、本発明によれば、
大規模テキストデータベースの検索において、処理を行
うためのデータ構造におけるデータサイズの増大を抑え
ながら、高速な検索を実現することができる。
【図面の簡単な説明】
【図1】 本実施の形態を実現するのに好適なコンピュ
ータ装置のハードウェア構成の例を模式的に示した図で
ある。
【図2】 本実施の形態におけるデータ構造の構築及び
検索を行うための機能ブロックを示す図である。
【図3】 本実施の形態におけるパターンの検索アルゴ
リズムを説明するフローチャートである。
【図4】 本実施の形態において用いられるテーブルF
の構成例を示す図である。
【図5】 本実施の形態において用いられるテーブルL
の構成例を示す図である。
【図6】 接尾辞木の例を示す図である。
【符号の説明】
10…接尾辞配列生成部、20…前処理部、30…検索
部、101…CPU(中央処理装置)、102…M/B
(マザーボード)チップセット、103…メインメモ
リ、104…ビデオカード、105…ハードディスク、
106…ネットワークインタフェース、107…フロッ
ピーディスクドライブ、108…キーボード、109…
シリアルI/Oポート、110…ブリッジ回路
───────────────────────────────────────────────────── フロントページの続き (72)発明者 渋谷 哲朗 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B075 ND03 QM06 QS01

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】 検索対象である文字列中から所望のパタ
    ーンを検索するパターン検索方法において、 前記パターンの最後の文字から前方へ1文字ずつ順に加
    えて得られる各中間パターンに関して、当該中間パター
    ンの先頭の文字が前記文字列に対する接尾辞配列のどの
    範囲に存在するかを順次検索する範囲検索ステップと、 前記検索により前記パターン自体に関して得られた前記
    接尾辞配列の前記範囲に含まれる各要素に対応する前記
    文字列の要素を特定し、当該文字列の各要素を先頭とし
    て前記パターンの要素数と同じ数の要素からなる部分文
    字列を抽出する文字列抽出ステップとを含むことを特徴
    とするパターン検索方法。
  2. 【請求項2】 前記範囲検索ステップは、 前記文字列に対する接尾辞配列の各要素に関して、当該
    各要素に対応する前記文字列中の各文字の一つ前に位置
    する前置文字を特定するステップと、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置文字の中に含まれる、前記パターン中の所望の文
    字の個数を求めるステップと、 求められた前記文字の個数に基づいて、当該文字が前記
    接尾辞配列のどの位置に存在するかを検出するステップ
    とを含むことを特徴とする請求項1に記載のパターン検
    索方法。
  3. 【請求項3】 検索対象である配列中から所望のパター
    ンを検索するパターン検索方法において、 前記パターンの最後の要素が前記配列中のどこに位置す
    るかを検索するステップと、 前記パターンが複数の要素により構成されている場合
    に、当該パターン中の前記最後の要素に当該最後の要素
    の前に位置する要素を後ろから順に一つずつ加えて得ら
    れる各中間パターンに関して、当該中間パターンが前記
    配列中のどこに位置するかを順次検索するステップとを
    含むことを特徴とするパターン検索方法。
  4. 【請求項4】 検索対象である文字列中から所望のパタ
    ーンを検索するパターン検索方法において、 前記パターンの最初の文字から後方へ1文字ずつ順に加
    えて得られる各中間パターンに関して、当該中間パター
    ンの最後の文字が前記文字列に対する接頭辞配列のどの
    範囲に存在するかを順次検索する範囲検索ステップと、 前記検索により前記パターン自体に関して得られた前記
    接頭辞配列の前記範囲に含まれる各要素に対応する前記
    文字列の要素を特定し、当該文字列の各要素を最後尾と
    して前記パターンの要素数と同じ数の要素からなる部分
    文字列を抽出する文字列抽出ステップとを含むことを特
    徴とするパターン検索方法。
  5. 【請求項5】 検索対象である遺伝子配列中から所望の
    パターンを検索するパターン検索方法において、 前記パターンの最後の要素から前方へ一つずつ順に加え
    て得られる各中間パターンに関して、当該中間パターン
    の先頭の要素が前記遺伝子配列に対する接尾辞配列のど
    の範囲に存在するかを順次検索する範囲検索ステップ
    と、 前記検索により前記パターン自体に関して得られた前記
    接尾辞配列の前記範囲に含まれる各要素に対応する前記
    遺伝子配列の要素を特定し、当該遺伝子配列の各要素を
    先頭として前記パターンの要素数と同じ数の要素からな
    る部分配列を抽出する配列抽出ステップとを含むことを
    特徴とするパターン検索方法。
  6. 【請求項6】 検索対象である文字列中から所望のパタ
    ーンを検索するパターン検索装置において、 前記文字列の接尾辞配列に基づいて前記パターンを検索
    するためのデータ構造を構築する前処理部と、 前記前処理部により構築されたデータ構造を用いて所望
    の前記パターンを検索する検索部とを備え、 前記前処理部は、 前記接尾辞配列の各要素に関して、当該各要素に対応す
    る前記文字列中の各文字の一つ前に位置する前置文字を
    特定し、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置文字の、前記文字列を構成する文字の種類ごとの
    個数を求めることにより前記データ構造を構築すること
    を特徴とするパターン検索装置。
  7. 【請求項7】 前記前処理部は、前記前置文字の個数
    を、前記接尾辞配列における要素の位置と、前記文字列
    を構成する文字の種類とに対応付けて格納したテーブル
    を持つことを特徴とする請求項6に記載のパターン検索
    装置。
  8. 【請求項8】 前記前処理部は、前記接尾辞配列の所定
    数個おきの要素の位置に関して生成された前記テーブル
    を持つことを特徴とする請求項7に記載のパターン検索
    装置。
  9. 【請求項9】 前記前処理部は、前記テーブルにおいて
    情報が管理される前記接尾辞配列の所定の位置に基づい
    て、当該位置の間における前記接尾辞配列の要素に対す
    る前記前置文字に関する情報を格納した他のテーブルを
    さらに持つことを特徴とする請求項8に記載のパターン
    検索装置。
  10. 【請求項10】 前記検索部は、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置文字の個数に基づいて、前記パターンの最後の文
    字から前方へ1文字ずつ順に加えて得られる各中間パタ
    ーンに関して、当該中間パターンの先頭の文字が前記文
    字列に対する接尾辞配列のどの範囲に存在するかを順次
    検索し、 前記検索により前記パターン自体に関して得られた前記
    接尾辞配列の前記範囲に含まれる各要素に対応する前記
    文字列の要素を特定し、当該文字列の各要素を先頭とし
    て前記パターンの要素数と同じ数の要素からなる部分文
    字列を抽出することを特徴とする請求項6に記載のパタ
    ーン検索装置。
  11. 【請求項11】 コンピュータに、検索対象である配列
    中から所望のパターンを検索する処理を実行させるコン
    ピュータプログラムにおいて、 前記パターンの最後の要素から前方へ一つずつ順に加え
    て得られる各中間パターンに関して、当該中間パターン
    の先頭の要素が前記配列に対する接尾辞配列のどの範囲
    に存在するかを順次検索する処理と、 前記検索により前記パターン自体に関して得られた前記
    接尾辞配列の前記範囲に含まれる各要素に対応する前記
    配列の要素を特定し、当該配列の各要素を先頭として前
    記パターンの要素数と同じ数の要素からなる部分配列を
    抽出する処理とを前記コンピュータに実行させることを
    特徴とするコンピュータプログラム。
  12. 【請求項12】 コンピュータに、検索対象である配列
    中から所望のパターンを検索する処理を実行させるコン
    ピュータプログラムにおいて、 前記検索対象である配列に対する接尾辞配列の各要素に
    関して、当該各要素に対応する前記配列中の各要素の一
    つ前に位置する前置要素を特定する処理と、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置要素の、前記配列を構成する要素の種類ごとの個
    数を求める処理と、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置要素の個数に基づいて、前記パターンの最後の要
    素から前方へ一つずつ順に加えて得られる各中間パター
    ンに関して、当該中間パターンの先頭の要素が前記配列
    に対する接尾辞配列のどの範囲に存在するかを順次検索
    する処理と、 前記検索により前記パターン自体に関して得られた前記
    接尾辞配列の前記範囲に含まれる各要素に対応する前記
    配列の要素を特定し、当該配列の各要素を先頭として前
    記パターンの要素数と同じ数の要素からなる部分配列を
    抽出する処理とを前記コンピュータに実行させることを
    特徴とするコンピュータプログラム。
  13. 【請求項13】 前記前置要素の個数を、前記接尾辞配
    列における要素の位置と、前記配列を構成する要素の種
    類とに対応付けて格納したテーブルを生成し、記憶装置
    に保持する処理を前記コンピュータにさらに実行させる
    ことを特徴とする請求項12に記載のコンピュータプロ
    グラム。
  14. 【請求項14】 コンピュータに検索対象である配列中
    から所望のパターンを検索する処理を実行させるプログ
    ラムを当該コンピュータの入力手段が読取可能に記憶し
    た記憶媒体において、 前記プログラムは、前記パターンを検索する処理とし
    て、 前記パターンの最後の要素から前方へ一つずつ順に加え
    て得られる各中間パターンに関して、当該中間パターン
    の先頭の要素が前記配列に対する接尾辞配列のどの範囲
    に存在するかを順次検索する処理と前記検索により前記
    パターン自体に関して得られた前記接尾辞配列の前記範
    囲に含まれる各要素に対応する前記配列の要素を特定
    し、当該配列の各要素を先頭として前記パターンの要素
    数と同じ数の要素からなる部分配列を抽出する処理とを
    前記コンピュータに実行させることを特徴とする記憶媒
    体。
  15. 【請求項15】 コンピュータに検索対象である配列中
    から所望のパターンを検索する実行させるプログラムを
    当該コンピュータの入力手段が読取可能に記憶した記憶
    媒体において、 前記プログラムは、前記パターンを検索する処理とし
    て、 前記接尾辞配列の各要素に関して、当該各要素に対応す
    る前記配列中の各要素の一つ前に位置する前置要素を特
    定する処理と、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置要素の、前記配列を構成する要素の種類ごとの個
    数を求める処理と、 前記接尾辞配列中の所定の要素以前の各要素における前
    記前置要素の個数に基づいて、前記パターンの最後の要
    素から前方へ一つずつ順に加えて得られる各中間パター
    ンに関して、当該中間パターンの先頭の要素が前記配列
    に対する接尾辞配列のどの範囲に存在するかを順次検索
    する処理と、 前記検索により前記パターン自体に関して得られた前記
    接尾辞配列の前記範囲に含まれる各要素に対応する前記
    配列の要素を特定し、当該配列の各要素を先頭として前
    記パターンの要素数と同じ数の要素からなる部分配列を
    抽出する処理とを前記コンピュータに実行させることを
    特徴とする記憶媒体。
JP2001004189A 2001-01-11 2001-01-11 パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体 Expired - Fee Related JP3672242B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001004189A JP3672242B2 (ja) 2001-01-11 2001-01-11 パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体
US10/043,564 US7016896B2 (en) 2001-01-11 2002-01-11 Pattern search method, pattern search apparatus and computer program therefor, and storage medium thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001004189A JP3672242B2 (ja) 2001-01-11 2001-01-11 パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体

Publications (2)

Publication Number Publication Date
JP2002229987A true JP2002229987A (ja) 2002-08-16
JP3672242B2 JP3672242B2 (ja) 2005-07-20

Family

ID=18872411

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001004189A Expired - Fee Related JP3672242B2 (ja) 2001-01-11 2001-01-11 パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体

Country Status (2)

Country Link
US (1) US7016896B2 (ja)
JP (1) JP3672242B2 (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4429373B1 (ja) * 2009-03-18 2010-03-10 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
JP4464459B1 (ja) * 2009-03-29 2010-05-19 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
WO2011086915A1 (ja) * 2010-01-18 2011-07-21 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
JP2012168678A (ja) * 2011-02-14 2012-09-06 Nec Corp 文書間類似度算出装置、文書間類似度算出方法、及び、文書間類似度算出プログラム
JP2012203456A (ja) * 2011-03-23 2012-10-22 Hitachi Ltd 文書検索システム、文書検索方法、及びプログラム
WO2015025751A1 (ja) * 2013-08-23 2015-02-26 日本電気株式会社 頻出系列の列挙装置、方法および記録媒体
US9009655B2 (en) 2008-09-28 2015-04-14 KOUSOKUYA, Inc. Code string search apparatus, search method, and program
CN110837584A (zh) * 2019-10-18 2020-02-25 中山大学 一种分块并行构造后缀数组的方法及系统
CN112069366A (zh) * 2020-08-28 2020-12-11 喜大(上海)网络科技有限公司 召回确定方法、装置、设备及存储介质

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7801980B1 (en) 2003-05-12 2010-09-21 Sourcefire, Inc. Systems and methods for determining characteristics of a network
JP4114600B2 (ja) * 2003-12-02 2008-07-09 日本電気株式会社 可変長文字列検索装置及び可変長文字列検索方法並びにプログラム
US7539681B2 (en) * 2004-07-26 2009-05-26 Sourcefire, Inc. Methods and systems for multi-pattern searching
EP1635273A1 (fr) * 2004-09-10 2006-03-15 France Telecom Construction informatique d'un arbre lexical
US8046833B2 (en) * 2005-11-14 2011-10-25 Sourcefire, Inc. Intrusion event correlation with network discovery information
US7733803B2 (en) 2005-11-14 2010-06-08 Sourcefire, Inc. Systems and methods for modifying network map attributes
US7948988B2 (en) * 2006-07-27 2011-05-24 Sourcefire, Inc. Device, system and method for analysis of fragments in a fragment train
US9183297B1 (en) * 2006-08-01 2015-11-10 Google Inc. Method and apparatus for generating lexical synonyms for query terms
US7701945B2 (en) * 2006-08-10 2010-04-20 Sourcefire, Inc. Device, system and method for analysis of segments in a transmission control protocol (TCP) session
CA2672908A1 (en) * 2006-10-06 2008-04-17 Sourcefire, Inc. Device, system and method for use of micro-policies in intrusion detection/prevention
US7630982B2 (en) 2007-02-24 2009-12-08 Trend Micro Incorporated Fast identification of complex strings in a data stream
US8069352B2 (en) * 2007-02-28 2011-11-29 Sourcefire, Inc. Device, system and method for timestamp analysis of segments in a transmission control protocol (TCP) session
CA2685292C (en) * 2007-04-30 2013-09-24 Sourcefire, Inc. Real-time user awareness for a computer network
US7679504B2 (en) * 2007-05-16 2010-03-16 General Electric Company System and method of discovering, detecting and classifying alarm patterns for electrophysiological monitoring systems
US8954484B2 (en) * 2009-06-12 2015-02-10 Cray Inc. Inclusive or bit matrix to compare multiple corresponding subfields
WO2009079875A1 (en) * 2007-12-14 2009-07-02 Shanghai Hewlett-Packard Co., Ltd Systems and methods for extracting phrases from text
US8474043B2 (en) 2008-04-17 2013-06-25 Sourcefire, Inc. Speed and memory optimization of intrusion detection system (IDS) and intrusion prevention system (IPS) rule processing
US8108353B2 (en) * 2008-06-11 2012-01-31 International Business Machines Corporation Method and apparatus for block size optimization in de-duplication
WO2010045089A1 (en) 2008-10-08 2010-04-22 Sourcefire, Inc. Target-based smb and dce/rpc processing for an intrusion detection system or intrusion prevention system
US8140491B2 (en) * 2009-03-26 2012-03-20 International Business Machines Corporation Storage management through adaptive deduplication
CN101853263B (zh) * 2009-04-03 2012-09-19 鸿富锦精密工业(深圳)有限公司 资料结构化处理系统及方法
WO2011056086A2 (en) * 2009-11-05 2011-05-12 Google Inc. Statistical stemming
US8407193B2 (en) * 2010-01-27 2013-03-26 International Business Machines Corporation Data deduplication for streaming sequential data storage applications
JP5809238B2 (ja) 2010-04-16 2015-11-10 シスコ テクノロジー,インコーポレイテッド 準リアルタイムネットワーク攻撃検出のためのシステムおよび方法、ならびに検出ルーティングによる統合検出のためのシステムおよび方法
US8433790B2 (en) 2010-06-11 2013-04-30 Sourcefire, Inc. System and method for assigning network blocks to sensors
US8671182B2 (en) 2010-06-22 2014-03-11 Sourcefire, Inc. System and method for resolving operating system or service identity conflicts
US8745061B2 (en) * 2010-11-09 2014-06-03 Tibco Software Inc. Suffix array candidate selection and index data structure
US8527483B2 (en) 2011-02-04 2013-09-03 Mikko VÄÄNÄNEN Method and means for browsing by walking
US8601034B2 (en) 2011-03-11 2013-12-03 Sourcefire, Inc. System and method for real time data awareness
US9116947B2 (en) * 2012-03-15 2015-08-25 Hewlett-Packard Development Company, L.P. Data-record pattern searching
US20150161266A1 (en) * 2012-06-28 2015-06-11 Google Inc. Systems and methods for more efficient source code searching
CN104252469B (zh) 2013-06-27 2017-10-20 国际商业机器公司 用于模式匹配的方法、设备和电路
KR102182672B1 (ko) * 2014-01-11 2020-11-24 (주)네온베리 다국어 통합 자음 패턴 검색 방법 및 그 장치
CN105608113B (zh) * 2015-12-10 2018-09-11 北京奇虎科技有限公司 判断文本中poi数据的方法及装置
JP6714142B2 (ja) * 2017-03-03 2020-06-24 日本電信電話株式会社 攻撃パターン抽出装置、攻撃パターン抽出方法および攻撃パターン抽出プログラム
CN108920483B (zh) * 2018-04-28 2022-02-01 南京搜文信息技术有限公司 基于后缀数组的字符串快速匹配方法
KR20210064344A (ko) * 2018-09-28 2021-06-02 다우 글로벌 테크놀로지스 엘엘씨 코드 분류를 위한 하이브리드 머신러닝 모델

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000259638A (ja) * 1999-03-12 2000-09-22 Ricoh Co Ltd 記号列処理装置
JP3344394B2 (ja) * 1999-12-24 2002-11-11 インターナショナル・ビジネス・マシーンズ・コーポレーション 配列の変換方法、構造解析方法、装置及び記録媒体
US6633817B1 (en) * 1999-12-29 2003-10-14 Incyte Genomics, Inc. Sequence database search with sequence search trees
US6751624B2 (en) * 2000-04-04 2004-06-15 Globalscape, Inc. Method and system for conducting a full text search on a client system by a server system

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9009655B2 (en) 2008-09-28 2015-04-14 KOUSOKUYA, Inc. Code string search apparatus, search method, and program
JP4429373B1 (ja) * 2009-03-18 2010-03-10 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
JP2010218326A (ja) * 2009-03-18 2010-09-30 S Grants Co Ltd コード列検索装置、検索方法及びプログラム
JP2010231675A (ja) * 2009-03-29 2010-10-14 S Grants Co Ltd コード列検索装置、検索方法及びプログラム
JP4464459B1 (ja) * 2009-03-29 2010-05-19 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
WO2011086915A1 (ja) * 2010-01-18 2011-07-21 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
JP2011145991A (ja) * 2010-01-18 2011-07-28 S Grants Co Ltd コード列検索装置、検索方法及びプログラム
JP2012168678A (ja) * 2011-02-14 2012-09-06 Nec Corp 文書間類似度算出装置、文書間類似度算出方法、及び、文書間類似度算出プログラム
JP2012203456A (ja) * 2011-03-23 2012-10-22 Hitachi Ltd 文書検索システム、文書検索方法、及びプログラム
WO2015025751A1 (ja) * 2013-08-23 2015-02-26 日本電気株式会社 頻出系列の列挙装置、方法および記録媒体
CN110837584A (zh) * 2019-10-18 2020-02-25 中山大学 一种分块并行构造后缀数组的方法及系统
CN112069366A (zh) * 2020-08-28 2020-12-11 喜大(上海)网络科技有限公司 召回确定方法、装置、设备及存储介质
CN112069366B (zh) * 2020-08-28 2024-02-09 喜大(上海)网络科技有限公司 召回确定方法、装置、设备及存储介质

Also Published As

Publication number Publication date
US20020123995A1 (en) 2002-09-05
JP3672242B2 (ja) 2005-07-20
US7016896B2 (en) 2006-03-21

Similar Documents

Publication Publication Date Title
JP3672242B2 (ja) パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体
US8301437B2 (en) Tokenization platform
US10453559B2 (en) Method and system for rapid searching of genomic data and uses thereof
JP3566111B2 (ja) 記号辞書作成方法及び記号辞書検索方法
US11386081B2 (en) System and method for facilitating efficient indexing in a database system
US20070174261A1 (en) Database retrieval apparatus, retrieval method, storage medium, and progam
CN102867049A (zh) 一种基于单词查找树实现的汉语拼音快速分词方法
CN105224624A (zh) 一种实现倒排链快速归并的方法和装置
US20030158725A1 (en) Method and apparatus for identifying words with common stems
TW201931181A (zh) 用於基因定序資料的資料處理方法及系統
JPH09245043A (ja) 情報検索装置
Hasan et al. Approximate string matching algorithms: a brief survey and comparison
US20170169159A1 (en) Repetition identification
JP2013222418A (ja) パッセージ分割方法、装置、及びプログラム
CN113722460B (zh) 指标数据入库方法、装置、设备及存储介质
US10867134B2 (en) Method for generating text string dictionary, method for searching text string dictionary, and system for processing text string dictionary
KR102594625B1 (ko) K-부정합 검색을 위한 필터를 생성하는 시스템 및 방법
Gouda et al. Efficient string edit similarity join algorithm
CN110543622A (zh) 文本相似度检测方法、装置、电子设备及可读存储介质
JP7422367B2 (ja) 近似文字列照合方法及び該方法を実現するためのコンピュータプログラム
Kaniwa et al. Repeat finding techniques, data structures and algorithms in DNA sequences: a survey
JP2001117929A (ja) データ検索方法、データ整列方法およびデータ検索装置
CN113641783A (zh) 基于关键语句的内容块检索方法、装置、设备和介质
JPH03108063A (ja) 後方一致検索方法および装置
JPH0452967A (ja) 集合ファイルに対する論理積演算処理方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040817

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041214

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050309

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20050330

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050415

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080428

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090428

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090428

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100428

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees