JP4726046B2 - 文字列検索装置及びコンピュータプログラム及び文字列検索方法 - Google Patents
文字列検索装置及びコンピュータプログラム及び文字列検索方法 Download PDFInfo
- Publication number
- JP4726046B2 JP4726046B2 JP2005124860A JP2005124860A JP4726046B2 JP 4726046 B2 JP4726046 B2 JP 4726046B2 JP 2005124860 A JP2005124860 A JP 2005124860A JP 2005124860 A JP2005124860 A JP 2005124860A JP 4726046 B2 JP4726046 B2 JP 4726046B2
- Authority
- JP
- Japan
- Prior art keywords
- state
- character
- character string
- automaton
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
この課題を解決する技術としては、DFA(Deterministic Finite Automaton:決定性有限オートマトン)を用いた検索方法が知られている(例えば、非特許文献1等)。
また、固定した文字列を検索するだけでは、検索の効率が悪い。そこで、検索文字列の一部または全部を選択的に指定したり、同一の文字列の繰り返しの指定を許すことによって、検索条件を一般化し、類似する文字列を同時に検索することが行われる。このように、検索文字列を一般化して表現した検索パターンの表記方法としては、正規表現等が知られている。
正規表現に基づいて、それを検索可能なNFA(Nondeterministic Finite Automaton:非決定性有限オートマトン)を構成できることが知られている(例えば、非特許文献1、非特許文献2等)。
さらに、NFAは、それと等価なDFAに変換できることが知られている(例えば、非特許文献1、非特許文献2等)。
この課題を解決する技術としては、LZ(Lempel−Ziv)77方式、LZ78方式、LZSS(Lempel−Ziv−Storer−Syzmanski)方式、LZW(Lempel−Ziv−Welch)方式、ハフマン符号化方式等、様々な可逆圧縮法が知られている。
この課題を解決する技術としては、単純に、一度圧縮テキスト(圧縮された文書)を伸張(復元)した後で、検索する方式が一般的である。検索の方法としては、例えば、状態遷移機械(有限オートマトン)を用いて文字列照合を行う。
その一方で、圧縮された文書を伸長せずに検索する方式も知られている(例えば、特許文献1、非特許文献1等)。
特許文献1に記載の検索方式は、固定の検索文字列と圧縮の辞書を入力としており、正規表現を検索条件として扱うことはできないという課題がある。また、現在広く利用されている辞書式圧縮方式LZ77、LZSS、LZ78、LZWなどの方式では、圧縮テキストを伸張しながら同時に圧縮の辞書を生成するため、検索の開始時点で圧縮辞書が存在することを前提とした特許文献1の方式を適用することができないという課題がある。
非特許文献1に記載の検索方式は、テキストがシングルバイトコードからなることを前提としており、マルチバイトコード文字を含むテキストを検索することを考慮されていないという課題がある。また、LZ78やLZW形式の圧縮辞書の特徴を利用した方式であるため、圧縮辞書にそのような特徴を持たない他の圧縮方式で圧縮されたテキストを検索することができないという課題がある。
状態を保持し、文字を入力し、上記保持した状態と上記入力した文字とに基づいて遷移先状態を算出し、上記保持した状態を上記算出した遷移先状態に更新するオートマトンであって、所定の文字列を構成する文字を入力した場合に、上記記憶した状態が所定の状態となるか否かを判別することにより、所定の検索パターンに対応する検索文字列が上記文字列に含まれるか否かを判別できるよう構成したオートマトンを実行することによって、
上記文字列に含まれる部分文字列を上記部分文字列に対応する所定の符号に置換した符号列を取得して、上記文字列から上記検索文字列を検索する文字列検索装置において、
上記オートマトンを実行するオートマトン実行部と、
上記オートマトンが保持した状態を状態履歴として記憶する履歴記憶部と、
上記符号列を構成する符号を取得する符号取得部と、
上記オートマトンが保持する状態と上記履歴記憶部が記憶した状態履歴と上記符号取得部が取得した符号とに基づいて、第一の条件及び第二の条件を満たすか否かを判断する条件判断部と、
上記条件判断部が第一の条件を満たすと判断した場合に、上記履歴記憶部が記憶した状態履歴に基づいて遷移先状態を算出し、上記オートマトンが保持した状態を、算出した遷移先状態に更新する遷移先算出部と、
上記条件判断部が第二の条件を満たすと判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を復元し、上記部分文字列を構成する文字を上記オートマトンに入力する文字列復元部と、
を有することを特徴とする。
図39において、状態990〜993は、DFAの状態を示す。DFAは、状態990〜993のうち、どれか一つの状態を保持しており、入力によって保持している状態が遷移(更新)する。検索開始時は、初期状態990を保持している。
図中の矢印は、状態の遷移を示す。矢印に添えられた文字を入力すると、矢印の先の状態へ遷移する。
例えば、現在の状態が状態990で、文字「a」を入力すると、状態991に遷移する。また、現在の状態が状態990で、文字「b」または「c」を入力すると、状態990のまま変わらない。
ここでいう「文字」とは、アルファベットや漢字といった狭義の文字に限らず、およそコンピュータが文字として扱えるものであれば何でも構わない。コンピュータ上において、文字はビット列で表現されている。例えば、ASCII(American Standard Code for Information Interchange)コードを用いる場合、文字「a」は「01000001」(41h)という8ビットのビット列で表現される。あるいは、シフトJIS(Japan Industry Standard:日本工業規格)コードを用いる場合、文字「あ」は「1000001010100000」(82A0h)という16ビットのビット列で表現される。このように、使用する文字コードによっては、それを表現するビット列のビット長が異なる場合もある。したがって、およそコンピュータ上でビット列として表現できるものは、すべて「文字」として扱うことができ、DFAに入力することができる。
ただし、DFAは、あらかじめ入力に対応した遷移先が決まっていなければ動作させることができないので、DFAに入力する可能性のある文字の種類は有限個でなければならない。
図39に示すDFAは、検索文字列「abc」を検索するためのものである。
図40は、図39に示すDFAに文字を入力していった場合に、DFAの状態がどのように遷移するかを示す図である。
検索開始時には、DFAの状態は初期状態990である。
まず、文字「b」を入力すると、DFAの状態は状態990のまま変わらない。
次に、文字「a」を入力すると、DFAの状態は状態991に遷移する。
次に、文字「b」を入力すると、DFAの状態は状態992に遷移する。
次に、文字「a」を入力すると、DFAの状態は状態991に遷移する。
次に、文字「b」を入力すると、DFAの状態は状態992に遷移する。
次に、文字「c」を入力すると、DFAの状態は状態993に遷移する。
状態993は受理状態であるから、この時点で、文字列「bababcc」に検索文字列「abc」が含まれていることが分かる。また、6文字目の「c」を入力した時点で、DFAの状態が受理状態993になったので、検索文字列「abc」は、文字列「bababcc」の6文字目で終わる位置に現れることもわかる。
次に、文字「c」を入力すると、DFAの状態は状態990に遷移する。
DFAに入力する文字がなくなったので、これでDFAは動作を終了する。
この表は、DFAが最左欄の状態にあるときに、最上欄の文字を入力すると、次に遷移する遷移先の状態を示すものである。
図42は、オートマトン実行部の処理の流れの一例を示すフローチャート図である。
検索開始時に、オートマトン実行部は、DFAの状態を初期化して、初期状態にする(S991)。例えば、DFAの状態を記憶するメモリに、初期状態の状態番号0を記憶する。
次に、例えば、文字列復元部が、オートマトンに文字列を1文字ずつ入力する(S992)。すなわち、オートマトン実行部に入力する文字を通知し、オートマトン実行部がこれを取得する。
オートマトン実行部は、記憶した遷移先一覧表を参照して、現在のDFAの状態と入力した文字とに基づいて、遷移先状態を算出する(S993)。
次に、オートマトン実行部は、DFAの状態を更新する(S994)。例えば、DFAの状態を記憶するメモリに、遷移先状態の状態番号を記憶する。
オートマトン実行部は、DFAの状態が受理状態が否かを判別する(S995)。DFAの状態が受理状態である場合には、検索に成功したので、検索成功処理をする(S996)。例えば、検索に成功したことを示すメッセージや検索文字列の出現した位置をCRT表示装置901に表示する。
以上の処理を、DFAに入力する文字がなくなるまで繰り返す(S997)。
図43に示すDFAは、文字列「ababb」及び「abca」及び「aba」及び「bb」を検索できるように構成されている。
正規表現は、正規言語を構成する文字とメタ文字とからなる文字列であり、ある文字列が正規言語に属するかどうかを識別するための規則を表現している。
正規表現の表記法には様々なものが知られている。ここではその一例について説明する。
また、メタ文字は「(」「)」「|」「*」「?」の5種類があるものとする。ここで、「(」「)」はグループ化を意味する。「|」は選択を意味する。「*」は0回以上の繰り返しを意味する。「?」は0回または1回の出現を意味する。
例えば、正規表現「(ab|c)」は、文字列「ab」及び「c」を要素とする正規言語を表現するものである。
また、例えば、正規表現「ab*」は、文字列「a」、「ab」、「abb」、「abbb」、・・・を要素とする正規言語を表現するものである。
また、例えば、正規表現「c?b」は、文字列「b」及び「cb」を要素とする正規言語を表現するものである。
例えば、文字列「ababb」及び「abca」及び「aba」及び「bb」を検索したい場合、これを正規表現で記述すると、「ababb|abca|aba|bb」となる。あるいは「(aba)?(bb)?|abca」と記述してもよいし、「abc?a|(aba)?bb」と記述してもよい。
そこで、NFAを実行するには、遷移先が2つ以上ある場合、そのうちの1つを選択してとりあえず実行してみる。実行して失敗した場合には、分岐点に戻り、別の選択肢を選択してまた実行する。このように、バックトラックをすることにより、NFAを実行することが可能である。
現在一般的な文書圧縮技術には、自己参照型のものと辞書参照型のものがある。また、辞書参照型には、別に辞書を用意するものと、圧縮文書の中に辞書が埋め込まれているものとがある。
自己参照型圧縮技術において基本となる考え方は、元の文字列の異なる位置に、同じ部分文字列がある場合、一方を他方への参照で置換することによって、文字列全体の符号長を短くしようというものである。
規則2:部分文字列が、それより前に出現した他の部分文字列と一致する場合には、フラグ981(1ビット)、他の部分文字列の出現位置983(例えば8ビット)、部分文字列の長さ984(例えば5ビット)の合計14ビットの符号に変換する。
ビット列982は、その文字を表すASCIIコードである。ここでは、元の文字と同じコードを使用しているが、元の文字を復元することができれば、異なるコードに置き換えてもよい。
他の部分文字列の出現位置983は、それより前に出現した他の部分文字列の先頭の位置を、現在の部分文字列の先頭の位置からの距離(何文字前か)で表したものである。この例では、出現位置983は8ビットのビット列で表現しているので、256文字より前に他の部分文字列がある場合には、規則2を適用することができない。
部分文字列の長さ984は、規則2を適用して符号化する部分文字列の文字数である。この例では、部分文字列の長さ984は5ビットのビット列で表現しているので、32文字以上の部分文字列には、規則2を適用することができない。
4文字目から始まる3文字の部分文字列「bab」は、2文字目(現在位置から見て2文字前)から始まる3文字の他の部分文字列「bab」と一致するので、規則2を適用して符号604に変換する(このように、他の部分文字列は、自分自身と一部重なっていても構わない)。
7文字目から始まる2文字の部分文字列「cb」は、1文字目(現在位置から見て6文字前)から始まる2文字の他の部分文字列「cb」と一致するので、規則2を適用して符号605に変換する。
9文字目から始まる1文字の部分文字列「c」は、7文字目から始まる1文字の部分文字列「c」と一致するので、規則2を適用して変換してもよい。しかし、規則2を適用すると、変換した符号は14ビットになるのに対して、規則1で変換すれば9ビットにしかならないので、圧縮効率が高くなるよう(圧縮後のビット長が短くなるよう)規則1を適用して符号606に変換する。
以上の変換により、全体のビット長が72ビットあった文字列「cbabacbc」は、全体のビット長が64ビットの符号列に置換される。
まず、符号列から1ビット(フラグ981)取得し(S981)、続く符号が規則1で変換されたものか規則2で変換されたものかを判別する(S982)。
フラグ981が「1」なら、規則1なので、続く8ビット(符号982)を取得し(S983)、それを文字として出力する(S984)。
出力した文字は、出力履歴に記憶する(S985)。
例えば、図44の符号601は、文字「c」に変換し、出力する。
フラグ981が「0」なら、規則2なので、続く13ビット(出現位置983及び長さ984)を取得する(S986)。
例えば、図44の符号604であれば、2文字前から3文字であるとわかる。
次に、出力履歴を参照して、部分文字列を復元し、出力する(S987)。
出力した文字は、出力履歴として記憶する(S988)。
例えば、図44の符号604であれば、出力履歴の2文字前を読み出す。この時点で出力履歴として「cba」の3文字が記憶してあるので、2文字前は「b」である。そこで、「b」を出力し、すぐに出力履歴として記憶する。出力履歴は「cbab」となる。
これを長さが示す文字数繰り返す(S989)。
2文字目において、2文字前は「a」なので、続いて2文字目「a」を出力する。出力履歴は「cbaba」となる。3文字目において、2文字前は「b」なので、3文字目「b」を出力する。3文字分出力したので、符号604についての処理は終わり、次の処理に移る。したがって、符号604に対応して、「bab」の3文字が出力される。
これを符号列が終わるまで繰り返す(S990)。
LZ77方式は、LZSS方式と符号化の規則が異なるが、他の部分はほとんど同じである。
LZ77方式では、次の2つの規則により、元の文字列を符号列に置換する。
規則2:1文字からなる部分文字列は、出現位置0及び長さ0を示す符号(例えば13ビット)と、その文字を示すビット列(例えば8ビット)の2つの符号に変換する。ここで、出現位置0は、他の文字列への参照がないことを示す一例である。
辞書参照型圧縮技術において基本となる考え方は、元の文字列の部分文字列が、辞書(置換辞書)に登録してある単語と一致する場合、その部分文字列を、辞書に登録してある符号で置換することによって、文字列全体のビット長を短くしようというものである。
例えば、図47に示すような辞書があるとする。文字列「cbababcbc」を圧縮すると、符号列「12233」を得る。符号1つ当りのビット長が12ビットだとすれば、全体のビット長は60ビットになる。
例えば、自然言語を記述した文書を圧縮する場合、その言語の単語や、よく出現するフレーズを辞書に登録しておけば、高い圧縮率を得ることができる。
辞書は、符号列とは別に用意しておいてもよいし、符号列に埋め込んでもよい。
埋込辞書参照型は、辞書参照型の一形態である。埋込辞書参照型では、辞書を別に用意するのではなく、符号列の中に辞書の情報を埋め込んである。
図48は、LZ78方式における符号化の一例を示す図である。
規則2:1文字からなる部分文字列が辞書に登録されていない場合、参照番号0を示す符号971及びその文字を示すビット列の符号972の2つに変換する。ここで、参照番号0は、辞書に登録されていないことを示す番号の一例であり、他の番号でもよい。
次の「b」も置換辞書650に登録されていないので、参照番号「0」と文字「b」を出力し、「b」を置換辞書650に登録する(参照番号2)。
次の「a」は置換辞書650に登録されている(参照番号1)が、「ab」が登録されていないので、参照番号「1」と文字「b」を出力し、「ab」を置換辞書650に登録する(参照番号3)。
次の「ab」は置換辞書650に登録されている(参照番号3)が、「abc」は登録されていないので、参照番号「3」と文字「c」を出力し、「abc」を置換辞書650に登録する(参照番号4)。
次の「b」は置換辞書650に登録されている(参照番号2)が、「bc」は登録されていないので、参照番号「2」と文字「c」を出力し。「bc」を置換辞書650に登録する(参照番号5)。
まず、置換辞書650を初期化する(S971)。例えば、空にする。
次に、符号列から10ビット(辞書参照番号を示す符号971)取得し(S972)、参照番号が0以外なら(S973)、置換辞書650を参照して、参照番号に対応する前方文字列を求め、出力する(S974)。
符号列から8ビット(文字を表すビット列の符号972)取得し(S975)、それが示す文字を出力する(S976)。
S974及びS976で出力した文字を結合し、置換辞書650に新しく登録する(S977)。
これを符号列が尽きるまで繰り返す(S978)。
最初に、置換辞書650を空にする。
符号621は参照番号「0」を示し、符号622は文字「a」を示すので、この2つの符号から部分文字列「a」を復元し、出力する。そして「a」を置換辞書650に登録する(参照番号1)。
符号623は参照番号「0」を示し、符号624は文字「b」を示すので、この2つの符号から部分文字列「b」を復元し、出力する。そして「b」を置換辞書650に登録する(参照番号2)。
符号625は参照番号「1」を示し、符号626は文字「b」を示すので、この2つの符号から部分文字列「ab」を復元し、出力する。そして「ab」を置換辞書650に登録する(参照番号3)。
符号627は参照番号「3」を示し、符号628は文字「b」を示すので、この2つの符号から部分文字列「abc」を復元し、出力する。そして「abc」を置換辞書650に登録する(参照番号4)。
符号629は参照番号「2」を示し、符号630は文字「c」を示すので、この2つの符号から部分文字列「bc」を復元し、出力する。そして「bc」を置換辞書650に登録する(参照番号5)。
実施の形態1を図1〜図8を用いて説明する。
図1において、圧縮テキスト検索装置100は、システムユニット910、CRT(Cathode Ray Tube)表示装置901、キーボード(K/B)902、マウス903、コンパクトディスク装置(CDD)905、プリンタ装置906、スキャナ装置907を備え、これらはケーブルで接続されている。
さらに、圧縮テキスト検索装置100は、FAX機932、電話器931とケーブルで接続され、また、ローカルエリアネットワーク(LAN)942、ゲートウェイ941を介してインターネット940に接続されている。
図2において、圧縮テキスト検索装置100は、プログラムを実行するCPU(Central Processing Unit)911を備えている。CPU911は、バス912を介してROM(Read Only Memory)913、RAM(Random Access Memory)914、通信ボード915、CRT表示装置901、K/B902、マウス903、FDD(Flexible Disk Drive)904、磁気ディスク装置920、CDD905、プリンタ装置906、スキャナ装置907と接続されている。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード915は、FAX機932、電話器931、LAN942等に接続されている。
例えば、通信ボード915、K/B902、スキャナ装置907、FDD904などは、入力部の一例である。
また、例えば、通信ボード915、CRT表示装置901などは、出力部の一例である。
磁気ディスク装置920には、オペレーティングシステム(OS)921、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923は、CPU911、OS921、ウィンドウシステム922により実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明するものが、「〜ファイル」として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、RAM914もしくは磁気ディスク装置920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
この圧縮テキスト検索装置は、入力された圧縮テキスト中に検索条件に適合する文字列が存在するか否かを判定し、存在する場合はその文字列の末尾の位置をヒット位置として出力する検索装置である。また、存在しない場合は何も出力しない。
図3において、圧縮テキスト検索装置100は、検索条件入力部102、圧縮テキスト記憶部103、照合結果出力部104、状態遷移表生成部105、状態遷移表記憶部106、照合部107から構成される。照合部107は、圧縮ブロック取得部108、文字取得部109、状態遷移機械110、状態記憶部111、状態遷移記憶部112、圧縮辞書記憶部113、条件判断部114、現在位置カウンタ115、遷移先算出部116、検索成功判別部117を有する。
すなわち、検索条件入力部102に入力した検索条件に基づいて、それに対応するNFAを求め、更に、NFAをDFAに変換し、それに対応する状態遷移表(遷移先一覧表の一例)を生成する。
状態遷移表生成部105が生成した状態遷移表は、状態遷移表記憶部106が記憶する。
すなわち、圧縮テキスト記憶部103が記憶した圧縮テキストを入力すると、その圧縮テキストに対応する圧縮前の文書の中に、検索条件に合致する部分文字列が含まれるか否かを判別し、含まれる場合にはその出現位置(ヒット位置)を出力する。
すなわち、圧縮テキスト記憶部103が記憶した圧縮テキストから、それを構成する圧縮ブロックを先頭から順に取得する。
すなわち、圧縮テキストの中に圧縮辞書の情報が埋め込まれている埋込辞書参照型圧縮方式において、圧縮テキストに埋め込まれた圧縮辞書の情報を抽出し、記憶する。あるいは、圧縮テキストとは別に圧縮辞書を用意する辞書参照型圧縮方式の場合には、別に用意した圧縮辞書を取得して記憶しておく。
すなわち、圧縮辞書記憶部113が記憶した圧縮辞書に基づいて、圧縮ブロックに対応する部分文字列を求める。更に、その部分文字列を構成する文字を先頭から順に取得し、状態遷移機械110に入力する。
すなわち、状態記憶部111及び状態遷移機械110はオートマトン実行部の一例であり、状態遷移表記憶部106が記憶した状態遷移表に対応するDFAを実行する。DFAの保持する状態は、状態記憶部111が記憶する。状態遷移機械110は、状態記憶部111が記憶したDFAの状態と、文字取得部109が入力した文字とに基づいて、状態遷移表記憶部106が記憶した状態遷移表を参照し、遷移先状態を取得する。状態記憶部111は、状態遷移機械110が取得した遷移先状態を、DFAの状態として、古いDFAの状態に上書きして記憶する(更新する)。
辞書式圧縮(辞書参照型圧縮方式)によって圧縮された圧縮テキストは、圧縮ブロック列300(符号列の一例)と、圧縮辞書303(置換辞書の一例)とから構成される。
1つの圧縮ブロック302(符号の一例)は、圧縮辞書の1つのエントリの参照番号を含んでいる。
圧縮辞書記憶部113は、圧縮テキストから圧縮辞書の情報を抽出し、記憶している。圧縮辞書は、文字列305(部分文字列の一例)と、文字列の参照番号304(符号の一例)との対応を示す表である。
図4に示す圧縮ブロック列300「1213414」を伸張(復元)する場合、圧縮ブロック列300から1つずつ圧縮ブロック302を取得し、その参照情報を元に圧縮ブロック302を圧縮辞書の文字列305(以後、圧縮ブロックの参照文字列と呼ぶ)と置き換える。
例えば、最初の圧縮ブロック302は、圧縮辞書の1番目のエントリを参照しているため、最初の圧縮ブロックは、1番目のエントリの文字列「abcde」と置き換えることができる。同様に全ての圧縮ブロックについて繰り返すことで、圧縮ブロック列300から伸張されたテキスト「abcdecbabcdebecdabcded」を得ることができる。辞書式圧縮では、このようにテキスト中に出現する文字列を、その文字列よりもビット長が短い圧縮ブロックに置き換えることで、同じ文字列が繰り返し出現するほど高い圧縮率を得ることができる。
以後、圧縮ブロックの参照番号を<>で囲んだ数値として表記する。
状態遷移記憶部112は、参照番号401(符号の一例)、状態遷移履歴402、受理位置403の情報を持つ。
参照番号401は、圧縮辞書の参照番号304と1対1に対応付けられている。
状態遷移履歴402は、対応する圧縮辞書の文字列による状態遷移機械の状態遷移の履歴を記憶したものであり、先頭が圧縮辞書の文字列を読む直前の状態、末尾が圧縮辞書の文字列を全て読んだ直後の状態をさす。例えば、1番目のエントリの場合、状態[1]から開始して、文字列「abcde」を1文字読む毎に状態が[2]−[3]−[4]−[5]と遷移し、最後の「e」を読んだ直後に状態[6]になったことを意味する。
受理位置403は、圧縮辞書の文字列の何文字目で、状態遷移機械が受理状態に到達したかを表わしている。例えば、図4で状態[4]が受理状態であったとする。このとき、エントリ1の受理位置403は、圧縮辞書の文字列の3文字目の「c」を読んだ直後に受理状態[4]に到達したことを意味している。
ここでは、受理位置は1番目と3番目のエントリに各1つずつしかないが、1つの状態遷移履歴に2つ以上の受理位置があっても良い。
例えば、検索条件入力部102が、正規表現「(ab|dec)[ce]e*」を検索条件として入力する(ここで「[ce]」は「(c|e)」の簡略表記である)。この正規表現は、「abc」「abe」「abce」「abee」「decc」「dece」「decce」「decee」・・・などを意味する。図6の状態遷移表200は、この正規表現に基づいて、状態遷移表生成部105が生成するものである。
圧縮テキスト記憶部103が記憶した圧縮テキストから圧縮辞書の情報を抽出し、圧縮辞書記憶部113が記憶する。
状態記憶部111は初期状態(状態番号=1)を記憶する。
状態遷移記憶部112は、記憶する状態遷移履歴を空にする。
現在位置カウンタ115は、圧縮前のテキスト(または元テキストという)長をカウントするため、記憶する現在位置を0に初期化する。
すなわち、状態遷移記憶部112が記憶する状態履歴のうち、圧縮ブロック取得部108が取得した圧縮ブロックに対応する状態遷移履歴402を参照し、最初の状態(その圧縮ブロックに対応する部分文字列をDFAに入力する前のDFAの状態)を取得する。取得した最初の状態と、現在のDFAの状態とを比較して、一致するか否かを判断する。
そこで、状態遷移記憶部112は、途中通るはずの状態の中に受理状態があるかどうか、また、ある場合にはその位置がどこか(受理位置403)を記憶している。
そこで、検索成功判別部117は、状態遷移記憶部112が記憶した状態履歴のうち、一致した状態遷移履歴を参照し、受理状態があるかどうかを判別する(S14)。
受理状態がある場合には、検索成功判別部117は、現在位置カウンタ115が記憶した現在の元テキスト長(現在位置)に、状態遷移記憶部112が記憶した状態履歴のうち、一致した状態遷移履歴402に対応する受理位置403を加えて、ヒット位置を求めて出力する(S15)。その場合、照合結果出力部104がCRT表示装置901に表示する。
場合によっては、受理位置が複数ある場合もある。その場合には、その全ての受理位置に対して、出現位置(ヒット位置)を出力する。
逆に、受理状態がない場合には、何も出力しない。
更に、現在位置カウンタ115が記憶した現在位置に受理位置を加え、ヒット位置として出力する(S167)。出力されたヒット位置は、照合結果出力部104がCRT表示装置901に表示する。
その場合、既にその圧縮ブロックの参照番号に対応する状態履歴(最初の状態が異なる)を記憶している場合には、状態履歴を記憶しないこととしてもよい。あるいは、最初の状態が特定の状態(例えば、初期状態)のときだけ、状態履歴を上書きすることとしてもよい。そうすれば、出現頻度の高い状態のときに、最初の状態と現在の状態とが一致する可能性が高くなり、状態遷移を飛ばすことができるので好ましい。
状態遷移表記憶部106は、図6に示す状態遷移表200を記憶する。状態遷移表200は、検索条件入力部102が入力した検索条件(正規表現を含む)に基づいて、状態遷移表生成部105が生成したものである。状態遷移表200に対応するDFAにおいて、初期状態は状態番号1に対応する状態であり、受理状態は状態番号4に対応する状態である。これも、状態遷移表記憶部106が記憶している。なお、DFAの初期状態は必ず1つであるが、受理状態は複数あってもよい。
状態記憶部111は初期状態(状態番号=1)を記憶する。
状態遷移記憶部112は、記憶する状態履歴を空にする。
圧縮辞書記憶部113は、圧縮辞書を記憶する。
現在位置カウンタ115は、現在位置として0を記憶する。
しかし、状態履歴は空なので、対応する最初の状態は記憶されていない。
そこで、条件判断部114は、一致しないと判断する(S16へ)。
状態遷移機械110は、状態番号2、入力文字「b」なので、状態遷移表200より、遷移先状態の番号3を取得し、状態記憶部111が記憶する(S163)。
状態遷移記憶部112が状態番号3を記憶領域Hの最後に追加し(S164)、「123」となる。
検索成功判別部117は、現在の状態(状態番号3)が受理状態(状態番号4)でないと判別する(S165)。
状態番号3、入力文字「c」なので、新たなDFAの状態は状態番号4になり、記憶領域Hに追加する(S163、S164)。
検索成功判別部117は、現在の状態(4)が受理状態(4)であることを判別する(S165)。
状態遷移記憶部112は、記憶領域Hに、受理位置を記憶する(S166)。ここまでで文字取得部109がDFAに入力した文字数は3なので、受理位置は3となる。
更に、検索成功判別部117は、現在位置カウンタ115が記憶した現在位置(=0)に、受理位置(=3)を加え、ヒット位置(=3)を算出して出力する(S167)。
状態番号4、入力文字「d」なので、新たなDFAの状態は5になり、記憶される(S163、S164)。
現在の状態(5)は受理状態(4)ではないので、次へ進む(S165)。
ここまでで、記憶領域Hには、状態遷移履歴として「123456」が、受理位置として「3」が記憶されていたので、これを参照番号1に対応する位置に記憶する。
圧縮辞書の参照番号2に対応する部分文字列は「cb」なので、DFAの状態は、最初の状態が状態番号6、文字「c」を入力して状態番号3、文字「b」を入力して状態番号1へと遷移する。
このなかに受理状態(4)はないので、検索成功判別部117は何も出力しない。
したがって、状態遷移記憶部112は、状態遷移履歴として「631」を、状態履歴の参照番号2に対応する位置に記憶する。受理位置はないので、記憶しない。
しかし、DFAの状態を更新(遷移)するたびに、状態遷移記憶部112が記憶した状態遷移履歴において対応する状態と比較し、一致する場合には、残りの状態遷移を飛ばす構成としてもよい。
例えば、参照文字列のi番目(iは自然数)の文字について次の状態を取得したあと、状態遷移履歴のi番目の状態と比較し、一致した場合はS16の処理を終了し、S13に処理が移るように構成しても良い。このとき、一時的な記憶領域Hに記憶した状態遷移履歴の先頭からi番目までを、圧縮ブロックの状態遷移履歴に反映させる。
正規表現に適合する文字列がテキスト中に存在するかの照合自体は、従来から利用されている、正規表現を受理する状態遷移が一意に決定される状態遷移機械を使用している。
このように、この実施の形態の圧縮テキスト検索装置では、正規表現を含んだ検索条件によって、圧縮テキストを高速に検索することができる。
辞書式圧縮方式によって圧縮されたテキストを、伸張することなく、正規表現によって検索する検索装置である。
検索には、状態遷移が一意に決定できる状態遷移機械を使用する。
状態遷移機械、状態遷移表生成部、圧縮ブロック取得部、文字取得部、状態記憶部、状態遷移記憶部、圧縮辞書記憶部から構成される。
検索時には、圧縮ブロックが参照する辞書中の文字列毎に、状態遷移機械の状態遷移の履歴を状態遷移記憶部に記憶しておき、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、履歴の末尾の状態まで、1回の状態遷移で遷移させる。
実施の形態2を図3、図6、図9〜図10、図46を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
状態遷移記憶部112は状態履歴として、文字と状態を1対1に対応づけて記憶する。
例えば、文字411と状態461とを対応づけて記憶している。以下、文字412と状態462、文字413と状態463も同様に対応づけて記憶している。以下の説明では、状態履歴を、状態と文字を「()」で括って表現するものとする。例えば、図9に示す状態履歴は「(1、a)(2、b)(3、c)(4、d)…」と表現する。
例えば、文字411は、元の文字列500の最初の文字「a」に対応し、この文字をDFAに入力したときに記憶したものである。状態461は、文字411をDFAに入力する前において、状態記憶部111が記憶していたDFAの状態である。
状態記憶部111は初期状態(状態番号=1)を記憶する。
状態遷移記憶部112は、記憶する状態履歴を空にする。
現在位置カウンタ115は、現在位置として0を記憶する。
遷移先算出部116は、状態履歴から、次の状態及び文字を取得する(S252)。
検索成功判別部117は、遷移先算出部116が取得した状態が受理状態であるか否かを判別し、受理状態である場合には、照合結果出力部104が、ヒット位置として現在位置カウンタ115が記憶する現在位置を出力する(S253)。
現在位置カウンタ115が記憶する現在位置を1つ増やし、部分文字列の残りの長さを1つ減らす(S254)。
部分文字列の残りがまだあれば、S251から繰り返す(S255)。
S251〜S255の処理が終わったら、遷移先算出部116は、S252で取得した状態に、状態記憶部111が記憶したDFAの状態を更新する(S256)。
文字取得部109(文字列復元部の一例)は、条件判断部114が取得した文字を取得し、DFAに入力する。状態遷移機械110は、文字取得部109が入力した文字と、状態記憶部111が記憶したDFAの現在の状態とに基づいて、状態遷移表記憶部106が記憶した状態遷移表を参照し、遷移先状態を取得する。状態遷移機械110は、取得した遷移先状態を、状態記憶部111に記憶させ、現在の状態を更新する(S262)。
検索成功判別部117は、更新されたDFAの現在の状態が受理状態であるか否かを判別し、受理状態である場合には、照合結果出力部104が、ヒット位置として現在位置カウンタ115が記憶する現在位置を出力する(S263)。
現在位置カウンタ115が記憶する現在位置を1つ増やし、部分文字列の残りの長さを1つ減らす(S264)。
部分文字列の残りがまだあれば、S23から繰り返す(S265)。
あるいは、毎回比較するのではなく、何回かに一回比較する構成としてもよい。
これは、偶数番目の圧縮ブロックなので、文字を表現するビット列の符号982である。
したがって、条件判断部114は、無条件にこれが他の文字列へのポインタの情報を含むものではないと判断する。
状態遷移表記憶部106は、図6に示す状態遷移表200を記憶する。状態遷移表200は、検索条件入力部102が入力した検索条件(正規表現を含む)に基づいて、状態遷移表生成部105が生成したものである。状態遷移表200に対応するDFAにおいて、初期状態は状態番号1に対応する状態であり、受理状態は状態番号4に対応する状態である。これも、状態遷移表記憶部106が記憶している。なお、DFAの初期状態は必ず1つであるが、受理状態は複数あってもよい。
状態記憶部111は初期状態(状態番号=1)を記憶する。
状態遷移記憶部112は、記憶する状態履歴を空にする。
現在位置カウンタ115は、現在位置として「1」を記憶する。
条件判断部114が、取得した圧縮ブロックに他の部分文字列へのポインタの情報が含まれていないと判断し(S21)、S27へ進む。
状態遷移記憶部112は、状態記憶部111が記憶したDFAの現在の状態「1」及び文字「a」を、状態履歴の最後に追加する(状態461及び文字411)(S27)。
文字取得部109がDFAに文字「a」を入力し、DFAの状態は「2」になる(S282)。受理状態ではないので、出力はせず(S283)、現在位置が「2」になる(S284)。次の圧縮ブロックへ進む(S29)。
次に取得した圧縮ブロック(S27)は「b」なので、状態「2」と文字「b」を状態履歴に追加(状態462及び文字412)し(S281)、DFAに文字「b」を入力すると、DFAの状態は「3」になる(S282)。受理状態か判別し(S283)、現在位置が「3」になる(S284)。次へ進む(S29)。
次に取得した圧縮ブロック(S27)は「c」なので、状態「3」と文字「c」を状態履歴に追加(状態463及び文字413)し(S281)、DFAに文字「c」を入力すると、DFAの状態は「4」になる(S282)。受理状態なので、ヒット位置(=3)を出力し(S283)、現在位置が「4」になる(S284)。次へ進む(S29)。
次に取得した圧縮ブロック(S27)は「d」なので、状態「4」と文字「d」を状態履歴に追加し(S281)、DFAに文字「d」を入力すると、DFAの状態が「5」になる(S282)。受理状態か判別し(S283)、現在位置が「5」になる(S284)。次へ進む(S29)。
次に取得した圧縮ブロック(S27)は「e」なので、状態「5」と文字「e」を状態履歴に追加し(S281)、DFAに文字「e」を入力すると、DFAの状態が「6」になる(S282)。受理状態か判別し(S283)、現在位置が「6」になる(S284)。次へ進む(S29)。
取得した状態「3」と、状態記憶部111が記憶したDFAの現在の状態(=6)とを比較する(S24)。
一致しないので、現在の状態「6」と取得した文字「c」を状態履歴に追加する(S261)。DFAに文字「c」を入力して、DFAの状態が「3」になる(S262)。受理状態か判別し(S263)、現在位置が「7」になる(S264)。長さ文字数分の入力が終わったので(S265)、S27へ進む。
取得した状態「1」と、状態記憶部111が記憶したDFAの現在の状態(=1)とを比較する(S24)。
取得した状態「3」と、状態記憶部111が記憶したDFAの現在の状態(=1)とを比較する(S24)。
一致しないので、現在の状態「1」と取得した文字「c」を状態履歴に追加する(S261)。DFAに文字「c」を入力して、DFAの状態が「1」になる(S262)。受理状態か判別し(S263)、現在位置が「15」になる(S264)。繰り返しは残り1文字となる(S265)。
取得した状態「3」と、状態記憶部111が記憶したDFAの現在の状態(=1)とを比較する(S24)。
一致しないので、現在の状態「1」と取得した文字「b」を状態履歴に追加する(S261)。DFAに文字「b」を入力して、DFAの状態が「1」になる(S262)。受理状態か判別し(S263)、現在位置が「16」になる(S264)。繰り返しを終了する(S265)。
取得した状態「1」と、状態記憶部111が記憶したDFAの現在の状態(=5)とを比較する(S24)。
一致しないので、現在の状態「5」と取得した文字「a」を状態履歴に追加する(S261)。DFAに文字「a」を入力して、DFAの状態が「2」になる(S262)。受理状態か判別し(S263)、現在位置が「15」になる(S264)。繰り返しは残り4文字となる(S265)。
取得した状態「2」と、状態記憶部111が記憶したDFAの現在の状態(=2)とを比較する(S24)。
一致するので、取得した状態「2」と文字「b」を状態履歴に追加する(S251)。状態履歴から9文字前の状態「3」及び文字「c」を取得し(S252)、取得した状態「3」が受理状態か判別する(S253)。現在位置は「16」になり(S254)、繰り返しは残り3文字となる(S255)。
実施の形態30を図3、図11〜図13を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZ77形式で圧縮された圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZ77形式のスライド窓を記憶する。
状態遷移記憶部に、スライド窓長+1の長さの状態遷移履歴を記憶する。
LZ77形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで状態を1回の状態遷移で遷移させ、さらに不一致文字により状態を遷移させる。
実施の形態4を図3、図14、図15、図44を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
この実施の形態では、実施の形態2と異なり、文字に対応する状態を複数記憶できる。
例えば、文字431は状態481と対応づけられている。また、文字438は状態488及び状態448と対応づけられている。具体的な実現方法としては、表形式、リスト形式、ポインタ形式等の構造が考えられるが、他の実現方法でもよい。
また、実施の形態2と同様に、文字と状態を1対1対応として記憶することとしてもよい。
図15は、実施の形態2で説明した図10とほぼ同じなので、異なる部分のみ説明する。
条件判断部114は、フラグ981が「1」の場合、他の部分文字列へのポインタの情報を含まないと判断し(S22)、文字取得部109が圧縮ブロックから文字を取得し、状態遷移記憶部112が、現在の状態と取得した文字とを状態履歴の最後に追加する(S281)。
条件判断部114は、フラグ981が「0」の場合、他の部分文字列へのポインタの情報を含むと判断し(S22)、圧縮ブロックから、他の部分文字列の(最初の文字の)出現位置983(現在位置からの距離)及び部分文字列の長さ984を取得する。更に、状態遷移記憶部112が記憶した状態履歴から、出現位置に対応する状態及び文字を取得し、状態記憶部111が記憶しているDFAの現在の状態と比較する(S24)。
一致するものがあった場合、状態遷移記憶部112は、一致しなかった状態も含めて、取得した状態すべてと文字とを、状態履歴の最後に追加する(S251)。
遷移先算出部116は、次の状態及び文字を取得する(S252)。
検索成功判別部117は、取得した状態のうち、一致した状態に対応する状態が受理状態かを判別する(S253)。
S23において、条件判断部114が状態「4」及び「2」、文字「b」を取得する。
S24において、条件判断部114は、取得した状態(4、2)に現在の状態(=2)が含まれているので、一致すると判断する。
S251において、状態遷移記憶部112は、取得した状態「4」及び「2」すべてと、文字「b」とを、状態履歴の最後に追加する。
S252において、遷移先算出部116は、次の状態495「1」及び状態475「3」と、文字445「c」とを取得する。
状態遷移記憶部112は、現在の状態及び取得した状態と、取得した文字とを状態履歴の最後に追加する(S261)。
状態記憶部111は、DFAの現在の状態として「5」を記憶している。
一致しないので、現在の状態「5」及び取得した状態「1」と文字「a」とを状態履歴の最後に追加する(状態485、445、文字435)(S261)。
DFAに文字「a」を入力し、現在の状態が「2」に遷移する(S262)。
受理状態か判別し(S263)、現在位置を進める(S264)。繰り返しは残り1文字になる(S265)。
一致するので、取得した状態「2」と文字「a」とを状態履歴の最後に追加する(状態486及び文字436)(S251)。
このとき、前の状態が「1」でも「5」でも同じ状態「2」になるので、状態486は、状態485と状態445の両方に対応づけられる(図14の矢印)。
DFAに文字「b」を入力し、現在の状態が「1」に遷移する(S262)。
受理状態か判別し(S263)、現在位置を進める(S264)。繰り返しは残り6文字になる(S265)。
一致しないので、現在の状態「1」及び取得した状態「3」と文字「c」とを状態履歴に追加する(状態489、449、文字439)(S261)。
このとき、状態489は状態488と対応づける。また、状態449は状態448と対応づける。
DFAに文字「c」を入力し、現在の状態が「1」に遷移する(S262)。
受理状態か判別し(S263)、現在位置を進める(S264)。繰り返しは残り5文字になる(S265)。
一致しないので、現在の状態「1」及び取得した状態「4」と文字「d」とを状態履歴に追加する(状態490、450、文字440)(S261)。
このとき、状態490は状態489と対応づける。また、状態450は状態449と対応づける。
DFAに文字「d」を入力し、現在の状態が「5」に遷移する(S262)。
受理状態か判別し(S263)、現在位置を進める(S264)。繰り返しは残り4文字になる(S265)。
状態445と一致するので、取得した状態「1」及び「5」と文字「a」とを状態履歴に追加する(状態491、451、文字441)(S251)。
このとき、状態491は状態490及び状態450と対応づける。どちらの状態からも同じ状態「1」に遷移するからである。また、状態451は、前の状態と対応づけない。
取得した状態が受理状態か判別し(S253)、現在位置を進める(S254)。繰り返しは残り3文字になる(S265)。
ここで説明した実施の形態は、それらの圧縮方式によって圧縮されたテキストにも適用できる。
実施の形態5を図3、図13、図16を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZSS形式で圧縮された圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZSS形式のスライド窓を記憶する。
状態遷移記憶部に、スライド窓長+1の長さの状態遷移履歴を記憶する。
LZSS形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで1回の状態遷移で状態を遷移させる。
実施の形態6を図3、図6、図17、図18、図48を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
状態履歴としては「遷移先状態」及び「受理位置」を記憶する。状態履歴は最初は空であり、検索が進むにつれて、埋まっていく。
例えば、参照番号1は、部分文字列「a」に対応する。参照番号2は、参照番号1に対応する部分文字列「a」に接尾文字「b」を付けたもの(「ab」)に対応する。参照番号3は、「ab」+「c」で、「abc」に対応する。
圧縮辞書は最初は空であり、検索が進むにつれて、エントリが増えていく。
状態記憶部111は初期状態(状態番号=1)を記憶する。
状態遷移記憶部112は、記憶する状態履歴を空にする。
圧縮辞書記憶部113は、記憶部する圧縮辞書を空にする。
現在位置カウンタ115は、現在位置として0を記憶する。
参照番号が0の場合は、対応する部分文字列は空なので、展開ルーチンを終了する。
参照番号が0以外の場合は、対応する部分文字列が圧縮辞書に登録されている。そこで、条件判断部114は、状態遷移記憶部112が記憶している状態履歴を参照する。状態履歴の表において、「参照番号」行、「現在の状態」列を見て、過去にその参照番号の部分文字列を検索したときの状態履歴が記憶されているかを見る(S322)。
次に、検索成功判別部117が、状態履歴から受理位置を取得し、受理位置がある場合には、ヒット位置を算出して出力する(S325)。
圧縮ブロック取得部108は、前方参照番号を条件判断部114に渡して、展開ルーチンを再帰的に実行する(S42)。
これは偶数番目の圧縮ブロックなので、文字を表すビット列の符号972である。
状態遷移表記憶部106は、図6に示す状態遷移表200を記憶する。状態遷移表200は、検索条件入力部102が入力した検索条件(正規表現を含む)に基づいて、状態遷移表生成部105が生成したものである。状態遷移表200に対応するDFAにおいて、初期状態は状態番号1に対応する状態であり、受理状態は状態番号4に対応する状態である。これも、状態遷移表記憶部106が記憶している。なお、DFAの初期状態は必ず1つであるが、受理状態は複数あってもよい。
状態記憶部111は初期状態(状態番号=1)を記憶する。
状態遷移記憶部112は、記憶する状態履歴を空にする。
圧縮辞書記憶部113は、記憶する圧縮辞書を空にする。
現在位置カウンタ115は、現在位置として0を記憶する。
状態遷移記憶部は、状態記憶部111が記憶しているDFAの現在の状態(=1)を、最初の状態として記憶しておく。
参照番号「1」を渡して、展開ルーチン(ネストレベル1)を呼び出す(S32)。参照番号が0以外なので(S321)、状態履歴をチェックする(S322)。
状態履歴の、参照番号「1」最初の状態「2」の欄は空欄なので(S322)、圧縮辞書の参照番号「1」の欄を参照し、前方参照番号「0」を得る(S41)。
前方参照番号「0」を渡して、展開ルーチンを再帰的に呼び出す(S42)。ネストレベル1からの呼出しなので、ネストレベル2と呼ぶことにする。
ネストレベル2の展開ルーチンにおいて、参照番号が0なので(S321)、何もせずに帰ってくる。
ネストレベル1に戻り、圧縮辞書の参照番号「1」の欄を参照し、接尾文字「a」を得る(S43)。
接尾文字「a」をDFAに入力し、DFAの状態は「2」になる(S44)。受理状態ではないので、出力はしない(S45)。
状態履歴の参照番号「1」最初の状態「2」の欄に、遷移先状態「2」受理位置「0」を記憶して(S48)、ネストレベル1の展開ルーチンは終了する。
接尾文字「b」をDFAに入力し、DFAの状態は「3」になる(S34)。受理状態ではないので、何も出力せず(S35)、現在位置が「3」になる(S36)。
圧縮辞書には、参照番号「1」と接尾文字「b」が登録される。登録番号は「2」である。
状態履歴には、参照番号「2」最初の状態「2」の欄に、遷移先状態「3」受理位置「0」を記憶する。
参照番号「2」を渡して、展開ルーチン(ネストレベル1)を呼び出す(S32)。参照番号が0以外なので(S321)、状態履歴をチェックする(S322)。
状態履歴の、参照番号「2」最初の状態「3」の欄は空欄なので(S322)、圧縮辞書の参照番号「2」の欄を参照し、前方参照番号「1」を得る(S41)。
前方参照番号「1」を渡して、展開ルーチン(ネストレベル2)を再帰的に呼び出す(S42)。
状態履歴の、参照番号「1」最初の状態「3」の欄は空欄なので(S322)、圧縮辞書の参照番号「1」の欄を参照し、前方参照番号「0」を得る(S41)。
前方参照番号「0」を渡して、展開ルーチン(ネストレベル3)を再帰的に呼び出す(S42)。
ネストレベル3の展開ルーチンにおいて、参照番号が0なので(S321)、何もせずに帰ってくる。
接尾文字「a」をDFAに入力し、DFAの状態は「2」になる(S44)。受理状態ではないので、出力はしない(S45)。
状態履歴の参照番号「1」最初の状態「3」の欄に、遷移先状態「2」受理位置「0」を記憶して(S48)、ネストレベル2の展開ルーチンは終了する。
接尾文字「b」をDFAに入力し、DFAの状態は「3」になる(S44)。受理状態ではないので、出力はしない(S45)。
状態履歴の参照番号「2」最初の状態「3」の欄に、遷移先状態「3」受理位置「0」を記憶して(S48)、ネストレベル1の展開ルーチンは終了する。
接尾文字「c」をDFAに入力し、DFAの状態は「4」になる(S34)。受理状態なので、ヒット位置「6」を出力し(S35)、現在位置が「6」になる(S36)。
圧縮辞書には、参照番号「2」と接尾文字「c」が登録される。登録番号は「3」である。
状態履歴には、参照番号「3」最初の状態「3」の欄に、遷移先状態「4」受理位置「3」を記憶する。
参照番号「3」を渡して、展開ルーチン(ネストレベル1)を呼び出す(S32)。参照番号が0以外なので(S321)、状態履歴をチェックする(S322)。
状態履歴の、参照番号「3」最初の状態「3」の欄には状態履歴が記憶されているので(S322)、状態履歴から遷移先状態「4」を取得する(S323)。
状態記憶部111が記憶したDFAの現在の状態を「4」に更新する(S324)。
状態履歴から受理位置「3」を取得し(S325)、ヒット位置「12」を出力して(S326)、ネストレベル1の展開ルーチンは終了する。
接尾文字「d」をDFAに入力し、DFAの状態は「5」になる(S34)。受理状態ではないので、何も出力せず(S35)、現在位置が「13」になる(S36)。
圧縮辞書には、参照番号「3」と接尾文字「d」が登録される。登録番号は「7」である。
状態履歴には、参照番号「7」最初の状態「3」の欄に、遷移先状態「5」受理位置「3」を記憶する。
圧縮辞書記憶部113が記憶する圧縮辞書の構造も、実施の形態1等で説明したように、参照番号と部分文字列とを記憶するものであってもよい。
状態遷移記憶部112が記憶する状態履歴の構造も、実施の形態1等で説明したような構造であってもよい。
実施の形態7を図3、図6、図8、図19、図20を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZ78形式で圧縮された圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZ78形式の圧縮辞書を記憶する。
LZ78形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで1回の状態遷移で状態を遷移させさせる。さらに、不一致文字により状態を遷移させる。
参照文字列と不一致文字からなる文字列を圧縮辞書の新たなエントリとして追加し、上記の状態遷移を状態遷移記憶部の新たなエントリとして追加する。
実施の形態8を図21〜図23を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
参照番号6以降は、検索が進むにつれて、登録されるものである。
状態遷移記憶部112は状態履歴として、実施の形態6で説明したのと同様、「参照番号」「最初の状態」により参照可能な形で、「状態遷移履歴」と「受理位置」を記憶する。
状態遷移履歴は、最初の状態と最後の状態(遷移先状態)だけでなく、途中の状態もすべて記憶したものである。しかし、実施の形態6で説明したように、遷移先状態を記憶することとしてもよい。
その場合であっても、最初の状態の次の状態(2番目の状態)は記憶しておくほうが好ましい。状態履歴を更新する際に2番目の状態が必要になるので、DFAに入力せずともこれを取得できるからである。
S52において、圧縮辞書記憶部113が記憶した圧縮辞書を参照して、次の圧縮ブロックの先頭の文字(接頭文字)を取得する。圧縮辞書に接頭文字を記憶しているので、次の圧縮ブロックを伸長しなくても、辞書を更新できる。
そこで、状態遷移記憶部112は、次の参照番号について記憶した状態遷移履歴から、2番目の状態を取得する。
あるいは、状態遷移表記憶部106が記憶した状態遷移表を参照して、2番目の状態を取得してもよい。
あるいは、DFAにもう1文字入力したあとで、状態履歴を記憶するよう構成してもよい。
ここで説明した実施の形態は、それらの圧縮方式によって圧縮されたテキストにも適用できる。
実施の形態9を図20、図24を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZW形式で圧縮された圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZW形式の圧縮辞書を記憶する。
LZW形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで1回の状態遷移で状態を遷移させる。次の圧縮ブロックの参照文字列の先頭の文字によって状態を遷移させる。
参照文字列と次の圧縮ブロックの参照文字列の先頭の文字からなる文字列を圧縮辞書の新たなエントリとして追加し、上記の状態遷移を状態遷移記憶部の新たなエントリとして追加する。
実施の形態10を図7、図25〜図27を用いて説明する。
例えば、ASCIIコードを用いる場合、文字を表現するビット列のビット長は8ビット(1バイト)である。
これに対し、シフトJISコードを用いる場合、文字を表現するビット列のビット長は16ビット(2バイト)である。
更にいえば、シフトJISコードはASCIIコードと混在させることができるので、同じ文字列の中に8ビットのビット列によって表される文字と16ビットのビット列によって表される文字とが混在する場合もある。
結果として得られる符号列全体のビット長が、元の文字列全体のビット長より短くなっていればよいのであって、その文字列が何を意味しているかを理解する必要はないからである。
そこで、圧縮技術においては通常、すべての文字列は8ビットのビット長を持つ文字から構成されているものとして扱っている。
例えば、ある文字列を画面に表示する場合、使用者はその文字列を構成する文字が、コンピュータ内部で何ビットのビット列によって表現されているかを意識する必要はない。
したがって、検索装置は通常、検索条件に合致する検索文字列が「何文字目にあった」と画面に表示する。
また、正規表現で指定する検索条件においては、「任意の1文字」といった指定の仕方が可能である。この場合、その1文字が、コンピュータ内部において何ビットのビット列で表現されているかは無関係である。
したがって、検索装置においてDFAに入力する文字は、必ずしも8ビットのビット長を持つビット列であるとは限らない。
未完文字復元部121は、圧縮ブロック(符号の一例)から復元した部分文字列に、DFAに入力できない文字(未完文字)が含まれているかを判断し、未完文字がある場合には、バイトデータ記憶部122に記憶させる。
他の部分は、実施の形態1において図3を用いて説明したものと同一なので、ここでは説明を省略する。
状態遷移記憶部112は状態履歴として、状態遷移履歴、受理位置、未完文字、末尾の未完文字を記憶する。
「状態遷移履歴」は、その部分文字列をDFAに入力する前(前の部分文字列の末尾に未完文字がある場合も含む)の状態(最初の状態)から、その部分文字列をDFAに入力した後(その部分文字列の末尾に未完文字がある場合には、未完文字の手前まで入力した後)の状態(遷移先状態)までの、DFAの状態遷移の履歴である。なお、途中経過は記憶せず、最初の状態と遷移先状態だけを記憶してもよい。
「未完文字」は、その部分文字列を展開する前に、バイトデータ記憶部122が記憶していた未完文字である。これを、部分文字列の先頭にある未完文字と結合することによって、DFAに入力できる文字となる。
「末尾の未完文字」は、その部分文字列の最後に未完文字がある場合の未完文字を示す。
圧縮ブロックによって置換される部分文字列には、ここに示すように、末尾にDFAに入力できない文字(未完文字)を有するもの(例えば、参照番号1)、先頭にDFAに入力できない文字(他の未完文字)を有するもの(例えば、参照番号2)、両方に有するもの(例えば、参照番号3)などがある。
例えば、検索条件入力部102が、正規表現「(あい|えおう)[うお]え*」を検索条件として入力する(ここで「[うお]」は「(う|お)」の簡略表記である)。この正規表現は、「あいう」「あいお」「あいうお」「あいおお」「えおうう」「えおうお」「えおううお」「えおうおお」・・・などを意味する。図27の状態遷移表は、この正規表現に基づいて、状態遷移表生成部105が生成するものである。
この実施の形態における制御の流れは、実施の形態1において図7を用いて説明した流れとほぼ同一である。ここでは、相違する点だけを説明する。
これにより、検索装置が扱う文字を表すビット列のビット長が、圧縮テキストの圧縮方式で想定している文字を表すビット列のビット長と異なる場合でも、検索が高速になるという効果を奏する。
実施の形態11を図7、図28を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態10で説明したものと同一なので、ここでは説明を省略する。
状態遷移記憶部112は状態履歴として、状態遷移履歴、受理位置、先頭の未完文字、末尾の未完文字を記憶する。
「状態遷移履歴」は、その部分文字列をDFAに入力する前(その部分文字列の先頭に未完文字がある場合には、そこまで入力した後)の状態(最初の状態)から、その部分文字列をDFAに入力した後(その部分文字列の末尾に未完文字がある場合には、未完文字の手前まで入力した後)の状態(遷移先状態)までの、DFAの状態遷移の履歴である。なお、途中経過は記憶せず、最初の状態と遷移先状態だけを記憶してもよい。
「先頭の未完文字」は、その部分文字列の先頭に未完文字がある場合の未完文字を示す。バイトデータ記憶部122が記憶していた未完文字を、これと結合することによって、DFAに入力できる文字となる。
「末尾の未完文字」は、その部分文字列の最後に未完文字がある場合の未完文字を示す。
この実施の形態における制御の流れは、実施の形態1において図7を用いて説明した流れとほぼ同一である。ここでは、相違する点だけを説明する。
これにより、S12の処理をする段階では未完文字がなくなるので、S12においては、未完文字が一致するかを判別する必要がなく、状態の一致のみを判別すればよい。
これにより、検索装置が扱う文字を表すビット列のビット長が、圧縮テキストの圧縮方式で想定している文字を表すビット列のビット長と異なる場合でも、検索が高速になるという効果を奏する。
実施の形態12を図29〜図33を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態10で説明したものと同一なので、ここでは説明を省略する。
図29のような圧縮テキスト<1、2、1、3、4、1、3>を伸張する場合、圧縮ブロック列300から1つずつ圧縮ブロック1702を取得し、その参照情報を元に圧縮ブロック1702を圧縮辞書の文字列1705と置き換える。
例えば、最初の圧縮ブロック1702は、圧縮辞書の1番目のエントリを参照しているため、最初の圧縮ブロックは、1番目のエントリの文字列「あいうえ(82)」と置き換えることができる。同様に2番目の圧縮ブロックは、「(A8)うい」と置き換えることができる。ここで、文字コード(82A8)は、シフトJISコードで「お」を表わしているため、1番目と2番目の圧縮ブロックからは、文字列「あいうえおうい」が得られる。同様に全ての圧縮ブロックについて繰り返すことで、圧縮ブロック列300から伸張されたテキスト「あいうえおういあいうえいおうあえあいうえあえ」を得ることができる((82A0)=「あ」、(82A2)=「い」)。
このように、実施の形態1では、状態遷移の履歴の長さは、圧縮ブロックの参照文字列の文字列長+1であったが、この実施の形態のマルチバイトコード文字を含むテキストを検索する圧縮テキスト検索装置では、参照文字列の文字列長+1となるとは限らず、参照文字列の文字数+1となる。受理位置1803は、圧縮ブロックの参照文字列の何バイト目で、状態遷移機械が受理状態に到達したかを表わしている。この受理位置は、文字単位でカウントしても良い。このとき、1文字に満たない1バイトデータがある場合でも、それを1文字とカウントしても良いし、しなくても良い。
図31の状態遷移表1901の左端の列は、現在の状態を表わしている。また、1行目は次に入力された文字を表わしている。検索条件に含まれる正規表現を受理する状態遷移機械の状態遷移表は、照合が開始されるまでに生成される。
ステップS1504で、状態記憶部111の現在の状態と、圧縮ブロックが参照する状態遷移履歴の先頭の状態が一致するか判定する。一致する場合は(YES)、ステップS1505で状態遷移履歴の末尾の状態を、状態記憶部111にセットする。
次にステップS1506で、状態遷移履歴に受理位置があるか判定する。受理位置があった場合は(YES)、ステップS1507でヒット位置を計算して出力する。ここで、ヒット位置=現在の元テキスト長+受理位置となる。ステップS1506で受理位置が無かった場合は(NO)、そのままステップS1508へ進む。
ステップS1508では、圧縮ブロックの参照文字列の末尾に、バイトデータがあるか判定する。ステップS1508でバイトデータがある場合は(YES)、ステップS1509で、そのバイトデータをバイトデータ記憶部122にセットする。ステップS1508で、バイトデータが無い場合は(NO)、そのままステップS1510へと進む。
ステップS1510では、圧縮ブロック列の終端に達しているか判定し、達していない場合は(NO)、ステップS1501で次の圧縮ブロックを取得する。ステップS1510で圧縮ブロック列の終端に達していた場合は(YES)、検索処理を終了する。
図32には明記していないが、ここで元テキスト長に、圧縮辞書の文字列長を加える。
ステップS1502で、参照文字列の先頭がバイトデータであった場合は、そのバイトデータの次の文字から始まる文字列に対して、状態遷移履歴を求める。
ステップS1511で状態遷移履歴を求め終えたら、ステップS1510へ進む。
まず、ステップS1601で、現在の状態を記憶領域Hの状態遷移履歴の先頭に追加する。ステップS1602で、文字取得部109によって圧縮ブロックの参照文字列の先頭から順に1文字ずつ取得する。
ステップS1603で、ステップS1601で取得した文字と、状態記憶部111が記憶した現在の状態を入力として、状態遷移機械110から次の状態を取得し、状態記憶部111にセットする。
ステップS1604では、ステップS1603で取得した状態を、記憶領域Hの状態遷移履歴に追加する。
ステップS1605では、状態記憶部111の状態が受理状態か判定する。受理状態であった場合は(YES)、ステップS1606でヒット位置を出力し、ステップS1607に進む。ここで、ヒット位置は元テキスト長(バイト)+圧縮ブロックの参照文字列の先頭からのバイト数となる。このとき、同時に記憶領域Hの状態遷移履歴の受理位置に、参照文字列の先頭からのバイト数をセットする。ステップS1605で受理状態では無かった場合は(NO)、そのままステップS1607に進む。
ステップS1607では、文字列の終端に達しているか判定し、達していない場合には(NO)、ステップS1608へ進む。
ステップS1608では、次の文字がバイトデータであるか判定し、バイトデータであった場合は(YES)、そのまま処理を終了する。バイトデータではない場合は(NO)、ステップS1602で次の文字を取得する。
ステップS1607で、文字列の終端まで処理していた場合は(YES)、処理を終了する。
処理を終了する時に、記憶領域Hの状態遷移履歴の履歴と受理位置を、圧縮ブロックの参照する状態遷移履歴に反映する。
すなわち、最初に取得した状態遷移履歴から更新しないようにしても良いし、状態遷移履歴の先頭の状態がある特定の状態のときのみ、履歴を更新するようにしても良い。
次にステップS1502で、バイトデータ記憶部122にバイトデータがないので、ステップS1504に進む。
ステップS1504では、状態記憶部111が記憶している現在の状態[1]に対して、圧縮ブロックの参照する状態遷移履歴は空なので、状態は一致しない。よって、ステップS1511に移行する。
ステップS1602では、圧縮ブロックが参照している圧縮辞書の文字列「あいうえ(82)」の最初の1文字「あ」を取得する。
次にステップS1603では、現在の状態[1]と文字「あ」を元に、状態遷移機械110によって次の状態[2]を取得する。取得した状態[2]を状態記憶部111にセットして、次のステップS1604に進む。
ステップS1604では、現在の状態を、1番目の状態遷移履歴に追加する。ここで、状態遷移記憶部112が記憶する1番目の状態遷移履歴は「1−2」となる。
ステップS1605では、現在の状態が受理状態であるか判定し、受理状態ではないのでステップS1607へ進む。
ステップS1607では、圧縮辞書の文字列の終端に達したか判定し、達していないのでステップS1608へ進み、次の文字がバイトデータでもないので、ステップS1602で次の文字「い」を取得する。
ステップS1605で現在の状態が受理状態か判定し、受理状態であるのでステップS1606に進む。現在2バイト文字を3文字目まで取得したところなので、ヒット位置として2バイト×3=6出力する。同時に、1番目の状態遷移履歴の受理位置に6を追加する。
ステップS1502で、バイトデータ記憶部122にバイトデータ(82)があるので、ステップS1503へ進む。
ステップS1503で、バイトデータ記憶部122のバイトデータ(82)を上位バイト、参照文字列の先頭のバイトデータ(A8)を下位バイトとする文字「お」(=(82A8))と、現在の状態[5]から、状態遷移機械110によって次の状態[6]を取得し、状態記憶部111にセットする。そしてバイトデータ記憶部122を空にする。
ステップS1504以降は同様に処理を行って、ステップS1510に達した時点でテキストの14バイト目まで処理が終わり、現在の状態は[1]、1番目の状態遷移履歴は「1−2−3−4−5」、2番目の状態遷移履歴は「6−3−1」である。
ステップS1502で、バイトデータ記憶部122にバイトデータがないため、ステップS1504へと進む。
ステップS1504で、現在の状態[1]と、1番目の状態遷移履歴の先頭の状態[1]を比較し、一致しているのでステップS1505へと進む。
ステップS1505では、状態遷移履歴の末尾の状態[5]を、状態記憶部111が現在の状態として記憶する。
ステップS1506で、1番目の状態遷移履歴には受理状態があるため、ステップS1507でヒット位置を計算し出力する。3番目の圧縮ブロックを取得する直前までに処理したテキストは14バイト、また状態遷移履歴の受理位置は6なので、14+6=20がヒット位置となる。
ステップS1508で参照文字列の末尾にバイトデータがないのでステップS1510へ進む。
ステップS1510で、圧縮ブロックの終端ではないので、ステップS1501に進む。
以降同様に処理を行い、圧縮ブロック列の終端まで処理を終えた時点で検索処理を終了する。
正規表現に適合する文字列がテキスト中に存在するかの照合自体は、従来から利用されている、正規表現を受理する状態遷移が一意に決定される状態遷移機械を使用している。
このように、この実施の形態の圧縮テキスト検索装置では、正規表現を含んだ検索条件によって、マルチバイトコード文字を含む圧縮テキストを高速に検索することができる。
辞書式圧縮方式によって圧縮されたマルチバイトコード文字を含むテキストを、伸張することなく、正規表現によって検索する検索装置である。
検索には、状態遷移が一意に決定できる状態遷移機械を使用する。
検索時には、圧縮ブロックが参照する辞書中の文字列毎に、状態遷移機械の状態遷移の履歴を記憶しておき、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、履歴の末尾の状態まで状態遷移を一気に遷移させる。
1文字に満たないバイトデータを記憶する記憶部を備え、辞書中の文字列の末尾に1文字に満たないバイトデータが含まれる場合には、そのバイトデータを記憶しおき、次の圧縮ブロックの先頭からバイトデータを取得した時点で、状態遷移を処理する。
実施の形態13を図34、図35を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態10で説明したものと同一なので、ここでは説明を省略する。
この実施の形態では、圧縮辞書記憶部113のスライド窓2103がバイトデータ記憶部の役割を兼ねる。
ステップS2002で、圧縮ブロックの参照文字列の先頭がバイトデータか判定する。バイトデータの場合で、圧縮辞書記憶部の末尾にバイトデータが存在する場合は、その末尾のバイトデータを上位バイト、参照文字列の先頭のバイトデータを下位バイトとする1文字と、現在の状態を元に状態遷移機械110によって次の状態を取得し、現在の状態と状態遷移履歴2104の末尾にセットする。圧縮辞書記憶部の末尾にバイトデータが無い場合は、ステップS2008に進んでよい。
ステップS2004で、現在の状態と、圧縮ブロックが参照する状態遷移履歴の先頭の状態が一致するか判定する。参照文字列の先頭がバイトデータであった場合は、その次の文字の状態と比較する。先頭の状態が一致した場合は(YES)、ステップ2005で、スライド窓の(参照文字列の位置+参照文字列長)の位置の文字の状態を現在の状態にセットする。ステップS2006で、参照文字列の位置から(参照文字列の位置+参照文字列長)の位置の間に受理状態があるか判定する。受理状態がある場合は(YES)、ステップS2007でヒット位置を計算して出力し、ステップS2008へ進む。受理状態が無い場合は(NO)、何もせずにステップS2008へ進む。
ステップS2008では、スライド窓と状態遷移履歴を更新する。すなわち、スライド窓中の文字列を、(参照文字列長+1)バイト分前へシフトし、末尾に参照文字列の位置から参照文字列長分の文字列と、最初の不一致文字を追加する。同様に、状態遷移履歴も同様に、(参照文字列長+1)バイト分前へシフトし、末尾に参照文字列の先頭の文字から参照文字列分の後ろの文字までの状態遷移履歴を追加する。状態遷移履歴は、さらに、参照文字列の末尾と不一致文字が共にバイトデータで、合わせて1文字となる場合には、状態遷移機械110によって、次の状態を取得し、状態記憶部111と、状態遷移履歴の末尾にセットする必要がある。
ステップS2009では、圧縮ブロック列の終端に達しているか判定し、達していない場合は(NO)、ステップS2001で次の圧縮ブロック列を取得する。達していた場合は(YES)、検索処理を終了する。
圧縮辞書記憶部にLZ77形式のスライド窓を記憶する。
状態遷移記憶部に、スライド窓長+1の長さの状態遷移履歴を記憶する。
スライド窓の末尾をバイトデータ記憶部として利用する。
LZ77形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで状態を1回の状態遷移で遷移させ、さらに参照文字列の末尾と不一致文字とで合わせて1文字となる場合にはその文字により状態を遷移させる。
実施の形態14を図35を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態10で説明したものと同一なので、ここでは説明を省略する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZSS形式で圧縮されたマルチバイトコード文字を含む圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZSS形式のスライド窓を記憶する。
状態遷移記憶部に、スライド窓長+1の長さの状態遷移履歴を記憶する。
スライド窓の末尾をバイトデータ記憶部として利用する。
LZSS形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで1回の状態遷移で状態を遷移させる。
実施の形態15を図32を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態10で説明したものと同一なので、ここでは説明を省略する。
LZ78形式で圧縮されたテキストを検索する場合には、ステップS1508の直前かステップS1510の直前で、圧縮辞書と状態遷移履歴にエントリを追加する必要がある。まず、圧縮ブロックの参照文字列に不一致文字を加えたものを、圧縮辞書の新たなエントリとして追加する。
不一致文字がバイトデータで、かつ参照文字列の末尾がバイトデータで無い場合や、不一致文字と参照文字列の末尾が共にバイトデータで、かつ合わせても1文字に満たない場合は、圧縮ブロックが参照する状態遷移履歴を、そのまま状態遷移記憶部112の新たなエントリとして追加する。
そして、そのバイトデータをバイトデータ記憶部122に追加する。不一致文字と参照文字列の末尾が共にバイトデータで合わせて1文字になる場合や、不一致文字が1バイト文字である場合は、その文字と現在の状態から次の状態を取得し、その取得した状態を状態記憶部と、状態遷移履歴の末尾にセットする。さらにその状態が受理状態であれば、ヒット位置を出力し、受理位置にも追加する。
ステップS1504で、現在の状態と圧縮ブロックの参照する状態遷移履歴の先頭の状態が一致しなかった場合は、状態遷移記憶部の新しいエントリには、ステップS1511で取得した状態遷移履歴を追加する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZ78形式で圧縮されたマルチバイトコード文字を含む圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZ78形式の圧縮辞書を記憶する。
LZ78形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで1回の状態遷移で状態を遷移させさせる。さらに参照文字列の末尾と不一致文字とで合わせて1文字となる場合にはその文字により状態を遷移させる。
参照文字列と不一致文字からなる文字列を圧縮辞書の新たなエントリとして追加し、上記の状態遷移を状態遷移記憶部の新たなエントリとして追加する。
実施の形態16を図35を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態10で説明したものと同一なので、ここでは説明を省略する。
また、正規表現とテキストとの照合処理自体は、その正規表現を受理する、状態遷移機械を利用する。これにより、正規表現を含んだ検索条件によって、LZW形式で圧縮されたマルチバイトコード文字を含む圧縮テキストを高速に検索することができる。
圧縮辞書記憶部にLZW形式の圧縮辞書を記憶する。
LZW形式の圧縮ブロックを読み込み、現在の状態が圧縮ブロックが参照する状態遷移の履歴の先頭の状態と一致した場合に、参照文字列の末尾の文字まで1回の状態遷移で状態を遷移させさせる。さらに参照文字列の末尾と次の圧縮ブロックの参照文字列の先頭の文字とで合わせて1文字となる場合にはその文字により状態を遷移させる。
参照文字列と次の圧縮ブロックの参照文字列の先頭の文字からなる文字列を圧縮辞書の新たなエントリとして追加し、上記の状態遷移を状態遷移記憶部の新たなエントリとして追加する。
実施の形態17を図36を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
状態遷移履歴は、対応する圧縮辞書の文字列による状態遷移機械の、状態遷移の履歴を記憶したものであり、先頭が圧縮辞書の文字列を読む直前の状態、末尾が圧縮辞書の文字列を全て読んだ直後の状態をさす。
受理位置2203は、状態遷移履歴のどこで、状態遷移機械が受理状態に到達したかを表わしている。
この実施の形態の圧縮テキスト検索装置では、1つの状態遷移記憶部のエントリに、0以上の状態遷移履歴2202と受理位置2203の組を記憶する。状態遷移履歴2202と受理位置2203の組をレコードと呼ぶこととする。
この実施の形態の圧縮テキスト検索装置は、上記のように構成することで、状態記憶部の現在の状態と、状態遷移記憶部の圧縮ブロックが参照している状態遷移履歴の先頭の状態とが一致しているか判定する時、複数の状態遷移の履歴を記憶することができるため、状態が一致する確率を高めることができる。よって、より状態遷移の回数を削減することができる確率が高くなり、より検索処理を高速化することができる。
実施の形態18を図37を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
この実施の形態の圧縮テキスト検索装置は、上記のように構成することで、状態記憶部の現在の状態と、状態遷移記憶部の圧縮ブロックが参照している状態遷移履歴の先頭の状態とが一致しているか判定する時、複数の状態遷移の履歴を記憶することができるため、状態が一致する確率を高めることができる。よって、より状態遷移の回数を削減することができる確率が高くなり、より検索処理を高速化することができる。
実施の形態19を図38を用いて説明する。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
この実施の形態の圧縮テキスト検索装置では、状態遷移の先頭の状態と末尾の状態、そして受理位置のみが分ればよい。
この実施の形態の圧縮テキスト検索装置は、上記のように構成することで、状態遷移記憶部が必要とする記憶領域の大きさは、圧縮辞書の文字列の長さには依存せず、圧縮辞書のエントリの数の定数倍で抑えることができる。
この実施の形態における圧縮テキスト検索装置100(文字列検索装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態1で説明したものと同一なので、ここでは説明を省略する。
Claims (16)
- 状態を保持し、文字を入力し、上記保持した状態と上記入力した文字とに基づいて遷移先状態を算出し、上記保持した状態を上記算出した遷移先状態に更新するオートマトンであって、所定の文字列を構成する文字を入力した場合に、保持している状態が所定の状態となるか否かを判別することにより、所定の検索パターンに対応する検索文字列が上記文字列に含まれるか否かを判別できるよう構成したオートマトンを実行することによって、
上記文字列に含まれる部分文字列を上記部分文字列に対応する所定の符号に置換した符号列を取得して、上記文字列から上記検索文字列を検索する文字列検索装置において、
上記オートマトンを実行するオートマトン実行部と、
上記オートマトンが保持した状態を状態履歴として記憶する履歴記憶部と、
上記符号列を構成する符号を取得する符号取得部と、
上記オートマトンが保持している現在の状態と、上記履歴記憶部が記憶した状態履歴と、上記符号取得部が取得した符号とに基づいて、上記符号取得部が取得した符号に対応する部分文字列を構成する1以上の文字のうちいずれかの文字について、上記文字以降の文字を以前に上記オートマトンが入力したことがあり、かつ、上記文字以降の文字を以前に上記オートマトンが入力する前に保持していた状態と、上記オートマトンが保持している現在の状態とが一致するか否かを判断する条件判断部と、
上記条件判断部が一致すると判断した場合に、上記履歴記憶部が記憶した状態履歴に基づいて遷移先状態を算出し、上記オートマトンが保持している現在の状態を、算出した遷移先状態に更新する遷移先算出部と、
上記条件判断部が一致すると判断しなかった場合に、上記符号取得部が取得した符号に対応する部分文字列を取得し、上記部分文字列を構成する文字を上記オートマトンに入力する文字列復元部とを有することを特徴とする文字列検索装置。 - 上記文字列検索装置は、上記オートマトンに入力する文字のビット長とは異なるビット長を有する文字から構成される部分文字列を上記部分文字列に対応する符号で置換した符号列を取得する文字列検索装置であって、更に、
未完文字を記憶する未完文字記憶部を有し、
上記文字列復元部は、
上記復元した部分文字列に、上記ビット長の不一致により上記オートマトンに入力できない文字があるか否かを判断し、あると判断した場合に、上記未完文字として上記未完文字記憶部に記憶させることを特徴とする請求項1に記載の文字列検索装置。 - 上記条件判断部は、
上記符号取得部が取得した符号について、上記符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態及び上記未完文字記憶部が記憶していた未完文字を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較し、上記取得した未完文字と上記未完文字記憶部が現在記憶している未完文字とを比較し、両者ともに一致するか、少なくともいずれかが一致しないかを判断し、
上記遷移先算出部は、
上記条件判断部が両者ともに一致すると判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力した後に上記オートマトンが更新した状態を、上記履歴記憶部が記憶した状態履歴から取得して遷移先状態とし、上記オートマトンが保持している現在の状態を上記遷移先状態に更新し、
上記履歴記憶部は、
上記条件判断部が両者ともに一致すると判断しなかった場合に、上記符号取得部が取得した符号と、上記文字列復元部が復元した部分文字列を構成する文字を上記オートマトンに入力した後に上記オートマトンが更新した状態及び上記未完文字記憶部が記憶した未完文字とを対応づけて状態履歴として記憶することを特徴とする請求項2に記載の文字列検索装置。 - 上記文字列検索装置は、更に、
上記未完文字記憶部が未完文字を記憶している場合に、上記符号取得部が次に取得した符号に対応する部分文字列のうち、上記未完文字と結合して上記オートマトンに入力できる文字となる部分を他の未完文字として復元し、上記未完文字と、上記他の未完文字とを結合した文字を上記オートマトンに入力する未完文字復元部を有することを特徴とする請求項2に記載の文字列検索装置。 - 上記条件判断部は、
上記未完文字記憶部が未完文字を記憶していない場合に、上記符号取得部が次に取得した符号について、上記符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較して一致するか否かを判断し、
上記未完文字記憶部が未完文字を記憶している場合に、上記符号取得部が次に取得した符号について、上記符号に対応する部分文字列を構成する文字のうち上記未完文字復元部が復元した他の未完文字を除く部分を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持した状態とを比較して一致するか否かを判断し、
上記遷移先算出部は、
上記条件判断部が一致すると判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力した後に上記オートマトンが更新した状態を、上記履歴記憶部が記憶した状態履歴から取得して遷移先状態とし、上記オートマトンが記憶した状態を上記遷移先状態に更新し、
上記履歴記憶部は、
上記条件判断部が一致すると判断しなかった場合に、上記符号取得部が取得した符号と、上記文字列復元部が復元した部分文字列を構成する文字を上記オートマトンに入力した後に上記オートマトンが更新した状態及び上記未完文字記憶部が記憶した未完文字とを対応づけて状態履歴として記憶することを特徴とする請求項4に記載の文字列検索装置。 - 上記条件判断部は、
上記未完文字記憶部が未完文字を記憶していない場合に、上記符号取得部が次に取得した符号について、上記符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較して一致するか否かを判断し、
上記未完文字記憶部が未完文字を記憶している場合に、上記符号取得部が次に取得した符号について、上記符号に対応する部分文字列を構成する文字のうち上記未完文字復元部が復元した他の未完文字を除いた部分を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較して一致するか否かを判断し、
上記遷移先算出部は、
上記条件判断部が一致すると判断した場合に、上記履歴記憶部が記憶した状態履歴に基づいて、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力した後に上記オートマトンが更新した状態を取得して遷移先状態とし、上記オートマトンが保持している現在の状態を上記遷移先状態に更新し、
上記履歴記憶部は、
上記条件判断部が一致すると判断しなかった場合に、上記オートマトンが保持している現在の状態及び上記未完文字記憶部が現在記憶している未完文字を状態履歴として記憶し、
上記条件判断部が一致すると判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力したときに上記オートマトンが保持していた状態及び上記未完文字記憶部が記憶していた未完文字を、上記状態履歴から取得して、状態履歴として記憶することを特徴とする請求項4に記載の文字列検索装置。 - 上記条件判断部は、
上記符号取得部が取得した符号について、上記符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態及び上記未完文字記憶部が記憶していた未完文字を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較し、上記取得した未完文字と上記未完文字記憶部が現在記憶している未完文字とを比較し、両者ともに一致するか、少なくともいずれかが一致しないかを判断し、
上記遷移先算出部は、
上記条件判断部が両者ともに一致すると判断した場合に、上記履歴記憶部が記憶した状態履歴に基づいて、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力した後に上記オートマトンが更新した状態を取得して遷移先状態とし、上記オートマトンが保持している現在の状態を上記遷移先状態に更新し、
上記履歴記憶部は、
上記条件判断部が両者ともに一致すると判断しなかった場合に、上記オートマトンが保持している現在の状態及び上記未完文字記憶部が現在記憶している未完文字を状態履歴として記憶し、
上記条件判断部が両者ともに一致すると判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態及び上記未完文字記憶部が記憶していた未完文字を、記憶した状態履歴から取得し、取得した状態及び未完文字を状態履歴として記憶することを特徴とする請求項2に記載の文字列検索装置。 - 上記文字列検索装置は、上記文字列に含まれる部分文字列と上記文字列に含まれる他の部分文字列とが一致する場合に上記部分文字列を上記他の部分文字列へのポインタの情報を含む符号に置換した符号列を取得する文字列検索装置であって、
上記文字列復元部は、
上記符号取得部が取得した符号が上記他の部分文字列へのポインタの情報を含むと判断した場合に、上記他の部分文字列を上記符号に対応する部分文字列として取得し、
上記符号取得部が取得した符号が上記他の部分文字列へのポインタの情報を含まないと判断した場合に、上記符号に対応する文字を上記符号に対応する文字列として復元し、復元した文字列を取得することを特徴とする請求項1乃至請求項7のいずれかに記載の文字列検索装置。 - 上記条件判断部は、
上記符号取得部が取得した符号について、上記符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較して一致するか否かを判断し、
上記遷移先算出部は、
上記条件判断部が一致すると判断した場合に、上記履歴記憶部が記憶した状態履歴に基づいて、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力した後に上記オートマトンが更新した状態を取得して遷移先状態とし、上記オートマトンが保持している現在の状態を上記遷移先状態に更新し、
上記履歴記憶部は、
上記条件判断部が一致すると判断しなかった場合に、上記オートマトンが保持している現在の状態を状態履歴として記憶し、
上記条件判断部が一致すると判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、記憶した状態履歴から取得し、取得した状態を状態履歴として記憶することを特徴とする請求項1乃至請求項8のいずれかに記載の文字列検索装置。 - 上記条件判断部は、上記オートマトンが保持している現在の状態と、上記履歴記憶部が記憶した状態履歴と、上記符号取得部が取得した符号とに基づいて、上記符号取得部が取得した符号に対応する部分文字列を構成する1以上の文字のうち先頭の文字について、上記文字以降の文字を以前に上記オートマトンが入力したことがあり、かつ、上記文字以降の文字を以前に上記オートマトンが入力する前に保持していた状態と、上記オートマトンが保持している現在の状態とが一致するか否かを判断し、
上記文字列復元部は、上記条件判断部が一致すると判断しなかった場合に、上記符号取得部が取得した符号に対応する部分文字列を復元し、復元した部分文字列を取得することを特徴とする請求項1乃至請求項5のいずれかに記載の文字列検索装置。 - 上記文字列検索装置は、更に、
部分文字列と上記部分文字列に対応する符号との対応関係を置換辞書として記憶する辞書記憶部を有し、
上記文字列復元部は、
上記辞書記憶部が記憶した置換辞書に基づいて、上記符号に対応する部分文字列を復元することを特徴とする請求項10に記載の文字列検索装置。 - 上記条件判断部は、
上記符号取得部が取得した符号について、上記符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力する前に上記オートマトンが保持していた状態を、上記履歴記憶部が記憶した状態履歴から取得し、上記取得した状態と上記オートマトンが保持している現在の状態とを比較して一致するか否かを判断し、
上記遷移先算出部は、
上記条件判断部が一致すると判断した場合に、上記符号取得部が取得した符号に対応する部分文字列を構成する文字を以前に上記オートマトンに入力した後に上記オートマトンが更新した状態を、上記履歴記憶部が記憶した状態履歴から取得して遷移先状態とし、上記オートマトンが保持している現在の状態を上記遷移先状態に更新し、
上記履歴記憶部は、
上記条件判断部が一致すると判断しなかった場合に、上記符号取得部が取得した符号と、上記文字列復元部が復元した部分文字列を構成する文字を上記オートマトンに入力した後に上記オートマトンが更新した状態とを対応づけて状態履歴として記憶することを特徴とする請求項1乃至請求項5及び請求項10及び請求項11のいずれかに記載の文字列検索装置。 - 上記オートマトン実行部は、
上記遷移先状態を一意に算出することができるオートマトンを実行することを特徴とする請求項1乃至請求項12のいずれかに記載の文字列検索装置。 - 上記オートマトン実行部は、
文字の連結及び選択及び繰り返しのうち少なくともいずれかを表現した検索パターンに対応する検索文字列を検索できるよう構成したオートマトンを実行することを特徴とする請求項1乃至請求項13のいずれかに記載の文字列検索装置。 - コンピュータが実行することにより、上記コンピュータが請求項1乃至請求項14のいずれかに記載の文字列検索装置として機能することを特徴とするコンピュータプログラム。
- 状態を保持し、文字を入力し、上記保持した状態と上記入力した文字とに基づいて遷移先状態を算出し、上記保持した状態を上記算出した遷移先状態に更新するオートマトンであって、所定の文字列を構成する文字を入力した場合に、保持している状態が所定の状態となるか否かを判別することにより、所定の検索パターンに対応する検索文字列が上記文字列に含まれるか否かを判別できるよう構成したオートマトンを実行することによって、
オートマトン実行部と履歴記憶部と符号取得部と条件判断部と遷移先算出部と文字列復元部とを有する文字列検索装置が、上記文字列に含まれる部分文字列を上記部分文字列に対応する所定の符号に置換した符号列を取得して、上記文字列から上記検索文字列を検索する文字列検索方法において、
上記オートマトン実行部が、上記オートマトンを実行し、
上記履歴記憶部が、上記オートマトンが保持した状態を状態履歴として記憶し、
上記符号取得部が、上記符号列を構成する符号を取得し、
上記条件判断部が、上記オートマトンが保持している現在の状態と、上記履歴記憶部が記憶した状態履歴と、上記符号取得部が取得した符号とに基づいて、上記符号取得部が取得した符号に対応する部分文字列を構成する1以上の文字のうちいずれかの文字について、上記文字以降の文字を以前に上記オートマトンが入力したことがあり、かつ、上記文字以降の文字を以前に上記オートマトンが入力する前に保持していた状態と、上記オートマトンが保持している現在の状態とが一致するか否かを判断し、
上記遷移先算出部が、上記条件判断部が一致すると判断した場合に、上記履歴記憶部が記憶した状態履歴に基づいて遷移先状態を算出し、上記オートマトンが保持している現在の状態を、算出した遷移先状態に更新し、
上記文字列復元部が、上記条件判断部が一致すると判断しなかった場合に、上記符号取得部が取得した符号に対応する部分文字列を取得し、上記部分文字列を構成する文字を上記オートマトンに入力することを特徴とする文字列検索方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005124860A JP4726046B2 (ja) | 2005-04-22 | 2005-04-22 | 文字列検索装置及びコンピュータプログラム及び文字列検索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005124860A JP4726046B2 (ja) | 2005-04-22 | 2005-04-22 | 文字列検索装置及びコンピュータプログラム及び文字列検索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006302082A JP2006302082A (ja) | 2006-11-02 |
JP4726046B2 true JP4726046B2 (ja) | 2011-07-20 |
Family
ID=37470276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005124860A Active JP4726046B2 (ja) | 2005-04-22 | 2005-04-22 | 文字列検索装置及びコンピュータプログラム及び文字列検索方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4726046B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101382787B1 (ko) * | 2013-03-21 | 2014-04-08 | 경기대학교 산학협력단 | 메모리 효율적인 결정적 유한 오토마타 구현을 위한 상태 감소 방법 |
US9337862B2 (en) * | 2014-06-09 | 2016-05-10 | Tidal Systems, Inc. | VLSI efficient Huffman encoding apparatus and method |
JP7383273B2 (ja) * | 2018-10-02 | 2023-11-20 | 大学共同利用機関法人情報・システム研究機構 | 情報処理装置、情報処理回路、情報処理システム及び情報処理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000090091A (ja) * | 1998-09-08 | 2000-03-31 | Fuji Xerox Co Ltd | データ処理装置、文書処理装置、データ処理プログラムを記録したコンピュータ読み取り可能な記録媒体及び文書処理プログラムを記録したコンピュータ読み取り可能な記録媒体 |
JP2003242179A (ja) * | 2002-02-05 | 2003-08-29 | Internatl Business Mach Corp <Ibm> | 文字列照合方法、これを用いた文書処理装置及びプログラム |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3455981B2 (ja) * | 1992-12-07 | 2003-10-14 | 株式会社日立製作所 | 文字コード変換方法および装置 |
JPH10260980A (ja) * | 1997-03-19 | 1998-09-29 | Hitachi Ltd | 圧縮検索方式 |
-
2005
- 2005-04-22 JP JP2005124860A patent/JP4726046B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000090091A (ja) * | 1998-09-08 | 2000-03-31 | Fuji Xerox Co Ltd | データ処理装置、文書処理装置、データ処理プログラムを記録したコンピュータ読み取り可能な記録媒体及び文書処理プログラムを記録したコンピュータ読み取り可能な記録媒体 |
JP2003242179A (ja) * | 2002-02-05 | 2003-08-29 | Internatl Business Mach Corp <Ibm> | 文字列照合方法、これを用いた文書処理装置及びプログラム |
Also Published As
Publication number | Publication date |
---|---|
JP2006302082A (ja) | 2006-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3273119B2 (ja) | データ圧縮・伸長装置 | |
JP3234104B2 (ja) | 圧縮データをサーチする方法及びシステム | |
EP0490964B1 (en) | Improved data compression apparatus | |
EP0293161B1 (en) | Character processing system with spelling check function | |
AU702207B2 (en) | Method of and apparatus for compressing and decompressing data and data processing apparatus and network system using the same | |
JP2502469B2 (ja) | 文字デ―タを圧縮し圧縮済みデ―タを展開するための静的辞書構造を提供する方法および手段 | |
JP3278297B2 (ja) | データ圧縮方法及びデータ復元方法並びにデータ圧縮装置及びデータ復元装置 | |
US7880648B2 (en) | Information processing apparatus, information processing method, and computer product | |
KR100490240B1 (ko) | 데이타압축장치,데이타복원장치,데이타압축방법,데이타복원방법및프로그램기록매체 | |
US20160321282A1 (en) | Extracting method, information processing method, computer product, extracting apparatus, and information processing apparatus | |
US6982661B2 (en) | Method of performing huffman decoding | |
JP4003854B2 (ja) | データ圧縮装置及び復元装置並びにその方法 | |
JP2531508B2 (ja) | デ―タ列圧縮の方法 | |
JPH07226846A (ja) | 入力データストリームの処理方法及び圧縮フォーマットの生成方法 | |
JPS6356726B2 (ja) | ||
JP4726046B2 (ja) | 文字列検索装置及びコンピュータプログラム及び文字列検索方法 | |
JPH10261969A (ja) | データ圧縮方法および装置 | |
JP2536422B2 (ja) | デ―タ圧縮装置及びデ―タ復元装置 | |
JPH0936747A (ja) | データ圧縮方法及びデータ圧縮装置 | |
JP3350118B2 (ja) | データ符号化方式及びデータ復元方式 | |
JP5807592B2 (ja) | 符号化方法、符号化装置及びコンピュータプログラム | |
JP3241787B2 (ja) | データ圧縮方式 | |
JP2590287B2 (ja) | データ圧縮方法およびデータ圧縮装置 | |
JPH05152971A (ja) | データ圧縮・復元方法 | |
JP3761451B2 (ja) | 記号列を格納するデータ構造、記号列検索装置、記号列検索方法、プログラム、ならびに、情報記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080214 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100414 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100427 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100602 |
|
RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20100818 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20100818 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100928 |
|
AA92 | Notification that decision to refuse application was cancelled |
Free format text: JAPANESE INTERMEDIATE CODE: A971092 Effective date: 20101012 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101026 |
|
RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20101112 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20101112 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20101207 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110301 |
|
AA92 | Notification that decision to refuse application was cancelled |
Free format text: JAPANESE INTERMEDIATE CODE: A971092 Effective date: 20110315 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110405 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110407 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4726046 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140422 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |