JP2829259B2 - データ処理装置、データ検索装置、データ処理方法及びデータ検索方法 - Google Patents

データ処理装置、データ検索装置、データ処理方法及びデータ検索方法

Info

Publication number
JP2829259B2
JP2829259B2 JP7233085A JP23308595A JP2829259B2 JP 2829259 B2 JP2829259 B2 JP 2829259B2 JP 7233085 A JP7233085 A JP 7233085A JP 23308595 A JP23308595 A JP 23308595A JP 2829259 B2 JP2829259 B2 JP 2829259B2
Authority
JP
Japan
Prior art keywords
row
data
text
column
key
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.)
Expired - Fee Related
Application number
JP7233085A
Other languages
English (en)
Other versions
JPH08272827A (ja
Inventor
睦 藤原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP7233085A priority Critical patent/JP2829259B2/ja
Publication of JPH08272827A publication Critical patent/JPH08272827A/ja
Application granted granted Critical
Publication of JP2829259B2 publication Critical patent/JP2829259B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Document Processing Apparatus (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、文字列などのコー
ド列を検索するデータ検索装置、及び前記検索を含む種
々の処理を行うデータ処理装置の改良に関するものであ
る。
【0002】
【従来の技術】従来から、文字列などのコード列から、
所定のキー列(パターン)の出現位置をすべて発見する
データ処理装置が知られている。図47は、文字列s中
に存在するパターンpの例を示したものである。この様
なコード列の検索は、辞書・索引の応用分野であり、具
体的な適用分野としては、テキストエディタ、テキスト
データベース、音声認識等のパターンマッチング、DN
A解析等のパターン分析、データ圧縮(substitutional
coding) などが挙げられる。
【0003】上記コード列を検索する最も単純な手法と
しては、コード列のすべての部分をキー列と順次照合す
る手法が挙げられるが、この手法は、検索に要する時間
が文字列sの長さに比例して増大するという問題点を有
していた。
【0004】この検索所要時間を、文字列sの長さによ
らず、パターンpの出現回数に比例する程度に抑えるた
めに、従来から、一次元の文字列sとは別に、検索用デ
ータを用意しておく手法が用いられている。この様な検
索用データの構造としては、position tree (Majster,
M. et. al. 1980), suffix tree (McCreght, E. 1976),
directed acyclic word graph (Blumer, A. et al. 19
85) が知られている。
【0005】また、これらのデータ構造は、(1)使用
記憶領域が文字列(コード列s)の長さに比例する程度
で、過度に増大しない、(2)検索所要時間もパターン
pの長さと出現位置の数に比例する程度で、過度に増大
しない、という優れた特長を有している。
【0006】さらに、これらのデータ構造は、Trie(dig
ital search tree) を基本構造とするものである。この
Trieは、複数のノードを、ルートから末端まで樹状に接
続したデータ構造で、ルート(根)から末端ノード
(葉)に至るパスの各辺につけられたラベルが、文字列
wi を綴り出す木構造である。また、これらのデータ構
造では、末端ノード(葉)はある文字列wi の終端に対
応する。また、根からある節xを経て葉に至るパスは、
根から節xまでのパスが綴り出す文字列をprefix(先頭
側の部分文字列、以下、前方列と記す)とする文字列w
i に対応する。なお、図48は、Trieの例を示したもの
である。
【0007】従来のデータ構造である上記position tre
e, suffix tree, directed acyclicword graph は、上
記のTrieを応用したものである。
【0008】このうち、position tree は、コード列s
中の各位置から始まる同定部分列を文字列としたTrieで
ある。ここで、同定部分列とは、その位置から始まるそ
の位置固有の最も短い文字列である。図49は、コード
列“abbabb$”に対する、位置と同定部分列の対
照表(辞書)の例である。この図において、記号“$”
は、位置を特定するためにコード列の終端に付加された
ダミーコードである。また、図50は、コード列“ab
babb$”の辞書を表すposition tree の例を示した
ものである。
【0009】次に、suffix tree は、コード列sの各su
ffix(後方側の部分文字列、以下、後方列と記す)を文
字列wi としたTrieであり、図51はsuffix tree の例
を示したものである。このsuffix tree は、上記Trieの
うち最も単純なものであり、根(ルート)から葉(末端
ノード)に至るパスの各辺につけられたラベルが、コー
ド列sの後方列を綴り出す木構造となっている。また、
このsuffix tree では、葉はある後方列の終端(=コー
ド列sの終端)に対応している。さらに、この木構造
は、根から葉に至るパスによって綴り出すことにより、
コード列sのすべての後方列をもれなく含むことができ
る。また、根からある節xを経て葉に至るパスは、根か
らその節xまでのパスが綴り出す文字列を前方列とする
コード列sの後方列に対応する。
【0010】また、directed acyclic word graph は、
上記suffix tree の特定のパスをマージ(共用)したも
ので、図52はdirected acyclic word graph の例を示
したものである。
【0011】
【発明が解決しようとする課題】しかしながら、上述し
た様な従来のデータ構造では、コード列sを更新したと
き、対応する検索用データの更新所要時間が、コード列
sの長さに比例して増大していた。その理由は、例え
ば、suffix tree においては、Trieはコード列sのすべ
ての後方列を反映しており、コード列sが一部でも変更
されると、変更箇所以前から開始するすべての後方列が
影響を受け、変更がTrie全体に及ぶからである。この傾
向は、変更箇所がコード列sの終端に近いほど大きい。
【0012】例えば、図51において、コード列sの末
尾の“c”を削除した場合、3つの辺の(c)が消去さ
れ、2つの辺のラベル(abc)が(ab)に変更され
る。この様に、従来のデータ処理装置はデータの更新所
要時間が長く、更新が頻繁な用途においては実用性が低
いという問題点があった。
【0013】また、従来のデータ処理装置には、可変長
である各部分列に対し、編集や検索などのデータ処理が
効率的に行えないという問題点もあった。すなわち、部
分列は、コード列の編集などによって変化し、その長さ
が変化するものであるから、部分列に対する処理のため
には、常に、各部分列とコード列中の位置を対照する必
要がある。
【0014】この様な部分列に対するデータ処理の困難
さは、データ検索に限らず、データ圧縮や文字列編集な
ど、多くの情報処理分野に普遍的に存在する。ここで、
部分列に対する効率的なデータ処理の困難さを、単純な
例によって説明する。この例は、0,1又はNのいずれ
かのコード値を取るコードの列であり、同一コード値は
多くの場合、複数連続するものとする。このような例
は、少なくとも、ビットマップによるグラフィックス表
示において存在し得る。このようなコードの列の具体例
を次に示す。
【0015】
【表1】 この例では、区間(位置)[1..3]に0、区間
[4..5]にN、区間[6..9]に0、区間[1
0..15]に1、区間[16..16]に0が格納さ
れている。この例は、コード列が、連続している同一コ
ード値の列すなわち「区間」に区分されている状態と考
えることもできる。
【0016】この様なデータをコンピュータで保持し、
処理する手法としては、まず、連続する番地のメモリに
コード値を順番通りに格納することが考えられる(第1
の手法)。この第1の手法によって表1のコード列を表
したものを図53に示す。また、この第1の手法では、
各コード値の位置が、当該コード値を格納する記憶領域
の番地と、コード列の記憶領域の先頭番地との差に比例
する。このため、特定位置のコード値のアドレスを、機
械的な加減乗除を用いて容易に算出することができる。
すなわち、Aをコード列の記憶領域の先頭番地とした場
合、コード値のアドレスは、(アドレス=位置+A−
1)となる。
【0017】しかし、この手法には次の問題点が存在す
る。 (1)データがコード数分のメモリを占有するので、メ
モリ効率が悪い。特に、同一コード値が多数連続する場
合、メモリは無駄に浪費されることとなる。 (2)データがコードごとに別個に格納されているの
で、同一コード値の連続範囲の特定に長時間を要する。
すなわち、連続範囲を特定するためには、前後のコード
値を読み出しながら連続範囲をカウントする必要があ
る。 (3)部分列の長さ変更を伴う編集の際には、変更対象
位置以降又は以前のすべてのデータを、記憶領域上で前
方又は後方へ移動させるため、処理に長時間を要する。
例えば、図54は、時点5(番地はA+4)のコード値
Nの直後に、コード値1の区間[6..8]を挿入する
場合を示す。この場合、この図に示す様に、番地A+5
からA+15までのデータを、番地A+8からA+18
の領域に転送するという繁雑な処理を要する。 (4)コードの単位に対応する記憶領域が、コードの数
(すなわち、位置の数)だけ必要なため、記憶領域を制
限すれば、コードの単位ごとの情報量が制限され、位置
の精度も下がる。一方、コードの単位ごとの情報量を増
やせば(つまり、位置の刻みを細かくすれば)、膨大な
記憶領域を消費することになる。このため、実際的には
整数のような離散的な量しか扱えない。
【0018】次に、他の手法として、コード値と、当該
コード値が連続して存在する部分列の範囲とのペアを、
連続する記憶領域に部分列の並び順に格納することも考
えられる(第2の手法)。図55は、表1のコード列
を、第2の手法によって格納したデータを示したもので
ある。
【0019】この第2の手法によれば、コード値が連続
する区間を単位としてメモリを利用できるので、所要メ
モリ量は位置の数ではなく区間の数に比例し、メモリ効
率は向上する。また、同一コード値の連続範囲は、デー
タから端的に得られる。さらに、区間による長さの精度
(長さの種類=離散的か連続的か)の相違が許容される
ので、例えば、浮動小数点の処理が容易になる。
【0020】しかし、この場合も、部分列(区間)の長
さや部分列の個数を変更するには、変更箇所以降のすべ
ての部分列の範囲のデータを書き変えるという繁雑な処
理を要する。さらに、この手法では、特定位置のコード
値を得るには、二分法などを用いてその位置を範囲のデ
ータから探索しなければならない。
【0021】上記二分法を用いる場合、二分探索木を用
いれば処理が効率化できる。すなわち、コード列の中ほ
どの部分列をルートノードとし、また、部分列の範囲の
データと、当該部分列のコード値を各ノードに持たせ
る。部分列の範囲のデータは、範囲の始点と終点によっ
て表してもよいし、また、範囲の始点のみとして、終点
は次の部分列のノードが持つ始点に基づいて得てもよ
い。図56は、このような従来の手法において、表1に
対応する二分探索木を表した例である。この図では、各
ノードは対応する部分列の始点位置と(円内)、当該部
分列のコード値(各円の下方)を持つ。
【0022】そして、あるノードの末端側に位置する部
分木は、図において、そのノードの左側に位置する場合
は、そのノードよりも前の部分列であることを意味し、
そのノードの右側に位置する場合は、そのノードよりも
後の部分列であることを意味している。しかし、この場
合も、部分列の位置の変更の際は、変更箇所以降の範囲
のデータをすべて変更するという煩雑な処理を要する。
【0023】また、コード値と、当該コード値が連続し
て存在する部分列の長さとのペアを、連続する記憶領域
に部分列の並び順に格納することも考えられる(第3の
手法)。図57は、この第3の手法におけるデータの例
である。この場合、部分列の伸縮の際には、当該区間の
長さの変更のみで足りるという利点はあるが、特定位置
のコードを得るためには、先頭又は末尾から区間の長さ
の加算を続けるという煩雑な処理を要する。また、特定
の区間に関する情報のみからは、当該区間の区間長しか
知ることができないので、この場合二分法を用いて、検
索の効率化を図ることもできない。
【0024】また、各区間のデータとして、連続領域で
はなくリスト構造(linear list) を用いれば、不連続な
領域をポインタで接続することによってデータを表すこ
とができる(第4の手法)。図58は、この第4の手法
におけるデータ構造を示したものである。この第4の手
法によれば、任意の区間の追加・削除・分割・併合の際
に、メモリ上でデータを転送する必要がなくなるので、
データ処理が効率化される。しかし、この場合、任意の
位置の検索について区間長の積算をしなければならない
という問題は解決しない。
【0025】本発明は、上記の様な従来技術の問題点を
解決するために提案されたもので、その目的は、効率の
良いデータ処理装置、データ検索装置、データ処理方法
及びデータ検索方法を提供することにある。例えば、検
索用データの更新所要時間が短いデータ処理装置を提供
すること、効率的にデータを処理するデータ処理装置を
提供すること、検索を高速に行うデータ処理装置を提供
すること、メモリを効率的に利用することができるデー
タ処理装置を提供すること、一定の長さ以下あるいは長
さを制限しないキー列の全体又は一部を含む部分をもれ
なく、また重複なく検索するデータ検索装置を提供する
ことである。
【0026】
【課題を解決するための手段】上記の目的を達成するた
め、請求項1に記載のデータ処理装置は、キー列による
検索対象となるコード列について、その後方の部分であ
る後方列の検索に用いることができる前方列をアルファ
ベット順に並べ、また、前記前方列とその前方列の前記
コード列中における位置とを対として表す辞書データを
生成する辞書データ生成手段と、前記辞書データに基づ
いて、二分木である辞書treeを生成する辞書tre
e生成手段と、前記コード列に基づいて、テキストデー
タを生成するテキストデータ生成手段と、前記テキスト
データに基づいて、二分木であるテキストtreeを生
成するテキストtree生成手段と、前記辞書tree
及びテキストtreeに基づいて、キー列の全部又は一
部を前方列とする後方列を検索する検索手段と、前記コ
ード列を変更する変更手段と、前記変更の内容に基づい
て、変更に係る前記コード列の辞書データ、辞書tre
e、テキストデータ及びテキストtreeを更新する更
新手段とを有することを特徴とするものである。
【0027】また、請求項52に記載のデータ処理方法
は、上記請求項1に記載の発明を方法の観点から捉えた
ものであって、キー列による検索対象となるコード列に
ついて、その後方の部分である後方列の検索に用いるこ
とができる前方列をアルファベット順に並べ、また、前
記前方列とその前方列の前記コード列中における位置と
を対として表す辞書データを生成する辞書データ生成処
理と、前記辞書データに基づいて、二分木である辞書t
reeを生成する辞書tree生成処理と、前記コード
列に基づいて、テキストデータを生成するテキストデー
タ生成処理と、前記テキストデータに基づいて、二分木
であるテキストtreeを生成するテキストtree生
成処理と、前記辞書tree及びテキストtreeに基
づいて、キー列の全部又は一部を前方列とする後方列を
検索する検索処理と、前記コード列を変更する変更処理
と、前記変更の内容に基づいて、変更に係る前記コード
列の辞書データ、辞書tree、テキストデータ及びテ
キストtreeを更新する更新処理とを含むことを特徴
とするものである。
【0028】上記のような構成を有する請求項1に記載
のデータ処理装置及び請求項52に記載のデータ処理方
法によれば、辞書treeとテキストtreeとを対を
なすように構成することにより、検索対象となるパター
ンのテキスト上での出現位置をもれなく、また、重複な
く簡単に求めることができる。
【0029】請求項2に記載のデータ処理装置は、キー
列による検索対象となるコード列について、その後方の
部分である後方列の検索に用いることができる前方列を
アルファベット順に並べ、また、前記前方列とその前方
列の前記コード列中における位置とを対として表す辞書
データを生成する辞書データ生成手段と、前記コード列
に基づいて、テキストデータを生成するテキストデータ
生成手段と、前記辞書データ及びテキストデータに基づ
いて、キー列の全部又は一部を前方列とする後方列を検
索する検索手段と、前記コード列を変更する変更手段
と、前記変更の内容に基づいて、変更に係る前記コード
列の辞書データ及びテキストデータを更新する更新手段
とを有することを特徴とするものである。
【0030】また、請求項53に記載のデータ処理方法
は、上記請求項2に記載の発明を方法の観点から捉えた
ものであって、キー列による検索対象となるコード列に
ついて、その後方の部分である後方列の検索に用いるこ
とができる前方列をアルファベット順に並べ、また、前
記前方列とその前方列の前記コード列中における位置と
を対として表す辞書データを生成する辞書データ生成処
理と、前記コード列に基づいて、テキストデータを生成
するテキストデータ生成処理と、前記辞書データ及びテ
キストデータに基づいて、キー列の全部又は一部を前方
列とする後方列を検索する検索処理と、前記コード列を
変更する変更処理と、前記変更の内容に基づいて、変更
に係る前記コード列の辞書データ及びテキストデータを
更新する更新処理とを含むことを特徴とするものであ
る。
【0031】上記のような構成を有する請求項2記載の
データ処理装置及び請求項53に記載のデータ処理方法
によれば、辞書データとテキストデータとを対をなすよ
うに構成することにより、検索対象となるパターンのテ
キスト上での出現位置をもれなく、また、重複なく簡単
に求めることができる。
【0032】請求項3に記載の発明は、請求項1又は請
求項2記載のデータ処理装置において、前記辞書データ
を構成するキーとなる部分列の長さが限定されることを
特徴とするものである。
【0033】上記のような構成を有する請求項3に記載
の発明によれば、キーとなる部分列の長さを制限するこ
とにより、キーとなる部分列を格納する領域を節約する
ことができる。また、キーとなる部分列の長さを制限す
ることにより、不要な比較を避けることができる。
【0034】請求項4に記載の発明は、請求項1又は請
求項2記載のデータ処理装置において、前記辞書データ
を構成するキーとなる部分列の長さが限定されないこと
を特徴とするものである。
【0035】上記のような構成を有する請求項4に記載
の発明によれば、キーとなる部分列の長さを制限しない
ことにより、後続部分列をテキスト上でチェックすると
いった後処理を要せずに、直接インデクスを検索するだ
けで、任意の長さの部分列を検索することができる。
【0036】請求項5に記載の発明は、請求項1又は請
求項3又は請求項4記載のデータ処理装置において、前
記辞書tree生成手段あるいはテキストtree生成
手段の少なくともいずれか一方が、前記辞書treeと
テキストtreeの対応するnode間に、ポインタを
設定することを特徴とするものである。
【0037】上記のような構成を有する請求項5に記載
の発明によれば、辞書treeとテキストtreeの対
応するnode間にポインタが設定されるので、両者間
のデータの参照が容易となる。また、辞書treeとテ
キストtreeの少なくともいずれか一方に、文字列を
格納すれば良くなるので、記憶領域を大幅に縮小するこ
とができる。
【0038】また、請求項5記載のデータ処理装置によ
れば、テキスト上の文字が変更された場合に、テキスト
treeの該当文字を変更するだけで、辞書treeの
表わすキーとなる部分列が自動的に変更されるので、テ
キスト上の文字の変更に伴う辞書の更新に要する時間を
大幅に短縮できる。
【0039】さらに、請求項5に記載のデータ処理装置
によれば、テキスト上の文字が追加された場合に、テキ
ストtreeに文字を追加し、この文字列の追加によっ
て辞書の表において追加された新たなキーとなる部分列
に対応するnodeを辞書treeに設け、この辞書t
reeのnodeとテキストtreeに追加された文字
のnodeとの間にポインタを設定することにより、辞
書treeの表わすキーとなる部分列が自動的に変更さ
れるので、テキスト上の文字の追加に伴う辞書の更新に
要する時間を大幅に短縮できる。
【0040】また、請求項5に記載のデータ処理装置に
よれば、テキスト上の文字が削除された場合に、テキス
トtreeから文字を削除し、この文字列の削除によっ
て辞書の表において削除されたキーとなる部分列に対応
するnodeを辞書treeから削除し、この削除され
た辞書treeのnodeとテキストtreeから削除
された文字のnodeとの間に設定されていたポインタ
を削除することにより、辞書treeの残りのノードが
表すキーとなる部分列が自動的に変更されるので、テキ
スト上の文字の削除に伴う辞書の更新に要する時間を大
幅に短縮できる。
【0041】請求項6に記載の発明は、請求項2又は請
求項3又は請求項4記載のデータ処理装置において、前
記辞書データ生成手段あるいはテキストデータ生成手段
の少なくともいずれか一方が、前記辞書データとテキス
トデータの間にポインタを設定することを特徴とするも
のである。
【0042】上記のような構成を有する請求項6に記載
の発明によれば、辞書データとテキストデータの対応す
るnode間にポインタが設定されるので、両者間のデ
ータの参照が容易となる。また、辞書データとテキスト
データの少なくともいずれか一方に、文字列を格納すれ
ば良くなるので、記憶領域を大幅に縮小することができ
る。
【0043】また、請求項6記載のデータ処理装置によ
れば、テキスト上の文字が変更された場合に、テキスト
データの該当文字を変更するだけで、辞書データの表わ
すキーとなる部分列が自動的に変更されるので、テキス
ト上の文字の変更に伴う辞書の更新に要する時間を大幅
に短縮できる。
【0044】さらに、請求項6に記載のデータ処理装置
によれば、テキスト上の文字が追加された場合に、テキ
ストデータに文字を追加し、この文字列の追加によって
辞書の表において追加された新たなキーとなる部分列に
対応するnodeを辞書データに設け、この辞書データ
のnodeとテキストデータに追加された文字のnod
eとの間にポインタを設定することにより、辞書データ
の表わすキーとなる部分列が自動的に変更されるので、
テキスト上の文字の追加に伴う辞書の更新に要する時間
を大幅に短縮できる。
【0045】また、請求項6に記載のデータ処理装置に
よれば、テキスト上の文字が削除された場合に、テキス
トデータから文字を削除し、この文字列の削除によって
辞書の表において削除されたキーとなる部分列に対応す
るnodeを辞書データから削除し、この削除された辞
書データのnodeとテキストデータから削除された文
字のnodeとの間に設定されていたポインタを削除す
ることにより、辞書データの残りのノードが表すキーと
なる部分列が自動的に変更されるので、テキスト上の文
字の削除に伴う辞書の更新に要する時間を大幅に短縮で
きる。
【0046】請求項7に記載の発明は、請求項1又は請
求項3又は請求項4記載のデータ処理装置において、前
記検索手段が、前記辞書treeとテキストtreeを
対照することにより、データ検索を行うように構成され
たことを特徴とするものである。
【0047】上記のような構成を有する請求項7に記載
の発明によれば、検索手段が、前記ポインタを介して、
辞書treeとテキストtreeを対照することにより
データ検索を行うので、文字列を効率良く格納すること
ができる。
【0048】請求項8に記載の発明は、請求項2又は請
求項3又は請求項4記載のデータ処理装置において、前
記検索手段が、前記辞書データとテキストデータを対照
することにより、データ検索を行うように構成されたこ
とを特徴とするものである。
【0049】上記のような構成を有する請求項8に記載
の発明によれば、検索手段が、前記ポインタを介して、
辞書データとテキストデータを対照することによりデー
タ検索を行うので、文字列を効率良く格納することがで
きる。
【0050】請求項9に記載の発明は、請求項1又は請
求項3又は請求項4記載のデータ処理装置において、前
記検索手段が、前記辞書tree及びテキストtree
の少なくともいずれか一方に基づいて、部分列を復元す
る機能を有することを特徴とするものである。
【0051】上記のような構成を有する請求項9に記載
の発明によれば、前記検索手段が、前記辞書tree及
びテキストtreeの少なくともいずれか一方に基づい
て、部分列を復元する機能を有しているため、別個に部
分列復元手段を設ける必要がない。
【0052】請求項10に記載の発明は、請求項2又は
請求項3又は請求項4記載のデータ処理装置において、
前記検索手段が、前記辞書データ及びテキストデータの
少なくともいずれか一方に基づいて、部分列を復元する
機能を有することを特徴とするものである。
【0053】上記のような構成を有する請求項10に記
載の発明によれば、前記検索手段が、前記辞書データ及
びテキストデータの少なくともいずれか一方に基づい
て、部分列を復元する機能を有しているため、別個に部
分列復元手段を設ける必要がない。
【0054】請求項11に記載の発明は、請求項1又は
請求項3又は請求項4記載のデータ処理装置において、
前記辞書tree生成手段及びテキストtree生成手
段によって、前記辞書tree及びテキストtreeの
nodeを一体化して構成したことを特徴とするもので
ある。
【0055】上記のような構成を有する請求項11に記
載の発明によれば、前記辞書tree生成手段及びテキ
ストtree生成手段によって、前記辞書tree及び
テキストtreeのnodeを一体化することができる
ので、両者間に設定されていたポインタを省略すること
ができ、また、記憶領域を縮小することができる。
【0056】請求項12に記載の発明は、請求項1又は
請求項3又は請求項4記載のデータ処理装置において、
前記辞書treeに文字列を格納したことを特徴とする
ものである。
【0057】上記のような構成を有する請求項12に記
載の発明によれば、前記辞書treeに文字列を格納
し、辞書treeとテキストtreeの間に設定された
ポインタによって、前記文字列を復元できるので、テキ
ストtreeに文字列を格納する必要がなくなり、記憶
領域を縮小することができる。
【0058】請求項13に記載の発明は、請求項12記
載のデータ処理装置において、前記辞書treeに格納
される文字列の長さが、対応するテキストtreeのn
odeが表わす区間の長さと等しいことを特徴とするも
のである。
【0059】上記のような構成を有する請求項13に記
載の発明によれば、テキストの復元に必要な最低限の文
字列のみを辞書treeに格納しているため、辞書tr
eeの各nodeにおいて、文字列を格納するスペース
を大幅に節約することができる。
【0060】請求項14に記載の発明は、請求項1又は
請求項3又は請求項4記載のデータ処理装置において、
前記テキストtreeのnodeにおいて、辞書tre
eへのポインタとして、文字列とnodeのアドレスを
使用することを特徴とするものである。
【0061】上記のような構成を有する請求項14に記
載の発明によれば、テキストの変更の際に必要となる辞
書treeのnodeへのポインタを格納しないで済
み、同一文字列を一つの辞書nodeのみに格納して、
他を省略することによって記憶領域を大幅に節約するこ
とができる。
【0062】請求項15に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
の部分である後方列の検索に用いることができる前方列
をアルファベット順に並べ、また、前記前方列とその前
方列の前記コード列中における位置とを対として表す辞
書データを生成する辞書データ生成手段と、前記コード
列に基づいて、テキストデータを生成するテキストデー
タ生成手段と、前記辞書データ及びテキストデータに基
づいて、キー列の全部又は一部を前方列とする後方列を
検索する検索手段と、前記コード列を変更する変更手段
と、前記変更の内容に基づいて、変更に係る前記コード
列の辞書データ及びテキストデータを更新する更新手段
と、前記変更箇所をとりまとめて処理するための調整範
囲設定手段を有することを特徴とするものである。
【0063】また、請求項54に記載のデータ処理方法
は、上記請求項15に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方の部分である後方列の検索に用いる
ことができる前方列をアルファベット順に並べ、また、
前記前方列とその前方列の前記コード列中における位置
とを対として表す辞書データを生成する辞書データ生成
処理と、前記コード列に基づいて、テキストデータを生
成するテキストデータ生成処理と、前記辞書データ及び
テキストデータに基づいて、キー列の全部又は一部を前
方列とする後方列を検索する検索処理と、前記コード列
を変更する変更処理と、前記変更の内容に基づいて、変
更に係る前記コード列の辞書データ及びテキストデータ
を更新する更新処理と、前記変更箇所をとりまとめて処
理するための調整範囲設定処理を含むことを特徴とする
ものである。
【0064】上記のような構成を有する請求項15に記
載のデータ処理装置及び請求項54に記載のデータ処理
方法によれば、所定の範囲の調整作業をまとめて行うこ
とにより、辞書データへの後方列の再登録の回数を減ら
すことができる。
【0065】請求項16に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
の部分である後方列の検索に用いることができる前方列
をアルファベット順に並べ、また、前記前方列とその前
方列の前記コード列中における位置とを対として表す辞
書データを生成する辞書データ生成手段と、前記コード
列に基づいて、テキストデータを生成するテキストデー
タ生成手段と、前記辞書データ及びテキストデータに基
づいて、キー列の全部又は一部を前方列とする後方列を
検索する検索手段と、前記コード列を変更する変更手段
と、アルファベット順に登録された各辞書データに順位
を付与する順位付加手段と、前記変更の内容に基づい
て、変更に係る前記コード列の辞書データ、テキストデ
ータ及びアルファベット順位を更新する更新手段とを有
することを特徴とするものである。
【0066】また、請求項55に記載のデータ処理方法
は、上記請求項16に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方の部分である後方列の検索に用いる
ことができる前方列をアルファベット順に並べ、また、
前記前方列とその前方列の前記コード列中における位置
とを対として表す辞書データを生成する辞書データ生成
処理と、前記コード列に基づいて、テキストデータを生
成するテキストデータ生成処理と、前記辞書データ及び
テキストデータに基づいて、キー列の全部又は一部を前
方列とする後方列を検索する検索処理と、前記コード列
を変更する変更処理と、アルファベット順に登録された
各辞書データに順位を付与する順位付加処理と、前記変
更の内容に基づいて、変更に係る前記コード列の辞書デ
ータ、テキストデータ及びアルファベット順位を更新す
る更新処理とを含むことを特徴とするものである。
【0067】上記のような構成を有する請求項16に記
載のデータ処理装置及び請求項55に記載のデータ処理
方法によれば、1つのパターンの出現回数を得るために
は、辞書データ中の2つの項目の順位を調べるだけで良
く、効率の良い検索を行うことができる。
【0068】請求項17に記載の発明は、請求項16に
記載のデータ処理装置において、前記検索手段が、前方
列が一致する辞書データの先頭のものと末尾のものの順
位から、前方列が一致するキーとなる部分列の数を計数
する計数手段を有することを特徴とするものである。
【0069】上記のような構成を有する請求項17に記
載の発明によれば、所定のパターンの出現回数は、辞書
データ中の2つの項目の順位に基づいて、計数手段によ
って簡単に求めることができる。
【0070】請求項18に記載のデータ検索装置は、キ
ー列による検索対象となるコード列について、その後方
の部分である後方列の検索に用いることができる前方列
をアルファベット順に並べ、また、前記前方列とその前
方列の前記コード列中における位置とを対として表す辞
書データを生成する辞書データ生成手段と、前記辞書デ
ータに基づいて、二分木である辞書treeを生成する
辞書tree生成手段と、前記コード列に基づいて、テ
キストデータを生成するテキストデータ生成手段と、前
記辞書tree及びテキストデータに基づいて、キー列
の全部又は一部を前方列とする後方列を検索する検索手
段とを有することを特徴とするものである。
【0071】また、請求項56に記載のデータ検索方法
は、上記請求項18に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方の部分である後方列の検索に用いる
ことができる前方列をアルファベット順に並べ、また、
前記前方列とその前方列の前記コード列中における位置
とを対として表す辞書データを生成する辞書データ生成
処理と、前記辞書データに基づいて、二分木である辞書
treeを生成する辞書tree生成処理と、前記コー
ド列に基づいて、テキストデータを生成するテキストデ
ータ生成処理と、前記辞書tree及びテキストデータ
に基づいて、キー列の全部又は一部を前方列とする後方
列を検索する検索処理とを含むことを特徴とするもので
ある。
【0072】上記のような構成を有する請求項18に記
載のデータ検索装置及び請求項56に記載のデータ検索
方法によれば、コード列の変更を伴わない場合に、辞書
データ生成手段、辞書tree生成手段、テキストデー
タ生成手段及び検索手段によってデータ検索装置を構成
することにより、簡易な構成によって、検索対象となる
パターンのテキスト上での出現位置をもれなく、また、
重複なく求めることができる。
【0073】請求項19に記載のデータ検索装置は、キ
ー列による検索対象となるコード列について、その後方
の部分である後方列の検索に用いることができる前方列
をアルファベット順に並べ、また、前記前方列とその前
方列の前記コード列中における位置とを対として表す辞
書データを生成する辞書データ生成手段と、前記コード
列に基づいて、テキストデータを生成するテキストデー
タ生成手段と、前記辞書データ及びテキストデータに基
づいて、キー列の全部又は一部を前方列とする後方列を
検索する検索手段とを有することを特徴とするものであ
る。
【0074】また、請求項57に記載のデータ検索方法
は、上記請求項19に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方の部分である後方列の検索に用いる
ことができる前方列をアルファベット順に並べ、また、
前記前方列とその前方列の前記コード列中における位置
とを対として表す辞書データを生成する辞書データ生成
処理と、前記コード列に基づいて、テキストデータを生
成するテキストデータ生成処理と、前記辞書データ及び
テキストデータに基づいて、キー列の全部又は一部を前
方列とする後方列を検索する検索処理とを含むことを特
徴とするものである。
【0075】上記のような構成を有する請求項19に記
載のデータ検索装置及び請求項57に記載のデータ検索
方法によれば、コード列の変更を伴わない場合に、辞書
データ生成手段、テキストデータ生成手段及び検索手段
によってデータ検索装置を構成することにより、簡易な
構成によって、検索対象となるパターンのテキスト上で
の出現位置をもれなく、また、重複なく求めることがで
きる。
【0076】請求項20に記載の発明は、請求項18又
は請求項19記載のデータ検索装置において、前記辞書
データを構成するキーとなる部分列の長さが限定される
ことを特徴とするものである。
【0077】上記のような構成を有する請求項20に記
載の発明によれば、キーとなる部分列の長さを制限する
ことにより、キーとなる部分列を格納する領域を節約す
ることができる。また、キーとなる部分列の長さを制限
することにより、不要な比較を避けることができる。
【0078】請求項21に記載の発明は、請求項18又
は請求項19記載のデータ検索装置において、前記辞書
データを構成するキーとなる部分列の長さが限定されな
いことを特徴とするものである。
【0079】上記のような構成を有する請求項21に記
載の発明によれば、キーとなる部分列の長さを制限しな
いことにより、後続部分列をテキスト上でチェックする
といった後処理を要せずに、直接インデクスを検索する
だけで、任意の長さの部分列を検索することができる。
【0080】請求項22に記載の発明は、請求項18又
は請求項20又は請求項21記載のデータ検索装置にお
いて、前記テキストデータに基づいて、二分木であるテ
キストtreeを生成するテキストtree生成手段を
有し、前記辞書tree及びテキストtreeに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
することを特徴とするものである。
【0081】上記のような構成を有する請求項22に記
載の発明によれば、検索対象となるパターンのテキスト
上での出現位置をもれなく、また、重複なく求めること
ができる。
【0082】請求項23に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
の部分である後方列の検索に用いることができる前方列
をアルファベット順に並べ、また、その前方列とその前
方列の前記コード列中における位置とを対として表す辞
書データを生成する辞書データ生成手段と、前記辞書デ
ータに基づいて、キー列の全部又は一部を前方列とする
後方列を検索する検索手段と、2つのコード列の比較を
行なう比較手段と、1文字違いの2つの後方列のうち、
一方がすでにインデクスに登録されている場合に、他方
の後方列の登録位置を、1文字の比較に基づいて決定し
て登録する登録手段と、前記コード列を変更する変更手
段と、前記コード列の一部が変更された場合に、変更後
のコード列を再登録する必要があるか否かを判定する再
登録判定手段と、前記比較手段及び再登録判定手段の判
断結果に基づいて、変更に係る前記コード列の辞書デー
タを更新する更新手段とを有することを特徴とするもの
である。
【0083】また、請求項58に記載のデータ処理方法
は、上記請求項23に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方の部分である後方列の検索に用いる
ことができる前方列をアルファベット順に並べ、また、
その前方列とその前方列の前記コード列中における位置
とを対として表す辞書データを生成する辞書データ生成
処理と、前記辞書データに基づいて、キー列の全部又は
一部を前方列とする後方列を検索する検索処理と、2つ
のコード列の比較を行なう比較処理と、1文字違いの2
つの後方列のうち、一方がすでにインデクスに登録され
ている場合に、他方の後方列の登録位置を、1文字の比
較に基づいて決定して登録する登録処理と、前記コード
列を変更する変更処理と、前記コード列の一部が変更さ
れた場合に、変更後のコード列を再登録する必要がある
か否かを判定する再登録判定処理と、前記比較手段及び
再登録判定手段の判断結果に基づいて、変更に係る前記
コード列の辞書データを更新する更新処理とを含むこと
を特徴とするものである。
【0084】上記のような構成を有する請求項23に記
載のデータ処理装置及び請求項58に記載のデータ処理
方法によれば、比較手段、再登録判定手段を設けること
により、コード列を与えてインデクスを検索する場合、
または、インデクスに後方列を登録する場合に必要とな
るコード列の比較の効率化を図ることができる。
【0085】請求項24に記載の発明は、請求項23に
記載のデータ処理装置において、前記検索手段が、コー
ド列をキーとしてアルファベット順に並べた表におい
て、コード列をキーとして二分探索を行なう際に、既に
行なった比較が何文字目まで一致したかに基づいて、次
の比較を何文字目から行なうかを決定するように構成さ
れたことを特徴とするものである。
【0086】上記のような構成を有する請求項24に記
載の発明によれば、共通の前方列の比較を省略して、そ
の直後のコードから比較を行なうことができるので、コ
ード列の比較の効率化を図ることができる。
【0087】請求項25に記載の発明は、請求項23に
記載のデータ処理装置において、前記比較手段が、コー
ド列をキーとしてアルファベット順に並べた表におい
て、2つのコード列の比較を行なう際に、両方のコード
列から一致する前方列を除いた後方列がともに前記表中
に存在する場合、それらの後方列の表中での位置の比較
結果を、前記2つのコード列の比較結果とするように構
成されたことを特徴とするものである。
【0088】上記のような構成を有する請求項25に記
載の発明によれば、2つのコード列の比較を行なう際
に、両方のコード列から一致する前方列を除いた後方列
が、ともに辞書データ中に存在する場合、それらの後方
列の辞書データ中での位置の比較結果を、前記2つのコ
ード列の比較結果とすることができるので、コード列の
比較の効率化を図ることができる。
【0089】請求項26に記載の発明は、請求項23に
記載のデータ処理装置において、前記登録手段が、後方
列の前方列をキーとしてアルファベット順に並べた表に
おいて、後方列αwの前方列を登録する際に、前方列が
前記表中で前記後方列αwより短い最長の後方列wの直
前である後方列xより長い最短の後方列βxと前記直前
である後方列xとの差βが、前記後方列αwとそれより
短い最長の後方列wとの差αと一致する場合には、βx
の前方列の直後にαwの前方列を登録し、また、前方列
が前記表中で前記後方列αwより短い最長の後方列wの
直後である後方列yより長い最短の後方列γyと前記直
後である後方列yとの差γが、前記後方列αwとそれよ
り短い最長の後方列wとの差αと一致する場合には、γ
yの前方列の直前にαwの前方列を登録するように構成
されたことを特徴とするものである。
【0090】また、請求項27に記載の発明は、請求項
23に記載のデータ処理装置において、前記登録手段
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、後方列wの前方列を登録する際に、前
方列が前記表中で前記後方列wより長い最短の後方列α
wの直前及び直後である後方列βx及びγyについて、
βxより短い最長の後方列xの前方列とγyより短い最
長の後方列yの前方列とが、前記表中でxの前方列を先
にして隣接しており、かつ、α=βまたはα=γである
場合には、xの前方列とyの前方列の間にwの前方列を
登録するように構成されたことを特徴とするものであ
る。
【0091】上記のような構成を有する請求項26及び
請求項27に記載の発明によれば、例えば1文字違いの
2つの後方列のうち、一方がすでにインデクスに登録さ
れている場合に、他方の後方列の登録位置を、その1文
字の比較に基づいて決定して登録することができる。
【0092】請求項28に記載の発明は、請求項23に
記載のデータ処理装置において、前記再登録判定手段
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、変
更部分を含む後方列の前方列について、前記表中で前記
前方列の直前および直後の前方列と前記前方列とを変更
後の内容において比較し、前記前方列が前記直前の前方
列以上でかつ前記直後の前方列以下である場合には、少
なくとも前記後方列及びそれより長い後方列について
は、それらの前方列の再登録の必要がないと判定し、そ
うでない場合には、少なくとも前記後方列及び変更部分
を含むそれより短い後方列については、それらの前方列
の再登録が必要であると判定するように構成されたこと
を特徴とするものである。
【0093】請求項29に記載の発明は、請求項23に
記載のデータ処理装置において、前記再登録判定手段
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、変
更部分を含む後方列の前方列について、前記表中で前記
前方列の直前または直後の前方列と前記前方列とを比較
し、両者の前方列が、いずれかの変更された部分の直前
まで一致する場合には、少なくとも前記後方列及び変更
部分を含むそれより短い後方列については、それらの前
方列の再登録が必要であると判定し、一致しない場合に
は、少なくとも前記後方列及びそれより長い後方列につ
いては、それらの前方列の再登録の必要がないと判定す
るように構成されたことを特徴とするものである。
【0094】請求項30に記載の発明は、請求項23に
記載のデータ処理装置において、前記再登録判定手段
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、後
方列の前方列が再登録が必要か否かを、変更部分を含む
後方列の前方列について、短い後方列の前方列から順に
判定するように構成されたことを特徴とするものであ
る。
【0095】請求項31に記載の発明は、請求項23に
記載のデータ処理装置において、前記再登録判定手段
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、後
方列の前方列が再登録が必要か否かを、変更部分を含む
後方列の前方列について、開始位置の順に並べて二分法
で選択しつつ判定するように構成されたことを特徴とす
るものである。
【0096】上記のような構成を有する請求項28乃至
請求項31に記載の発明によれば、コード列の一部を変
更した場合に、変更部分を含む後方列の前方列につい
て、再登録が必要か否かの判断が容易になされる。
【0097】請求項32に記載のデータ検索装置は、キ
ー列による検索対象となるコード列について、その後方
列の検索に用いることができる前方列とその前方列のコ
ード列中における位置との対を前記前方列のアルファベ
ット順に並べたインデクスに基づいて、キー列の全部又
は一部を前方列とする後方列を検索する検索手段と、前
記インデクスを生成するインデクス生成手段とを有し、
前記インデクスには順位が付与されており、前記検索手
段は、その順位に基づいてキー列の全部又は一部を前方
列とする後方列の数を出力する機能を備え、また、前記
インデクス生成手段は、順位を付与したインデクスを生
成するように構成されたことを特徴とするものである。
【0098】また、請求項59に記載のデータ検索方法
は、上記請求項32に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方列の検索に用いることができる前方
列とその前方列のコード列中における位置との対を前記
前方列のアルファベット順に並べたインデクスに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
する検索処理と、前記インデクスを生成するインデクス
生成処理とを含み、前記インデクスには順位が付与され
ており、前記検索処理において、その順位に基づいてキ
ー列の全部又は一部を前方列とする後方列の数を出力
し、また、前記インデクス生成処理は、順位を付与した
インデクスを生成することを特徴とするものである。
【0099】上記のような構成を有する請求項32に記
載のデータ検索装置及び請求項59に記載のデータ検索
方法によれば、テキストを生成しない簡易な構成のデー
タ検索装置及びデータ検索方法を得ることができる。
た、請求項32に記載のデータ検索装置によれば、イン
デクスに順位を付与し、また、検索手段には、その順位
に基づいてキー列の全部又は一部を前方列とする後方列
の数を出力する機能を設け、インデクス生成手段は、順
位を付与したインデクスを生成するように構成すること
により、検索の条件に合致する部分列の数を容易に求め
ることができるデータ検索装置を得ることができる。さ
らに、請求項59に記載のデータ検索方法によれば、検
索の条件に合致する部分列の数を容易に求めることがで
きるデータ検索方法を得ることができる。
【0100】請求項33に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
列の検索に用いることができる前方列とその前方列のコ
ード列中における位置との対を前記前方列のアルファベ
ット順に並べたインデクスに基づいて、キー列の全部又
は一部を前方列とする後方列を検索する検索手段と、前
記コード列の変更の内容に基づいて、変更に係る前記コ
ード列についてのインデクスを更新する更新手段とを有
し、前記インデクスには順位が付与されており、前記検
索手段は、その順位に基づいてキー列の全部又は一部を
前方列とする後方列の数を出力する機能を備え、また、
前記更新手段は、前記順位の更新も合わせて行なうよう
に構成されたことを特徴とするものである。
【0101】また、請求項60に記載のデータ処理方法
は、上記請求項33に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方列の検索に用いることができる前方
列とその前方列のコード列中における位置との対を前記
前方列のアルファベット順に並べたインデクスに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
する検索処理と、前記コード列の変更の内容に基づい
て、変更に係る前記コード列についてのインデクスを更
新する更新処理とを含み、前記インデクスには順位が付
与されており、前記検索処理において、その順位に基づ
いてキー列の全部又は一部を前方列とする後方列の数を
出力し、また、前記更新処理は、前記順位の更新も合わ
せて行なうことを特徴とするものである。
【0102】上記のような構成を有する請求項33に記
載のデータ処理装置及び請求項60に記載のデータ処理
方法によれば、テキストを生成しない簡易な構成のデー
タ処理装置及びデータ処理方法を得ることができる。
た、請求項33に記載のデータ処理装置によれば、イン
デクスに順位を付与し、また、検索手段には、その順位
に基づいてキー列の全部又は一部を前方列とする後方列
の数を出力する機能を設け、さらに、更新手段が順位の
更新も合わせて行なうように構成したことにより、コー
ド列が変更された場合であっても、検索の条件に合致す
る部分列の数を容易に求めることができるデータ処理装
置を得ることができる。さらに、請求項60に記載のデ
ータ処理方法によれば、コード列が変更された場合であ
っても、検索の条件に合致する部分列の数を容易に求め
ることができるデータ処理方法を得ることができる。
【0103】請求項34に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
列の検索に用いることができる前方列とその前方列のコ
ード列中における位置との対を前記前方列のアルファベ
ット順に並べたインデクスに基づいて、キー列の全部又
は一部を前方列とする後方列を検索する検索手段と、前
記インデクスを生成するインデクス生成手段と、前記コ
ード列を変更する変更手段と、前記コード列の変更の内
容に基づいて、変更に係る前記コード列についてのイン
デクスを更新する更新手段とを有し、前記インデクスに
は順位が付与されており、前記検索手段は、その順位に
基づいてキー列の全部又は一部を前方列とする後方列の
数を出力する機能を備え、また、前記インデクス生成手
段は、順位を付与したインデクスを生成する機能を備
え、前記更新手段は、前記順位の更新も合わせて行なう
ように構成されたことを特徴とするものである。
【0104】また、請求項61に記載のデータ処理方法
は、上記請求項34に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方列の検索に用いることができる前方
列とその前方列のコード列中における位置との対を前記
前方列のアルファベット順に並べたインデクスに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
する検索処理と、前記インデクスを生成するインデクス
生成処理と、前記コード列を変更する変更処理と、前記
コード列の変更の内容に基づいて、変更に係る前記コー
ド列についてのインデクスを更新する更新処理とを含
み、前記インデクスには順位が付与されており、前記検
索処理において、その順位に基づいてキー列の全部又は
一部を前方列とする後方列の数を出力し、また、前記イ
ンデクス生成処理は、順位を付与したインデクスを生成
し、前記更新処理は、前記順位の更新も合わせて行なう
ことを特徴とするものである。
【0105】上記のような構成を有する請求項34に記
載のデータ処理装置及び請求項61に記載のデータ処理
方法によれば、テキストを生成しない簡易な構成のデー
タ処理装置及びデータ処理方法を得ることができる。
た、請求項34に記載のデータ処理装置によれば、イン
デクスに順位を付与し、また、検索手段には、その順位
に基づいてキー列の全部又は一部を前方列とする後方列
の数を出力する機能を設け、インデクス生成手段は、順
位を付与したインデクスを生成するように構成し、さら
に、更新手段が順位の更新も合わせて行なうように構成
したことにより、コード列が変更された場合であって
も、検索の条件に合致する部分列の数を容易に求めるこ
とができるデータ処理装置を得ることができる。さら
に、請求項61に記載のデータ処理方法によれば、コー
ド列が変更された場合であっても、検索の条件に合致す
る部分列の数を容易に求めることができるデータ処理方
法を得ることができる。
【0106】請求項35に記載のデータ検索装置は、キ
ー列による検索対象となるコード列について、その後方
の部分である後方列の検索に用いることができる前方列
とその前方列のコード列中における位置との対を前記前
方列のアルファベット順に並べたインデクスに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
する機能と、前記コード列の後方の部分である後方列の
前方列とその前方列のコード列中における位置との対
を、前記コード列中における位置の順に並べたテキスト
に基づいて、指定された位置から始まるコード列の一部
又は全部を復元する機能とを備えた検索手段と、前記イ
ンデクスを生成するインデクス生成手段と、前記テキス
トを生成するテキスト生成手段とを有することを特徴と
するものである。
【0107】また、請求項62に記載のデータ検索方法
は、上記請求項35に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方の部分である後方列の検索に用いる
ことができる前方列とその前方列のコード列中における
位置との対を前記前方列のアルファベット順に並べたイ
ンデクスに基づいて、キー列の全部又は一部を前方列と
する後方列を検索する工程と、前記コード列の後方の部
分である後方列の前方列とその前方列のコード列中にお
ける位置との対を、前記コード列中における位置の順に
並べたテキストに基づいて、指定された位置から始まる
コード列の一部又は全部を復元する工程とを有する検索
処理と、前記インデクスを生成するインデクス生成処理
と、前記テキストを生成するテキスト生成処理とを含む
ことを特徴とするものである。
【0108】上記のような構成を有する請求項35に記
載のデータ検索装置及び請求項62に記載のデータ検索
方法によれば、2つの部分列の比較が容易で、また、コ
ード列の一部又は全部を復元することができる、効率的
なデータ検索装置及びデータ検索方法を得ることができ
る。
【0109】請求項36に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
列の検索に用いることができる前方列とその前方列のコ
ード列中における位置との対を前記前方列のアルファベ
ット順に並べたインデクスに基づいて、キー列の全部又
は一部を前方列とする後方列を検索する機能と、前記コ
ード列の後方の部分である後方列の前方列を検索する機
能と、前記コード列中における位置の順に並べたテキス
トに基づいて、指定された位置から始まるコード列の一
部又は全部を復元する機能とを備えた検索手段と、前記
コード列の変更の内容に基づいて、変更に係る前記コー
ド列についてのインデクス及びテキストを更新する更新
手段とを有することを特徴とするものである。
【0110】また、請求項63に記載のデータ処理方法
は、上記請求項36に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方列の検索に用いることができる前方
列とその前方列のコード列中における位置との対を前記
前方列のアルファベット順に並べたインデクスに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
する工程と、前記コード列の後方の部分である後方列の
前方列を検索する工程と、前記コード列中における位置
の順に並べたテキストに基づいて、指定された位置から
始まるコード列の一部又は全部を復元する工程とを有す
る検索処理と、前記コード列の変更の内容に基づいて、
変更に係る前記コード列についてのインデクス及びテキ
ストを更新する更新処理とを含むことを特徴とするもの
である。
【0111】上記のような構成を有する請求項36に記
載のデータ処理装置及び請求項63に記載のデータ処理
方法によれば、2つの部分列の比較が容易で、また、コ
ード列の一部又は全部を復元することができる、効率的
なデータ処理装置及びデータ処理方法を得ることができ
る。
【0112】請求項37に記載のデータ処理装置は、キ
ー列による検索対象となるコード列について、その後方
列の検索に用いることができる前方列とその前方列のコ
ード列中における位置との対を前記前方列のアルファベ
ット順に並べたインデクスに基づいて、キー列の全部又
は一部を前方列とする後方列を検索する機能と、前記コ
ード列の後方の部分である後方列の前方列を検索する機
能と、前記コード列中における位置の順に並べたテキス
トに基づいて、指定された位置から始まるコード列の一
部又は全部を復元する機能とを備えた検索手段と、前記
インデクスを生成するインデクス生成手段と、前記テキ
ストを生成するテキスト生成手段と、前記コード列を変
更する変更手段と、前記コード列の変更の内容に基づい
て、変更に係る前記コード列についてのインデクス及び
テキストを更新する更新手段とを有することを特徴とす
るものである。
【0113】また、請求項64に記載のデータ処理方法
は、上記請求項37に記載の発明を方法の観点から捉え
たものであって、キー列による検索対象となるコード列
について、その後方列の検索に用いることができる前方
列とその前方列のコード列中における位置との対を前記
前方列のアルファベット順に並べたインデクスに基づい
て、キー列の全部又は一部を前方列とする後方列を検索
する工程と、前記コード列の後方の部分である後方列の
前方列を検索する工程と、前記コード列中における位置
の順に並べたテキストに基づいて、指定された位置から
始まるコード列の一部又は全部を復元する工程とを有す
る検索処理と、前記インデクスを生成するインデクス生
成処理と、前記テキストを生成するテキスト生成処理
と、前記コード列を変更する変更処理と、前記コード列
の変更の内容に基づいて、変更に係る前記コード列につ
いてのインデクス及びテキストを更新する更新処理とを
含むことを特徴とするものである。
【0114】上記のような構成を有する請求項37に記
載のデータ処理装置及び請求項64に記載のデータ処理
方法によれば、2つの部分列の比較が容易で、また、コ
ード列の一部又は全部を復元することができ、さらに、
コード列の変更に対応してインデクス及びテキストの更
新が可能なデータ処理装置及びデータ処理方法を得るこ
とができる。
【0115】請求項38に記載の発明は、請求項35に
記載のデータ検索装置において、前記インデクスには順
位が付与されており、前記検索手段は、その順位に基づ
いてキー列の全部又は一部を前方列とする後方列の数を
出力する機能を備え、また、前記インデクス生成手段
は、順位を付与したインデクスを生成するように構成さ
れたことを特徴とするものである。
【0116】上記のような構成を有する請求項38に記
載の発明によれば、インデクスに順位を付与し、また、
検索手段には、その順位に基づいてキー列の全部又は一
部を前方列とする後方列の数を出力する機能を設け、イ
ンデクス生成手段は、順位を付与したインデクスを生成
するように構成することにより、検索の条件に合致する
部分列の数を容易に求めることができるデータ検索装置
を得ることができる。
【0117】請求項39に記載の発明は、請求項36に
記載のデータ処理装置において、前記インデクスには順
位が付与されており、前記検索手段は、その順位に基づ
いてキー列の全部又は一部を前方列とする後方列の数を
出力する機能を備え、また、前記更新手段は、前記順位
の更新も合わせて行なうように構成されたことを特徴と
するものである。
【0118】上記のような構成を有する請求項39に記
載の発明によれば、インデクスに順位を付与し、また、
検索手段には、その順位に基づいてキー列の全部又は一
部を前方列とする後方列の数を出力する機能を設け、さ
らに、更新手段が順位の更新も合わせて行なうように構
成したことにより、コード列が変更された場合であって
も、検索の条件に合致する部分列の数を容易に求めるこ
とができるデータ処理装置を得ることができる。
【0119】請求項40に記載の発明は、請求項37記
載のデータ処理装置において、前記インデクスには順位
が付与されており、前記検索手段は、その順位に基づい
てキー列の全部又は一部を前方列とする後方列の数を出
力する機能を備え、また、前記インデクス生成手段は、
順位を付与したインデクスを生成する機能を備え、前記
更新手段は、前記順位の更新も合わせて行なうように構
成されたことを特徴とするものである。
【0120】上記のような構成を有する請求項40に記
載の発明によれば、インデクスに順位を付与し、また、
検索手段には、その順位に基づいてキー列の全部又は一
部を前方列とする後方列の数を出力する機能を設け、イ
ンデクス生成手段は、順位を付与したインデクスを生成
するように構成し、さらに、更新手段が順位の更新も合
わせて行なうように構成したことにより、コード列が変
更された場合であっても、検索の条件に合致する部分列
の数を容易に求めることができるデータ処理装置を得る
ことができる。
【0121】請求項41に記載の発明は、請求項32又
は請求項35又は請求項38に記載のデータ検索装置に
おいて、前記インデクスを構成するキーとなる部分列の
長さが限定されることを特徴とするものである。
【0122】また、請求項42に記載の発明は、請求項
33,請求項34,請求項36,請求項37,請求項3
9又は請求項40のいずれか一に記載のデータ処理装置
において、前記インデクスを構成するキーとなる部分列
の長さが限定されることを特徴とするものである。
【0123】上記のような構成を有する請求項41及び
請求項42に記載の発明によれば、キーとなる部分列の
長さを制限することにより、キーとなる部分列を格納す
る領域を節約することができる。また、キーとなる部分
列の長さを制限することにより、不要な比較を避けるこ
とができる。
【0124】請求項43に記載の発明は、請求項32又
は請求項35又は請求項38に記載のデータ検索装置に
おいて、前記インデクスを構成するキーとなる部分列の
長さが限定されないことを特徴とするものである。
【0125】また、請求項44に記載の発明は、請求項
33,請求項34,請求項36,請求項37,請求項3
9又は請求項40のいずれか一に記載のデータ処理装置
において、前記インデクスを構成するキーとなる部分列
の長さが限定されないことを特徴とするものである。
【0126】上記のような構成を有する請求項43及び
請求項44に記載の発明によれば、キーとなる部分列の
長さを制限しないことにより、後続部分列をテキスト上
でチェックするといった後処理を要せずに、直接インデ
クスを検索するだけで、任意の長さの部分列を検索する
ことができる。
【0127】請求項45に記載の発明は、請求項37に
記載のデータ処理装置において、前記インデクスの対と
前記テキストの対とを一体化して構成したことを特徴と
するものである。
【0128】また、請求項46に記載の発明は、請求項
35に記載のデータ検索装置において、前記インデクス
の対と前記テキストの対とを一体化して構成したことを
特徴とするものである。
【0129】上記のような構成を有する請求項45及び
請求項46に記載の発明によれば、インデクスとテキス
トの対を一体化して構成したことにより、記憶領域を大
幅に削減することができる。
【0130】請求項47に記載の発明は、請求項42又
は請求項44に記載のデータ処理装置において、前記イ
ンデクスを二分木で表現したことを特徴とするものであ
る。
【0131】また、請求項48に記載の発明は、請求項
41又は請求項43に記載のデータ検索装置において、
前記インデクスを二分木で表現したことを特徴とするも
のである。
【0132】上記のような構成を有する請求項47及び
請求項48に記載の発明によれば、インデクスを二分木
で表現することにより、検索効率を大幅に向上させるこ
とができる。
【0133】請求項49に記載の発明は、請求項42又
は請求項44に記載のデータ処理装置において、前記テ
キストが、前記コード列を記憶領の連続した番地に格納
し、番地によって位置を表現したものであることを特徴
とするものである。
【0134】また、請求項50に記載の発明は、請求項
41又は請求項43に記載のデータ検索装置において、
前記テキストが、前記コード列を記憶領の連続した番地
に格納し、番地によって位置を表現したものであること
を特徴とするものである。
【0135】上記のような構成を有する請求項49及び
請求項50に記載の発明によれば、テキストにおいて、
コード列を記憶領の連続した番地に格納し、番地によっ
て位置を表現したことにより、記憶領域を削減すること
ができ、また、テキストの検索効率の向上も可能とな
る。
【0136】請求項51に記載の発明は、請求項33,
請求項34,請求項36,請求項37,請求項39又は
請求項40のいずれか一に記載のデータ処理装置におい
て、前記更新手段が、前記コード列に対する複数の変更
に対応する更新をとりまとめて処理することを特徴とす
るものである。
【0137】上記のような構成を有する請求項51に記
載の発明によれば、更新手段が、コード列に対する複数
の変更に対応する更新をとりまとめて処理することがで
きるので、更新の効率が大幅に向上する。
【0138】請求項65に記載の発明は、請求項55に
記載のデータ処理方法において、前記検索処理が、前方
列が一致する辞書データの先頭のものと末尾のものの順
位から、前方列が一致するキーとなる部分列の数を計数
する計数処理を含むことを特徴とするものである。
【0139】上記のような構成を有する請求項65に記
載の発明によれば、所定のパターンの出現回数は、辞書
データ中の2つの項目の順位に基づいて、計数処理によ
って簡単に求めることができる。
【0140】請求項66に記載の発明は、請求項58に
記載のデータ処理方法において、前記検索処理が、コー
ド列をキーとしてアルファベット順に並べた表におい
て、コード列をキーとして二分探索を行なう際に、既に
行なった比較が何文字目まで一致したかに基づいて、次
の比較を何文字目から行なうかを決定することを特徴と
するものである。
【0141】上記のような構成を有する請求項66に記
載の発明によれば、共通の前方列の比較を省略して、そ
の直後のコードから比較を行なうことができるので、コ
ード列の比較の効率化を図ることができる。
【0142】請求項67に記載の発明は、請求項58に
記載のデータ処理方法において、前記比較処理が、コー
ド列をキーとしてアルファベット順に並べた表におい
て、2つのコード列の比較を行なう際に、両方のコード
列から一致する前方列を除いた後方列がともに前記表中
に存在する場合、それらの後方列の表中での位置の比較
結果を、前記2つのコード列の比較結果とすることを特
徴とするものである。
【0143】上記のような構成を有する請求項67に記
載の発明によれば、2つのコード列の比較を行なう際
に、両方のコード列から一致する前方列を除いた後方列
が、ともに辞書データ中に存在する場合、それらの後方
列の辞書データ中での位置の比較結果を、前記2つのコ
ード列の比較結果とすることができるので、コード列の
比較の効率化を図ることができる。
【0144】請求項68に記載の発明は、請求項58に
記載のデータ処理方法において、前記登録処理が、後方
列の前方列をキーとしてアルファベット順に並べた表に
おいて、後方列αwの前方列を登録する際に、前方列が
前記表中で前記後方列αwより短い最長の後方列wの直
前である後方列xより長い最短の後方列βxと前記直前
である後方列xとの差βが、前記後方列αwとそれより
短い最長の後方列wとの差αと一致する場合には、βx
の前方列の直後にαwの前方列を登録し、また、前方列
が前記表中で前記後方列αwより短い最長の後方列wの
直後である後方列yより長い最短の後方列γyと前記直
後である後方列yとの差γが、前記後方列αwとそれよ
り短い最長の後方列wとの差αと一致する場合には、γ
yの前方列の直前にαwの前方列を登録することを特徴
とするものである。
【0145】また、請求項69に記載の発明は、請求項
58に記載のデータ処理方法において、前記登録処理
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、後方列wの前方列を登録する際に、前
方列が前記表中で前記後方列wより長い最短の後方列α
wの直前及び直後である後方列βx及びγyについて、
βxより短い最長の後方列xの前方列とγyより短い最
長の後方列yの前方列とが、前記表中でxの前方列を先
にして隣接しており、かつ、α=βまたはα=γである
場合には、xの前方列とyの前方列の間にwの前方列を
登録することを特徴とするものである。
【0146】上記のような構成を有する請求項68及び
請求項69に記載の発明によれば、例えば1文字違いの
2つの後方列のうち、一方がすでにインデクスに登録さ
れている場合に、他方の後方列の登録位置を、その1文
字の比較に基づいて決定して登録することができる。
【0147】請求項70に記載の発明は、請求項58に
記載のデータ処理方法において、前記再登録判定処理
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、変
更部分を含む後方列の前方列について、前記表中で前記
前方列の直前および直後の前方列と前記前方列とを変更
後の内容において比較し、前記前方列が前記直前の前方
列以上でかつ前記直後の前方列以下である場合には、少
なくとも前記後方列及びそれより長い後方列について
は、それらの前方列の再登録の必要がないと判定し、そ
うでない場合には、少なくとも前記後方列及び変更部分
を含むそれより短い後方列については、それらの前方列
の再登録が必要であると判定することを特徴とするもの
である。
【0148】請求項71に記載の発明は、請求項58に
記載のデータ処理方法において、前記再登録判定処理
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、変
更部分を含む後方列の前方列について、前記表中で前記
前方列の直前または直後の前方列と前記前方列とを比較
し、両者の前方列が、いずれかの変更された部分の直前
まで一致する場合には、少なくとも前記後方列及び変更
部分を含むそれより短い後方列については、それらの前
方列の再登録が必要であると判定し、一致しない場合に
は、少なくとも前記後方列及びそれより長い後方列につ
いては、それらの前方列の再登録の必要がないと判定す
ることを特徴とするものである。
【0149】請求項72に記載の発明は、請求項58に
記載のデータ処理方法において、前記再登録判定処理
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、後
方列の前方列が再登録が必要か否かを、変更部分を含む
後方列の前方列について、短い後方列の前方列から順に
判定することを特徴とするものである。
【0150】請求項73に記載の発明は、請求項58に
記載のデータ処理方法において、前記再登録判定処理
が、後方列の前方列をキーとしてアルファベット順に並
べた表において、コード列の一部を変更した場合に、後
方列の前方列が再登録が必要か否かを、変更部分を含む
後方列の前方列について、開始位置の順に並べて二分法
で選択しつつ判定することを特徴とするものである。
【0151】上記のような構成を有する請求項70乃至
請求項73に記載の発明によれば、コード列の一部を変
更した場合に、変更部分を含む後方列の前方列につい
て、再登録が必要か否かの判断が容易になされる。
【0152】請求項74に記載の発明は、請求項62に
記載のデータ検索方法において、前記インデクスには順
位が付与され、前記検索処理において、その順位に基づ
いてキー列の全部又は一部を前方列とする後方列の数を
出力し、また、前記インデクス生成処理は、順位を付与
したインデクスを生成することを特徴とするものであ
る。
【0153】上記のような構成を有する請求項74に記
載の発明によれば、検索の条件に合致する部分列の数を
容易に求めることができるデータ検索方法を得ることが
できる。
【0154】請求項75に記載の発明は、請求項63に
記載のデータ処理方法において、前記インデクスには順
位が付与されており、前記検索処理において、その順位
に基づいてキー列の全部又は一部を前方列とする後方列
の数を出力し、また、前記更新処理は、前記順位の更新
も合わせて行なうことを特徴とするものである。
【0155】上記のような構成を有する請求項75に記
載の発明によれば、コード列が変更された場合であって
も、検索の条件に合致する部分列の数を容易に求めるこ
とができるデータ処理方法を得ることができる。
【0156】請求項76に記載の発明は、請求項64記
載のデータ処理方法において、前記インデクスには順位
が付与されており、前記検索処理において、その順位に
基づいてキー列の全部又は一部を前方列とする後方列の
数を出力し、また、前記インデクス生成処理は、順位を
付与したインデクスを生成し、前記更新処理は、前記順
位の更新も合わせて行なうことを特徴とするものであ
る。
【0157】上記のような構成を有する請求項76に記
載の発明によれば、コード列が変更された場合であって
も、検索の条件に合致する部分列の数を容易に求めるこ
とができるデータ処理方法を得ることができる。
【0158】
【発明の実施の形態】次に、本発明の実施形態につい
て、図面に従って具体的に説明する。なお、後述する実
施形態はコンピュータ上に実現され、実施形態の各機能
は、所定の手順(プログラム)がこのコンピュータを制
御することで実現される。
【0159】本明細書における各「手段」は、実施形態
の各機能に対応する概念的なもので、必ずしも特定のハ
ードウェアやソフトウェア・ルーチンに1対1には対応
しない。同一のハードウェア要素が、場合によって異な
った手段を構成する。例えば、コンピュータは、ある命
令を実行するときにある手段となり、別の命令を実行す
るときは別の手段となりうる。また、一つの手段が、わ
ずか1命令によって実現される場合もあれば、多数の命
令によって実現される場合もある。
【0160】したがって、本明細書では、以下、実施形
態の各機能を有する仮想的回路ブロック(手段)を想定
して実施形態を説明する。但し、コンピュータの使用は
一例であり、本発明の機能の全部又は一部は、可能なら
ば、カスタムチップ(専用の集積回路)のような電子回
路上に実現してもよい。
【0161】実施形態に用いられるコンピュータは、一
般には、CPU(中央演算処理装置)と、RAM(随時
書込読出型記憶素子)からなる主記憶装置とを有する。
また、前記コンピュータの規模は自由であり、マイクロ
コンピュータ・パーソナルコンピュータ・スモールコン
ピュータ・ワークステーション・メインフレームなど、
いかなる規模のものを用いてもよい。
【0162】また、前記コンピュータのハードウェア
は、典型的には、キーボードやマウスなどの入力装置
と、ハードディスク装置などの外部記憶装置と、CRT
表示装置やプリンタ印字装置などの出力装置と、必要な
入出力制御回路を含む。
【0163】但し、前記コンピュータのハードウェア構
成は自由であり、本発明が実施できる限り、上記の構成
要素の一部を追加・変更・除外してもよい。例えば、実
施形態は、複数のコンピュータを接続したコンピュータ
ネットワーク上に実現してもよい。また、CPUの種類
は自由であり、CPUを複数同時に用いたり、単一のC
PUをタイムシェアリング(時分割)で使用し、複数の
処理を同時平行的に行ってもよい。また、他の入力装置
(例えば、タッチパネル・ライトペン・トラックボール
などのポインティングデバイスや、デジタイザ・イメー
ジ読取装置やビデオカメラなどの画像入力装置・音声識
別装置・各種センサなど)を用いてもよい。また、他の
外部記憶装置(例えば、フロッピーディスク装置・RA
Mカード装置・磁気テープ装置・光学ディスク装置・光
磁気ディスク装置・バブルメモリ装置・フラッシュメモ
リなど)を用いてもよい。また、他の出力装置(例え
ば、液晶表示装置・プラズマディスプレイ装置・ビデオ
プロジェクター・LED表示装置・音響発生回路・音声
合成回路など)を用いてもよい。
【0164】また、前記コンピュータにおいて実施形態
を実現するためのソフトウェアの構成としては、典型的
には、実施形態の各機能を実現するためのアプリケーシ
ョンプログラムが、OS(オペレーティングシステム)
上で実行される態様が考えられる。また、実施形態を実
現するためのプログラムの態様としては、典型的には、
高級言語やアセンブラからコンパイル(翻訳)された機
械語が考えられる。但し、前記コンピュータのソフトウ
ェア構成も自由であり、本発明が実施できる限り、ソフ
トウェア構成を変更してもよい。例えば、必ずしもOS
を用いる必要はなく、また、プログラムの表現形式も自
由であり、BASICのようなインタプリタ(逐次解釈
実行型)言語を用いてもよい。
【0165】また、プログラムの格納態様も自由であ
り、ROM(読出し専用メモリ)に格納しておいてもよ
く、また、ハードディスク装置のような外部記憶装置に
格納しておき、コンピュータの起動時や処理の開始時に
主メモリ上にロード(読み込み)してもよい。また、プ
ログラムを複数の部分に分割して外部記憶装置に格納し
ておき、処理内容に応じて必要なモジュールのみを随時
主メモリ上にロード(読み込み)してもよい。さらに、
プログラムの部分ごとに異なった態様で格納してもよ
い。
【0166】また、本実施形態における各手順の各ステ
ップは、その性質に反しない限り、実行順序を変更し、
複数同時に実行し、また、実行ごとに異なった順序で実
行してもよい。このような順序の変更は、例えば、ユー
ザが実行可能な処理を選択するなどメニュー形式のイン
ターフェース手法によって実現することができる。
【0167】また、本明細書における「入力」は、本来
の情報の入力のみならず、情報の入力と密接に関連する
他の処理を含む。このような処理は、例えば、入力内容
のエコーバックや修正・編集である。また、本明細書に
おける「出力」は、本来の情報の出力のみならず、情報
の出力と密接に関連する他の処理を含む。このような処
理は、例えば、出力すべき範囲の入力や、画面スクロー
ルの指示である。なお、対話的入出力手順によって入力
と出力を一体的操作によって実現してもよく、このよう
な一体的操作によって、選択・指定・特定などの処理を
行ってもよい。
【0168】また、本明細書におけるデータ(情報)や
データの格納手段は前記コンピュータ上においていかな
る態様で存在してもよい。例えば、データのハードウェ
ア上の所在部分は、主記憶装置・外部記憶装置・CPU
のレジスタやキャッシュメモリなどいかなる部分でもよ
い。また、データの保持態様も自由である。例えば、デ
ータは、ファイル形式で保持されるのみならず、メモリ
やディスクなどの記憶装置を物理的アドレスで直接アク
セスすることによって実現してもよい。また、データの
表現形式も自由で、例えば、文字列を表すコードの単位
は、文字単位でも単語単位でもよい。また、データは必
要とされる一定時間だけ保持されれば十分で、その後消
滅してもよく、保持時間の長短は自由である。また、辞
書データのように当面変更されない情報は、ROMに格
納してもよい。
【0169】また、本明細書において、特定の情報への
言及は確認的で、言及されない情報の存在を否定するも
のではない。すなわち、本発明の動作では、動作に必要
な一般的な情報、例えば、各種ポインタ、カウンタ、フ
ラグ、パラメータ、バッファなどが適宜用いられる。
【0170】実施形態の各部分が処理に要する情報は、
特に記載がない場合、当該情報を保持している他の部分
から獲得される。このような情報の獲得は、例えば、当
該情報を格納している変数やメモリをアクセスすること
によって実現することができる。なお、情報の消去・抹
消は、当該情報の内容自体を必ずしも記憶領域から現実
に削除せず、消去を表すフラグを設定するなど、情報の
意味付けの変更によって行うことができる。
【0171】[1.第1実施形態]第1実施形態の目的
は、検索用データの更新所要時間が短いデータ処理装置
を提供することである。また、第1実施形態の他の目的
は、処理が高速なデータ処理装置を提供することであ
る。また、第1実施形態のさらに他の目的は、処理手順
が単純なデータ処理装置を提供することである。さら
に、第1実施形態の他の目的は、一定の長さ以下のキー
列の全体又は一部を含む部分を、もれなく、また、重複
なく検索するデータ検索装置を提供することにある。
【0172】なお、本実施形態は、請求項1,請求項
3,請求項5及び請求項7に記載のデータ処理装置、及
び請求項52に記載のデータ処理方法に対応するもので
ある。
【0173】[1−1.第1実施形態の構成]図1は、
第1実施形態の構成を示す機能ブロック図である。
【0174】すなわち、本実施形態のデータ処理装置
は、キー列による検索対象となるコード列1について、
その後方の部分である後方列の検索に用いることができ
る前方列をアルファベット順に並べ、また、その前方列
の前記コード列中における位置(すなわち、前方列の開
始位置)とを対として表す辞書データ2を生成する辞書
データ生成手段3を有する。また、前記辞書データ2に
基づいて、辞書tree4を生成する辞書tree生成
手段5を有する。
【0175】さらに、本実施形態のデータ処理装置は、
キー列による検索対象となるコード列1に基づいて、テ
キストデータ6を生成するテキストデータ生成手段7を
有する。また、前記テキストデータ6に基づいて、テキ
ストtree8を生成するテキストtree生成手段9
を有する。なお、前記辞書tree生成手段5及びテキ
ストtree生成手段9は、前記辞書tree4とテキ
ストtree8において、対応するnode間にポイン
タを設定する機能をも有する。
【0176】また、本実施形態のデータ処理装置は、前
記辞書tree4及びテキストtree8に基づいて、
キー列の全部又は一部を前方列とする後方列を検索する
検索手段10を有する。さらに、本実施形態は、前記コ
ード列1を変更する変更手段11と、前記変更の内容に
基づいて、変更に係る前記コード列の辞書データ2、辞
書tree4、テキストデータ6及びテキストtree
8を更新する更新手段12とを有する。
【0177】[1−2.第1実施形態の作用及び効果]
上記の様な構成を有する第1実施形態は、次のような作
用を有する。
【0178】[1−2−1.辞書データ及びテキストデ
ータの生成]まず、本実施形態におけるデータ構造につ
いて説明する。例えば、「ababcab」というコー
ド列1について、長さ3以下の任意の部分列の検索に用
いることができるデータ構造は、図2に示した様になっ
ている。なお、図において、上部は辞書における表現
(辞書tree4)、下部はテキストにおける表現(テ
キストtree8)を示している。また、図中、両方向
矢印は、辞書tree4とテキストtree8の対応す
るnode間に設定されたポインタの位置を示したもの
である。
【0179】図2に示したデータ構造を説明する前に、
長さ3以下の任意の部分列の検索に用いることができる
キーとなる部分列の辞書データ2としては、以下に示す
部分列が挙げられる。なお、前記「キーとなる部分列」
とは、「ababcab」というコード列の7つの後方
列(ababcab,babcab,abcab,bc
ab,cab,ab,b)を検索するために用いられる
前方列(ab,aba,abc,b,bab,bca,
cab)をいい、この前方列を、アルファベット順に並
べると、以下の様になる。また、テキストも、前記後方
列の開始位置を表わす整数(1〜7)と、その位置にあ
る文字(正確には文字を保持する記憶要素)との対応を
示している。
【0180】
【表2】 なお、各キーとなる部分列の左側に示した数値は、各部
分列のアルファベットの順位を示し、また、右側に示し
た数値は、各部分列の開始位置へのポインタを示してい
る。すなわち、コード列「ababcab」の各文字に
左側から番号を付け、各部分列の開始位置を示したもの
である。
【0181】ここで、図2について詳しく説明する。ま
ず、上部は辞書における表現(辞書tree)を示した
ものであるが、これは、上記アルファベット順に並べた
キーとなる部分列を、tree状に示したものであり、
キーとなる部分列(およびその部分列の開始位置へのポ
インタ)を、アルファベットの順位にもとづく辞書順
(lexicographic order)に並べた
表2と同等の機能を果たしている。
【0182】すなわち、アルファベット順に並べた場合
に中央に位置する「b」をルートとし、表2において
「b」より前に位置する3つの部分列(ab,aba,
abc)を「b」の左側に、また、「b」より後に位置
する3つの部分列(bab,bca,cab)を「b」
の右側におく。この場合、どの部分列をとっても、その
部分列の順位がそれより左側に位置する部分列の順位よ
りも大きく、また、右側に位置する部分列の順位よりも
小さくなるように配置されている。
【0183】一方、下部はテキストにおける表現(テキ
ストtree)を示したものであるが、これも辞書にお
ける表現と同様にtree状に表されている。すなわ
ち、コード列「ababcab」の中央に位置する
「b」をルートとし、各文字の区間長を1として示した
ものである。そして、この辞書treeとテキストtr
eeの間が、前記ポインタにより対応づけられている。
【0184】なお、テキストtreeを走査することに
より、任意の開始位置からテキストを復元することがで
きるので、辞書treeのnodeには開始位置に対応
するテキストtreeのnodeへのポインタのみを含
めれば、キーとなる部分列を格納する必要はない。ま
た、図2において(abc)などで示したキーとなる部
分列は、参考までに示したもので、nodeに格納され
るものではない。
【0185】[1−2−1−1.所定のパターンの出現
位置の検索]以下、本実施形態において、辞書データ2
を示すtree(以下、辞書treeという)上で、あ
るパターン、例えば“ab”を検索する場合について説
明する。すなわち、辞書データ2を構成するアルファベ
ットが“a、b、c”のみであるとすれば、キーとなる
部分列をアルファベット順に配列してある結果、パター
ン“ab”を含む部分列は“ab”〜“ac”の間に位
置していることになる。
【0186】これを上記の表2により検索すると、キー
“ab”以上で最小のキーを持つ項目(すなわち、“a
b”)と、キー“ac”(本実施形態では存在しない)
未満で最大のキーを持つ項目(すなわち、本実施形態で
は“abc”)が決定される。この際、ともに該当する
項目があり、かつ表中で前者(最小のキーを持つ項目)
が後者(最大のキーを持つ項目)より以前にあれば、前
者および後者、さらにその間に存在する項目はすべてキ
ーの前方列が“ab”であり、かつまたこれら以外にキ
ーの前方列が“ab”であるような項目は表中に存在し
ない。
【0187】一方、これを図2に示した辞書treeに
より検索すると、キー“ab”以上で最小のキーを持つ
項目(すなわち、node“ab”)と、キー“ac”
未満で最大のキーを持つ項目(すなわち、node“a
bc”)が決定される。この際、ともに該当する項目が
あり、かつ図中で、前者が後者と同一かより左側にあれ
ば、前者および後者、さらにその間に存在する項目はす
べてキーの前方列が“ab”であり、かつまたこれら以
外にキーの前方列が“ab”であるような項目は図中に
存在しない。
【0188】従って、これらの項目(ab、aba、a
bc)に付与されたテキスト位置へのポインタから、テ
キストを表現するtreeを経由して、それらのテキス
ト上での開始位置(6、1、3)を得ることができる。
すなわち、図2において、辞書データ(ab)のポイン
タを辿ると、テキストの位置“6”が得られ、また、辞
書データ(aba)のポインタを辿ると、テキストの位
置“1”が得られる。
【0189】この様に、本実施形態によれば、パターン
“ab”のテキスト上での出現位置を、もれなく、また
重複なく簡単に求めることができる。
【0190】[1−2−1−2.テキスト上の文字の変
更に伴う辞書の更新]テキスト上の文字の変更に伴う辞
書の更新は、次のように行うことができる。例として、
テキスト「ababcab」の位置4にある文字“b”
を、文字“c”に変更する場合について説明する(な
お、この文字の変更は、図1に示した変更手段11によ
って行われる)。
【0191】
【表3】 すなわち、辞書中の項目で、位置4の“b”をキーに含
んでいる項目(ca、ac、ba)の、位置4の
“b”に対応する“”を“c”で置き換えたもの(
ca、ac、ba)を、表中で正しい順序に登録し
なおす。上記表2と表3とを比較すれば明らかな様に、
本実施形態においては“cab”と変更後の“ca”
の位置が変更される(上記表2においては、“cab”
の順位は7であり、“bca”の順位は6であった)。
なお、この様な辞書データ2の変更は、図1に示した更
新手段12によって行われる。
【0192】なお、変更すべき位置の文字(本実施形態
では、位置4の“b”)をキーに含んでいる項目、およ
びキー中のどの文字が変更されるかは、変更すべき文字
のテキスト(表現)上の位置“4”と、表に登録される
部分列の(最大の)長さ“3”から判定できる。すなわ
ち、位置4の文字を含む長さ3の部分列の開始位置は、
テキストの各文字に付けた番号の4、3、2となる。し
たがって、図3に示した様に、テキスト表現の4、3、
2に付与された辞書項目(node)へのポインタを逆
にたどることによって、変更すべき項目がわかる(図3
の辞書treeにおいて、*を付したnode)。
【0193】また、変更すべき文字の位置“4”と、変
更すべき部分列の開始位置(4、3、2)との差に1を
加えた値から、変更を要する各部分列における変更すべ
き文字の位置が容易に得られる。例えば、“abc”の
開始位置は“3”であったが、この場合、4−3+1=
2より、2番目の文字である“b”を“c”に変更すれ
ば良いことになる。
【0194】特に、図3に示した様なtree表現にお
いては、辞書tree側のnodeにはキーは直接付与
されておらず、テキストtreeのnodeへのポイン
タが付与されているだけなので、テキストtree側の
nodeの文字を変更するだけで(本実施形態において
は、ルートに位置する“b”を“c”に変更する…図3
のテキストtreeにおいて、*を付したnode)、
ただちに辞書tree側のnodeの再登録を行えばよ
いことになる。
【0195】ここで、変更後の辞書treeおよびテキ
ストtreeの関係を示した図3について説明する。す
なわち、テキストtreeの位置“4”(本実施形態で
は、ルートに該当する)の文字を“c”に変更する。一
方、辞書とテキストとのポインタは変更されないので、
この部分についてはなんらの変更も要しない。なお、辞
書treeの*を付したnodeは再登録されたもので
あるが、図3においては、たまたま元と同じ位置に登録
されている。一般には、キーとなる部分列が異なるの
で、再登録された後の位置は異なってくる。
【0196】この様に、本実施形態によれば、テキスト
treeの文字を変更するだけで、辞書treeの表す
キーとなる部分列が自動的に変更されるので、テキスト
上の文字の変更に伴う辞書の更新に要する時間は、従来
に比べて大幅に短縮される。
【0197】[1−2−1−3.テキストに新たに文字
列を挿入する場合]テキストに新たに文字列を挿入する
場合は、文字の変更の場合と同様に、更新手段12によ
って、影響を受ける辞書項目の再登録を行うとともに、
新たな項目を追加する。また、テキストを表現するtr
eeにおいては、各部分列の開始位置(各文字の位置)
を、文字列の挿入に伴って調整する。
【0198】以下、テキスト「ababcab」の位置
4(“b”)の後ろに、文字列“ba”を挿入する場合
について説明する。まず、文字列“ba”を挿入する前
に、挿入箇所の両側の位置4、5の文字(“b”
“c”)の両方を含んでいる部分列(bca−456、
abc−345)をキーとする項目を、挿入後の部分列
(bba−456、ab−345)に変更して再登録
する(表4において、#を付した項目)。なお、上記
「bca−456」などの表示は、理解を容易にするた
めに、部分列bcaのテキスト上での位置を示したもの
である。また、下線部は、文字列“ba”を挿入するこ
とによって変更された部分を示している。
【0199】続いて、文字列“ba”を挿入することに
よって新たに生じる部分列(bac−567、aca−
678)をキーとし、その開始位置へのポインタを付与
した項目を、辞書データ2に追加する(表4において、
*を付した項目)。その結果、テキストデータ6及び辞
書データ2は以下の様に変更される。
【0200】
【表4】 次に、辞書及びテキストのtree表現について説明す
る。すなわち、辞書tree側のnodeには、キーは
直接付与されておらず、テキストtreeのnodeへ
のポインタが付与されているだけであり、上記の様に、
文字列“ba”を挿入する前の部分列(bca−45
6、abc−345)と、挿入後の部分列(bba−4
56、ab−345)とを比較すると、両者ともテキ
ストtreeのnodeへのポインタは同一である。つ
まり、辞書treeのnodeからテキスト位置(no
de)へのポインタおよびその逆ポインタについては、
変更しなくてよいことになる。
【0201】一方、テキストtree表現においては、
本出願人が別途特許出願をした「区間管理方法」に従っ
て、図4に示した様に、挿入すべき2文字“b”および
“a”を付した2つの新たなnodeをテキストtre
eに追加して、各文字の位置を表すnodeの部分区間
長の調整を行う。また、辞書treeに追加された新た
なnodeから、テキストtreeに追加されたnod
eへのポインタを追加する。なお、上記「区間管理方
法」については後述する。
【0202】ここで、文字列“ba”を挿入した後の辞
書treeおよびテキストtreeを示した図4につい
て説明する。すなわち、テキストtreeの位置“5”
(変更後において、ルートとなる)に“b”を、また、
位置“6”に“a”を追加する。一方、辞書treeに
おいて、図2の“abc”が“abb”に変更されてい
るが(ただし、辞書treeには、キーは直接表示され
ていない)、上述した様に、テキストtreeへのポイ
ンタは変更されていないため、ポインタの変更は不要で
ある。同様に、図2の“bca”が“bba”に変更さ
れているが、テキストtreeへのポインタは変更され
ていないため、ポインタの変更は不要である。また、辞
書treeには、辞書の表において追加された“ba
c”“aca”を表すnodeが追加され、それぞれテ
キストtreeの位置“5”“6”へポインタが設定さ
れている。なお、図4においては、理解を容易にするた
めに、本項に関係するポインタのみを記載してある。
【0203】この様に、本実施形態によれば、テキスト
treeに文字を追加し、この文字列の追加によって辞
書の表において追加された新たなキーとなる部分列に対
応するnodeを辞書treeに設け、この辞書tre
eのnodeとテキストtreeに追加された文字のn
odeとの間にポインタを設定することにより、辞書t
reeの表すキーとなる部分列が自動的に変更されるの
で、テキスト上の文字の追加に伴う辞書の更新に要する
時間は、従来に比べて大幅に短縮される。
【0204】*区間管理方法について*上述した様に、
本出願人が別途出願した「区間管理方法」とは、次の様
な作用によって、複数の区間を含むコード列を格納し、
コード列から所望の位置のコード値を取り出したり、そ
のコード列に対して所望の編集を行うことができるよう
にする方法である。
【0205】[A.構成]「区間管理方法」を用いたデ
ータ処理装置は、図5に示した様に、コード列の各区間
に基づいて各区間の範囲を表す二分木31を生成する二
分木生成手段32と、指定位置に対応する区間を二分木
31に基づいて検索する区間検索手段33と、区間が変
更された場合に変更の内容に応じて二分木31を更新す
る二分木更新手段34と、二分木ノードから(位置及
び)区間を特定する区間特定手段35とを有する。
【0206】このうち、前記二分木更新手段34は、区
間長を変更する区間長変更手段41と、区間が追加され
た場合に追加された区間に対応するノードを追加する追
加手段42と、区間が削除された場合に削除された区間
に対応するノードを削除する削除手段43とを有する。
また、各ノード間の結合順序を変更することによって、
二分木の構造を調整する構造調整手段45を有する。
【0207】[B.作用及び効果]上記のような構成を
有する「区間管理方法」を用いたデータ処理装置では、
次のような作用によって、複数の区間を含むコード列を
格納し、コード列から所望の位置のコード値を取り出し
たり、コード列に対して所望の編集を行うことができ
る。
【0208】[B−1.二分木の生成]まず、二分木生
成手段32が、コード列の各区間に基づいて各区間の範
囲を表す二分木31を生成する。コード列と区間はキー
ボード入力など所望の方法で与えればよい。この二分木
31は、各区間に対応するノードをルートから末端側に
向けてtree状に接続したものである。また、各ノー
ドの末端側には当該ノード以前の区間に対応するノード
である前方ノード及び当該ノード以降の区間に対応する
ノードである後方ノードのうち該当するものが接続され
る。さらに、各ノードには、当該ノードの区間長と、当
該ノードより末端側に存在する各ノードに対応する区間
長の合計である部分区間長が設定される。
【0209】例えば、図6は二分木の例であり、また、
図7は、図6の二分木を説明する図である。なお、これ
らの図は、図8の区間の長さ及びコード値を二分木に表
したものである。すなわち、各区間[1..3],
[4..5],[6..9],[10..15],[1
6..16]に対応するノードA,B,C,D,Eを、
ルートであるノードBから末端側に向けてtree状に
接続したものである。
【0210】また、各ノードA,B,C,D,Eには、
当該ノードの区間長と、当該ノードより末端側の各ノー
ドに対応する区間長の合計である部分区間長が設定され
ている。例えば、図7に示した様に、ノードDには、ノ
ードDに対応する区間[10..15]の区間長である
6に、ノードCに対応する区間[6..9]の区間長4
と、ノードEに対応する区間[16..16]の区間長
である1を加えた11が設定されている(6+4+1=
11)。
【0211】このように、「区間管理方法」を用いたデ
ータ処理装置では、区間ごとにノードが設定されるの
で、ノードを格納するためのデータブロックは区間と同
数あれば足り、データがコード数分のメモリを占有する
ことがない。このため、メモリ効率が向上する。特に、
二分木は、各ノードのためのデータ格納領域をポインタ
で接続することによって構成することができるので、膨
大な連続領域を確保する必要がなくなり、メモリを効率
よく利用できる。また、区間ごとに長さの精度が異なる
データを扱うこともできるので、浮動小数点など自由な
種類のデータを効率よく処理できる。
【0212】また、このデータ処理装置では、検索など
の処理において、各ノードの位置は当該ノードの前方ノ
ードの区間長に基づいて算出でき、また、ノードの区間
長から前方ノードと後方ノードの区間長を減ずることに
よって、当該ノード自体の区間長を算出することができ
る。このため、コード列の任意の位置(指定位置)のコ
ードは、指定位置と各ノードの位置・区間長を比較する
ことによって容易に特定することができる。
【0213】さらに、各ノードの位置関係はノード間の
相互関係で表され、各ノードの位置は他のノードの部分
区間長に基づいて算出される。このため、区間の一部の
変更に際しても、その変更の影響が波及する範囲は、変
更されたノードやそのノードからルートまでのパス上の
ノードに局限されるので、変更の手続が簡潔で済むとい
う利点を有する。
【0214】[B−2.検索]「区間管理方法」を用い
たデータ処理装置では、以下に述べる様にして、検索な
どの処理を行うことができる。すなわち、図9に示した
ように、区間検索手段33が、コード列中の任意の位置
である指定位置が属する区間を特定する場合に、ポイン
タの指すノードであるカレントノードをルートから(ス
テップ91)順次下位ノードに移動させながら、次の手
順を繰り返す。
【0215】まず、カレントノード及びカレントノード
の下位ノードの区間長に基づいてカレントノードの範囲
を算出し(ステップ92)、算出した範囲と指定位置を
比較し、算出した範囲よりも指定位置が前方の場合は
(ステップ93)、前方ノードにカレントノードを進め
(ステップ94)、算出した範囲よりも指定位置が後方
の場合は(ステップ95)、後方ノードにカレントノー
ドを進める(ステップ96)。また、算出した範囲に指
定位置が含まれる場合は(ステップ97)、指定位置が
カレントノードに含まれると特定する(ステップ9
8)。
【0216】例えば、指定位置(P=8)を含む区間に
対応するノードは、次の様にして特定される。すなわ
ち、図10において、ノードBをカレントノードとする
と、ノードA及びノードBに含まれる区間長は(16−
11=5)となり、指定位置(P=8)より小さい。し
たがって、指定位置8はノードBよりも右側にあること
が分かる。次に、図11に示した様に、カレントノード
をノードDに進める。この場合、指定位置を表す変数P
は、(P=8−5=3)となり、ノードDの前方ノード
であるノードCの区間長4より小さい。したがって、指
定位置(P=8)を含む区間に対応するノードは、図1
2に示した様に、ノードCに含まれることが分かる。
【0217】この様に「区間管理方法」を用いたデータ
処理装置では、区間検索手段33が、カレントノードを
ルートから順次下位側に移動させながら、カレントノー
ドの範囲と指定位置を比較するという簡潔な手順によっ
て、指定位置が属する区間を特定することができるの
で、容易に検索などの処理を行うことができる。
【0218】[B−3.区間の特定]「区間管理方法」
を用いたデータ処理装置では、以下に述べる様にして、
任意のノードを指定し、この指定ノードに対応する区間
を特定することもできる。なお、右区間又は左区間(総
区間)というときは、ルートの区間よりも指定ノードの
区間側の区間を意味する。
【0219】すなわち、カレントノードを、与えられた
指定ノードから順次親ノードの方向へルートまで移動さ
せる。この移動の際に、移動前の子ノードの親ノードに
対する左右の別に応じてノードの区間長を順次加算する
ことによって、指定ノード以前の総区間長である左区間
長又は指定ノード以降の総区間長である右区間長のうち
少なくとも一方を特定する。図13は、指定ノードに対
応する区間を特定する手順の一例を示すフローチャート
である。
【0220】この手順では、まず指定ノードをカレント
(ノード)とし、カレントの左の子の部分区間長を左区
間長とする(ステップ131)。ここで、左区間(長)
は指定ノードに対応する以前の総区間(長)である。
【0221】そして、カレントがルートとなるまで(ス
テップ132)、次の手順を繰り返す。すなわち、元の
カレントを子ノードとしてカレントを親に進め(ステッ
プ133)、このとき元のカレントである子ノードがカ
レントの右の子であったときは(ステップ134)、カ
レントの正味区間長とカレントの左の子の部分区間長と
の和を算出し(ステップ135)、左区間長にその和を
加算する(ステップ136)。なお、ノードの部分区間
長とは、そのノードをルートとする部分木に含まれるノ
ードの正味区間長の合計をいう。カレントの正味区間長
とカレントの左の子の部分区間長の和は、カレントの部
分区間長から右の子(元のカレント)の部分区間長を減
じることによって算出できる。
【0222】カレントがルートとなったとき(ステップ
132)、指定ノードの左端は、左区間長の値の次、す
なわち1加算した値として得られる(ステップ13
7)。このとき、区間が浮動小数点で表されるときは左
区間長の値がそのまま区間の左端となる。また、指定ノ
ードの右端は、左区間長に指定ノードの正味区間長を加
算した値として得られる(ステップ138)。
【0223】なお、指定ノードの右区間(指定ノードに
対応する区間以降の総区間)は、ルートであるカレント
ノードの部分区間長から指定ノードの右端の値を減じた
値の次(1加算)から始まり、二分木の表す区間全体の
終端まで続く。この終端は、ルートの部分区間長の値と
同じ値で示される。
【0224】図14は、指定ノードに対応する区間を特
定する手順の他の一例を示すフローチャートである。図
13の手順では、指定ノードの区間の左側に存在する左
区間を求め、指定ノードの区間の右側は、左区間長に基
づいて算出した。図14の手順は、右区間と左区間の双
方の長さを求め、指定ノードの区間をこの両区間にはさ
まれた区間として特定するものである。
【0225】この手順では、まず指定ノードをカレント
とし、カレントの左の子の部分区間長を左区間長とし、
カレントの右の子の部分区間長を右区間長とする(ステ
ップ141)。そして、カレントがルートとなるまで
(ステップ142)、次の手順を繰り返す。
【0226】すなわち、元のカレントを子ノードとして
カレントを親に進め(ステップ143)、元の子ノード
がカレントの右の子であったときは(ステップ14
5)、左区間長に新たなカレントの正味区間長とカレン
トの左の子の部分区間長との和を加算し(ステップ14
6)、元の子ノードがカレントの左の子であったときは
(ステップ145)、右区間長に新たなカレントの正味
区間長とカレントの右の子の部分区間長との和を加算す
る(ステップ147)。カレントの正味区間長とカレン
トの左(右)の子の部分区間長との和は、カレントの部
分区間長から右(左)の子の部分区間長を減じることに
よって算出できる。
【0227】カレントがルートとなったとき(ステップ
142)、指定ノードの区間は左区間と右区間にはさま
れた区間として特定される(ステップ148)。指定ノ
ードの右端は、ルートの部分区間長から右区間長を減ず
ることによって算出される。
【0228】[B−4.二分木の更新]区間が変更され
た場合は、二分木更新手段34が、変更の内容に応じて
二分木31を更新する。すなわち、コード列の区間長が
変更された場合は、区間長変更手段41が二分木31に
おける区間長を変更する。また、コード列の区間が削除
された場合は、削除手段43が削除された区間に対応す
るノードを二分木31において削除する。また、コード
列の区間が追加された場合は、追加手段42が追加され
た区間に対応するノードを二分木31において追加す
る。
【0229】この様に「区間管理方法」を用いたデータ
処理装置では、区間の長さの変更・削除・追加という区
間の変更の内容に応じて、それぞれ区間長変更手段・削
除手段・追加手段が二分木31を更新するため、二分木
31の生成をやり直す必要がない。
【0230】[B−4−1.区間長の変更]このうち、
区間長の変更では、長さを変更する区間のノードからル
ートへ至る各ノードの部分区間長が、変更分だけ順次変
更される。例えば、図7の例において、長さ4の区間
[6..9]を2短縮して長さ2の区間[6..7]に
変更した場合、これに対応して、ノードB,C,Dの部
分区間長は、それぞれ2減じられて図15の状態とな
る。
【0231】この様に、「区間管理方法」を用いたデー
タ処理装置では、区間の長さが変更された場合でも、変
更された区間のノードからルートまでのノードを変更す
れば足りるため、従来の様に、変更された区間以降の全
ノードを記憶領域上で移動させる必要がないので、デー
タ処理が効率化される。
【0232】[B−4−2.区間の追加]区間の追加の
際には、追加手段42が、二分木31について、追加に
係る区間に対応するノードを二分木31に追加し、ノー
ドの結合順序を調整し、各ノードの区間長を調整する。
なお、ノードの追加の手法は従来から複数のものが公知
であり、そのいずれを用いてもよい。例えば、図7にお
いて、区間[10..15]の前に長さ3の区間[1
0..12]を追加し、それまでの区間[10..1
5]及び区間[16..16]を、それぞれ、区間[1
3..18]及び区間[19..19]に移動する場
合、新たなノードの追加の態様は、図16,図17及び
図18の3つの態様が考えられる。
【0233】なお、前記追加手段42は、前記区間長の
調整において、付加したノードの部分区間長を、その子
のノードの部分区間長(子がない場合は0)の和と、追
加する区間の長さの和とし、付加したノードの親を経由
してルートに至るパス上の各ノードについて、その部分
区間長を、追加する区間の長さだけ加算する。
【0234】この様に、「区間管理方法」を用いたデー
タ処理装置では、区間の追加の場合も、追加されたノー
ドの親ノードからルートまでのノードに区間長を加算す
るという単純な処理で区間長を調整することができる。
なお、図17のように、βの位置にノードを付加した二
分木31を図19に示す。
【0235】[B−4−3.区間の削除]前記削除手段
43は、区間の削除の際には、削除する区間に対応する
ノードを二分木31から削除し、ノード間の結合関係を
調整し、部分区間長を調整する。この様な削除と調整の
手法は、従来から複数の手法が知られており、いずれの
手法を用いてもよい。例えば、図19の二分木31にお
いて、ノードDを削除する場合、削除後の構造は図20
又は図21のいずれでもよい。
【0236】[B−4−4.構造調整]区間の追加・削
除あるいは参照(検索)の際には、構造調整手段45
が、各ノード間の結合順序を変更することによって、二
分木31の構造を調整する。
【0237】この構造調整には、データ処理で参照され
るルートから各ノードに至るパスの長さを平均化するも
のと、複数の操作(追加・削除・検索等からなる)で参
照される各ノードからルートまでのパスの長さの総計を
平均化する、すなわち、一操作当たりのパスの長さを一
定値以下に近づけるものとがある。このため、データ処
理で対象とするノードまでのパスの長さが、一操作当た
りでは一定値以下になり、検索や変更などのデータ処理
が効率化される。
【0238】なお、この構造調整はノードの削除や追加
あるいは参照(検索)に際して行えばよい。構造調整の
手法は従来から複数存在し、これら従来の手法を含むい
かなる手法を用いてもよいが、用いる構造調整の手法に
対応した手法によって部分区間長の調整を行うべきであ
る。なお、構造調整によって、ルートから各ノードに至
るパスの長さの平均値は、通常、ノードの総数の対数に
比例する。これによって、検索・区間長調整・構造調整
など、各種処理の所要時間が区間の総数の対数にほぼ比
例して平均化される。
【0239】以下、再び、本実施形態について説明す
る。
【0240】[1−2−1−4.テキストから一部の文
字列を削除する場合]テキストから一部の文字列を削除
する場合は、前記の挿入の場合と逆の手続きを行えばよ
い。
【0241】以下、テキスト「ababbacab」か
ら、文字列“ba”を削除する場合について説明する。
すなわち、まず、削除する文字列“ba”にその開始位
置が含まれている部分列をキーとする項目(bac−5
67、ca−678)を辞書から削除する。続いて、
削除する文字列“ba”の先頭の文字(位置5の
“b”)を含んでいる部分列(ab−345、bba
−456)をキーとする項目を、削除後の部分列(ab
c−345、bca−456)に変更して、辞書に再登
録する。なお、先に辞書から削除した部分列は、この変
更の対象とならないことはいうまでもない。また、テキ
ストデータについては、テキスト「ababbaca
b」から“ba”を削除して、それ以降の部分列(ca
b−789)の位置を、cab−567に調整すればよ
い。この位置調整は、前記区間管理方法により、効率良
く行うことができる。なお、これらの処理は、図1に示
した更新手段12によって行われる。その結果、テキス
トデータ6及び辞書データ2は以下の様に変更される。
【0242】
【表5】 次に、図4を参照して、辞書及びテキストのtree表
現について説明する。すなわち、辞書tree側のno
deには、キーは直接付与されておらず、テキストtr
eeのnodeへのポインタが付与されているだけであ
り、上記の様に、文字列“ba”を削除する前の部分列
(bba−456、ab−345)と、削除後の部分
列(bca−456、abc−345)とを比較する
と、両者ともテキストtreeのnodeへのポインタ
は同一である。つまり、辞書treeのnodeからテ
キスト位置(node)へのポインタおよびその逆ポイ
ンタについては、変更しなくてよいことになる。
【0243】一方、テキストtree表現においては、
上記「区間管理方法」に従って、削除すべき2文字
“b”および“a”を付した2つのnodeをテキスト
treeから削除して、各文字の位置を表すnodeの
部分区間長の調整を行う。
【0244】この様に、本実施形態によれば、テキスト
treeから文字を削除し、この文字列の削除によって
辞書の表において削除されたキーとなる部分列に対応す
るnodeを辞書treeから削除し、この削除された
辞書treeのnodeとテキストtreeから削除さ
れた文字のnodeとの間に設定されていたポインタを
削除することにより、辞書treeの表すキーとなる部
分列が自動的に変更されるので、テキスト上の文字の削
除に伴う辞書の更新に要する時間は、従来に比べて大幅
に短縮される。
【0245】[1−3.第1実施形態の効果]以上述べ
た様に、第1実施形態によれば、辞書中の項目の検索、
辞書への1つの項目の追加、削除は、それぞれ辞書中の
総項目数の対数に比例する時間で実行することができ
る。また、テキストを表わすtreeへの1文字の追
加、削除も同様に、テキストの総文字数(あるいは表現
するtreeのnode数)の対数に比例する時間で実
行することができる。
【0246】従って、テキストへの文字列の挿入、削除
に伴って、検索用のデータ構造を調整するのに要する時
間は、◎ (変更する文字列の長さ◎+キー登録される部分列の長
さ)◎×log{総文字数(treeのnode数)} に比例する時間に抑えることができる。
【0247】なお、この場合、上式の(変更する文字列
の長さ+キー登録される部分列の長さ)がそれほど長く
ない一定値で、テキスト全体の長さに依存しないとみな
せるならば、このデータ構造に対する更新操作は、テキ
ストの長さの対数に比例する時間で実行することができ
る。また、上述した様に、検索用データの更新所要時間
を大幅に短縮できる結果、データ処理を高速で行うこと
が可能となり、処理手順も単純化されるという効果が得
られる。
【0248】[1−4.第1実施形態の変形例]なお、
本実施形態のデータ処理装置の構成要件の一部により、
以下のデータ検索装置を構成することができる。この変
形例は、請求項18,請求項20及び請求項22に記載
されたデータ検索装置、及び請求項56に記載されたデ
ータ検索方法に対応するものである。すなわち、キー列
による検索対象となるコード列について、その後方の部
分である後方列の検索に用いることができる前方列をア
ルファベット順に並べ、また、前記前方列とその前方列
の前記コード列中における位置とを対として表す辞書デ
ータを生成する辞書データ生成手段と、前記辞書データ
に基づいて、二分木である辞書treeを生成する辞書
tree生成手段と、前記コード列に基づいてテキスト
データを生成するテキストデータ生成手段と、前記辞書
treeに基づいて、キー列の全部又は一部を前方列と
する後方列を検索する検索手段とから、データ検索装置
を構成することができる。
【0249】この様な構成を有するデータ検索装置によ
れば、簡易な構成によって、検索対象となるパターンの
テキスト上での出現位置をもれなく、また、重複なく求
めることができる。
【0250】また、上記データ検索装置の変形例とし
て、上記構成要件に加えて、前記テキストデータに基づ
いて、二分木であるテキストtreeを生成するテキス
トtree生成手段を備え、前記辞書tree及びテキ
ストtreeに基づいて、キー列の全部又は一部を前方
列とする後方列を検索するように構成することもでき
る。
【0251】この様な構成を有するデータ検索装置によ
れば、テキストの変更を伴う場合でも、検索対象となる
パターンのテキスト上での出現位置をもれなく、また、
重複なく求めることができる。
【0252】[2.第2実施形態]第2実施形態の目的
は、辞書及びテキストに格納される文字列を削減するこ
とにより、記憶領域を縮小したデータ処理装置を提供す
ることにある。なお、本実施形態は、請求項9,請求項
11乃至請求項14に記載の発明に対応するものであ
る。
【0253】[2−1.第2実施形態の構成]本実施形
態においては、図1に示した辞書tree生成手段5及
びテキストtree生成手段9によって、辞書tree
4及びテキストtree8の構成を簡略化して、記憶領
域の縮小化を図っている。
【0254】すなわち、本実施形態においては、検索す
る可能性のある前方列である部分列のみを辞書に登録
し、検索する可能性のない部分列を辞書から省いてい
る。この様に構成することにより、辞書を小さくするこ
とができる。例えば、テキスト「ababcab」にお
いて、bで始まる文字列を検索する必要がないことが分
かっていれば、表2に示した辞書データの内、“b”で
始まる3つの部分列“b”“bab”“bca”を辞書
に登録せず、“a”と“c”で始まる4つの項目“a
b”“aba”“abc”“cab”だけを辞書に登録
すれば十分である。すなわち、辞書及びテキストは以下
のようになる。
【0255】
【表6】 [2−2.第2実施形態の作用及び効果]上記の様な構
成を有する第2実施形態は、次の様な作用を有する。
【0256】[2−2−1.テキスト内容の辞書上での
保持]本実施形態においては、テキストの各文字を保持
するテキスト上の位置要素と辞書項目の間には、相互に
参照できるようにポインタが張られているから、文字を
テキストtree(のnode)上で保持するか、辞書
tree(のnode)上で保持するかは、実施の際に
選択できる。例えば、第1実施形態で示した図2の例で
は、文字はテキストtree上に保持されている。
【0257】また、図22に示した様に、文字(列)を
辞書項目に対応するnodeに保持するようにしてもよ
い。なお、図22は、上述した様に“b”で始まる部分
列の辞書への登録を省略した場合を示している。また、
ここでは、テキストtreeにおいても、辞書に登録さ
れていない部分列の開始位置に対応するnodeは省略
し、直前の開始位置に併合して長さを2以上の区間とし
てある。
【0258】[2−2−2.テキストの復元]本実施形
態のデータ処理装置において、ある位置から始まるテキ
ストを復元する場合には、テキストtreeと辞書tr
eeを交互に使用する。なお、このテキストの復元は、
図1に示した検索手段10によって行われる。例えば、
図22において、位置4以降のテキストを復元するに
は、上記「区間管理方法」に示した方法で、位置4に対
応するテキストtreeのnodeを検索し、Xのno
deを得る。この場合、位置4は、nodeXが表わす
区間[3、4]の2つ目の位置である。一方、node
Xのポインタを辞書treeへ辿ると、“abc”を保
持したnodeへ達する。その結果、位置3を開始位置
とする文字列“abc”(この文字列は、辞書に登録さ
れている)の2文字目“b”が、位置4にある文字であ
ることが分かる。
【0259】次に、位置5にある文字を得る方法につい
て説明する。この方法としては、次に挙げる2つの方法
がある。すなわち、◎ (1)位置4の文字“b”は、辞書項目“abc”の2
文字目の“b”であったから、それに続く文字“c”が
位置5の文字である。 (2)上述した様に、位置4はnodeXが表わす区間
[3、4]の右端(後端)であるから、それに続く区間
([5、5])に対応するnodeYから始まる部分列
の先頭の文字が位置5の文字である。この場合も、上述
した様に、nodeYのポインタを辞書treeへ辿る
と、“cab”を保持したnodeへ達する。その結
果、辞書項目“cab”の先頭の文字である“c”が位
置5の文字であることが分かる。
【0260】さらに、位置6の文字を得る方法について
説明する。まず、上記(1)の方法では、位置5が既に
辞書項目の終端に対応しているので、再び、上記「区間
管理方法」に示した方法で、位置6に対応するテキスト
位置を表現するtreeのnodeを検索してnode
Zを得る。そして、それが表わす区間[6、7]にある
文字列の先頭の文字が位置6の文字である。この場合
も、上述した様に、nodeZのポインタを辞書を表わ
すtreeへ辿ると、“ab”を保持したnodeへ達
する。その結果、辞書項目“ab”の先頭の文字である
“a”が位置6の文字であることが分かる。一方、上記
(2)の方法では、nodeYは位置5のみからなる区
間に対応しているので、次の区間に対応するnodeZ
を同様に検索する。なお、上記(1)(2)の方法を適
宜混合して使用することもできる。
【0261】ところで、(2)の方法をとるとすれば、
「テキストの復元」という機能に関しては、辞書tre
eの各nodeに格納される文字列は、図23に示した
様に、対応するテキスト位置のnodeが表わす区間の
長さだけあればよい。なぜなら、辞書項目(キー)とし
て登録される部分列は、もともとテキストの一部である
から、テキストの復元ができればキーの復元も同様にで
きるので、辞書treeの各nodeにキーを全部格納
する必要はなく、前記テキストの復元に必要な長さだけ
格納すればよいからである。その結果、辞書treeの
各nodeにおいて、文字列を格納するスペースを大幅
に節約することができる。
【0262】また、図23において、辞書treeの各
nodeに格納をされている文字列のうち“ab”は共
通している。そこで、共通する文字列については、図2
4に示した様に、1カ所(あるいは、より少数のnod
e)にのみ格納し、他のnodeからは、テキストtr
eeのnodeを経由して、その文字列を得るようにす
ることにより、さらにスペースを節約することもでき
る。
【0263】なお、この場合、問題となるのは、テキス
トの復元はできるものの、テキスト位置を表わすnod
eから、その位置(区間)の文字列を前方列とする辞書
項目の部分列(キー)を表わす辞書のnodeへのポイ
ンタ(図24中、点線で示す)が失われるし、また、そ
れを保持するために余分な領域が必要になることであ
る。
【0264】しかし、この問題は、辞書が部分列のアル
ファベット順にソートされていること、およびテキスト
位置を与えれば、その位置から始まるキーとなる部分列
は(長さが得られるものとして)復元することができる
ことを利用すれば、辞書のキーを少し拡張することで、
上記ポインタと同じ機能を果たすことができる。
【0265】なお、上記キーを拡張する方法は、これま
での説明で辞書の各nodeに付与してきたキーとなる
部分列の末尾に、そのnodeが対応するテキストtr
ee中のnodeへのポインタ値を追加し、これをキー
とするものである。すなわち、辞書を部分列のアルファ
ベット順にソーティングしておくことにより、テキスト
位置を表わすnodeを与えれば、そこから始まるキー
となる部分列を復元し、末尾にそのnodeのアドレス
(そのnodeへのポインタ値)を追加したものをキー
として辞書を検索することにより、図24中、点線で示
されるnodeを確定することができる。なお、この拡
張は、辞書treeへの検索・追加に使用するキーの一
対比較を行う手続きのみの変更で実現でき、nodeの
構成等の変更は必要としない。
【0266】この様な辞書の部分をわかりやすく図示す
ると図25のようになる。すなわち、検索の対象である
部分列“abc”に、その先頭の位置要素のアドレス
(ポインタ値)を追加したもの(つまり、“abc
3”)で辞書を検索すれば、図中“*abc”の項目を
見出すことができる。
【0267】しかしながら、上述の方法にも、まだ改善
の余地がある。すなわち、この方法では、図24に示し
た様に、辞書treeが文字列を格納しているnode
と、文字列を含まないnodeの2種類から成ってい
る。そこで、図26に示した様に、これらを一種類のn
odeとし、かつ文字列を“陽”に含まない形にする
(つまり、文字列を格納するスペースをすべて取り去
る)ことができる。換言すれば、図26において、辞書
treeのnodeはすべて3つのスペースで構成さ
れ、文字列“ab”“c”はそのnode上には格納さ
れていない。
【0268】なお、この場合、辞書を構成するnode
のアドレスは任意に選ぶことができ、一方、格納される
文字列はそれぞれユニーク(唯一)な(もしくは、同一
のものがあっても、適当にまとめたために少数となって
いる)はずだから、文字列を格納すべきnodeのアド
レスを、その格納すべき文字列を表わす(あるいは、な
んらかの形でアドレスに含む)ように選ぶことができ
る。
【0269】その結果、図26に示した様に、辞書tr
eeの(一部の)nodeでは、アドレスの一部として
“暗”に文字列(“ab”“c”)を格納することがで
きるばかりでなく、テキストtreeのnodeにおい
ては、辞書treeのnodeへのポインタ(の一部)
として、“陽”に文字列(“ab”“ab”“c”“a
b”)を格納することができるという効果も得られる。
従って、テキストの復元において、上述した様に、いち
いち辞書treeのnodeの内容を参照することな
く、テキストtreeのnodeへのポインタ値のみか
ら文字列を得ることができるという、きわめて効率的な
処理が可能になる。
【0270】なお、図26において、(ab)(c)
は、それぞれ“ab”及び“c”をコードとする(ある
いは、コードとして含む)アドレスまたはポインタであ
る。また、アドレスは、そのnodeが実際置かれた主
記憶上の番地でも良いし、nodeを配列で表現した場
合のインデックスの値でもよい。
【0271】[2−2−3.辞書とテキストの一体化]
ところで、辞書treeのnodeとテキストtree
のnodeは、図23において両方向の矢印で示される
ように、1対1に対応づけられている。但し、テキスト
位置のtree中に、検索する必要がない部分、例え
ば、空白の続く部分等、辞書に登録されない部分列を表
わすnodeが含まれることもあり、この場合は、1対
1の対応関係は成り立たない。しかし、少なくとも辞書
に登録された部分列については、テキスト位置との対応
は1対1となっている。
【0272】この点に着目すれば、図27に示した様
に、辞書とテキストを一体に構成することが考えられ
る。すなわち、上述した様に、わざわざポインタによっ
て両者を参照せずに、はじめからこれら2種類のnod
eを一体のものとして扱うことによってポインタを省略
することにより、記憶領域を節約することができる。
【0273】すなわち、図27において、上段は辞書を
示し、下段はテキストを示している。また、図27は、
図23に示した辞書treeのnodeとテキストtr
eeのnodeを一体に構成したものである。例えば、
図23において、辞書treeのルートである“ab”
を格納したnodeは、ポインタによって、テキストt
reeの最も左側のnodeと対応関係が付けられてい
るが、図27においては、上下に一体に構成されてい
る。
【0274】なお、この形式においても、図26に示し
た様に、文字列の格納をアドレスで代替することは可能
であり、その場合の構成は図28のようになる。すなわ
ち、図26において、辞書treeのルートである“a
b”を“暗”に格納したnodeは、ポインタによっ
て、テキストtreeの最も左側のnodeと対応関係
が付けられているが、図28においては、両者は上下に
一体に構成されている。
【0275】この様に構成することにより、わざわざポ
インタによって両者を参照する必要がなくなり、すべて
のポインタを省略することができるので、記憶領域を大
幅に削減することができる。
【0276】なお、上記の例は、文字列をコード化した
アドレスを持つnodeがユニーク(唯一)である例だ
が、同一の文字列をコード化したアドレスを複数のno
deに持たせることができれば、各nodeが格納すべ
き文字列をそれぞれアドレスに含ませることができる。
すなわち、図29に示した様に、格納すべき文字列を含
むアドレスを持ったnodeを選んで使用することがで
きるので、さらにコンパクトな構成が可能となり、記憶
領域を大幅に削減することができる。
【0277】ここで、同一の文字列をアドレスに含むn
odeを多数用意する方法としては、アドレスの下位ビ
ットを文字列を表わすものとし、下位ビットが同一で、
上位ビットが異なるアドレスのnodeは、すべて同一
の文字列をアドレスとして含むものとして扱うという方
法が可能である。あるいは、ハッシング等の手法によっ
て、文字列をアドレスの上位ビットに変換し、上位ビッ
トがそれに一致するアドレスのnodeは、当該文字列
をアドレスに含むものとして扱うという方法もある。
【0278】[3.第3実施形態]本実施形態は、上記
実施形態と異なり、キーとなる部分列の長さを制限しな
いデータ処理装置またはデータ検索装置に関するもので
ある。なお、本実施形態は、請求項2,請求項4,請求
項6,請求項8及び請求項10に記載のデータ処理装
置、及び請求項53に記載のデータ処理方法に対応する
ものである。
【0279】ここで、キーとなる部分列の長さを制限し
ないこととした理由について、以下に説明する。すなわ
ち、上記実施形態で説明した様に、テキスト「abab
cab」に関して、長さ3以下の任意の部分列を検索す
るための辞書データは表7に示すようなものであった。
なお、辞書(インデクス)とは、キーとなる部分列をア
ルファベット順に並べたものをいい、各キーとなる部分
列にはその開始位置が付与されている。
【0280】
【表7】 この様にキーとなる部分列の長さを制限する理由は、ま
ず、第1にキーとなる部分列を格納する領域を節約する
ためであり、第2に検索すべき適切な長さにキーとなる
部分列を制限して不要な比較を避けるためである。例え
ば、データ検索に当たって、“ab”2文字の位置(3
カ所)を知れば十分で、“aba”か“abc”の違い
には興味がない場合、キー長を“2”に制限しておけ
ば、インデクス構成時には“aba”の3文字目の
“a”と“abc”の3文字目の“c”の比較操作を省
くことができる。
【0281】しかし、通常は、一定の決まった長さのパ
ターンしか検索しないということはまずないので、イン
デクスを二分探索するだけですべての検索の要求に応え
ようとすれば、最も長いパターンの長さにキー長を設定
せざるを得ない。その場合、どうしても不要な比較が発
生する。
【0282】逆に、最低これだけの長さのパターンは必
ず検索するという長さにキーを制限すると、それより長
いパターンの検索には、インデクスで二分探索を行った
だけでは前方列が一致するテキスト位置が多数得られ、
それらについて後続のテキストがパターンと一致するか
否かをいちいち(あるいは別の手段で)判別しなければ
ならないことになる。例えば、上記の例においてキー長
を“2”に制限すると、前方列であるパターン“ab”
を有するテキスト位置が、(ab,6)(aba,1)
(abc,3)と多数得られてしまうことになり、それ
より長いパターン“abc”を検索しようとすると、そ
れらについて後続のテキストがパターンと一致するか否
かを別途判別しなければならない。
【0283】この様に、キーとなる部分列の長さを制限
するデータ構造においては、検索すべき最長のパターン
の長さが不明な場合は、どうしてもキー長を越えた場合
の判別の手段を備えねばならず、手続きが複雑になると
いう問題があった。
【0284】そこで、本実施形態の目的は、キーとなる
部分列の長さを制限しない場合において、検索用データ
の更新所要時間が短いデータ処理装置を提供することに
ある。また、本実施形態の他の目的は、処理が高速なデ
ータ処理装置を提供することである。また、本実施形態
のさらに他の目的は、処理手順が単純なデータ処理装置
を提供することである。さらに、本実施形態の他の目的
は、任意の長さのキー列を、もれなく、また、重複なく
検索するデータ検索装置を提供することにある。
【0285】[3−1.第3実施形態の構成]図30
は、第3実施形態の構成を示す機能ブロック図である。
すなわち、本実施形態のデータ処理装置は、キー列によ
る検索対象となるコード列1について、その後方の部分
である後方列の検索に用いることができる前方列をアル
ファベット順に並べ、また、その前方列の前記コード列
中における位置(すなわち、前方列の開始位置)とを対
として表す辞書データ2を生成する辞書データ生成手段
3を有する。なお、本実施形態においては、辞書データ
2を構成するキーとなる部分列の長さは限定されない。
【0286】さらに、本実施形態のデータ処理装置は、
キー列による検索対象となるコード列1に基づいて、テ
キストデータ6を生成するテキストデータ生成手段7を
有する。なお、本実施形態においては、上記テキストデ
ータ6は、コード列1の各文字に左側から番号を付すこ
とにより構成されている。そして、前記辞書データ生成
手段3によって、辞書データ2に示された前方列の開始
位置とテキストデータ6との間にポインタが設定される
ように構成されている。
【0287】また、本実施形態のデータ処理装置は、前
記辞書データ2及びテキストデータ6に基づいて、キー
列の全部又は一部を前方列とする後方列を検索する検索
手段10を有する。さらに、本実施形態のデータ処理装
置は、前記コード列1を変更する変更手段11と、前記
変更の内容に基づいて、変更に係る前記コード列の辞書
データ2及びテキストデータ6を更新する更新手段12
とを有する。
【0288】[3−2.第3実施形態の作用及び効果]
上記の様な構成を有する第3実施形態は、次のような作
用を有する。
【0289】[3−2−1.辞書データの生成]まず、
本実施形態におけるデータ構造について説明する。本実
施形態においては、辞書データとして、キーとなる部分
列を個別に格納するのではなく、コード列中における各
部分列の開始位置に対応するテキストデータの一部分へ
のポインタを格納しておき、キーとなる部分列はテキス
トの一部を復元することによって得るように構成されて
いる。
【0290】また、本実施形態の辞書データにおいて
は、インデクス(辞書)に登録するキーとなる部分列の
長さは特に限定されない。従って、キーとなる部分列の
長さを制限するデータ構造のように、アルファベット順
に配列された前方列を検索し、さらに後続部分列をテキ
スト上でチェックするといった後処理を要せずに、直接
インデクスを検索するだけで、任意の長さの部分列を検
索することができる。
【0291】例えば、「ababcab」というコード
列1についての辞書データ2としては、(ababca
b,babcab,abcab,bcab,cab,a
b,b)の7つの後方列が挙げられ、これらの部分列を
アルファベット順に並べると、以下の様になる。
【0292】
【表8】 なお、各キーとなる部分列の左側に示した数値は、各部
分列のアルファベット順の順位を示し、また、右側に示
した数値は、各部分列の開始位置へのポインタを示して
いる。すなわち、コード列「ababcab」の各文字
に左側から番号を付け、各部分列の開始位置を示したも
のである。
【0293】上述した様にキーとなる部分列の長さを制
限せずに辞書データを構成しても、表7に示した様なキ
ーの長さを“3以下”に制限した辞書データと比較し
て、その使用メモリ量はなんら増加しない。問題となる
のは、最初にテキストからインデクスを構成するとき及
びテキストの部分的変更に伴ってインデクスを更新する
ときの手間(演算時間)に関するものである。すなわ
ち、表面的には、インデクスは、図31に示した様なキ
ーとなる部分列の大小比較にもとづく二分探索木で構成
されるから、キーが長くなればそれだけ比較に時間がか
かるはずである。
【0294】特に、本実施形態においては、キーとなる
部分列として、テキストのすべての後方列(ababc
ab,babcab,abcab,bcab,cab,
ab,b)が用いられるため、キーの平均長はテキスト
全長の1/2で、テキストの全長に比例して長くなる。
したがって、キーの長さに比例してキーの比較時間が増
加するとすれば、テキストの後方列を全て二分探索木に
登録してインデクスを構成するのに、テキストの長さ
(後方列の数)の少なくとも2乗に比例する時間がかか
ることになってしまう。
【0295】しかし、通常、キーの比較は、先頭(左
端)の文字から順に行い、不一致が生じた文字(位置)
で打切るという方法をとる。多くの後方列の相当長い前
方列が一致するようなテキスト、正確に言うと、テキス
トの長さに比例する数の後方列が、テキストの長さに比
例するような長い一致した(共通の)前方列を持つよう
な特殊な冗長なテキストを除けば、キーの比較に使用さ
れる文字の数は、テキストの長さに比例して増加するも
のではない。例えば、表8に示した例においても、イン
デクスを構成する際に比較に供される文字は、各キーに
ついて表9の四角で囲んだ部分に限られる。
【0296】
【表9】 表9から明らかな様に、四角で囲んだ部分は、従来、キ
ーの長さを“3”に制限した場合のキーとなる部分列に
含まれており(表7参照)、アルファベット順に並べる
という意味において、インデクスの構成に要する時間に
関して両者に差はないといえる。
【0297】なお、上記「特殊な冗長なテキスト」と
は、例えば「ababab」の様に、ある後方列(ab
abab)の前方列(abab)が、そのまま別の後方
列(abab)となるようなテキストである。この場合
には、キーとなる部分列の大部分の文字が比較に用いら
れることになる。
【0298】この様に、キーとなる部分列の長さを制限
しないことにより、後続部分列をテキスト上でチェック
するといった後処理を要せずに、直接インデクスを検索
するだけで、任意の長さの部分列を検索することができ
る。
【0299】[3−2−2.インデクスの構成手順]イ
ンデクスに登録する部分列の長さを制限しない、つま
り、前方列を検索する可能性のある後方列をすべて登録
する場合、短い後方列から順に登録していく、つまり、
テキストを一旦全部読み込んでから、各後方列を順次登
録することによってインデクスを構成していくのは自明
なやり方といえる。なぜなら、キーとなる後方列はすべ
て、テキストの終端が読み込まれなければ確定せず、確
定しないうちに登録すれば、後で再登録が生じて効率が
悪くなるおそれがあるからである。
【0300】[3−2−3.テキストの変更に伴う調整
手順]本実施形態のデータ構造においては、インデクス
上のキーとなる部分列は、テキストの一部を参照して構
成されるので、テキストの末尾に1文字追加すれば、そ
れはそのまま各キーの末尾へのその文字の追加として反
映される。問題は、キーの延長によってインデクス中の
順序が変化するものを再登録する必要が生じることであ
る。
【0301】すなわち、テキストの末尾に文字を追加す
るのであるから、すべての後方列が延長される(変化す
る)ことになり、原理的には、すべての後方列を登録し
直さなければならなくなるおそれがある。しかし、通
常、各後方列のうち、比較に供される前方列の部分は、
後方列の末尾には達していない。
【0302】例えば、コード列「ababcab」の場
合、後方列全体を比較することによってそのインデクス
上での位置(順位)が定まっているのは、“b”及び
“ab”の2つの後方列にすぎない。すなわち、表10
に示した様に、テキストの末尾に1文字(※)追加した
場合、その文字のいかんによってインデクス上での位置
(順位)が変わるのは、“b”及び“ab”の2つの後
方列のみである。例えば、追加された文字(※)が
“b”とすると、“ab”は“ab”となり、インデ
クスにおける位置は“ababcab”の次に移動し
なければならない。また、“b”は“b”となり、イ
ンデクスにおける位置は“babcab”の次に移動
しなければならない。
【0303】
【表10】 一方、後方列の末尾まで比較することを要しないでその
順位が定まっているもの、例えば“abcab”に関し
ては、その末尾にどういう文字が追加されても、前後の
キーとの大小関係が変わるわけではない。従って、これ
らのキーとなる部分列については、新たに位置(順位)
を決めるために再登録する必要はない。このような後方
列のうち最短のもの、上記の例でいうと“cab”より
も長い後方列はすべて、末尾までの比較を要せず、再登
録の必要がない。
【0304】その理由を以下に説明する。すなわち、再
登録を要しない後方列のうち最短のもの、例えば、上記
の例でいうと“cab”よりも長い後方列“Xcab”
において、末尾までの比較が必要であると仮定すると、
“Xcab”を前方列とするより長い後方列“Xcab
Y”が存在することになる。ここで、“Xcab”も
“XcabY”も共に後方列であるから、両方から先頭
の部分列“X”を除いた“cab”も“cabY”も共
に後方列である。しかし、“cab”についてみると、
“cab”全体を前方列とする別の後方列“cabY”
が存在するのだから、末尾までの比較が必要ということ
になり、前記「“cab”は末尾までの比較を要しな
い」という前提に反することになる。この様な矛盾が生
じたのは、“cab”より長い後方列“Xcab”にお
いて、末尾までの比較が必要であると仮定したことが原
因なので、その様な“Xcab”の存在は論理的に否定
される。
【0305】従って、テキストの末尾に1文字追加した
場合のインデクスへのキーとなる部分列の登録または再
登録は、追加した文字1文字から成る後方列を新たに登
録した後、短い後方列から順に、末尾に当該文字を追加
したことにより、インデクス中において前後のキーの大
小関係が追加前と変化するか否かをチェックし、変化す
る場合には再登録を実行する。また、同様に各後方列に
ついてチェックし、インデクス中における前後のキーの
大小関係が追加前と変化する限り再登録を実行する。そ
して、変化しない場合が出てきたら、そこで再登録をや
め、それ以上長い後方列についてはチェックしなくてよ
い。上述した様に、この様な後方列については、順位が
変化しないことが保証されているからである。
【0306】なお、インデクス中における前後のキーの
大小関係(順位)が追加前と変化するか否かのチェック
には、延長した後方列がインデクス上で従来直前に位置
したキーより大きく、かつ直後に位置したキーより小さ
い(これが成立すれば変化しない)かどうかを確認する
方法や、延長した後方列をインデクスに追加しようとし
たとき、延長前の後方列の直後にくる(このときは変化
しない)かどうかをみる方法がある。
【0307】例えば、表11に示した様に、テキスト
「ababcab」の末尾に“d”を追加した場合、表
10においてアルファベット順位が“1”であった“a
b”は“ab”となり、そのアルファベット順位は
“3”となる。また、アルファベット順位が“4”であ
った“b”は“b”となり、そのアルファベット順位
は“6”となる。さらに、新たに追加されたテキストの
末尾の文字である“d”は、当然登録する必要がある。
一方、それら以外のキーとなる部分列については再登録
は不要であり、そのインデクス上における相対的な位置
関係は、表10と変化していない。すなわち、表11に
おいて、「開始位置」の欄に“*”を付した部分列につ
いては、それらの間の相対的な順位は表10の順位と比
較して変化していない。
【0308】
【表11】 次に、テキストの途中を変更した場合について説明す
る。この場合のインデクスの処理も上記と同様に考える
ことができる。すなわち、テキストの途中の位置に変更
(例えば、文字変更・挿入・削除)を加えた場合、その
位置より後から始まる後方列(変更位置を含まない後方
列)をキーとする辞書データは変化しないので、再登録
の必要はない。したがって、変更位置を含む後方列のう
ち、(上述の末尾に追加した場合と同様に)短いものか
ら順に、キーの比較が変更位置を含んで行なわれるか否
かをチェックし、含んでいる場合には再登録を行う。そ
して、一旦含まれない後方列に達したら、そこで(それ
については再登録をしないで)再登録を打ち切る。
【0309】なお、この操作は、テキストの末尾への文
字の追加の場合も含めて、文字変更・挿入・削除の際に
共通の手続きとして実行することができる。また、それ
ぞれの場合に、上述の「変更位置」に該当するのは図3
2の各位置である。さらに、テキストの末尾に所定の文
字を追加する場合は、末尾には常に空文字(null)
があって、その空文字と末尾の文字の間に該所定の文字
を挿入するとして、挿入の1つの場合として扱うことが
できる。
【0310】[3−3.テキストの併用]本実施形態に
おいても、上記第2実施形態と同様に、テキストを併用
することによって記憶領域を節約することができる。ま
た、テキストはコード列を重複なく記憶する(コード列
と同じコード数を記憶する)ように実現することができ
るので、インデクスを生成(更新)する時にも、部分列
を登録(記憶)する手間が少なくて済むという利点があ
る。さらに、テキストを併用することで、開始位置を与
えてコード列を復元する機能が効率的に実現される上
に、コード列の変更に対応するインデクスの更新が効率
化されるという効果がある。
【0311】すなわち、テキストを併用した場合、コー
ド列と同数のコードを記憶する次の様な構成が可能であ
る。
【0312】
【表12】 ここで、辞書の部分列の四角で囲んだ部分(先頭文字以
外)は、テキスト上で復元できるので、実際に(個別
に)保持する必要はない。また、上述した様にインデク
スとテキストはコードと位置の対の集まりとしては同じ
もので、単に並べ方を変えただけなので、実現に当たっ
ては、コードは1通り保持するだけで済ますことができ
る。
【0313】[3−4.第3実施形態の変形例]なお、
本実施形態は、図30に示したブロック図に限られず、
図1に示した様なtree構造を有する辞書tree及
びテキストtreeにも適用できることはいうまでもな
い。
【0314】また、本実施形態のデータ処理装置の構成
要件の一部により、以下のデータ検索装置を構成するこ
とができる。なお、本変形例は、請求項19及び請求項
21に記載のデータ検索装置、及び請求項57に記載の
データ検索方法に対応するものである。すなわち、キー
列による検索対象となるコード列について、その後方の
部分である後方列の検索に用いることができる前方列を
アルファベット順に並べ、また、前記前方列とその前方
列の前記コード列中における位置とを対として表す辞書
データを生成する辞書データ生成手段と、前記コード列
に基づいてテキストデータを生成するテキストデータ生
成手段と、前記辞書データに基づいて、キー列の全部又
は一部を前方列とする後方列を検索する検索手段とか
ら、データ検索装置を構成することができる。
【0315】この様な構成を有するデータ検索装置によ
れば、簡易な構成によって、検索対象となるパターンの
テキスト上での出現位置をもれなく、また、重複なく求
めることができる。
【0316】[4.第4実施形態]第4実施形態の目的
は、変更箇所をとりまとめることにより、調整作業の効
率化を図ったデータ処理装置を提供することにある。な
お、本実施形態は、請求項15及び請求項51に記載の
データ処理装置、及び請求項54に記載のデータ処理方
法に対応するものである。
【0317】[4−1.第4実施形態の構成]本実施形
態においては、図33に示した様に、辞書データ2の更
新手段12の前段に、変更箇所をとりまとめる調整範囲
設定手段20が設けられている。その他の構成は第3実
施形態と同様である。
【0318】[4−2.第4実施形態の作用及び効果]
上記の様な構成を有する第4実施形態は、次の様な作用
を有する。すなわち、上述した様なテキストの変更操作
が近接した位置に複数加えられる場合、同一の位置要素
から始まる後方列が、変更の都度再登録されるという事
態が生じる。例えば、最も典型的には末尾に1文字では
なくて複数文字を追加するとか、ある範囲で1文字おき
に削除するとかといった場合が考えられる。また、削除
した位置の近くに続けて挿入を行う等、異種の操作が混
合することも生じる。
【0319】この様な場合、本実施形態においては、図
34に示した様に、調整範囲設定手段20により、複数
の変更操作が加えられた範囲を調整範囲とし、この範囲
を含む後方列について、短いものから順に再登録すべき
か否かをチェックしていく。再登録する必要のない後方
列がでてきたら、その先頭位置がまだ調整範囲の中にあ
れば、その(先頭位置の)直前の変更位置の右端(末
尾)から始まる後方列からチェックを再開する。なお、
再登録の方法は、上記第3実施形態に示した方法と同様
である。
【0320】この様に本実施形態によれば、所定の範囲
の調整作業をまとめて行うことにより、インデクスへの
後方列の再登録の回数を減らすことができる。
【0321】[5.第5実施形態]第5実施形態の目的
は、テキスト中における所定のパターンの出現回数の計
数の効率化を図ったデータ処理装置を提供することにあ
る。なお、本実施形態は、請求項16,請求項17,請
求項38,請求項39及び請求項40に記載のデータ処
理装置、また、請求項55,請求項65,請求項74,
請求項75及び請求項76に記載のデータ処理方法に対
応するものである。
【0322】[5−1.第5実施形態の構成]本実施形
態においては、図35に示した様に、辞書データ生成手
段3の後段に、インデクスにアルファベット順に登録さ
れた各辞書データに先頭から1、2、3、…の順位を付
与する順位付加手段30が設けられている。また、検索
手段10には、前方列が一致する辞書データの先頭のも
のと末尾のものの順位から、前方列が一致するキーとな
る部分列の数を計数する計数手段が設けられている。な
お、テキストが変更された結果、辞書データが変更さ
れ、そのアルファベット順位が変わる場合は、更新手段
12が順位付加手段30を介して、辞書データのアルフ
ァベット順位を更新する。その他の構成は第3実施形態
と同様である。
【0323】[5−2.第5実施形態の作用及び効果]
上記の様な構成を有する第5実施形態は、次の様な作用
を有する。テキスト「ababcab」において、パタ
ーン“ab”の出現位置をすべて求めるには、インデク
スにおいてキーとなる部分列の前方列が“ab”である
ような項目を検索し、その部分列のテキスト上での開始
位置へのポインタをたどり、それがテキストの先頭から
何文字目であるかを調べればよい。
【0324】ところで、テキスト上での出現位置までは
必要ないが、テキスト中のパターンの出現回数が知りた
いという場合、従来のインデクスの構成では、該パター
ンを前方列とするような項目を、インデクスの先頭から
順次検索し、その出現回数をいちいち数えあげていかな
ければならなかった。従って、その検索時間は該パター
ンの出現回数に依存していた。
【0325】しかしながら、本実施形態のデータ処理装
置においては、表13に示した様に、インデクスに登録
される各辞書データをアルファベット順に配列し、順位
付加手段30を介して、その各項目に先頭から1、2、
3、…の順位を付与している。
【0326】
【表13】 これにより、所定のパターンの出現回数は、そのパター
ンを前方列とする項目であって、最もキーの順位が大き
い項目の順位から、最もキーの順位が小さい項目の順位
を減じたものに1を加えることによって求められる。す
なわち、表13の例においては、パターン“ab”の出
現回数は、(3−1+1=3回)と求められる。なお、
この計数操作は、検索手段10に設けられた計数手段に
よって行われる。
【0327】この様に、本実施形態のデータ処理装置に
よれば、1つのパターンの出現回数を得るためには、イ
ンデクス中の2つの項目の順位を調べるだけで済み、そ
の検索時間は出現回数に依存しないようにすることがで
きる。
【0328】[5−3.第5実施形態の変形例]前記順
位付加手段30よって、アルファベット順位が付与され
た辞書データとテキストデータとは1対1に対応してい
るので、ポインタを省略して次の様に表すことができ
る。なぜなら、ポインタは1対1対応を実現する1つの
形態(手段)に過ぎないからである。
【0329】
【表14】 つまり、キーとなる部分列と開始位置の対からなる1種
類の情報を、キーとなる部分列のアルファベット順に並
べ、部分列(パターン)で検索する、あるいはアルファ
ベット順に列挙(アクセス)していくという使い方がイ
ンデクスで、開始位置の順に並べ、その位置で検索(ア
クセス)するという使い方がテキストであるといえる。
【0330】[6.第6実施形態]本実施形態は、コー
ド列を与えてインデクスを検索する場合、または、イン
デクスに後方列を登録する場合に必要となるコード列の
比較の効率化を図ったデータ処理装置に関するものであ
る。なお、本実施形態は、請求項23乃至請求項31に
記載のデータ処理装置、及び請求項58及び請求項66
乃至請求項73に記載のデータ処理方法に対応するもの
である。
【0331】[6−1.第6実施形態の構成]図36
は、第6実施形態の構成を示す機能ブロック図である。
すなわち、本実施形態のデータ処理装置は、キー列によ
る検索対象となるコード列1について、その後方の部分
である後方列の検索に用いることができる前方列をアル
ファベット順に並べ、また、その前方列の前記コード列
中における位置(すなわち、前方列の開始位置)とを対
として表す辞書データ2を生成する辞書データ生成手段
3を有する。
【0332】また、本実施形態のデータ処理装置は、前
記辞書データ2に基づいて、コード列をキーとして二分
探索を行なう際に、既に行なった比較が何文字目まで一
致したかに基づいて、次の比較を何文字目から行なうか
を決定する検索手段10を有する。さらに、本実施形態
のデータ処理装置は、2つのコード列の比較を行なう際
に、両方のコード列から一致する前方列を除いた後方列
がともに前記辞書データ2中に存在する場合、それらの
後方列の位置の比較結果を、前記2つのコード列の比較
結果とする比較手段13を有する。また、本実施形態の
データ処理装置は、コード列の一部を変更した場合に、
変更後のコード列を再登録する必要があるか否かを判定
する再登録判定手段14を有する。さらに、本実施形態
のデータ処理装置は、1文字違いの2つの後方列のう
ち、一方がすでにインデクスに登録されている場合に、
他方の後方列の登録位置を、1文字の比較に基づいて決
定して登録する登録手段15を有する。また、本実施形
態は、前記コード列1を変更する変更手段11と、前記
変更の内容に基づいて、変更に係る前記コード列の辞書
データ2を更新する更新手段12とを有する。
【0333】[6−2.第6実施形態の作用及び効果]
上記の様な構成を有する第6実施形態は、次の様な作用
を有する。 [6−2−1.インデクス検索時のキー(コード列)比
較の効率化]ここでは、一般にコード列を与えてインデ
クスを検索する場合に、その比較の効率化を図る方法に
ついて説明する。なお、後方列をキーとしてインデクス
上の後方列を検索する場合の効率化については、次項
[6−2−2.後方列の比較の効率化]で説明する。
【0334】従来、インデクス項目(またはテキスト項
目)中のキーとなる部分列(後方列の前方列)同士の比
較、あるいは、キーとなる部分列(後方列の前方列)と
(パターンとして与えた)単なるコード列との比較は、
次の方法で行なわれている。
【0335】すなわち、第1のコード列(後方列の前方
列)と第2のコード列(後方列の前方列、または単なる
コード列)とを、先頭のコードから順次比較し、最初に
一致しなくなったコードの比較結果をコード列の比較結
果とする(第1のコード列>第2のコード列、または、
第1のコード列<第2のコード列)。
【0336】また、第2のコード列も後方列の前方列で
あった場合、一方が他方の前方列に一致したら、短い方
が(前方列になった方が)長い方より小さいものとす
る。さらに、第2のコード列が単なるコード列の場合に
は、第1のコード列が第2のコード列の真の前方列に一
致した場合は、第1のコード列<第2のコード列とし、
第2のコード列が第1のコード列の前方列に一致した場
合は、第1のコード列=第2のコード列とする。
【0337】なお、第2のコード列が後方列の前方列で
あるか、単なるコード列であるかの別による上記の扱い
の違いは、元の(インデクス及びテキストに変換され
た)コード列の末尾に、どのコードよりも小さいコード
(アルファベット)を付加した後に、後方列の前方列
(インデクス項目、テキスト項目に含まれる)を生成す
ることによって、第2のコード列が単なるコード列の場
合と同一の手続きで扱うことができる。
【0338】この様に、コード列を与えてインデクスを
検索する場合に問題となるのは、インデクス上には、前
方列が一致する(すなわち、共通の前方列を有する)後
方列が多数存在するため、二分探索でコード列と後方列
を次々に比較していく際に、毎回先頭の文字から逐次比
較を行なう方法では、既に一致することが明らかな共通
の前方列の部分についても比較を繰り返すことになると
いう点である。
【0339】一般に、アルファベット順にソートされた
後方列を二分探索で検索する際には、まず、いずれか1
つの後方列(通常は、中央に位置する後方列)との比較
を行なった結果、キーであるコード列の存在すべき位置
が、その後方列よりも前か後かが決定される。なお、一
致した場合はその後方列の位置が検索の結果となる。
【0340】この様に、二分探索は、コード列が存在す
べき位置を含む範囲内にある1つの後方列とそのコード
列を比較することにより、そのコード列が存在すべき位
置を含む範囲を次々に狭めていく。なお、この範囲の上
限と下限(両方共、該範囲には含まれない)は、インデ
クスの始め(先頭の後方列の前)と終り(末尾の後方列
の後)か、あるいは上述の様に比較を実行した後方列で
ある。
【0341】ここで、すでにインデクスに登録されてい
る後方列はアルファベット順にソートされているので、
上記範囲の上限と下限が長さkの共通の前方列を持つと
すれば、その間に存在するすべての後方列は、同じ長さ
kの前方列を有している。この共通の前方列の最長のも
のは、検索対象であるコード列と上限および下限の後方
列との比較を行なった際に一致した前方列のうちの短い
方として得ることができる。二分探索を続けて行なうた
めに、この範囲内の後方列と検索対象であるコード列と
を比較する時、この共通の前方列の比較を省略して、そ
の直後のコードから比較を行なっても、先頭から比較し
た場合と同じ結果が得られる。
【0342】*具体的な検索手順*本実施形態に用いら
れる検索手段において、検索対象であるコード列を与え
てインデクスを検索する具体的な検索手順は次のように
なる。 (1)上限←インデクスの始め、◎ 下限←インデクスの終り、◎ 上限一致前方列長←0、◎ 下限一致前方列長←0とする。 (2)上限より下で、下限より上にある後方列を1つ選
び“s”とする。また、上限一致前方列長と下限一致前
方列長のうち短い方を“k”とする。さらに、“s”の
k+1文字以降とコード列のk+1文字以降を比較する
と同時に、それらが比較開始位置から何文字一致したか
を調べて、それを“j”とする。比較の結果、◎
(“s”のk+1文字以降)◎<(コード列のk+1文
字以降)ならば、◎上限←s、上限一致前方列長←k+
jとする。(“s”のk+1文字以降)◎>(コード列
のk+1文字以降)ならば、◎下限←s、下限一致前方
列長←k+jとする。 (3)比較の結果が一致する(コード列全体が後方列の
前方列になっている場合も含む)か、範囲が後方列を含
まなくなる(すなわち、上限と下限が接する)まで上記
(2)を繰り返す。そして、一致した場合は、k+jが
コード列の全長を表わし、一致しなかった場合、すなわ
ち範囲が空になって検索が終了した場合は、上限の後方
列と下限の後方列の間が、そのコード列の占めるべき位
置である。また、上限、下限のうち一致前方列長が長い
方が、インデクス中でコード列と最も長く前方列が一致
する後方列となる。当然、その一致前方列長が両者の前
方列が一致する長さを表わしている。
【0343】*具体例*以下、さらに具体例を用いて、
上記検索がどのように実行されるかについて説明する。
なお、以下の具体例においては、コード列“bac”の
検索を行うものとする。
【0344】
【表15】 すなわち、表15において、上記「具体的な検索手順」
の(1)に示した様に、インデクスの始めを上限、イン
デクスの終りを下限とし、上限一致前方列長を0、下限
一致前方列長を0とする。次に、「具体的な検索手順」
の(2)に示した様に、上限より下で、下限より上にあ
る後方列(ここでは、中央の“b”)を1つ選び“s”
とする。そして、上限一致前方列長と下限一致前方列長
のうち短い方を“k”とする(ここでは、両方とも
“0”)。続いて、“s”のk+1文字以降(すなわ
ち、1文字以降)とコード列のk+1文字以降(すなわ
ち、1文字以降)を比較し、それらが先頭から何文字一
致したかを調べて、それを“j”とする(ここでは、一
致したのは“b”だけなので、j=1となる)。その結
果、(“b”の1文字以降)<(コード列の1文字以
降)なので、上限を“b”、上限一致前方列長を(0+
1=1)とする。
【0345】
【表16】 続いて、表16において、上限を“b”に移し、上限一
致前方列長を1にする。なお、下限はインデクスの終り
に位置したままであり、下限一致前方列長は0のままで
ある。次に、上限より下で、下限より上にある後方列
(ここでは、中央の“bcab”)を1つ選び“s”と
する。そして、上限一致前方列長と下限一致前方列長の
うち短い方を“k”とする(ここでは、k=0)。次
に、“s”のk+1文字以降(すなわち、1文字以降)
とコード列のk+1文字以降(すなわち、1文字以降)
を比較し、それらが先頭から何文字一致したかを調べ
て、それを“j”とする(ここでは、一致したのは
“b”だけなので、j=1となる)。その結果、(“b
cab”の1文字以降)>(コード列の1文字以降)な
ので、下限を“bcab”、下限一致前方列長を(0+
1=1)とする。
【0346】
【表17】 続いて、表17において、下限を“bcab”に移し、
下限一致前方列長を1にする。次に、上限より下で、下
限より上にある後方列(ここでは、中央の“babca
b”)を1つ選び“s”とする。そして、上限一致前方
列長と下限一致前方列長のうち短い方を“k”とする
(ここでは、両方とも“1”)。次に、“s”のk+1
文字以降(すなわち、2文字以降)とコード列のk+1
文字以降(すなわち、2文字以降)を比較し、それらが
比較開始位置から何文字一致したかを調べて、それを
“j”とする(ここでは、一致したのは“a”だけなの
で、j=1となる)。その結果、(“babcab”の
2文字以降)<(コード列の2文字以降)なので、上限
を“babcab”、上限一致前方列長を(1+1=
2)とする。
【0347】
【表18】 続いて、表18において、上限を“babcab”に移
し、上限一致前方列長を2にする。すると、範囲は空に
なるので検索は終了し、検索対象たる“bac”は、上
限“babcab”と2文字目まで一致し、その直後に
位置すべきことが分かる。
【0348】この様に、アルファベット順にソートされ
た後方列について、検索対象たるコード列をキーとして
二分探索する場合、上述した様に、先に比較した後方列
(上限または下限)において一致した前方列について、
その短い方の比較を省略することで、後方列とコード列
との比較を効率化できる。
【0349】なお、この方法は、コード列として後方列
を(キーとして)用いる場合にももちろん使用でき、し
かも、その際、後述する[6−2−2.後方列の比較の
効率化]で述べる手順を使用できる。すなわち、2つの
後方列(の前方列)を直接比較する部分にこの方法を組
み入れることで、後方列同士の比較をさらに効率化する
ことができる。また、この方法によれば、検索が終了し
た時、コード列とインデクス中の後方列とが最長何文字
まで前方一致したのかという長さと、最も長く前方一致
した後方列(の1つ)とを、検索結果として同時に得る
ことができる。
【0350】[6−2−2.後方列の比較の効率化]イ
ンデクスに後方列を登録しようとする場合等には、イン
デクス上に既に登録されている後方列と当該後方列との
比較が必要になる。この場合、後方列同士を直接比較す
る方法では、両者の前方列が長く一致している場合に
は、比較に時間がかかる。そこで、以下に、その比較の
効率化を図る方法について説明する。
【0351】すなわち、本実施形態の比較手段を用い
て、2つの後方列の比較を次の手順で行なえば、前方列
が長く一致するものの間でも、後方列の比較を効率良く
実施することができる。なお、この比較手段には、イン
デクスに登録された2つの後方列の間で、どちらが先
(上)に現われるかを判定する手段が与えられているも
のとする。
【0352】*具体的な比較手順*インデクス上に既に
登録されている後方列と、比較対象たる後方列との具体
的な比較手順は次のようになる。なお、比較すべき後方
列をu,vとする。 (1)x←u,y←vとする。 (2)xの先頭文字とyの先頭文字を比較する。もし、
両先頭文字が一致していなければ、それらの比較結果を
uとvの比較結果とする。 (3)一方、両先頭文字が一致し、xとyがともにイン
デクスに登録されていた場合には、xとyのインデクス
上の前後関係をuとvの比較結果とする。 (4)また、両先頭文字は一致するが、xとyのいずれ
か一方でもインデクスに登録されていなければ、x←現
xより1文字短い後方列、y←現yより1文字短い後方
列として、上記(2)以下の操作を繰り返す。
【0353】この方法では、比較すべき後方列u,vか
ら、互いに一致する前方列を除いた後方列の対のうち、
両方がインデクスに登録されている最長のもののインデ
クス上の位置を、上記(3)で比較する。しかし、イン
デクス上の位置の比較を、両方がインデクスに登録され
ている対のうちで最長のものに限る必要はない。すなわ
ち、前方列の直接比較と、互いに一致する前方列を除い
た後方列のインデクス上の位置の比較は任意に併用する
ことができる。また、文字の直接比較とインデクス上の
位置の比較のどちらを先に行なうかも任意で、上記の
(2)と(3)の順序を入れ替えてもよい。
【0354】[6−2−3.テキストの一部分の変更に
伴うインデクスの更新における後方列の再登録]テキス
トの一部分の変更に伴うインデクスの更新における後方
列の再登録においては、変更部分(変更位置)及び調整
範囲を除く大部分の後方列は、すでにインデクスに登録
されているので、上記(2)によって前方列の一致をそ
れほど長くチェックしなくても、(3)によるインデク
ス上の前後関係によって後方列の大小(比較)を決定で
きる。
【0355】*具体例*以下、さらに具体例を用いて、
上記比較がどのように進むかについて説明する。ここ
で、コード列“ababcab”について、すでにイン
デクスに各後方列がアルファベット順に登録されている
とする。この場合に、コード列“ababcab”の前
に“b”が追加され、新たに“ababcab”の後
方列を登録する必要が生じたと仮定する。
【0356】ここで、新たに登録すべき“ababc
ab”と、従来のインデクスにすでに登録されている
“babcab”の前後関係を比較する場合、従来のイ
ンデクスにすでに登録されている“ababcab”と
“abcab”との前後関係がそのまま適用できる。つ
まり、表19に示した様に、新たに登録すべき“ab
abcab”と、従来のインデクスにすでに登録されて
いる“babcab”の最左側の“b”を除くと、従来
のインデクスにすでに登録されている“2,ababc
ab”と“3,abcab”になるため、新たに登録す
べき“ababcab”は、従来のインデクスにすで
に登録されている“5,babcab”の上に位置する
と判断される。
【0357】
【表19】 次に、テキストの途中が変更された場合について説明す
る。すなわち、図37に示した様に、テキスト上に変更
位置と調整区間があり、その中で始まる後方列はインデ
クスには登録されていないとすると、新たな部分列“α
w”を登録しようとしてインデクスを検索した時、
“w”以降について直接の比較を要する後方列は“βx
yαw”のみであり、それもα=βの場合に限られる。
つまり、α=βであると、“βxyαw”は“αxyα
w”となり、“αw”と比較して、最左側の“α”が一
致するから、“w”以降についても比較が必要となる。
【0358】しかし、インデクスを二分探索する場合、
“αw”と比較される後方列は、インデクス中の後方列
の数をNとして平均logN個であることが知られてい
るから、“αw”と“αxyαw”が直接比較される確
率(おそれ)は極めて小さい。たとえ“αw”と“α
yαw”を比較する場合であっても、直接の比較は高々
“xyα”の未登録区間について行なうだけで済み、一
致する前方列すべてにわたって比較を行なうことは避け
られる。
【0359】この点をさらに改善するために、次のよう
な手順で登録を行なってもよい。すなわち、インデクス
上に登録されている“βxyαw”と比較する際に“x
yαw”の部分との比較が必要になるのは、“β”で始
まる後方列である。したがって、図37に示した未登録
区間内で始まる後方列のうち、“β”以外で始まるもの
を先に登録する。
【0360】次に、“β”で始まる後方列の登録を行な
うが、“β”で始まる後方列と“βxyαw”との前方
列の比較は、両者から一致する部分を除いた後方列がと
もにインデクスに登録されている位置まで行なえばよ
い。すなわち、これらの後方列は、すでにインデクスに
登録されているため、その前後関係は明らかだからであ
る。また、図37に示した未登録部分でも、“β”以外
で始まる後方列は既に登録されているから、“β”で始
まる後方列と“βxyαw”が比較される場合が生じて
も、直接、比較を行なう長さは“xyα”の長さより短
縮されることが期待できる。
【0361】なお、これらの後方列の登録は、右(後)
のものから順に左(前)のものへと行なうのが効率がよ
い。なぜなら、既に登録した後方列のインデクス上の位
置を利用するチャンスが増すからである。もちろん、左
から行なっても、またどのような順序で行なってもよい
ことはいうまでもない。
【0362】さらに、これらのインデクスの登録に際し
ては、後述する[6−2−4.インデクス更新の効率化
(A)(B)]に述べる手続を併用することができる。
従って、上記の手順に従って“β”以外で始まる後方列
を登録している途上であっても、(A)または(B)に
よって比較(検索)を要しないで登録できる後方列は、
“β”で始まるものであっても登録して支障ない。
【0363】[6−2−4.インデクス更新(追加)の
効率化]インデクスに後方列を追加(登録)する場合、
通常は、登録しようとする後方列をキーとしてインデク
スを検索し、その後方列を挿入すべき位置を決定する。
しかし、既に、インデクス中に、登録したい後方列とそ
の前方列が長く一致する後方列が存在する場合には、そ
れらの後方列と登録したい後方列との比較に多くの時間
がかかる。このような状況は、例えば、テキストの一部
分をコピーして他の位置に追加し、追加した部分(変更
位置)やその左側から始まる後方列をインデクスに登録
(再登録)する場合に発生する。
【0364】ここで、1文字違いの2つの後方列のう
ち、一方が既にインデクスに登録されている場合、他方
の登録に際して、長いキーの比較を行なわずに挿入位置
を決定しうる条件を検出する手続について説明する。な
お、この条件が成立する場合は、同時に挿入位置が決定
される。
【0365】(A)後方列“w”がインデクスに登録済
のとき、“αw”を登録する場合 表20に示した様に、後方列“w”はインデクス中でx
とyの間(x<y)に登録されているとする。また、
x,yそれぞれの1文字長い後方列を“βx”“γy”
とする。
【0366】
【表20】 この様な前提のもとで、次の場合には“αw”の登録位
置を1文字の比較に基づいて決定することができる。 (1)α=βのとき◎ αwはβxの直後に登録◎ (2)α=γのとき◎ αwはγyの直前に登録◎ (3)βxの直後がδsで、β<α<δのとき◎ αwはβxの直後に登録◎ (4)βxの直前がεtで、ε<α<βのとき◎ αwはβxの直前に登録◎ (5)γyの直前がξpで、ξ<α<γのとき◎ αwはγyの直前に登録◎ (6)γyの直後がφqで、γ<α<φのとき◎ αwはγyの直後に登録◎ 一方、これらの条件に合致しない場合は、“αw”をキ
ーとしてインデクスを検索し、挿入位置を決定する。
【0367】なお、必ずしも、これらの条件のすべてを
チェックする必要はない。例えば、上記(1)と(2)
のみチェックして、それらの条件に合致しない場合は
“αw”をキーとしてインデクスを検索する手続を行な
うようにしても良く、これにより(1)あるいは(2)
に該当する場合については、キーの比較(インデクスの
検索)が省略できるという効果がある。
【0368】(B)後方列“αw”がインデクスに登録
済のとき、“w”を登録する場合 表21に示した様に、後方列“αw”はインデクス中で
βxとγyの間(βx<γy)に登録されているとす
る。
【0369】
【表21】 この様な前提のもとで、次の場合には“w”の登録位置
を1文字の比較に基づいて決定することができる。 (1)x<yでかつxとyが隣接して登録されていると
いう条件で、α=βまたはα=γならば、wはxとyの
間に登録◎ 一方、この条件に合致しない場合は、“w”をキーとし
てインデクスを検索し、挿入位置を決定する。
【0370】[6−2−5.変更位置の左側でインデク
スの再登録が必要な位置が続く範囲を決定する手続の効
率化]上述した[6−2−4.インデクス更新(追加)
の効率化]と同様の手続で、テキストの変更に伴って、
もとのテキスト上で、インデクスの再登録が必要な位置
(後方列の開始位置)を検出する手続を効率化すること
ができる。なお、この機能は、図36に示した再登録判
定手段14によって実現される。また、本項は、請求項
28及び請求項29に記載の発明に対応するものであ
る。
【0371】すなわち、ある位置から始まる後方列(テ
キスト変更位置を含む)が再登録を要する(おそれがあ
る)か否かは、インデクス上でその後方列の直前および
直後に現れる後方列とその後方列とが、変更位置の直前
まで前方列が一致するか否かで判断できる。しかし、こ
れには、その後方列とインデクス上で直前または直後の
後方列との比較を行なう必要がある。
【0372】例えば、図38に示した様に、長いテキス
トをコピーして、さらにその右端に近い部分を変更する
ような場合、コピーしたものの大部分(変更位置の左側
全部)について、インデクスに再登録する必要が生じ
る。しかし、これをすべて検出するためには、平均して
ほぼ(コピーした部分の長さ)×(コピーした部分の長
さ÷2)文字の比較が必要になってしまう。すなわち、
比較を要する文字数は、コピーした部分(一致する部
分)の長さの2乗に比例するので、一致部分が長くなる
と比較に長時間を要するようになる。
【0373】これに対して、次の手順にしたがって、1
文字だけの比較で再登録の必要性を判定する方法を導入
することによって、長く一致する部分の比較を省くこと
が可能となる。すなわち、図38に示した様に、長いテ
キストをコピーした結果、u=vで“vy”がインデク
ス上で“ux”の直前または直後に現れているとき、変
更位置が“x”の位置であるとすると、“u”の範囲内
で始まる後方列はすべて「インデクス再登録が必要にな
るおそれがある」。なぜなら、“u”の範囲内で始まる
後方列はすでにインデクスに登録されているが、“x”
の位置が変更された結果、インデクス中における位置が
変更される場合があるからである。このことが既にわか
っているものとして、その直前の文字“α”“β”を比
較し、α=βであれば後方列“αux…”についても
「インデクス再登録が必要になるおそれがある」と判定
できる。なぜなら、この場合、αu=βvとなるため、
変更位置“x”の文字によって、インデクス中における
位置が変更される場合があるからである。
【0374】一方、α≠βの場合は、インデクス上で
“αux…”の直前および直後の後方列と“αux…”
を比較して、“x”にまで比較が及ぶ(すなわち、いず
れかの前方列が“αu”)か否かをチェックする。そし
て、“x”にまで比較が及べば、“αux…”について
「インデクス再登録が必要になるおそれがある」と判定
する。また、比較が“x”にまで及ばなければ、“αu
x…”については「インデクス再登録が必要になるおそ
れはない」と判定する。これは同時に“αux…”より
長い(左側から始まる)後方列については、「インデク
ス再登録は必要ない」ことを確定することになる。
【0375】なお、前記再登録判定手段は、後方列の前
方列をキーとしてアルファベット順に並べた表におい
て、コード列の一部を変更した場合に、後方列の前方列
が再登録が必要か否かを、変更部分を含む後方列の前方
列について、短い後方列の前方列から順に判定するよう
に構成しても良い。また、前記再登録判定手段は、後方
列の前方列をキーとしてアルファベット順に並べた表に
おいて、コード列の一部を変更した場合に、後方列の前
方列が再登録が必要か否かを、変更部分を含む後方列の
前方列について、開始位置の順に並べて二分法で選択し
つつ判定するように構成しても良い。なお、これらの変
形例は、請求項30及び請求項31に記載のデータ処理
装置、及び請求項72及び請求項73に記載のデータ処
理方法に対応するものである。
【0376】[7.第7実施形態]本実施形態は、上記
各実施形態において「辞書データ」及び「辞書tre
e」を「インデクス」、「テキストデータ」及び「テキ
ストtree」を「テキスト」として、上位概念で捉え
たものである。すなわち、「辞書データ」及び「辞書t
ree」は「インデクス」のより具体的な実現形態とみ
なし、また、「テキストデータ」及び「テキストtre
e」は「テキスト」のより具体的な実現形態とみなすも
のである。なお、本実施形態は、請求項32乃至請求項
44、請求項49乃至請求項51に記載の発明、また、
請求項59乃至請求項64に記載の発明及び請求項74
乃至請求項76に記載の発明に対応するものである。
【0377】[7−1.第7実施形態の構成]図39
は、第7実施形態の構成を示す機能ブロック図である。
すなわち、本実施形態のデータ処理装置は、キー列によ
る検索対象となるコード列1について、その後方の部分
である後方列の検索に用いることができる前方列をアル
ファベット順に並べ、また、その前方列の前記コード列
中における位置(すなわち、前方列の開始位置)とを対
として表すインデクス21を生成するインデクス生成手
段22を有する。また、前記コード列1に基づいて、テ
キスト23を生成するテキスト生成手段24を有する。
【0378】さらに、本実施形態のデータ処理装置は、
前記インデクス21及びテキスト23に基づいて、キー
列の全部又は一部を前方列とする後方列を検索する検索
手段10を有する。さらに、本実施形態は、前記コード
列1を変更する変更手段11と、前記変更の内容に基づ
いて、変更に係る前記コード列のインデクス21、テキ
スト23を更新する更新手段12とを有する。
【0379】なお、図39において、変更手段11と更
新手段12の間を結ぶ点線は、変更手段11がコード列
1に加える変更の内容を更新手段12に通知して、イン
デクス21及びテキスト23の更新を行なわせることを
意味する。また、上記第1乃至第6実施形態において
は、テキストからコード列の復元が可能なので、一旦テ
キストとインデクスが生成されれば、もはやコード列を
保持する必要はなく、変更手段11は単に更新手段12
に変更内容を通知するだけの機能でもよい。その際、コ
ード列の部分または全体の復元が必要なら、テキストを
アクセスするコード列復元手段(図示せず)を付加すれ
ばよい。
【0380】[7−2.「インデクス」及び「テキス
ト」の機能]ここで、上位概念で捉えた「インデクス」
及び「テキスト」の最も一般的な機能について説明す
る。*インデクスの構成及び機能* (1)インデクスの検索に関する機能 インデクスの検索に関する機能は次のようにまとめられ
る。 (x1)インデクス項目とは、キーとなる部分列(後方
列の前方列)とその開始位置との対である。 (x2)インデクスは、上記インデクス項目を、キーと
なる部分列(後方列の前方列)のアルファベット順に並
べたものである。 (x3)(x2)の構成から、パターンを与えて、後方
列の前方列が一致する、あるいはパターンの前方列と最
も長く一致するインデクス項目を決定する機能を有す
る。 (x4)(x1)の構成から、インデクス項目を与え
て、その後方列の前方列の開始位置を得る機能を有す
る。
【0381】以上が「インデクス」の基本機能で、検索
手段は(x3)と(x4)を組み合わせることによっ
て、パターンを与えて、そのパターンと一致する、ある
いはパターンの前方列と最も長く一致するキーとなる部
分列(後方列の前方列)の開始位置を少なくとも1つ得
ることができる。
【0382】以下は、そのようなキーとなる部分列(後
方列の前方列)またはその開始位置を列挙するための機
能である。 (x5)(x3)に該当するインデクス項目が1つ以上
存在する場合に、その先頭または末尾の項目を決定する
機能を有する。 (x6)あるインデクス項目の直後又は直前の項目を決
定する機能を有する。すなわち、(x5)で決定した先
頭から末尾の項目までについて、(x6)によって、あ
るインデクス項目の直後または直前の項目を決定するこ
とによって、それらのインデクス項目をすべて列挙す
る。そして、それらのインデクス項目について、(x
4)により、パターンと一致するか、あるいはパターン
の前方列と最も長く一致する部分列のコード列中におけ
る開始位置を、もれなく且つ重複なく列挙することがで
きる。
【0383】さらに、一致部分列の数を効率良く知るた
めに、アルファベット順位を付与する次の構成及び機能
を追加することができる。 (x7)インデクス項目には、(x2)の順にもとづ
く、先頭または末尾からの順位(アルファベット順位)
が付与されている。 (x8)インデクス項目を与えて、そのアルファベット
順位を得る機能を有する。すなわち、(x5)と(x
8)の機能により、上記第5実施形態に述べた様に、一
致部分列の数を効率良く計算できる。
【0384】また、実施形態によっては次の機能まで備
えたものが考えられるが、これは(x6)の機能を含む
ものである。 (x9)アルファベット順位を与えて、その順位を付与
されたインデクス項目を決定する機能を有する。すなわ
ち、(x8)と(x9)の機能を組み合わせれば、(x
6)の機能は容易に実現できる。
【0385】また、次の機能が必要になる場合もある。 (x10)2つのインデクス項目を与えて、そのうちの
いずれがインデクス上で前/後に現れるかを決定する機
能を有する。これは(x8)によって簡単に実現できる
が、実現方法は必ずしもそれに限られるものではない。
【0386】ここで、上記各単位機能のうち、(x3)
と(x5)の実現方法について、さらに詳しく説明す
る。
【0387】(1−1)単位機能(x3)の実現方法 パターンの前方列ともっとも長く前方列が一致するイン
デクス項目(後方列)の決定方法は、請求項24に記載
した方法のほかに、次に述べるような方法も考えられ
る。 (a)まず、パターンの最初(先頭)の1文字でインデ
クスを二分探索し、インデクス項目の先頭の1文字が一
致するものを探す。 (b)先頭の1文字が一致するものが見つかったら、2
文字目を追加して二分探索を続ける。この際、上記
(a)の終了時の探索範囲の上限、下限をそのまま引き
継いで行う。なお、最初に(a)で見つかった先頭の1
文字が一致するインデクス項目についても、2文字目の
比較を行う。
【0388】この様にして、パターンと先頭のn文字が
一致するインデクス項目を見いだしたら、それを最長一
致前方列を含むインデクス項目の候補として記憶し、検
索キーを先頭からn+1文字に延ばして、二分探索を継
続する。パターンと先頭のn+1文字が一致するインデ
クス項目がなければ、そこで探索は終了し、先に見いだ
されたn文字が一致するインデクス項目が最長一致前方
列を含む項目となる。一方、パターンと先頭のn+1文
字が一致するインデクス項目があれば、それを最長一致
前方列を含むインデクス項目の新たな候補とし、検索キ
ーをさらにn+2文字に延ばす。この方法の利点は、検
索の手続を複雑にすることなく、効率的に検索できる点
にある。
【0389】以下、図40を参照して上記単位機能(x
3)の実現方法について説明する。
【0390】すなわち、図40においてパターン「ba
c」を検索する場合、パターンの最初(先頭)の1文字
(すなわち、“b”)でインデクスを二分探索し、イン
デクス項目の先頭の1文字が一致するものを探すと、ル
ート「b」が該当することが分かる。次に、パターン
「bac」はルート「b」より大きいので、右へのパス
をたどり、2文字目を追加して(すなわち、「b
a」)、二分探索を続ける。
【0391】そして、次のノード「bcab」と「b
a」とを比較すると、「ba」のほうが小さいので、左
へのパスをたどると、ノード「babcab」に達す
る。すなわち、パターン「bac」と先頭の2文字が一
致するインデクス項目が見いだされたことになり、それ
を最長一致前方列を含むインデクス項目の候補として記
憶し、検索キーを先頭から3文字(すなわち、「ba
c」)に延ばして、二分探索を継続する。次に、パター
ン「bac」とノード「babcab」とを比較する
と、「bac」のほうが大きいので、右へのパスをたど
ると「bac」に達する。
【0392】この様に、あるパターンを検索する場合
に、検索キーを1文字ずつ増やしていっても、ルートに
戻る必要はなく、二分探索木を順次、下方向へたどれば
良いので、効率的に検索することができる。
【0393】(1−2)単位機能(x5)の実現方法 上記(x3)でパターンの前方列ともっとも長く一致す
るインデクス項目を1つ決定した後、その一致部分と同
一の前方列を持つインデクス項目の先頭または末尾の項
目は、(x6)を使用して逐次探索する他に、二分探索
を行っても良い。
【0394】以下、二分探索により、末尾のインデクス
項目を決定するために、単位機能(x5)を実現する方
法について説明する。すなわち、図41(A)に示した
ように、(x3)でパターンの前方列ともっとも長く一
致するインデクス項目を1つ決定した後、その項目と下
限との間で二分探索を行う。そして、その中央の項目が
パターンの前方列と一致している場合には、図41
(B)に示したように、一致項目の末尾となるべきマー
クをそこに設定する。一方、一致しなかった場合には、
図41(C)に示したように、下限を示すマークをそこ
に移動する。
【0395】この様にして、一致項目の末尾となるべき
マークと、下限を示すマークが隣接するまで二分割を繰
り返せば、効率よく末尾のインデクス項目を決定するこ
とができる。なお、先頭となるインデクス項目を決定す
る場合にも、上記と同様に実現することができる。ま
た、インデクスが二分探索木で構成されている場合に
は、これらの手続は、その二分木の構造を利用して容易
に実現することができる。
【0396】(2)インデクスの更新に関する機能 インデクスの更新に関する機能は次のようにまとめられ
る。 (x11)未登録の後方列の前方列を与えて、その後方
列の前方列を含むインデクス項目が、直前または直後に
挿入されるべきインデクス項目(及び、挿入されるべき
位置がその直前なのか直後なのか)を決定する機能を有
する。 (x12)あるインデクス項目の直前または直後(の指
定した側)に、新たなインデクス項目を挿入する機能を
有する。 (x13)あるインデクス項目をインデクスから削除す
る機能を有する。すなわち、(x11)及び(x12)
の機能によって、上記インデクス生成手段22及び更新
手段12は、新たなインデクス項目をインデクスの正し
い位置に追加することができる。また、(x13)の機
能によって、更新手段12は、変更のために不要になっ
たインデクス項目及び再登録が必要なインデクス項目
を、インデクスから(一旦)削除することができる。な
お、(x11)において、後方列の前方列は単なるコー
ド列として与えられてもよいし、より効率的には、その
後方列の前方列を含むテキスト項目として与えてもよ
い。この点については後述する。
【0397】*テキストの構成及び機能* (1)テキストの検索に関する機能 テキストの検索及びコード列の復元に関する機能は次の
ようにまとめられる。
【0398】(t1)テキスト項目とは、キーとなる部
分列(後方列の前方列)とその開始位置との対である。 (t2)テキストは、テキスト項目を開始位置の順に並
べたものである。 (t3)(t2)の構成から、コード列上の位置を与え
て、開始位置がそれと一致するテキスト項目を決定する
機能を有する。 (t4)(t1)の構成から、テキスト項目を与えて、
その開始位置のキーとなる部分列(後方列の前方列)を
得る機能を有する。
【0399】以上が「テキスト」の基本機能で、コード
列の復元は(t3)と(t4)の機能を組み合わせるこ
とによって実現できる。すなわち、まず、復元すべきコ
ード列の開始位置を指定して、(t3)によってテキス
ト項目を決定し、(t4)によってそこから始まる後方
列の前方列を得る。ここで、復元すべきコード列の長さ
がその後方列の前方列の長さ以下であれば、その後方列
の前方列の内、コード列の長さに等しい前方列を採れば
よい。一方、復元すべきコード列の長さが後方列の前方
列の長さより長い場合は、それをコード列の一部分とし
て復元し、次に、開始位置を後方列の前方列の長さだけ
右(後)に移動させて、再び(t3)と(t4)によっ
て後続部分の復元を行なう。この操作を、復元部分の長
さが指定した長さに達するまで繰り返せばよい。
【0400】また、すべての後方列についてテキスト項
目を生成しない場合は、上記(t3)の代わりに、それ
を含む(拡張された)次の機能(t5)を使用する。 (t5)コード列上の位置を与えて、それと一致するか
あるいはその左(前)で最も右(後)の開始位置を含む
(あるいは、その右(後)で最も左(前)の開始位置を
含む)テキスト項目を決定する機能を有する。
【0401】また、インデクス項目とテキスト項目は内
容的には同じものであるから、(t1)の構成から(x
4)と同じ次の機能を含めることも容易である。 (t7)テキスト項目を与えて、その後方列の前方列の
開始位置を得る機能を有する。
【0402】さらに、上記(t3)または(t5)及び
(t7)によって簡単に実現できるが、より単純な機能
として次のものがあると、更新等の際に便利である。 (t6)あるテキスト項目の直後または直前の項目を決
定する機能を有する。もちろん、これも実現方法は(t
3)または(t5)、および(t7)によるものに限ら
れるものではない。
【0403】(2)テキストの更新に関する機能 テキストの更新に関する機能は次のようにまとめられ
る。 (t12)あるテキスト項目の直前または直後(の指定
した側)に、新たなテキスト項目を挿入する機能を有す
る。 (t13)あるテキスト項目をテキストから削除する機
能を有する。すなわち、(t12)の機能によって、テ
キスト生成手段24は、入力したコード列から生成した
テキスト項目を、逐次テキスト23に追加することでテ
キスト23を生成できる。また、更新手段12は、コー
ド列1の変更に対応して不要になったテキスト項目を、
(t13)によってテキスト23から削除することがで
きる。さらに、更新手段12は、コード列1への挿入・
追加に対応して、新たなテキスト項目を(t12)によ
ってテキスト23に追加することができる。
【0404】*インデクス生成手段、テキスト生成手
段、変更手段の相対性*◎ここで、インデクス生成手
段、テキスト生成手段、変更手段の相対性について説明
する。すなわち、本実施形態において、インデクス生成
手段22は、更新手段12のインデクスに関する機能を
逐次適用することで実現できる。その端的な例は、空な
コード列に対応するインデクス(及びテキスト)がある
とき、その先頭にコード列全体を挿入するという変更に
対応して、更新手段12がインデクスを更新することに
よって、インデクス生成と同様の効果が実現される。テ
キスト生成手段に関しても同様である。
【0405】この場合、変更手段11は、コード列1が
テキスト(及びインデクス)とは別に保持されている場
合にのみ実質的な意義を持つ。上述した様に、テキスト
のコード列復元機能を用いることによりコード列の保持
を代替できる場合には、コード列を省略することができ
るので、変更手段11は単に更新手段12に変更内容を
指示するだけで良く、更新手段12に含めてしまうとい
う構成も可能である。
【0406】一方、独立のインデクス生成手段及びテキ
スト生成手段を備える効果がある場合は、次の様な特殊
な場合に限られる。すなわち、更新手段12にパラメタ
としてコード列を一括して渡すことが困難であるか、あ
るいは著しく効率が悪い場合、一旦テキスト項目(及び
テキスト)とインデクス項目の生成を行なったうえで、
後方列(の前方列)が短いインデクス項目から順次イン
デクスに追加してインデクスを生成するという方法をと
る。
【0407】これは、コード列の末尾(先頭以外)に別
のコード列を追加するような変更に対しては、原則とし
て、すべての後方列が影響を受けるため、更新手段12
によって、既存のインデクス中のインデクス項目の再登
録(登録のやり直し)が発生して、効率が低下すること
を避けるためである。これに対し、コード列の先頭に別
のコード列を追加する場合には、新たなインデクス項目
の追加だけで既存のインデクス項目の再登録は発生しな
いから、コード列が末尾から順に入力されるのであれ
ば、更新手段を逐次使用してインデクスを生成しても何
ら効率は低下しない。
【0408】従って、本発明の実質的な内容は、インデ
クス及びテキストの構成及び機能と、それを用いて実現
される更新手段及び検索手段(及びコード列復元手段)
の手続にあって、インデクス生成手段及びテキスト生成
手段は独立の構成要素として必須ではなく、変更手段も
コード列の別途保持が必要な場合以外は、本発明に含ま
れなくてもよい。
【0409】*検索手段の具体的手順*◎上記インデク
スの構成及び機能から、それを使用する検索手段の具体
的手順はほぼ自明である。但し、検索すべきパターンの
長さは、インデクス項目に含まれるキーとなる部分列
(後方列の前方列)の長さに制限がある場合は、その長
さ以下であるとする。 (k1)パターンを与えて、それと一致する、あるいは
その前方列と最も長く一致する部分列の1つの開始位置
を得る検索手段。(これは同時に、そのような部分列の
有無を判定する手段でもある。)◎ この検索手段は、上記インデクスの機能の(x3)及び
(x4)を組み合わせることによって実現できる。 (k2)パターンを与えて、それと一致する、あるいは
その前方列と最も長く一致する部分列の開始位置をすべ
て列挙する検索手段。この検索手段は、上記インデクス
の機能の(x4),(x5)及び(x6)を組み合わせ
ることによって実現できる。 (k3)パターンを与えて、それと一致する、あるいは
その前方列と最も長く一致する部分列の(開始位置)の
数を得る検索手段。この検索手段は、上記インデクスの
機能の(x5)及び(x8)を組み合わせて、アルファ
ベット順位の差に1を加えれば効率良く計算できる。あ
るいは、上記インデクスの機能の(x5)及び(x6)
によって、該当するインデクス項目を順次数え上げるこ
とによっても実現できる。
【0410】すなわち、これらを整理すると、上記イン
デクスの機能の(x4),(x5)及び(x6)を組み
合わせれば、上記(k1),(k2),(k3)の機能
を一応すべて実現することができる検索手段を構成する
ことができる。なお、特に(k1)の機能を効率化した
い場合には、上記インデクスの機能の(x3)を、ま
た、特に(k3)を効率化したい場合には、上記インデ
クスの機能の(x8)を使用した手順を採用すればよ
い。その理由は、(x5)よりも(x3)のほうが効率
的であり、(x6)による数えあげより(x8)による
アルファベット順位の取得のほうが効率的であるからで
ある。
【0411】また、上記(k1),(k2),(k3)
の機能のうちの1つまたは2つの機能しか要求されない
場合は、使用するインデクスの機能及びそれらの使用手
順を上述の範囲に限定して検索手段を構成すればよい。
なお、(x3)及び(x5)で検索を行う際に、インデ
クス項目のキーとなる部分列(後方列の前方列)とパタ
ーンとの比較に、上記[6−2−1.インデクス検索時
のキー比較の効率化]の手法を使うことにより、比較を
効率化することができる。
【0412】*更新手段の具体的手順*更新手段の構成
と手順は、上記検索手段ほど単純ではない。また、更新
手段は、インデクスとテキストの両方に対して操作を行
うので、インデクス項目とテキスト項目の間の関連につ
いて次のような限定を必要とする。これに対して、上記
検索手段がテキストにアクセスする必要があるか否か
は、実施形態に依存する。 (p1)インデクス項目を与えて、それと同じ開始位置
のテキスト項目を得る機能◎ (p2)テキスト項目を与えて、それと同じ開始位置の
インデクス項目を得る機能◎ これら2つの機能は、上記実施形態にみられるように、
インデクス項目とテキスト項目を一体化したり、相互に
ポインタを設定する等、種々の方法で実現できる。ま
た、これらの機能を導入することで、2つの項目に共通
する後方列(の前方列)を構成するコード及び開始位置
を一通りだけ保持すれば済むようにできる。なお、この
点については後述する。
【0413】ここで、コード列の変更には種々あるが、
◎ (u)位置P以降のn文字を、文字列s(s0 ,s1
…sk-1 、長さk)で置き換える機能◎ を組み合わせることにより実現できる。したがって、上
記(u)に対応する更新手段が構成できれば、任意のコ
ード列の変更に対応して、それを逐次実行すればよい。
また、第4実施形態に示した様に、それらの実行をまと
めて行うことによって、効率化を図ることもできる。
【0414】更新手段は次の3つの手続から構成され
る。(1)再登録インデクス項目の決定 インデクス項目のうち、コード列の変更に伴って、その
キーとなる部分列(後方列の前方列)が変化し、その結
果、変更(更新)前に存在したインデクス項目であっ
て、変更(更新)後もインデクス中に存在するものとの
順序が変わるおそれがあるものを決定する。このとき、
それと同時に、該当するインデクス項目を一旦インデク
スから削除しておくかどうかは実施形態に依存する。
【0415】この手続は、例えば、テキストの機能の
(t4)及び(t6)によって、位置Pより前の位置か
ら始まるキーとなる部分列(後方列の前方列)を含むテ
キスト項目を列挙しながら、(p2)によって得られる
インデクス項目が、インデクスの機能(x6)によって
得られるその前後のインデクス項目と、キーとなる部分
列(後方列の前方列)が、位置Pまで一致するか否かを
チェックすることによって実現できる。なお、前記[6
−2−5.再登録が必要な位置が続く範囲を決定する手
続の効率化]で述べた手順を使用してもよい。
【0416】(2)テキストの更新 更新手段は、コード列の変更に伴うテキスト項目及びテ
キストの更新を行う。すなわち、上記(u)に対応する
ように、テキスト中のテキスト項目のキーとなる部分列
(後方列の前方列)及び開始位置を更新するとともに、
不要になったテキスト項目を削除し、新たに必要なテキ
スト項目を追加する。
【0417】具体的には種々の手順が考えられるが、例
えば、次の様に行えばよい。 (イ)キーとなる部分列(後方列の前方列)が、位置P
からP+nー1までの文字(位置)をその前方列として
ではなく含んでいるテキスト項目(すなわち、開始位置
がPー1以前)について、キーとなる部分列(後方列の
前方列)の変更前の位置Pから始まる後方列を、位置P
+nから始まる後方列の前に文字列“s”を連接したコ
ード列の前方列で置き換える。これは、上記(1)と同
様に、テキストの機能の(t4)及び(t6)によっ
て、該当するテキスト項目を列挙しながら行うことがで
きる。なお、テキスト項目が1文字の前方列しか含まな
い場合は、この手順は省略できる。
【0418】(ロ)(イ)と同様に、開始位置がPー1
以前のインデクス項目についても、そのキーとなる部分
列(後方列の前方列)を更新する。これは(イ)を行な
うのに並行して、上記(p2)の機能によって、該当す
るインデクス項目を得て行うことができる。但し、この
処理のみで十分なのは、インデクス項目に含まれるキー
となる部分列(後方列の前方列)と、対応する(すなわ
ち、開始位置が同じ)テキスト項目に含まれる後方列の
前方列とが、同じ長さかあるいは後者の方が長い場合で
ある。
【0419】また、実施形態によっては、インデクスを
順序づけるキーとなる部分列(後方列の前方列)の比較
に、テキストを使用したコード列復元手段を用いる場合
がある。この場合には、キーとなる部分列(後方列の前
方列)はインデクス項目には実際には保持されず、(p
1)の機能によって得られる対応するテキスト項目か
ら、テキストを用いてコード列が復元される。したがっ
て、上記(イ)によるテキスト項目(テキスト)の更新
を行えば、自動的に(ロ)を行ったと同じ効果が得られ
る。
【0420】(ハ)キーとなる部分列(後方列の前方
列)がP以降P+nー1以前の位置から始まるテキスト
項目について、開始位置がP+iの場合、そのキーとな
る部分列(後方列の前方列)を、sの後方列si ,s
i+1 ,…sk-1 を位置P+nから始まる後方列の前に連
接した変更後の後方列の前方列に置き換える。これも、
テキストの機能の(t4)及び(t6)によって、該当
するテキスト項目を列挙しながら行うことができる。な
お、n≠kの場合には、以下に説明する(ホ)または
(ヘ)の処理が必要である。
【0421】(ニ)(ハ)と同様に、開始位置がP以降
P+nー1以前のインデクス項目について、キーとなる
部分列(後方列の前方列)を変更する。これも、(ハ)
と並行して、上記(p2)の機能によって、該当するイ
ンデクス項目を得て行うことができる。なお、n≠kの
場合には、以下に説明する(ト)または(チ)の処理が
必要である。
【0422】(ホ)n>kの場合 開始位置がP+k以降P+nー1以前のテキスト項目を
テキストから削除し、開始位置がP+n以降のすべての
テキスト項目の開始位置をnーkだけ減じる。なお、削
除すべきテキスト項目は、上記テキストの機能の(t
3)及び(t6)によって得られる。また、テキスト項
目の削除は、上記テキストの機能の(t13)によっ
て、効率的に行うことができる。さらに、開始位置の更
新は、テキスト項目の開始位置による順序を、前記区間
管理方法を使って更新することによって効率的に行うこ
とができる。
【0423】(ヘ)n<kの場合 0≦i<kーnの各iについて、sn+i ,sn+i+1 ,…
k-1 を位置P+nから始まる後方列の前に連接した変
更後の後方列の前方列と、その開始位置P+n+iを対
にして、新たなテキスト項目を作成する。そして、テキ
スト中の開始位置がP+n以降のテキスト項目の開始位
置をkーn増すとともに、上記の新たなテキスト項目を
テキストに追加する。このテキスト項目の追加は、上記
テキストの機能の(t12)によって順次行うことがで
き、開始位置の更新は、上記(ホ)と同様に、区間管理
方法を使って効率良く行うことができる。
【0424】(ト)n>kの場合 開始位置がP+k以降P+nー1以前のインデクス項目
をインデクスから削除し、開始位置がP+n以降のすべ
てのインデクス項目の開始位置をnーkだけ減じる。な
お、削除すべきインデクス項目は、上記(ホ)と同様
に、テキストの機能の(t3)及び(t6)で決定した
テキスト項目から(p2)によって得ることができる。
【0425】また、開始位置の更新は、開始位置がテキ
スト項目の側で保持されていて、インデクス項目からは
(p1)によってそれを参照している場合には、上記
(ホ)によって既に実現されている。一方、開始位置が
別々に保持されている場合でも、区間管理方法を使用し
て、開始位置の更新を効率的に実現できる。但し、この
場合、テキストと同等の機能をインデクス項目の間でも
持つことになるため、冗長になる。
【0426】(チ)n<kの場合 0≦i<kーnの各iについて、sn+i ,sn+i+1 ,…
k-1 を位置P+nから始まる後方列の前に連接した変
更後の後方列の前方列と、その開始位置P+n+iを対
にして、新たなインデクス項目を作成する。そして、イ
ンデクス中の開始位置がP+n以降のインデクス項目の
開始位置をkーn増す。開始位置の更新は、上記(ト)
と同様にして行うことができる。
【0427】(3)インデクス項目の再登録 上記(1)で再登録すべきと決定したインデクス項目及
び上記(2)の(ニ)でキーとなる部分列(後方列の前
方列)を更新したインデクス項目、及び(2)の(チ)
で新たに作成したインデクス項目をインデクスに(再)
登録する。
【0428】なお、(2)の(ロ)でキーとなる部分列
(後方列の前方列)を更新したインデクス項目のうち、
再登録が必要なものは(1)で既に決定されている。ま
た、再登録に先立つインデクス項目の削除は、上記イン
デクスの機能の(x13)によって行なわれ、インデク
ス項目の登録は、上記インデクスの機能の(x11)及
び(x12)によって行なうことができる。
【0429】さらに、この登録を効率的に行うために、
開始位置が後ろのインデクス項目から順次登録し、その
際に上記[6−2−4.インデクス更新の効率化
(A)]の方法を併用することができる。あるいは、開
始位置が前のインデクス項目から順次登録し、その際に
上記[6−2−4.インデクス更新の効率化(B)]の
方法を併用することができる。
【0430】また、上記インデクスの機能の(x11)
を使って、登録すべき位置を決定するためにインデクス
上を検索する際に、インデクス項目のキーとなる部分列
(後方列の前方列)間の比較に、上記[6−2−2.後
方列の比較の効率化]又は[6−2−1.インデクス検
索時のキー比較の効率化]を使って(もちろん、両方を
同時に併用してもよい)、比較の効率を上げることがで
きる。但し、この場合、上記[6−2−2.後方列の比
較の効率化]には次の機能が必要である。 (x14)インデクス項目を与えて、それがインデクス
に登録されているか否かを判定する機能 以上の3つの手続きの分類、順序は、上記の一通りに限
られるものではない。例えば、テキストに関する上記
(2)の(イ)(ハ)(ホ)(ヘ)を1つにまとめ、イ
ンデクスに関する上記(1),(2)の(ロ)(ニ)
(ト)(チ)及び(3)を1つにまとめて実行してもよ
い。また、上記(1)は(2)の(ロ)と同時に行って
もよい。
【0431】なお、インデクス項目にアルファベット順
位が付与されている場合、すなわちインデクスの機能の
(x7),(x8),(x9)の構成と機能を備えた場
合も、インデクスの更新機能(x12),(x13)が
それらの構成、機能を維持、保全するように更新を行な
う限り、上述の更新手段の手順には何ら影響しない。
【0432】ここで、上記(2)に関して補足すると、
(ハ)及び(ニ)で、既存のテキスト(インデクス)項
目の更新を行なうのに、「開始位置がP+nーiの場合
(i≧1)、sの後方列sk-i …sk-1 を、位置P+n
から始まる後方列の前に連接した変更後の後方列の前方
列に置き換える」としてもよい。要するに、既存のn個
のテキスト(インデクス)項目のうち、k個(k>nの
ときはn個)を選んで更新後も再利用すればよく、テキ
ストの更新の手間を考慮すれば、それらのテキスト上で
の順序が更新前後で変わらないほうがよいというにすぎ
ない。これに関しては、一旦n個のテキスト(インデク
ス)項目をすべて削除してから、新たにk個の項目を作
成して登録するという手順も可能で、それらの間には種
々の変形例が考えられる。
【0433】この様に、本実施形態のデータ処理装置に
よれば、インデクスの機能の(x1)〜(x14)、テ
キストの機能の(t1)〜(t13)及び(p1),
(p2)の単位機能を前提にした検索手段、更新手段
を、上記の様に構成することができる。
【0434】[7−3.第7実施形態の変形例]なお、
本実施形態は上述したものに限られず、検索手段にも機
能が3通り(さらにはその組み合わせ)考えられたよう
に、(a)単位機能の選択とその組み合わせ使用の方
法、(b)上記種々の「効率化」手法を併用するか否
か、(c)インデクスとテキストの具体的構成に依存す
る単位機能の実現方法の違いによって、無数の実現形態
が可能である。
【0435】また、インデクス生成手段とインデクス及
び検索手段のみで実施する(テキストを生成せず、更新
手段も用いない)ことも可能であるし、インデクス生成
手段、テキスト生成手段によってインデクスとテキスト
の両方を生成し使用するが、検索手段のみを備えて、更
新には応じない形態でも実施できる。
【0436】すなわち、検索手段とインデクス生成手段
とを備えたデータ検索装置、また、検索手段と更新手段
とを備えたデータ処理装置、さらに、検索手段,インデ
クス生成手段,変更手段及び更新手段とを備えたデータ
処理装置が考えられる。また、検索機能のみならず、コ
ード列の復元機能を備えた検索手段,インデクス生成手
段及びテキスト生成手段とを備えたデータ検索装置、検
索機能のみならず、コード列の復元機能を備えた検索手
段と更新手段とを備えたデータ処理装置、検索機能のみ
ならず、コード列の復元機能を備えた検索手段,インデ
クス生成手段,テキスト生成手段,変更手段及び更新手
段とを備えたデータ処理装置などが考えられる。
【0437】さらに、インデクスに順位を付与し、検索
手段にはその順位に基づいてキー列の全部又は一部を前
方列とする後方列の数を出力する機能を設け、また、イ
ンデクス生成手段が、順位を付与したインデクスを生成
するように構成したデータ検索装置が考えられる。
【0438】また、インデクスに順位を付与し、検索手
段にはその順位に基づいてキー列の全部又は一部を前方
列とする後方列の数を出力する機能を設け、また、更新
手段が前記順位の更新も合わせて行なうように構成した
データ処理装置が考えられる。さらに、インデクスに順
位を付与し、検索手段にはその順位に基づいてキー列の
全部又は一部を前方列とする後方列の数を出力する機能
を設け、また、インデクス生成手段には、順位を付与し
たインデクスを生成する機能を設け、さらに、更新手段
が前記順位の更新も合わせて行なうように構成したデー
タ処理装置が考えられる。
【0439】また、上記データ検索装置あるいはデータ
処理装置においては、インデクスを構成するキーとなる
部分列の長さが限定されるものであっても、限定されな
いものであっても良い。さらに、上記データ検索装置あ
るいはデータ処理装置を構成するテキストが、コード列
を記憶領域の連続した番地に格納し、番地によって位置
を表現したものであっても良い。また、上記データ検索
装置あるいはデータ処理装置を構成する更新手段は、コ
ード列に対する複数の変更に対応する更新をとりまとめ
て処理するものであっても良い。
【0440】[8.第8実施形態]本実施形態は、図2
に示した辞書データとテキストデータを、さらにノード
を一体化し、アルファベット順位を部分区間長で表現し
たものである。なお、本実施形態は、データ処理装置あ
るいはデータ検索装置の双方に適用することができる。
なお、本実施形態は、請求項45乃至請求項48に記載
の発明に対応するものである。
【0441】すなわち、図42に示した様に、図の左半
分の部分によってテキストを表現する二分木が構成され
ている。また、各ノードには、コード列中の各位置の1
文字が格納されている。これは、その位置から始まる後
方列の先頭の1文字でもある。
【0442】上述した様に、区間管理方法によれば、位
置を指定してその位置に対応するノードを決定でき、ま
た、任意のノードからそのノードの位置の直前および直
後のノードは決定できるので、位置を指定して、その位
置から始まる後方列の前方列を上記テキストを実現する
二分木を用いて効率的に復元できる。また、区間管理方
法によって、任意のノードからそのノードが表す区間、
すなわち、そのノードに対応する後方列の前方列の開始
位置を得ることもできる。
【0443】したがって、図42の左半分の部分によっ
て表現されるテキスト二分木は、表22に示した様な、
キーとなる部分列(後方列の前方列)と開始位置の対を
開始位置の順に並べた表と同じ機能を有し、位置を与え
て、その位置とキーとなる部分列(後方列の前方列)の
対を検索する機能を果たし得る。
【0444】
【表22】 一方、図42の右半分の部分によってインデクスを表現
する二分木が構成されている。そして、図42の右半分
の部分と、上述のコード列の復元機能を用いることによ
って、表23に示した様な、キーとなる部分列(後方列
の前方列)をアルファベット順に並べて、アルファベッ
ト順位を付与した表と同じ機能を有し、コード列を与え
て、そのコード列と前方列が最も長く一致する後方列を
検索する機能、及び、検索した後方列が表中で何番目に
位置するかを決定する機能を果たし得る。さらに、区間
管理方法を用いれば、アルファベット順位を与えて、表
中でその順位にある後方列を決定するという機能も果た
すことができる。
【0445】
【表23】 各後方列の開始位置は、上述した様に左半分の二分木の
部分区間長から決定できるので、図42の構造は全体と
して、キーとなる部分列及びそのアルファベット順位と
その開始位置から成るレコードを、2つの異なるキー、
すなわち、1つは開始位置の順、もう1つは後方列のア
ルファベット順(及び、アルファベット順位の順)にし
たがって並べた2つの表として機能し、表24に示した
様に、同一のレコードに2つの異なる方法でアクセスす
ることができる。
【0446】
【表24】 この様に、本実施形態では、インデクスを実現する二分
木のノードとテキストを実現する二分木のノードを一体
化しているので、1つのノードがインデクス項目及びテ
キスト項目の両方の役割を果たす。すなわち、表24に
おいて、同一内容のレコード(行)には1つのノードが
対応している。
【0447】また、本実施形態のデータ構造によれば、
従来技術である二分(探索)木に関する操作、及び区間
管理方法を適用することによって、上記インデクスの機
能の(x1)〜(x13)、テキストの機能の(t1)
〜(t7),(t12),(t13),及び(p1),
(p2)の単位機能は容易に実現できる。したがって、
それらを前提にした検索手段、更新手段は、すべてこの
データ構造を使用して実現することができる。
【0448】[9.第9実施形態]本実施形態は、上記
インデクス及びテキストの諸機能(x1)〜(x1
4)、(t1)〜(t7)、(t12)、(t13)、
(p1)、(p2)を同時に提供しうる、インデクス及
びテキストの具体的構成を示したものである。
【0449】すなわち、本実施形態においては、[第8
実施形態]において示した図42の構成において、[第
7実施形態]において示したインデクス及びテキストの
機能群が実現可能であることを具体的に説明する。
【0450】[9−1.テキストの検索に関する機能]
図42に示したデータ構造において、各ノードのコード
及びそれより左のフィールドがテキストの機能を実現す
るのに使用される。すなわち、これらのポインタ、部分
区間長及びコードから成る構造は、(a)二分探索木を
成し、(b)ノードの順(LCR=Left-Center-Right
順)は、コードのテキスト中における位置の順で、
(c)各ノード(コード)には、そのコードの位置に対
応する長さ1の区間が、部分区間長と区間管理方法を用
いて付与されている。言い換えれば、第3実施形態[3
−3、テキストの併用]において示した表12を、二分
探索木と区間管理方法によってさらに具体化したもので
ある。
【0451】以下、順次、上記各機能について説明す
る。まず、(t1)に示した「テキスト項目」は1つの
ノードとして実現されており、キーとなる部分列は直接
的にはノードに格納されたコードのみから成る1文字の
部分列であるが、前記第7実施形態の「*テキストの構
成及び機能*(1)テキストの検索に関する機能」の項
で説明したように、任意の長さに拡張することができ
る。また、開始位置については、区間管理方法によっ
て、そのノードが表す固有の区間の左端が、コード列の
先端から何文字目であるかに対応づけられている。従っ
て、この構成は、テキスト項目たるノードを、その開始
位置のLCR順として並べたものであり、(t2)を実
現している。
【0452】また、(t3)については、区間管理方法
の検索機能を使って、コード列上の位置、すなわち先頭
からの文字数を与えて、その位置を含む区間を表わすノ
ードを決定すれば、そのノードが、指定した位置から始
まる後方列の前方列を含むテキスト項目に対応する。
【0453】さらに、各ノードにはそのノードが表わす
長さ1の固有の区間に位置する1文字のコードが格納さ
れているから、開始位置を初めとしてその後続の位置を
順次与えて(t3)によって検索し、得られたノードに
格納されたコードを連接することによって、任意の後方
列の任意の長さの前方列(すなわち、テキストの任意の
位置から始まる任意の長さの部分列)を復元することが
できる。これにより、(t4)の機能及び(t1)の構
成を実現することができる。逆に、区間管理方法を用い
て、各ノードからそれが表わす区間、すなわち、そのノ
ードに対応するテキスト項目の開始位置を得ることがで
きるので、(t7)も実現される。また、二分探索木に
おいては、(t6)は、LCR順序で隣になるノードを
決定する機能で実現することができる。
【0454】以下、最も単純な手続の例として、指定ノ
ードの直前のノード(=左隣のノード)を決定する手順
について、図43を参照して説明する。すなわち、図4
3に示したフローチャートにおいて、指定ノードをカレ
ントノードとし(ステップ431)、そのカレントノー
ドに左の子がある場合は(ステップ432)、左の子を
隣ノードとする(ステップ433)。そして、この隣ノ
ードに右の子があるか否かを検索し(ステップ43
4)、この隣ノードに右の子がある場合には、右の子を
隣ノードとし(ステップ435)、さらに、その隣ノー
ドに右の子があるか否かを検索する(ステップ43
4)。そして、隣ノードに右の子がある限りはステップ
434とステップ435を繰り返し、隣ノードに右の子
がないときは、その隣ノードが指定ノードの直前のノー
ド(すなわち、指定ノードの左隣のノード)となる。
【0455】一方、ステップ432において、カレント
ノードに左の子がない場合には、カレントノードが右の
子か否かを検索し(ステップ436)、カレントノード
が右の子である場合は、カレントノードの親ノードを隣
ノードとする(ステップ437)。すなわち、カレント
ノードの親ノードが、指定ノードの直前のノード(すな
わち、指定ノードの左隣のノード)となる。また、ステ
ップ436において、カレントノードが右の子でない場
合は、カレントノードがルートか否かを検索し(ステッ
プ438)、カレントノードがルートの場合は、指定ノ
ードの左隣のノードは存在しないと決定される。一方、
カレントノードがルートでない場合は、カレントノード
の親ノードをカレントノードとし(ステップ439)、
再びステップ436に戻る。
【0456】また、 splayingを使用した次の
ような方法もある。なお、 splayingとは、任
意の特定のノード(対象ノード)がルートとなるように
二分木を変更することである(参考文献:Data Structu
res and Network Algorithms, Robert Endre Tarjan
著、"4.3 Self-Adjusting binary trees" (pp53-56)
)。
【0457】すなわち、図44に示したフローチャート
において、指定ノードにsplayingを適用するこ
とによって、指定ノードをルートの位置に移動する(ス
テップ441)。指定ノードをカレントノードとし(ス
テップ442)、そのカレントノードに左の子がある場
合は(ステップ443)、左の子を隣ノードとする(ス
テップ444)。そして、この隣ノードに右の子がある
か否かを検索し(ステップ445)、この隣ノードに右
の子がある場合には、右の子を隣ノードとし(ステップ
446)、さらに、その隣ノードに右の子があるか否か
を検索する(ステップ445)。そして、隣ノードに右
の子がある限りはステップ445とステップ446を繰
り返し、隣ノードに右の子がないときは、その隣ノード
が指定ノードの直前のノード(すなわち、指定ノードの
左隣のノード)となる。
【0458】一方、ステップ443において、カレント
ノードに左の子がない場合には、指定ノードの左隣のノ
ードは存在しないと決定される。
【0459】あるいは、後述する(x4)の機能によっ
て、指定ノードが表わす後方列の開始位置、すなわち指
定ノードが表す固有の区間の左端(右端)の位置を得
て、それを1減じた(増した)位置に対応するノードを
(t3)によって検索することにより、左隣(右隣)の
ノードを決定することができる。
【0460】また、(t5)は、上記第8実施形態にお
いてはその特別な場合(t3)に一致しているが、区間
管理方法の検索機能は長さ1以外の区間が含まれる場合
も何ら変更なく機能するから、第8実施形態と類似の構
成で各ノードが表す区間の長さが1以外のものが含まれ
る場合に、上記(t3)の実現方法を用いて(t5)を
実現することができる。
【0461】[9−2.テキストの更新に関する機能]
(t12)は、挿入すべき新たなノードに、新たなテキ
スト項目の後方列(の前方列)の先頭の1文字を格納
し、新たなノードが表す区間の長さを1として、区間管
理方法のノード(区間)追加手続を使って、指定ノード
の直前または直後に新たなノードを追加することによっ
て実現することができる。この場合、テキスト項目の後
方列(の前方列)はテキストの一部分であるから、図4
2の構成において、ノードとして挿入する必要があるの
はその先端の1文字だけで、2文字目以降は既存のテキ
ストから復元することができる(もちろん、この復元機
能はノード挿入後も変わらない)。なお、この1文字分
のノードの挿入は、元のコード列に対する1文字の挿入
に対応している。
【0462】また、(t13)は、区間管理方法のノー
ド(区間)削除手続を使って実現することができる。す
なわち、テキスト項目(ノード)の削除は、その後方列
(の前方列)の先頭の1文字(ノードに格納された1文
字)を、元のコード列から削除することに対応してい
る。
【0463】また、(p1)、(p2)については、図
42に示したデータ構造においては、同一開始位置の後
方列を含むインデクス項目とテキスト項目とを、1つの
ノードに一体化することによって実現されている。
【0464】[9−3.インデクスの検索に関する機
能]インデクスは、図42のデータ構造全体によって実
現されており、(x1)の「インデクス項目」には1つ
のノードが対応している。また、(x2)の「インデク
ス」は、各ノードの右側のポインタを使用して構成され
る二分探索木によって実現されており、この二分探索木
のノードのLCR順が、各ノード(インデクス項目)の
後方列(の前方列)の辞書順に一致している。
【0465】また、(x3)は以下のようにして実現さ
れる。すなわち、まず、この二分探索木上で、指定パタ
ーンをキーとして、先頭から順に各ノードの後方列(の
前方列)と辞書順の比較を行なう。その際、パターン全
体が前方列になっている後方列がみつかれば、そのイン
デクス項目が求めるインデクス項目の1つである。一
方、パターン全体が前方列になっている後方列がない場
合は、最後に訪れたノードaの後方列Saが、辞書順で
比較した場合にパターンより小さい場合はノードaの直
前の、また、大きい場合はノードaの直後のノードbが
存在する場合にその後方列Sbと比較する。そして、最
後に訪れたノードaの後方列Saと、ノードaの直前あ
るいは直後の後方列Sbのうち、パターンとより長く一
致する方の後方列を含むインデクス項目(ノード)が求
めるインデクス項目である。一方、ノードbがなけれ
ば、ノードaのインデクス項目が求めるインデクス項目
である。なお、ノードbは存在すれば、ノードaを訪れ
るまでの二分探索の過程で必ず訪問されている。
【0466】また、(x3)を実現する二分探索の方法
はこれに限らず、第7実施形態に示した「(1−1)単
位機能(x3)の実現方法」、あるいは、第6実施形態
[6−2−1.インデクス検索時のキー(コード列)比
較の効率化]に示した方法等、種々考えられる。
【0467】(x4)については、図42の構造が、前
述のように区間管理方法にもとづいてテキストを表現す
る二分探索木をその左側に含んでいるので、インデクス
項目と一体化したテキスト項目(ノード)を与えて、テ
キストを表現する二分探索木上で、区間管理方法に含ま
れるノードからそのノードが表す区間の位置を算出する
機能によって、そのノードに対応する後方列(の前方
列)の開始位置を得ることができる。これは、すなわ
ち、上述の(t7)の機能の実現に等しい。
【0468】また、インデクスの二分探索木とテキスト
の二分探索木は全く同じ方法(構造)で実現されている
ので、(x6)は上述の(t6)と全く同じ方法(手
続)で実現することができる。
【0469】さらに、(x5)を効果的に実現する方法
としては、第7実施形態に示した「(1−2)単位機能
(x5)の実現方法」があるが、図42に示した構成で
は、インデクスは二分探索木で実現されているから、パ
ターンと最も長く一致する前方列をもつ後方列を含む
(インデクス項目を表わす)ノードのうち、最も根に近
いノードを根とする部分木に対してこの方法を適用すれ
ばよい。その際、上限または下限には初期値を与える必
要はなく、不一致のノードがあった場合に設定すればよ
い。
【0470】以下、パターンと最も長く一致する前方列
をもつ後方列を含む(インデクス項目を表わす)ノード
のうち、先頭のノード(上限)を求める場合の具体的な
手順について、図45を参照して説明する。すなわち、
図45に示したフローチャートにおいて、該当ノードの
うち、最も根に近いノードをいったん先頭ノードとし
(ステップ451)、この先頭ノードをカレントノード
とする(ステップ452)。そして、カレントノードに
左の子があるか否かを検索し(ステップ453)、カレ
ントノードに左の子がない場合には、カレントノードが
先頭ノードと決定される。一方、ステップ453におい
て、カレントノードに左の子がある場合には、その左の
子をカレントノードとする(ステップ454)。そし
て、カレントノードの後方列の前方列と最長一致パター
ンが一致するか否かを検索し(ステップ455)、一致
する場合には、カレントノードを先頭ノードとし(ステ
ップ456)、ステップ453に戻る。
【0471】また、ステップ455において、カレント
ノードの後方列の前方列と最長一致パターンが一致しな
い場合には、カレントノードに右の子があるか否かを検
索し(ステップ457)、右の子がない場合には、先頭
ノードが上限と決定される。一方、カレントノードに右
の子がある場合には、右の子をカレントノードとし(ス
テップ458)、カレントノードの後方列の前方列と最
長一致パターンが一致するか否かを検索し(ステップ4
59)、一致する場合には、カレントノードを先頭ノー
ドとし(ステップ460)、ステップ453に戻り、カ
レントノードにさらに左の子があるか否かを検索する。
また、一致しない場合にはステップ457に戻り、カレ
ントノードにさらに右の子があるか否かを検索する。
【0472】上記(1)において、該当ノードのうち最
も根に近いノードを与えるには、検索機能(x3)を、
第7実施形態に示した「(1−1)単位機能(x3)の
実現方法」に示したように、最も根に近いノードを決定
するように実現すればよい。あるいは、(x3)によっ
て決定されたノード(パターンの前方列と最も長く一致
するインデクス項目を含むノード)から根へのパスを遡
りながら、与えられたパターンの前方列と後方列の前方
列が一致するか否かをチェックし、一致するノードのう
ち最も根に近いノードを求めてもよい。その際、最初に
一致しないノードが出てきたら、そのノードから根まで
のパス上のノードはいずれも一致しないことが保証され
るから、そこで遡行を打切ってよい。さらには、(x
3)によって決定されたノードに対してsplayin
g操作を適用してそのノードを根に移動してから、それ
を先頭ノードの初期値としてもよい。
【0473】また、(x7)、(x8)、(x9)は、
インデクスを実現する二分探索木(図42の右側の構
造)において、各ノードに辞書順位に対応する長さ1の
区間を対応させた部分区間長フィールドを持たせ、区間
管理方法によってこれらを管理することで実現される。
また、(x8)は(x4)と同様に、インデクス項目を
表わす区間の位置を、区間管理方法によって算出する手
続で実現される。さらに、(x9)については、(t
3)と全く同様の手続で、インデクスを実現する二分探
索木を検索すればよい。
【0474】また、(x10)は、第7実施形態の「*
インデクスの構成及び機能*(1)インデクスの検索に
関する機能」の項でも述べたように、2つのノードのそ
れぞれのインデクス項目について、インデクス中での位
置(先頭からの項目数)を(x8)を使って求め、その
大小を比較して判定すればよい。あるいは、根からそれ
ぞれのノードへ至るパスを調べて、最初に異なるポイン
タが現われたとき(分岐したとき)、どちらのパスが左
の子あるいは右の子へのポインタをたどるかで判定して
もよい。
【0475】[9−4.インデクスの更新に関する機
能](x11)は、(x3)と同様にして、未登録の後
方列の前方列をパターンとしてインデクスの二分探索木
を検索することによって決定することができる。後方列
の前方列の長さに制限がない場合、すなわち、各インデ
クス項目に後方列が含まれている場合、同一の後方列を
重複して登録することはありえないから、二分探索木上
の二分探索は、必ずあるノードからさらに左の子または
右の子に移って探索を継続する。しかし、該当するノー
ドが存在しない場合には、探索を打切ることで終了す
る。このとき、最後に訪れたノードが表わすインデクス
項目と、どちらの子に移ろうとしたか(左の子なら直
前、右の子なら直後)が(x11)が決定すべき事柄に
なる。
【0476】この場合において、インデクス項目の後方
列の前方列の長さが限られている場合には、同一のもの
が見いだされ得るが、その場合には直前、直後のどちら
に追加しても支障は生じない。もちろん、同一のものが
ない場合は、上述した長さに制限がない場合と同じ手続
に従う。
【0477】また、(x12)に関しては、インデクス
項目はテキスト項目と一体化されているので、インデク
ス項目としてインデクスの二分探索木にノードを登録
(追加)する際には、テキスト項目としてテキストの二
分探索木には既に登録されている。したがって、あるイ
ンデクス項目の直前または直後に、新たなインデクス項
目を挿入するには、インデクスの二分木に、区間管理方
法のノード(区間)の追加手続を使って、長さ1の区間
を表わすノードとして追加するだけでよい。
【0478】さらに、(x13)に関しても、区間管理
方法のノード(区間)の削除手続によって、インデクス
の二分探索木からインデクス項目を表わすノードを削除
すればよい。その際、テキスト項目には影響を及ぼす必
要はないので、図42の左側の構造(コード含む)は変
えなくてよい。
【0479】(x14)に関しては、インデクスの二分
探索木に登録されていないノードのポインタフィールド
(図42のノードの右側のポインタ)には、ポインタと
区別できる特別な値を設定して区別すればよい。あるい
は、ノードをインデクスとは別の二分木に一旦登録し
て、各ノードが属している二分木(これは、根ノードの
親へのポインタの部分に特別なポインタまたは値を設定
することによって識別できる)を求めて判別することも
可能である。
【0480】以上述べたように、図42に示したデータ
構造を使用して、本発明を構成するインデクス及びテキ
ストの機能(x1)〜(x14)、(t1)〜(t
6)、(t12)、(t13)、(p1)、(p2)を
すべて具体的に実現することができる。なお、実現の方
法については上に述べたものに限られるものではない。
また、前記第7実施形態はこれらの上位概念の機能に基
づいて構成されており、図42に示したデータ構造を使
用して具体的に実現可能である。
【0481】[10.第10実施形態]本実施形態は、
上記表24に示した様なインデクスとテキストを用い
て、上記[6−2−5.変更位置の左側でインデクスの
再登録が必要な位置が続く範囲を決定する手続の効率
化]を実現したものである。
【0482】すなわち、図46に示した様に、テキスト
“ababcab”のうち、“c”が変更されたと仮定
する。この場合、開始位置の順に並べられたテキストの
キーとなる部分列のうち、変更に係る“c”を含むもの
を検索する。図において、“2,ababab,1”
から“7,ab,5”が該当する。次に、これらのキ
ーとなる部分列の中央に位置する部分列を選ぶ(すなわ
ち、“abab”)。そして、これに対応するキーと
なる部分列をインデクス中で検索すると、“3,ab
ab,3”が見出される。この“abab”は、イン
デクス中で、その上に位置する“ab,ababca
b”と前方列“ab”が一致するため、“c”の変更に
より、登録された位置が変更される可能性があり、判定
手段により「再登録が必要である」と判断される。その
結果、テキスト中において、“abab”より短い
“bcab”“cab”も「再登録が必要である」と判
断される。
【0483】一方、“abab”より長い部分列、す
なわち“babab”をインデクスに戻って見ると、
“5,babab,2”が対応するが、この場合、
“c”はインデクスのアルファベット順位の決定に影響
しない。したがって、“babab”及び“abab
ab”は「再登録は不要である」と判断される。
【0484】[11.他の実施形態]なお、本発明は上
記各実施形態に限定されるものではなく、適宜実施態様
を変更して実施できるものであるから、次のような他の
実施形態を包含するものである。
【0485】上記実施例においては、キーとなる部分列
をアルファベットの順位に基づく辞書順に並べたデータ
について説明したが、コード間に特定の順序を定めたコ
ード系に基づく辞書順に並べたデータについても、同様
に適用することができる。
【0486】また、本発明におけるコード列は文字列に
は限定されず、音声パターンを表すコード、DNAの塩
基配列を表すコードなど、いかなる種類のコードでもよ
い。また、コード列における部分列の決定は、実際にコ
ード列のデータの一部を他の記憶領域に転送したりして
加工する必要はなく、所定のポインタで境界をマーキン
グするなど、間接的な処理で足りる。
【0487】さらに、上記実施形態における検索は、コ
ード列の各後方列に基づいて前方一致で行ったが、本発
明における検索は、コード列の各前方列に基づいて後方
一致で行ってもよい。この場合、本明細書の「後方列」
と「前方列」は相互に読み替えるものとする。また、処
理の際に、キー列から文字を取り出す順序は後方からと
なる。
【0488】また、インデクスの各項目に順位を付与す
る方法、およびインデクスの更新時にそれを管理する方
法は、インデクスの各項目に長さ1の区間がそれぞれ先
頭から順に割り当てられているものとして、本出願人が
別途特許出願した「区間管理方法」を適用することによ
り効率的に実現することができる。
【0489】
【発明の効果】以上述べた様に、本発明によれば、効率
の良いデータ処理装置、データ検索装置、データ処理方
法及びデータ検索方法が得られる。例えば、検索用デー
タの更新所要時間が短いデータ処理装置を提供するこ
と、効率的にデータを処理するデータ処理装置を提供す
ること、検索を高速に行うデータ処理装置を提供するこ
と、メモリを効率的に利用することができるデータ処理
装置を提供すること、一定の長さ以下あるいは長さを制
限しないキー列の全体又は一部を含む部分をもれなく、
また重複なく検索するデータ検索装置を提供することが
できる。
【図面の簡単な説明】
【図1】本発明の第1実施形態の構成を表す機能ブロッ
ク図
【図2】本発明の第1実施形態におけるデータ構造を示
す図
【図3】本発明の第1実施形態において、テキスト上の
文字が変更された場合のデータ構造を示す図
【図4】本発明の第1実施形態において、テキスト上の
文字が挿入・削除された場合のデータ構造を示す図
【図5】「区間管理方法」を用いたデータ処理装置の構
成を示す機能ブロック図
【図6】「区間管理方法」を用いたデータ処理装置にお
ける二分木の例
【図7】「区間管理方法」を用いたデータ処理装置にお
ける二分木の説明図
【図8】「区間管理方法」を用いたデータ処理装置にお
けるデータの例
【図9】「区間管理方法」を用いたデータ処理装置にお
ける検索の手順を示すフローチャート
【図10】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(検索時)
【図11】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(検索時)
【図12】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(検索時)
【図13】「区間管理方法」を用いたデータ処理装置に
おける区間の特定の手順を示すフローチャート
【図14】「区間管理方法」を用いたデータ処理装置に
おける区間の特定の手順を示すフローチャート
【図15】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間長変更時)
【図16】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間追加時)
【図17】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間追加時)
【図18】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間追加時)
【図19】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間追加時)
【図20】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間削除時)
【図21】「区間管理方法」を用いたデータ処理装置に
おける二分木の例(区間削除時)
【図22】本発明の第2実施形態におけるデータ構造を
示す図
【図23】本発明の第2実施形態におけるデータ構造を
示す図
【図24】本発明の第2実施形態におけるデータ構造を
示す図
【図25】本発明の第2実施形態におけるデータ構造を
示す図
【図26】本発明の第2実施形態におけるデータ構造を
示す図
【図27】本発明の第2実施形態におけるデータ構造を
示す図
【図28】本発明の第2実施形態におけるデータ構造を
示す図
【図29】本発明の第2実施形態におけるデータ構造を
示す図
【図30】本発明の第3実施形態の構成を表す機能ブロ
ック図
【図31】本発明の第3実施形態におけるインデクスの
構成を示す図
【図32】(A)は、本発明の第3実施形態において、
テキストの文字を変更した場合の「変更位置」を示す
図、(B)は文字を挿入した場合の「変更位置」を示す
図、(C)は文字を削除した場合の「変更位置」を示す
図、(D)は末尾に文字を挿入した場合の「変更位置」
を示す図
【図33】本発明の第4実施形態の構成を表す機能ブロ
ック図
【図34】本発明の第4実施形態の作用を示す図
【図35】本発明の第5実施形態の構成を表す機能ブロ
ック図
【図36】本発明の第6実施形態の構成を表す機能ブロ
ック図
【図37】本発明の第6実施形態の作用を説明するため
の図
【図38】本発明の第6実施形態の作用を説明するため
の図
【図39】本発明の第7実施形態の構成を表す機能ブロ
ック図
【図40】単位機能(x3)の実現方法を説明する図
【図41】(A),(B),(C)は、単位機能(x
5)の実現方法を説明する図
【図42】本発明の第8実施形態の構成を表す図
【図43】指定ノードの直前のノードを決定する手順を
示すフローチャート
【図44】Splayingを用いて、指定ノードの直
前のノードを決定する手順を示すフローチャート
【図45】先頭のノードを求める手順を示すフローチャ
ート
【図46】本発明の第10実施形態の作用を説明するた
めの図
【図47】従来のコード列の検索において、文字列中に
存在するパターンの例
【図48】従来のTrieの例
【図49】従来のコード列の検索におけるコード列につ
いて、位置と同定部分列との対照表の例
【図50】従来のposition tree の例
【図51】従来のsuffix tree の例
【図52】従来のdirected acyclic word graph の例
【図53】従来の第1の手法におけるデータの例
【図54】従来の第1の手法におけるデータの例(挿入
時)
【図55】従来の第2の手法におけるデータの例
【図56】従来の二分木の例
【図57】従来の第3の手法におけるデータの例
【図58】従来の第4の手法におけるデータの例
【符号の説明】
1…コード列 2…辞書データ 3…辞書データ生成手段 4…辞書tree 5…辞書tree生成手段 6…テキストデータ 7…テキストデータ生成手段 8…テキストtree 9…テキストtree生成手段 10…検索手段 11…変更手段 12…更新手段 13…比較手段 14…再登録判定手段 15…登録手段 20…調整範囲設定手段 21…インデクス 22…インデクス生成手段 23…テキスト 24…テキスト生成手段 30…順位付加手段 31…二分木 32…二分木生成手段 33…区間検索手段 34…二分木更新手段 35…区間特定手段 41…区間長変更手段 42…追加手段 43…削除手段 45…構造調整手段
フロントページの続き (56)参考文献 特開 平2−186476(JP,A) 特開 平3−75869(JP,A) 特開 昭61−141036(JP,A) 特開 昭58−3033(JP,A) 特開 平2−43677(JP,A) 特開 平6−168270(JP,A) 特開 平4−111064(JP,A) 特開 平6−110927(JP,A) (58)調査した分野(Int.Cl.6,DB名) G06F 17/30

Claims (76)

    (57)【特許請求の範囲】
  1. 【請求項1】 キー列による検索対象となるコード列に
    ついて、その後方の部分である後方列の検索に用いるこ
    とができる前方列をアルファベット順に並べ、また、前
    記前方列とその前方列の前記コード列中における位置と
    を対として表す辞書データを生成する辞書データ生成手
    段と、 前記辞書データに基づいて、二分木である辞書tree
    を生成する辞書tree生成手段と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成手段と、 前記テキストデータに基づいて、二分木であるテキスト
    treeを生成するテキストtree生成手段と、 前記辞書tree及びテキストtreeに基づいて、キ
    ー列の全部又は一部を前方列とする後方列を検索する検
    索手段と、 前記コード列を変更する変更手段と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ、辞書tree、テキストデータ及びテキス
    トtreeを更新する更新手段とを有することを特徴と
    するデータ処理装置。
  2. 【請求項2】 キー列による検索対象となるコード列に
    ついて、その後方の部分である後方列の検索に用いるこ
    とができる前方列をアルファベット順に並べ、また、前
    記前方列とその前方列の前記コード列中における位置と
    を対として表す辞書データを生成する辞書データ生成手
    段と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成手段と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索手
    段と、 前記コード列を変更する変更手段と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ及びテキストデータを更新する更新手段とを
    有することを特徴とするデータ処理装置。
  3. 【請求項3】 前記辞書データを構成するキーとなる部
    分列の長さが限定されることを特徴とする請求項1又は
    請求項2記載のデータ処理装置。
  4. 【請求項4】 前記辞書データを構成するキーとなる部
    分列の長さが限定されないことを特徴とする請求項1又
    は請求項2記載のデータ処理装置。
  5. 【請求項5】 前記辞書tree生成手段あるいはテキ
    ストtree生成手段の少なくともいずれか一方が、前
    記辞書treeとテキストtreeの対応するnode
    間に、ポインタを設定することを特徴とする請求項1又
    は請求項3又は請求項4記載のデータ処理装置。
  6. 【請求項6】 前記辞書データ生成手段あるいはテキス
    トデータ生成手段の少なくともいずれか一方が、前記辞
    書データとテキストデータの間にポインタを設定するこ
    とを特徴とする請求項2又は請求項3又は請求項4記載
    のデータ処理装置。
  7. 【請求項7】 前記検索手段が、前記辞書treeとテ
    キストtreeを対照することにより、データ検索を行
    うように構成されたことを特徴とする請求項1又は請求
    項3又は請求項4記載のデータ処理装置。
  8. 【請求項8】 前記検索手段が、前記辞書データとテキ
    ストデータを対照することにより、データ検索を行うよ
    うに構成されたことを特徴とする請求項2又は請求項3
    又は請求項4記載のデータ処理装置。
  9. 【請求項9】 前記検索手段が、前記辞書tree及び
    テキストtreeの少なくともいずれか一方に基づい
    て、部分列を復元する機能を有することを特徴とする請
    求項1又は請求項3又は請求項4記載のデータ処理装
    置。
  10. 【請求項10】 前記検索手段が、前記辞書データ及び
    テキストデータの少なくともいずれか一方に基づいて、
    部分列を復元する機能を有することを特徴とする請求項
    2又は請求項3又は請求項4記載のデータ処理装置。
  11. 【請求項11】 前記辞書tree生成手段及びテキス
    トtree生成手段によって、前記辞書tree及びテ
    キストtreeのnodeを一体化して構成したことを
    特徴とする請求項1又は請求項3又は請求項4記載のデ
    ータ処理装置。
  12. 【請求項12】 前記辞書treeに文字列を格納した
    ことを特徴とする請求項1又は請求項3又は請求項4記
    載のデータ処理装置。
  13. 【請求項13】 前記辞書treeに格納される文字列
    の長さが、対応するテキストtreeのnodeが表わ
    す区間の長さと等しいことを特徴とする請求項12記載
    のデータ処理装置。
  14. 【請求項14】 前記テキストtreeのnodeにお
    いて、辞書treeへのポインタとして、文字列とno
    deのアドレスを使用することを特徴とする請求項1又
    は請求項3又は請求項4記載のデータ処理装置。
  15. 【請求項15】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    手段と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成手段と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索手
    段と、 前記コード列を変更する変更手段と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ及びテキストデータを更新する更新手段と、 前記変更箇所をとりまとめて処理するための調整範囲設
    定手段を有することを特徴とするデータ処理装置。
  16. 【請求項16】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    手段と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成手段と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索手
    段と、 前記コード列を変更する変更手段と、 アルファベット順に登録された各辞書データに順位を付
    与する順位付加手段と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ、テキストデータ及びアルファベット順位を
    更新する更新手段とを有することを特徴とするデータ処
    理装置。
  17. 【請求項17】 前記検索手段が、前方列が一致する辞
    書データの先頭のものと末尾のものの順位から、前方列
    が一致するキーとなる部分列の数を計数する計数手段を
    有することを特徴とする請求項16記載のデータ処理装
    置。
  18. 【請求項18】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    手段と、 前記辞書データに基づいて、二分木である辞書tree
    を生成する辞書tree生成手段と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成手段と、 前記辞書tree及びテキストデータに基づいて、キー
    列の全部又は一部を前方列とする後方列を検索する検索
    手段とを有することを特徴とするデータ検索装置。
  19. 【請求項19】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    手段と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成手段と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索手
    段とを有することを特徴とするデータ検索装置。
  20. 【請求項20】 前記辞書データを構成するキーとなる
    部分列の長さが限定されることを特徴とする請求項18
    又は請求項19記載のデータ検索装置。
  21. 【請求項21】 前記辞書データを構成するキーとなる
    部分列の長さが限定されないことを特徴とする請求項1
    8又は請求項19記載のデータ検索装置。
  22. 【請求項22】 前記テキストデータに基づいて、二分
    木であるテキストtreeを生成するテキストtree
    生成手段を有し、前記辞書tree及びテキストtre
    eに基づいて、キー列の全部又は一部を前方列とする後
    方列を検索することを特徴とする請求項18又は請求項
    20又は請求項21記載のデータ検索装置。
  23. 【請求項23】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    その前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    手段と、 前記辞書データに基づいて、キー列の全部又は一部を前
    方列とする後方列を検索する検索手段と、 2つのコード列の比較を行なう比較手段と、 1文字違いの2つの後方列のうち、一方がすでにインデ
    クスに登録されている場合に、他方の後方列の登録位置
    を、1文字の比較に基づいて決定して登録する登録手段
    と、 前記コード列を変更する変更手段と、 前記コード列の一部が変更された場合に、変更後のコー
    ド列を再登録する必要があるか否かを判定する再登録判
    定手段と、 前記比較手段及び再登録判定手段の判断結果に基づい
    て、変更に係る前記コード列の辞書データを更新する更
    新手段とを有することを特徴とするデータ処理装置。
  24. 【請求項24】 前記検索手段が、コード列をキーとし
    てアルファベット順に並べた表において、コード列をキ
    ーとして二分探索を行なう際に、既に行なった比較が何
    文字目まで一致したかに基づいて、次の比較を何文字目
    から行なうかを決定するように構成されたことを特徴と
    する請求項23に記載のデータ処理装置。
  25. 【請求項25】 前記比較手段が、コード列をキーとし
    てアルファベット順に並べた表において、2つのコード
    列の比較を行なう際に、両方のコード列から一致する前
    方列を除いた後方列がともに前記表中に存在する場合、
    それらの後方列の表中での位置の比較結果を、前記2つ
    のコード列の比較結果とするように構成されたことを特
    徴とする請求項23に記載のデータ処理装置。
  26. 【請求項26】 前記登録手段が、後方列の前方列をキ
    ーとしてアルファベット順に並べた表において、後方列
    αwの前方列を登録する際に、前方列が前記表中で前記
    後方列αwより短い最長の後方列wの直前である後方列
    xより5長い最短の後方列βxと前記直前である後方列
    xとの差βが、前記後方列αwとそれより短い最長の後
    方列wとの差αと一致する場合、βxの前方列の直後に
    αwの前方列を登録し、 また、前方列が前記表中で前記後方列αwより短い最長
    の後方列wの直後である後方列yより長い最短の後方列
    γyと前記直後である後方列yとの差γが、前記後方列
    αwとそれより短い最長の後方列wとの差αと一致する
    場合、γyの前方列の直前にαwの前方列を登録するよ
    うに構成されたことを特徴とする請求項23に記載のデ
    ータ処理装置。
  27. 【請求項27】 前記登録手段が、後方列の前方列をキ
    ーとしてアルファベット順に並べた表において、後方列
    wの前方列を登録する際に、前方列が前記表中で前記後
    方列wより長い最短の後方列αwの直前及び直後である
    後方列βx及びγyについて、βxより短い最長の後方
    列xの前方列とγyより短い最長の後方列yの前方列と
    が、前記表中でxの前方列を先にして隣接しており、か
    つ、α=βまたはα=γである場合、xの前方列とyの
    前方列の間にwの前方列を登録するように構成されたこ
    とを特徴とする請求項23に記載のデータ処理装置。
  28. 【請求項28】 前記再登録判定手段が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、変更部分を含む後方
    列の前方列について、前記表中で前記前方列の直前およ
    び直後の前方列と前記前方列とを変更後の内容において
    比較し、前記前方列が前記直前の前方列以上でかつ前記
    直後の前方列以下である場合には、少なくとも前記後方
    列及びそれより長い後方列については、それらの前方列
    の再登録の必要がないと判定し、そうでない場合には、
    少なくとも前記後方列及び変更部分を含むそれより短い
    後方列については、それらの前方列の再登録が必要であ
    ると判定するように構成されたことを特徴とする請求項
    23に記載のデータ処理装置。
  29. 【請求項29】 前記再登録判定手段が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、変更部分を含む後方
    列の前方列について、前記表中で前記前方列の直前また
    は直後の前方列と前記前方列とを比較し、両者の前方列
    が、いずれかの変更された部分の直前まで一致する場合
    には、少なくとも前記後方列及びそれより短い後方列に
    ついては、それらの前方列の再登録が必要であると判定
    し、一致しない場合には、少なくとも前記後方列及び変
    更部分を含むそれより長い後方列については、それらの
    前方列の再登録の必要がないと判定するように構成され
    たことを特徴とする請求項23に記載のデータ処理装
    置。
  30. 【請求項30】 前記再登録判定手段が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、後方列の前方列が再
    登録が必要か否かを、変更部分を含む後方列の前方列に
    ついて、短い後方列の前方列から順に判定するように構
    成されたことを特徴とする請求項23に記載のデータ処
    理装置。
  31. 【請求項31】 前記再登録判定手段が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、後方列の前方列が再
    登録が必要か否かを、変更部分を含む後方列の前方列に
    ついて、開始位置の順に並べて二分法で選択しつつ判定
    するように構成されたことを特徴とする請求項23に記
    載のデータ処理装置。
  32. 【請求項32】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する検索手段と、 前記インデクスを生成するインデクス生成手段とを有
    し、 前記インデクスには順位が付与されており、 前記検索手段は、その順位に基づいてキー列の全部又は
    一部を前方列とする後方列の数を出力する機能を備え、 また、前記インデクス生成手段は、順位を付与したイン
    デクスを生成するように構成された ことを特徴とするデ
    ータ検索装置。
  33. 【請求項33】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する検索手段と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクスを更新する更新手段とを
    し、 前記インデクスには順位が付与されており、 前記検索手段は、その順位に基づいてキー列の全部又は
    一部を前方列とする後方列の数を出力する機能を備え、 また、前記更新手段は、前記順位の更新も合わせて行な
    うように構成されたことを 特徴とするデータ処理装置。
  34. 【請求項34】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する検索手段と、 前記インデクスを生成するインデクス生成手段と、 前記コード列を変更する変更手段と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクスを更新する更新手段とを
    し、 前記インデクスには順位が付与されており、 前記検索手段は、その順位に基づいてキー列の全部又は
    一部を前方列とする後方列の数を出力する機能を備え、 また、前記インデクス生成手段は、順位を付与したイン
    デクスを生成する機能を備え、 前記更新手段は、前記順位の更新も合わせて行なうよう
    に構成されたことを 特徴とするデータ処理装置。
  35. 【請求項35】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列とその前方列のコード列中における
    位置との対を前記前方列のアルファベット順に並べたイ
    ンデクスに基づいて、キー列の全部又は一部を前方列と
    する後方列を検索する機能と、前記コード列の後方の部
    分である後方列の前方列とその前方列のコード列中にお
    ける位置との対を、前記コード列中における位置の順に
    並べたテキストに基づいて、指定された位置から始まる
    コード列の一部又は全部を復元する機能とを備えた検索
    手段と、 前記インデクスを生成するインデクス生成手段と、 前記テキストを生成するテキスト生成手段とを有するこ
    とを特徴とするデータ検索装置。
  36. 【請求項36】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する機能と、前記コード列の後方の部分である後方列の
    前方列を検索する機能と、前記コード列中における位置
    の順に並べたテキストに基づいて、指定された位置から
    始まるコード列の一部又は全部を復元する機能とを備え
    た検索手段と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクス及びテキストを更新する
    更新手段とを有することを特徴とするデータ処理装置。
  37. 【請求項37】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する機能と、前記コード列の後方の部分である後方列の
    前方列を検索する機能と、前記コード列中における位置
    の順に並べたテキストに基づいて、指定された位置から
    始まるコード列の一部又は全部を復元する機能とを備え
    た検索手段と、 前記インデクスを生成するインデクス生成手段と、 前記テキストを生成するテキスト生成手段と、 前記コード列を変更する変更手段と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクス及びテキストを更新する
    更新手段とを有することを特徴とするデータ処理装置。
  38. 【請求項38】 前記インデクスには順位が付与されて
    おり、 前記検索手段は、その順位に基づいてキー列の全部又は
    一部を前方列とする後方列の数を出力する機能を備え、 また、前記インデクス生成手段は、順位を付与したイン
    デクスを生成するように構成されたことを特徴とする請
    求項35に記載のデータ検索装置。
  39. 【請求項39】 前記インデクスには順位が付与されて
    おり、 前記検索手段は、その順位に基づいてキー列の全部又は
    一部を前方列とする後方列の数を出力する機能を備え、 また、前記更新手段は、前記順位の更新も合わせて行な
    うように構成されたことを特徴とする請求項36に記載
    のデータ処理装置。
  40. 【請求項40】 前記インデクスには順位が付与されて
    おり、 前記検索手段は、その順位に基づいてキー列の全部又は
    一部を前方列とする後方列の数を出力する機能を備え、 また、前記インデクス生成手段は、順位を付与したイン
    デクスを生成する機能を備え、 前記更新手段は、前記順位の更新も合わせて行なうよう
    に構成されたことを特徴とする請求項37記載のデータ
    処理装置。
  41. 【請求項41】 前記インデクスを構成するキーとなる
    部分列の長さが限定されることを特徴とする請求項32
    又は請求項35又は請求項38に記載のデータ検索装
    置。
  42. 【請求項42】 前記インデクスを構成するキーとなる
    部分列の長さが限定されることを特徴とする請求項3
    3,請求項34,請求項36,請求項37,請求項39
    又は請求項40のいずれか一に記載のデータ処理装置。
  43. 【請求項43】 前記インデクスを構成するキーとなる
    部分列の長さが限定されないことを特徴とする請求項3
    2又は請求項35又は請求項38に記載のデータ検索装
    置。
  44. 【請求項44】 前記インデクスを構成するキーとなる
    部分列の長さが限定されないことを特徴とする請求項3
    3,請求項34,請求項36,請求項37,請求項39
    又は請求項40のいずれか一に記載のデータ処理装置。
  45. 【請求項45】 前記インデクスの対と前記テキストの
    対とを一体化して構成したことを特徴とする請求項37
    に記載のデータ処理装置。
  46. 【請求項46】 前記インデクスの対と前記テキストの
    対とを一体化して構成したことを特徴とする請求項35
    に記載のデータ検索装置。
  47. 【請求項47】 前記インデクスを二分木で表現したこ
    とを特徴とする請求項42又は請求項44に記載のデー
    タ処理装置。
  48. 【請求項48】 前記インデクスを二分木で表現したこ
    とを特徴とする請求項41又は請求項43に記載のデー
    タ検索装置。
  49. 【請求項49】 前記テキストが、前記コード列を記憶
    領の連続した番地に格納し、番地によって位置を表現し
    たものであることを特徴とする請求項42又は請求項4
    4に記載のデータ処理装置。
  50. 【請求項50】 前記テキストが、前記コード列を記憶
    領の連続した番地に格納し、番地によって位置を表現し
    たものであることを特徴とする請求項41又は請求項4
    3に記載のデータ検索装置。
  51. 【請求項51】前記更新手段が、前記コード列に対する
    複数の変更に対応する更新をとりまとめて処理すること
    を特徴とする請求項33,請求項34,請求項36,請
    求項37,請求項39又は請求項40のいずれか一に記
    載のデータ処理装置。
  52. 【請求項52】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記辞書データに基づいて、二分木である辞書tree
    を生成する辞書tree生成処理と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成処理と、 前記テキストデータに基づいて、二分木であるテキスト
    treeを生成するテキストtree生成処理と、 前記辞書tree及びテキストtreeに基づいて、キ
    ー列の全部又は一部を前方列とする後方列を検索する検
    索処理と、 前記コード列を変更する変更処理と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ、辞書tree、テキストデータ及びテキス
    トtreeを更新する更新処理とを含むことを特徴とす
    るデータ処理方法。
  53. 【請求項53】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成処理と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索処
    理と、 前記コード列を変更する変更処理と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ及びテキストデータを更新する更新処理とを
    含むことを特徴とするデータ処理方法。
  54. 【請求項54】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成処理と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索処
    理と、 前記コード列を変更する変更処理と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ及びテキストデータを更新する更新処理と、 前記変更箇所をとりまとめて処理するための調整範囲設
    定処理を含むことを特徴とするデータ処理方法。
  55. 【請求項55】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成処理と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索処
    理と、 前記コード列を変更する変更処理と、 アルファベット順に登録された各辞書データに順位を付
    与する順位付加処理と、 前記変更の内容に基づいて、変更に係る前記コード列の
    辞書データ、テキストデータ及びアルファベット順位を
    更新する更新処理とを含むことを特徴とするデータ処理
    方法。
  56. 【請求項56】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記辞書データに基づいて、二分木である辞書tree
    を生成する辞書tree生成処理と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成処理と、 前記辞書tree及びテキストデータに基づいて、キー
    列の全部又は一部を前方列とする後方列を検索する検索
    処理とを含むことを特徴とするデータ検索方法。
  57. 【請求項57】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    前記前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記コード列に基づいて、テキストデータを生成するテ
    キストデータ生成処理と、 前記辞書データ及びテキストデータに基づいて、キー列
    の全部又は一部を前方列とする後方列を検索する検索処
    理とを含むことを特徴とするデータ検索方法。
  58. 【請求項58】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列をアルファベット順に並べ、また、
    その前方列とその前方列の前記コード列中における位置
    とを対として表す辞書データを生成する辞書データ生成
    処理と、 前記辞書データに基づいて、キー列の全部又は一部を前
    方列とする後方列を検索する検索処理と、 2つのコード列の比較を行なう比較処理と、 1文字違いの2つの後方列のうち、一方がすでにインデ
    クスに登録されている場合に、他方の後方列の登録位置
    を、1文字の比較に基づいて決定して登録する登録処理
    と、 前記コード列を変更する変更処理と、 前記コード列の一部が変更された場合に、変更後のコー
    ド列を再登録する必要があるか否かを判定する再登録判
    定処理と、 前記比較手段及び再登録判定手段の判断結果に基づい
    て、変更に係る前記コード列の辞書データを更新する更
    新処理とを含むことを特徴とするデータ処理方法。
  59. 【請求項59】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する検索処理と、 前記インデクスを生成するインデクス生成処理とを含
    み、 前記インデクスには順位が付与されており、 前記検索処理において、その順位に基づいてキー列の全
    部又は一部を前方列とする後方列の数を出力し、 また、前記インデクス生成処理は、順位を付与したイン
    デクスを生成する ことを特徴とするデータ検索方法。
  60. 【請求項60】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する検索処理と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクスを更新する更新処理とを
    み、 前記インデクスには順位が付与されており、 前記検索処理において、その順位に基づいてキー列の全
    部又は一部を前方列とする後方列の数を出力し、 また、前記更新処理は、前記順位の更新も合わせて行な
    ことを特徴とするデータ処理方法。
  61. 【請求項61】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する検索処理と、 前記インデクスを生成するインデクス生成処理と、 前記コード列を変更する変更処理と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクスを更新する更新処理とを
    み、 前記インデクスには順位が付与されており、 前記検索処理において、その順位に基づいてキー列の全
    部又は一部を前方列とする後方列の数を出力し、 また、前記インデクス生成処理は、順位を付与したイン
    デクスを生成し、 前記更新処理は、前記順位の更新も合わせて行なう こと
    を特徴とするデータ処理方法。
  62. 【請求項62】 キー列による検索対象となるコード列
    について、その後方の部分である後方列の検索に用いる
    ことができる前方列とその前方列のコード列中における
    位置との対を前記前方列のアルファベット順に並べたイ
    ンデクスに基づいて、キー列の全部又は一部を前方列と
    する後方列を検索する工程と、前記コード列の後方の部
    分である後方列の前方列とその前方列のコード列中にお
    ける位置との対を、前記コード列中における位置の順に
    並べたテキストに基づいて、指定された位置から始まる
    コード列の一部又は全部を復元する工程とを有する検索
    処理と、 前記インデクスを生成するインデクス生成処理と、 前記テキストを生成するテキスト生成処理とを含むこと
    を特徴とするデータ検索方法。
  63. 【請求項63】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する工程と、前記コード列の後方の部分である後方列の
    前方列を検索する工程と、前記コード列中における位置
    の順に並べたテキストに基づいて、指定された位置から
    始まるコード列の一部又は全部を復元する工程とを有す
    る検索処理と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクス及びテキストを更新する
    更新処理とを含むことを特徴とするデータ処理方法。
  64. 【請求項64】 キー列による検索対象となるコード列
    について、その後方列の検索に用いることができる前方
    列とその前方列のコード列中における位置との対を前記
    前方列のアルファベット順に並べたインデクスに基づい
    て、キー列の全部又は一部を前方列とする後方列を検索
    する工程と、前記コード列の後方の部分である後方列の
    前方列を検索する工程と、前記コード列中における位置
    の順に並べたテキストに基づいて、指定された位置から
    始まるコード列の一部又は全部を復元する工程とを有す
    る検索処理と、 前記インデクスを生成するインデクス生成処理と、 前記テキストを生成するテキスト生成処理と、 前記コード列を変更する変更処理と、 前記コード列の変更の内容に基づいて、変更に係る前記
    コード列についてのインデクス及びテキストを更新する
    更新処理とを含むことを特徴とするデータ処理方法。
  65. 【請求項65】 前記検索処理が、前方列が一致する辞
    書データの先頭のものと末尾のものの順位から、前方列
    が一致するキーとなる部分列の数を計数する計数処理を
    含むことを特徴とする請求項55記載のデータ処理方
    法。
  66. 【請求項66】 前記検索処理が、コード列をキーとし
    てアルファベット順に並べた表において、コード列をキ
    ーとして二分探索を行なう際に、既に行なった比較が何
    文字目まで一致したかに基づいて、次の比較を何文字目
    から行なうかを決定することを特徴とする請求項58に
    記載のデータ処理方法。
  67. 【請求項67】 前記比較処理が、コード列をキーとし
    てアルファベット順に並べた表において、2つのコード
    列の比較を行なう際に、両方のコード列から一致する前
    方列を除いた後方列がともに前記表中に存在する場合、
    それらの後方列の表中での位置の比較結果を、前記2つ
    のコード列の比較結果とすることを特徴とする請求項5
    8に記載のデータ処理方法。
  68. 【請求項68】 前記登録処理が、後方列の前方列をキ
    ーとしてアルファベット順に並べた表において、後方列
    αwの前方列を登録する際に、前方列が前記表中で前記
    後方列αwより短い最長の後方列wの直前である後方列
    xより長い最短の後方列βxと前記直前である後方列x
    との差βが、前記後方列αwとそれより短い最長の後方
    列wとの差αと一致する場合、βxの前方列の直後にα
    wの前方列を登録し、 また、前方列が前記表中で前記後方列αwより短い最長
    の後方列wの直後である後方列yより長い最短の後方列
    γyと前記直後である後方列yとの差γが、前記後方列
    αwとそれより短い最長の後方列wとの差αと一致する
    場合、γyの前方列の直前にαwの前方列を登録するこ
    とを特徴とする請求項58に記載のデータ処理方法。
  69. 【請求項69】 前記登録処理が、後方列の前方列をキ
    ーとしてアルファベット順に並べた表において、後方列
    wの前方列を登録する際に、前方列が前記表中で前記後
    方列wより長い最短の後方列αwの直前及び直後である
    後方列βx及びγyについて、βxより短い最長の後方
    列xの前方列とγyより短い最長の後方列yの前方列と
    が、前記表中でxの前方列を先にして隣接しており、か
    つ、α=βまたはα=γである場合、xの前方列とyの
    前方列の間にwの前方列を登録することを特徴とする請
    求項58に記載のデータ処理方法。
  70. 【請求項70】 前記再登録判定処理が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、変更部分を含む後方
    列の前方列について、前記表中で前記前方列の直前およ
    び直後の前方列と前記前方列とを変更後の内容において
    比較し、前記前方列が前記直前の前方列以上でかつ前記
    直後の前方列以下である場合には、少なくとも前記後方
    列及びそれより長い後方列については、それらの前方列
    の再登録の必要がないと判定し、そうでない場合には、
    少なくとも前記後方列及び変更部分を含むそれより短い
    後方列については、それらの前方列の再登録が必要であ
    ると判定することを特徴とする請求項58に記載のデー
    タ処理方法。
  71. 【請求項71】 前記再登録判定処理が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、変更部分を含む後方
    列の前方列について、前記表中で前記前方列の直前また
    は直後の前方列と前記前方列とを比較し、両者の前方列
    が、いずれかの変更された部分の直前まで一致する場合
    には、少なくとも前記後方列及びそれより短い後方列に
    ついては、それらの前方列の再登録が必要であると判定
    し、一致しない場合には、少なくとも前記後方列及び変
    更部分を含むそれより長い後方列については、それらの
    前方列の再登録の必要がないと判定することを特徴とす
    る請求項58に記載のデータ処理方法。
  72. 【請求項72】 前記再登録判定処理が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、後方列の前方列が再
    登録が必要か否かを、変更部分を含む後方列の前方列に
    ついて、短い後方列の前方列から順に判定することを特
    徴とする請求項58に記載のデータ処理方法。
  73. 【請求項73】 前記再登録判定処理が、後方列の前方
    列をキーとしてアルファベット順に並べた表において、
    コード列の一部を変更した場合に、後方列の前方列が再
    登録が必要か否かを、変更部分を含む後方列の前方列に
    ついて、開始位置の順に並べて二分法で選択しつつ判定
    することを特徴とする請求項58に記載のデータ処理方
    法。
  74. 【請求項74】 前記インデクスには順位が付与されて
    おり、 前記検索処理において、その順位に基づいてキー列の全
    部又は一部を前方列とする後方列の数を出力し、 また、前記インデクス生成処理は、順位を付与したイン
    デクスを生成することを特徴とする請求項62に記載の
    データ検索方法。
  75. 【請求項75】 前記インデクスには順位が付与されて
    おり、 前記検索処理において、その順位に基づいてキー列の全
    部又は一部を前方列とする後方列の数を出力し、 また、前記更新処理は、前記順位の更新も合わせて行な
    うことを特徴とする請求項63に記載のデータ処理方
    法。
  76. 【請求項76】 前記インデクスには順位が付与されて
    おり、 前記検索処理において、その順位に基づいてキー列の全
    部又は一部を前方列とする後方列の数を出力し、 また、前記インデクス生成処理は、順位を付与したイン
    デクスを生成し、 前記更新処理は、前記順位の更新も合わせて行なうこと
    を特徴とする請求項64記載のデータ処理方法。
JP7233085A 1994-09-14 1995-09-11 データ処理装置、データ検索装置、データ処理方法及びデータ検索方法 Expired - Fee Related JP2829259B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7233085A JP2829259B2 (ja) 1994-09-14 1995-09-11 データ処理装置、データ検索装置、データ処理方法及びデータ検索方法

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
JP21992494 1994-09-14
JP6-219924 1994-09-14
JP1465195 1995-01-31
JP7-14651 1995-01-31
JP7233085A JP2829259B2 (ja) 1994-09-14 1995-09-11 データ処理装置、データ検索装置、データ処理方法及びデータ検索方法

Publications (2)

Publication Number Publication Date
JPH08272827A JPH08272827A (ja) 1996-10-18
JP2829259B2 true JP2829259B2 (ja) 1998-11-25

Family

ID=27280722

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7233085A Expired - Fee Related JP2829259B2 (ja) 1994-09-14 1995-09-11 データ処理装置、データ検索装置、データ処理方法及びデータ検索方法

Country Status (1)

Country Link
JP (1) JP2829259B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NO983175L (no) * 1998-07-10 2000-01-11 Fast Search & Transfer Asa Soekesystem for gjenfinning av data
JP4848128B2 (ja) * 2004-12-24 2011-12-28 インターナショナル・ビジネス・マシーンズ・コーポレーション データベース・システム、データベース・システムのためのコンピュータ実行可能な方法、プログラムおよびデータベース・システムにおける索引テーブルをアップデートする方法
US11645040B2 (en) 2016-09-20 2023-05-09 Rakuten Group, Inc. Text file binary search device, search method, program, and information recording medium

Also Published As

Publication number Publication date
JPH08272827A (ja) 1996-10-18

Similar Documents

Publication Publication Date Title
US5799299A (en) Data processing system, data retrieval system, data processing method and data retrieval method
EP0702310B1 (en) Data retrieval system, data processing system, data retrieval method, and data processing method
US8117229B1 (en) Fast identification of complex strings in a data stream
CN109299086B (zh) 最优排序键压缩和索引重建
WO2015010509A1 (zh) 一种基于一维线性空间实现Trie树的词典检索方法
CN102867049A (zh) 一种基于单词查找树实现的汉语拼音快速分词方法
JP2829259B2 (ja) データ処理装置、データ検索装置、データ処理方法及びデータ検索方法
JP2768921B2 (ja) データ検索装置、データ処理装置、データ検索方法及びデータ処理方法
Köppl Exploring regular structures in strings
JP5434500B2 (ja) 木構造処理装置及びプログラム
CN117235291B (zh) 基于静态索引表的全文检索方法及装置
KR101080898B1 (ko) 문자열 색인 방법 및 장치
JPH10149367A (ja) テキスト蓄積検索装置
JPH10307840A (ja) 情報処理装置及びその方法
JP2535655B2 (ja) 辞書検索方式
JP4412291B2 (ja) 記憶装置
JP2001117929A (ja) データ検索方法、データ整列方法およびデータ検索装置
CN117290523A (zh) 基于动态索引表的全文检索方法及装置
JP2007011438A (ja) 絞り込み検索用インデクス構造及び情報検索装置
JPH06208587A (ja) コードデータ列検索方法
JPH09101965A (ja) 情報登録方法および情報検索方法
JPH0652231A (ja) リレーショナルデータベース運用機構

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees