(57)【要約】【課題】圧縮データから検索条件に対応したデータを、圧縮したままで正確に抽出すること。【解決手段】圧縮処理部１０ａが、文書データを圧縮する場合に、文書データに含まれる文字列と、文書データに含まれる区切り文字とを区別して符号に変換することで文書データを圧縮する。圧縮された文書データは、文字列と区切文字を区別して圧縮されているので、検索処理部１０ｃは、検索式に基づいて、圧縮データをそのまま切出しても、正確な検索結果を得ることが出来る。【選択図】図１
2010287052.tif 000002
【特許請求の範囲】
【請求項１】
圧縮されたデータの集合を対象に検索処理を実行する検索システムであって、
データの属性を示す区切情報により各データが区切られたデータ集合を取得し、当該データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することで前記データ集合を圧縮する圧縮処理部
を有することを特徴とする検索システム。
【請求項２】
請求項１記載の検索システムであって、
前記圧縮処理部により圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、前記圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、前記検索条件の属性を符号化データに置換する置換処理部と、
前記検索条件の属性を符号化データに置換された検索条件と前記圧縮されたデータ集合を基にして、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力する検索処理部と
を有することを特徴とする検索システム。
【請求項３】
請求項２記載の検索システムであって、
前記検索処理部は、前記圧縮されたデータ集合を先頭から読み出して、前記検索条件の属性に対応する位置の区切情報に囲まれたデータに対応する符号化データを抽出し、抽出した符号化データに対応するデータが前記検索条件のデータを有するか否かを判定し、判定結果に基づいて、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定することを特徴とする検索システム。
【請求項４】
コンピュータに、
データの属性を示す区切情報により各データが区切られた階層構造を有するデータ集合を取得し、当該データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することで前記データ集合を圧縮する圧縮処理機能
を実現させるためのプログラムを記録した記憶媒体。
【請求項５】
請求項４記載の記憶媒体であって、
前記圧縮処理機能により圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、前記圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、前記検索条件の属性を符号化データに置換する置換処理機能と、
前記検索条件の属性を符号化データに置換された検索条件と前記圧縮されたデータ集合を基にして、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力する検索処理機能と
を実現させるためのプログラムを記録した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索システム等に関する。
【背景技術】
【０００２】
近年、圧縮されたデータから、検索対象のレコードや項目を、圧縮されたままの状態で抽出する技術が考案されている。このように、圧縮されたままの状態でレコードや項目を抽出する技術を圧縮データ抽出と表記する。また、圧縮されたデータを圧縮データ、圧縮される前のデータを元データと表記する。
【０００３】
圧縮データ抽出を利用すれば、圧縮データを解凍する必要がないので、データ領域を節約できる。また、特定の圧縮方式を用いることで、ＡＣマシン（Aho-Corasick  machines）等のスキャン系のアルゴリズムは、元データを検索するよりも圧縮データを検索するほうが高速に検索を行うことができる。
【０００４】
図４９は、従来の圧縮データ抽出の基本アイデアを説明するための図である。前提条件として、図４９の元データ１０ａは、ＢＰＥ（Byte  Pair  Encoding）圧縮技術により、圧縮データ１０ｂに圧縮されているものとする。従来の圧縮データ抽出では、抽出条件が指定された場合に、抽出条件に対応するキーワードの出現位置を特定する。そして、圧縮データ抽出では、キーワードの出現位置に含まれるレコード・項目・要素等を、圧縮データからそのまま切出して出力する。
【０００５】
例えば、抽出条件「ENTRY/DDB/update-data[./=19990205]」が指定されたとする。かかる抽出条件の意味は、「19990205」を含むupdate-data要素を抽出せよという意味である。従来の圧縮データ抽出では、既存の圧縮検索技術を用いて、抽出条件に対応するキーワードの出現位置を特定すると、キーワードの出現位置は、圧縮データ１０ｂの「<up・宛・0205益p・飲」となる。そして、従来の圧縮データ検出では、検索結果として、「<up・宛・0205益p・飲」をそのまま出力する。なお、検索処理の過程において、元データ１０ａに対するアクセスは一切発生しない。
【０００６】
ところで、データを圧縮する技術として、テキストデータを圧縮する途中で任意の位置に区切り記号を挿入する技術が公開されている。任意の位置に区切り記号を挿入することで、解凍時に、文字列全体を解凍することなく、区切り記号で挟まれた部分文字列のみを解凍することで、処理負荷を軽減することが出来る。
【０００７】
また、画像圧縮法に関する技術ではあるが、画像を所定の領域毎に分割し、分割した画像の領域部分と、分割した画像の境界部分を独立して圧縮する技術も知られている。領域部分と境界部分を独立して圧縮することで、画像を全て解凍することなく、所望する領域の画像データを抽出することが可能となる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−２２５５２号公報
【特許文献２】特開２００８−１１３２６７号公報
【非特許文献】
【０００９】
【非特許文献１】T.Kida,T.Matsumoto,M.Takeda,A.Shinohara,and  S.Arikawa.Multiple  pattern  matching  algorithms  on  collage  system,In  Proc.12th  Annual  Symposium  on  Combinatorial  Pattern  Matching(CPM2001)
【非特許文献２】M.Takeda,S.Miyamoto,T.Kida,A.Shinohara,S.Fukamachi,T.Shinohara,and  S.Arikawa.Processing  Text  Files  as  Is:Pattern  Matching  over  Compressed  Texts,Multi-Byte  Character  Texts,and  Semi-Structured  Texts.In  Proc.9th  International  Symposium  on  String  Processing  and  Information  Retrieval(SPIRE2002)
【発明の概要】
【発明が解決しようとする課題】
【００１０】
元データをそのまま圧縮データに圧縮すると、レコード・項目・要素とＸＭＬ（Extensible  Markup  Language）タグなどの区切り文字をまとめて別の符号に置き換えてしまう場合がある。このようにデータの区切り文字を意識しないで圧縮した場合には、抽出条件に対応したデータを圧縮データのまま抽出することができないという問題があった。
【００１１】
例えば、図４９の圧縮データ１０ｂにおいて、「飲」に対応する圧縮前のデータを「><」とすると、抽出条件「ENTRY/DDB/update-data[./=19990205]」が指定された場合に、検索結果「<up・宛・0205益p・飲」が検索結果として出力される。かかる検索結果を解凍すると、「<update-date>19990202</update-date><」となり、正しい検索結果にはならない。
【００１２】
抽出条件「ENTRY/DDB/update-data[./=19990205]」が指定された場合の、解凍後の正しい検索結果は、「<update-date>19990202</update-date>」である。正しくない検索結果を、ＸＭＬデータ処理系に入力するとエラーになってしまう。
【００１３】
検索結果「<up・宛・0205益p・飲」を解凍し、正しい検索結果「<update-date>19990202</update-date>」となるように、検索結果を修正すれば、正しい検索結果を得ることが出来るが、余計な計算コストが必要になってしまう。
【００１４】
ここで、従来技術を利用して、データを圧縮する場合に、区切り記号を挿入すれば、レコード・項目・要素と区切り文字を区別できるので、抽出条件に対応したデータを圧縮データのまま抽出することが可能となる。しかし、その一方で、区切り文字毎に区切り記号を挿入すると、圧縮データのデータ量が増大してしまうため、実用的ではない。
【００１５】
また、データを圧縮する場合に、境界部分を独立して圧縮すれば、レコード・項目・要素と区切り文字を区別できるので、データ量を増大させることなく、抽出条件に対応したデータを圧縮データのまま抽出することが可能となる。しかし、境界部分を独立して圧縮する技術は、境界部分とその他の領域が固定されている場合にのみ適応可能であるため、レコード・項目・要素と区切り文字が無作為に含まれている元データに対してかかる圧縮技術を適用することは難しい。
【００１６】
圧縮データから検索条件に対応したデータを、圧縮したままで正確に抽出することができる検索システムおよび記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【００１７】
この装置によれば、圧縮されたデータの集合を対象に検索処理を実行する検索システムであって、データの属性を示す区切情報により各データが区切られたデータ集合を取得し、当該データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することで前記データ集合を圧縮する圧縮処理部と、前記圧縮処理部により圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、前記圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、前記検索条件の属性を符号化データに置換する置換処理部と、前記検索条件の属性を符号化データに置換された検索条件と前記圧縮されたデータ集合を基にして、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力する検索処理部とを有することを要件とする。
【発明の効果】
【００１８】
本発明によれば、圧縮データから検索条件に対応したデータを、圧縮したままで正確に抽出することができる。
【図面の簡単な説明】
【００１９】
【図１】図１は、本実施例１にかかる検索システムの構成を示す図である。
【図２】図２は、本実施例２にかかる検索装置の構成を示す図である。
【図３】図３は、ＸＭＬデータのデータ構造の一例を示す図である。
【図４】図４は、符号化データのデータ構造の一例を示す図である。
【図５】図５は、対応表のデータ構造の一例を示す図である。
【図６】図６は、ＡＣマシンのデータ構造の一例を示す図である。
【図７】図７は、状態構造体のデータ構造の一例を示す図である。
【図８】図８は、圧縮辞書データのデータ構造の一例を示す図である。
【図９】図９は、圧縮データ用ＡＣマシンのデータ構造の一例を示す図である。
【図１０】図１０は、文字列圧縮の動作例を示す図である。
【図１１】図１１は、文字列圧縮済みデータのデータ構造の一例を示す図である。
【図１２】図１２は、トライＴ構築処理を説明するための図（１）である。
【図１３】図１３は、トライＴ構築処理を説明するための図（２）である。
【図１４】図１４は、トライＴ構築処理を説明するための図（３）である。
【図１５】図１５は、フェイラ遷移追加処理を説明するための図（１）である。
【図１６】図１６は、フェイラ遷移追加処理を説明するための図（２）である。
【図１７】図１７は、フェイラ遷移追加処理を説明するための図（３）である。
【図１８】図１８は、フェイラ遷移追加処理を説明するための図（４）である。
【図１９】図１９は、フェイラ遷移追加処理を説明するための図（５）である。
【図２０】図２０は、フェイラ遷移追加処理を説明するための図（６）である。
【図２１】図２１は、フェイラ遷移追加処理を説明するための図（７）である。
【図２２】図２２は、フェイラ遷移追加処理を説明するための図（８）である。
【図２３】図２３は、フェイラ遷移追加処理を説明するための図（９）である。
【図２４】図２４は、圧縮データ用ＡＣマシン構築処理を説明するための図（１）である。
【図２５】図２５は、圧縮データ用ＡＣマシン構築処理を説明するための図（２）である。
【図２６】図２６は、圧縮データ用ＡＣマシン構築処理を説明するための図（３）である。
【図２７】図２７は、照合処理を説明するための図（１）である。
【図２８】図２８は、照合処理を説明するための図（２）である。
【図２９】図２９は、照合処理を説明するための図（３）である。
【図３０】図３０は、照合処理を説明するための図（４）である。
【図３１】図３１は、照合処理を説明するための図（５）である。
【図３２】図３２は、照合処理を説明するための図（６）である。
【図３３】図３３は、圧縮処理の処理手順を示すフローチャートである。
【図３４】図３４は、文字列計数処理の処理手順を示すフローチャートである。
【図３５】図３５は、辞書構築・文字列置換処理の処理手順を示すフローチャートである。
【図３６】図３６は、タグ名置換処理の処理手順を示すフローチャートである。
【図３７】図３７は、構築処理の処理手順を示すフローチャートである。
【図３８】図３８は、抽出条件受け付け処理の処理手順を示すフローチャートである。
【図３９】図３９は、ＡＣマシン構築処理の処理手順を示すフローチャートである。
【図４０】図４０は、ΠのトライＴを構築する処理の処理手順を示すフローチャートである。
【図４１】図４１は、パターン登録処理の処理手順を示すフローチャートである。
【図４２】図４２は、トライ（Π）にフェイラ遷移を追加する処理の処理手順を示すフローチャート（１）である。
【図４３】図４３は、トライ（Π）にフェイラ遷移を追加する処理の処理手順を示すフローチャート（２）である。
【図４４】図４４は、ＡＣマシンＡＣ（Π）にスキップ遷移を追加する処理の処理手順を示すフローチャートである。
【図４５】図４５は、第１のスキップ遷移作成処理の処理手順を示すフローチャートである。
【図４６】図４６は、第２のスキップ遷移作成処理の処理手順を示すフローチャートである。
【図４７】図４７は、切出し位置計算処理の処理手順を示すフローチャートである。
【図４８】図４８は、実施例にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
【図４９】図４９は、従来の圧縮データ抽出の基本アイデアを説明するための図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示する検索システムおよび記憶媒体の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００２１】
図１は、本実施例１にかかる検索システムの構成を示す図である。図１に示すように、この検索装置１０は、圧縮処理部１０ａ、置換処理部１０ｂ、検索処理部１０ｃを有する。このうち、圧縮処理部１０ａは、データの属性を示す区切情報により各データが区切られたデータ集合を取得し、当該データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することでデータ集合を圧縮する処理部である。
【００２２】
置換処理部１０ｂは、圧縮処理部１０ａにより圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、検索条件の属性を符号化データに置換する処理部である。
【００２３】
検索処理部１０ｃは、検索条件の属性を符号化データに置換された検索条件と圧縮されたデータ集合を基にして、検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力する。
【００２４】
上述した検索システム１０によれば、圧縮処理部１０ａが、データ集合を圧縮する場合に、データ集合に含まれる区切情報に基づきデータ集合を圧縮する。圧縮されたデータ集合は、区切情報に基づき圧縮されているので、検索処理部１０ｃは、検索条件に基づいて、圧縮データをそのまま切出しても、正確な検索結果を得ることが出来る。
【実施例２】
【００２５】
図２は、本実施例２にかかる検索装置の構成を示す図である。図２に示すように、この検索装置１００は、入力部１１０、出力部１２０、通信制御ＩＦ部１３０、入出力制御ＩＦ部１４０、記憶部１５０、制御部１６０を有する。なお、検索装置１００は、ネットワークを介して端末装置（図示略）に接続する。
【００２６】
入力部１１０は、各種の情報を入力する入力部であり、キーボードやマウス、マイクなどを含む。また、後述するモニタ（出力部１２０）も、マウスと協働してポインティングデバイス機能を実現する。
【００２７】
出力部１２０は、各種の情報を出力する出力部であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカ等を含む。通信制御ＩＦ部１３０は、端末装置（図示略）との間における通信を制御する処理部である。入出力制御ＩＦ部１４０は、入力部１１０、出力部１２０、通信制御ＩＦ部１３０、記憶部１５０、制御部１６０によるデータの入出力を制御する手段である。
【００２８】
記憶部１５０は、制御部１６０による各種処理に必要なデータおよびプログラムを記憶する記憶部である。この記憶部１５０は、ＸＭＬデータ１５０ａ、符号化データ１５０ｂ、対応表１５０ｃ、ＡＣマシン１５０ｄ、圧縮辞書１５０ｅ、圧縮データ用ＡＣマシン１５０ｆ、抽出条件１５０ｇ、変換後抽出条件１５０ｈを有する。
【００２９】
ＸＭＬデータ１５０ａは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである。図３は、ＸＭＬデータのデータ構造の一例を示す図である。符号化データ１５０ｂは、圧縮されたＸＭＬデータである。図４は、符号化データ１５０ｂのデータ構造の一例を示す図である。
【００３０】
対応表１５０ｃは、ＸＭＬデータ１５０ａのタグ名と、このタグ名に対応する符号を対応付けたテーブルである。図５は、対応表１５０ｃのデータ構造の一例を示す図である。
【００３１】
ＡＣマシン１５０ｄは、有限個の状態と遷移の組合せを含むデータである。かかるＡＣマシン１５０ｄに、テキストデータ（文字列）を入力することで、テキストデータに特定のキーワードが含まれているか否かを照合することが出来る。図６は、ＡＣマシン１５０ｄのデータ構造の一例を示す図である。このＡＣマシン１５０ｄは、テキストデータに、キーワードＡＣ、ＢＡ、ＢＢ、ＢＡＡ、ＢＡＣＤが含まれているか否かを照合するＡＣマシンを示している。
【００３２】
図６に示すように、ＡＣマシン１５０ｄは状態０〜８を有している。各状態は、初期状態、通常状態、照合状態に分類される。初期状態は、初めにテキストデータと照合される状態である。通常状態は、２番目以降にテキストデータと照合される状態である。照合状態は、テキストデータが特定のキーワードにヒットした場合に遷移する状態である。図６に示す例では、初期状態を状態１とし、通常状態を状態１，３とし、照合状態を状態２，４〜８とする。
【００３３】
ＡＣマシンは、テキストデータの文字を初期状態０から順次照合し、通常遷移とフェイラ（Failure）遷移を繰り返すことで、テキストデータに含まれるキーワードを判定する。ここで、通常遷移は、照合対象となる状態において、テキストデータの比較対象となる文字による遷移先が存在する場合の遷移を示す。例えば、状態１において、テキストデータの比較対象となる文字がＣの場合には、通常遷移となる。テキストデータの文字がＣの場合には、状態１から状態２に通常遷移する。
【００３４】
一方、通常遷移の条件に該当しない場合には、フェイラ遷移となる。例えば、状態１において、テキストデータの比較対象となる文字がＣ以外の場合には、フェイラ遷移となる。状態１においてフェイラ遷移した場合には、状態０となる。ＡＣマシンには、各状態に１本ずつ存在する。図６で省略されているフェイラ遷移は、全て初期状態０に向かっているものとする。
【００３５】
ここで、図６に示したＡＣマシンが有する状態（状態構造体）のデータ構造について説明する。図７は、状態構造体のデータ構造の一例を示す図である。図７に示すように、この状態構造体は、各状態を識別する状態ＩＤと、パターンリストと、通常遷移先へのポインタと、通常遷移先へのポインタと、フェイラ遷移先へのポインタを有する。
【００３６】
このうち、パターンリストは、初期状態０から遷移先の状態までの文字列を格納する。そして、パターンリストは、該当する通常遷移先へのポインタに対応付けられている。例えば、状態１の状態構造体において、状態１から状態２に遷移する通常遷移先のポインタがg[１]に格納されている場合には、plist[１]に初期状態０から状態２までの文字列「ＡＣ」が格納される。
【００３７】
圧縮辞書データ１５０ｅは、文字の組と、この文字の組に対応付けられた符号を対応付けたテーブルである。図８は、圧縮辞書データ１５０ｅのデータ構造の一例を示す図である。例えば、図８に示すように、文字Ｂ，Ａのペアは、符号Ｘに対応する。かかる圧縮辞書データ１５０ｅは、ＡＣマシン１５０ｄから圧縮データ用ＡＣマシン１５０ｆを生成する場合に利用する。
【００３８】
圧縮データ用ＡＣマシン１５０ｆは、圧縮されたデータに特定のキーワードが含まれるか否かを照合するべく、ＡＣマシン１５０ｄにスキップ遷移を加えたＡＣマシンである。図９は、圧縮データ用ＡＣマシン１５０ｆのデータ構造の一例を示す図である。
【００３９】
ここで、スキップ遷移は、状態をスキップする通常遷移である。例えば、照合対象となる状態を状態０とし、圧縮データの比較対象となる文字がＸの場合には、状態３をスキップして、状態４に遷移する。
【００４０】
抽出条件１５０ｇは、ＸＭＬデータ１５０ａから抽出するデータの条件である。例えば、抽出条件１５０ｇは、「/AAA/BBB="BACD"」となる。ここで、「/AAA/BBB」は、検索位置を指定する項目名である。検索条件「/AAA/BBB="BACD"」は、区切文字「AAA」の下位の階層に存在する区切文字「BBB」に挟まれた文字列のうち、文字列「BACD」を含む文字列を検索する検索条件である。
【００４１】
変換後抽出条件１５０ｈは、対応表１５０ｃに基づいて、タグ名を変換された抽出条件である。例えば、変換後抽出条件１５０ｈは、「/1/2="BACD"」となる。かかる変換後抽出条件１５０ｈに含まれるキーワードに基づいて、ＡＣマシン１５０ｄが生成される。
【００４２】
制御部１６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御部である。図２に示すように、制御部１６０は、データ管理部１６０ａ、データ圧縮処理部１６０ｂ、ＡＣマシン構築部１６０ｃ、照合処理部１６０ｄ、切出処理部１６０ｅを有する。
【００４３】
データ管理部１６０ａは、入力部１１０、通信制御ＩＦ部１３０からＸＭＬデータ、抽出条件を取得した場合に、取得したＸＭＬデータ、抽出条件を記憶部１５０に格納する処理部である。
【００４４】
データ圧縮処理部１６０ｂは、ＸＭＬデータ１５０ａを圧縮して符号化データ１５０ｂを生成する処理、および、抽出条件１５０ｇを変換して変換後抽出条件１５０ｈを生成する処理を実行する処理部である。
【００４５】
まず、ＸＭＬデータ１５０ａを圧縮して、符号化データ１５０ｂを生成する処理について説明する。この符号化データ１５０ｂを生成する処理は、ＸＭＬデータ１５０ａのタグに挟まれた文字列を圧縮する処理と、タグ名を置換する処理を有する。
【００４６】
文字列を圧縮する処理において、データ圧縮処理部１６０ｂは文字列を参照し、隣接する長さ２の文字列を特定する。以下の説明において、隣接する長さ２の文字列を文字ペアと表記する。データ圧縮処理部１６０ｂは、文字列に含まれる文字ペアの出現数を計数し、出現数が最大となる文字ペアを、未使用文字（符号）に割当てることで、文字列を圧縮する。データ圧縮処理部１６０ｂは、文字列に含まれる文字ペアの出現数が計数閾値未満となるまで、上記処理を繰り返し実行する。
【００４７】
図１０は、文字列圧縮の動作例を示す図である。図１０の説明において、圧縮対象となる文字列を「ＡＢＡＢＡＣＢＡＣＤ」とする。また、計数閾値αを２とし、文字セットを「Ａ，Ｂ，Ｃ，Ｄ，Ｘ，Ｙ，Ｚ」とする。データ圧縮処理部１６０ｂは、文字列「ＡＢＡＢＡＣＢＡＣＤ」を参照し、文字ペアを特定する。文字列「ＡＢＡＢＡＣＢＡＣＤ」に含まれる文字ペアは、「Ａ，Ｂ」、「Ｂ，Ａ」、「Ａ，Ｃ」、「Ｃ，Ｂ」、「Ｃ，Ｄ」となる。
【００４８】
データ圧縮処理部１６０ｂは、文字列と各文字ペアを比較して、各文字ペアの出現数を計数し、計数表に登録する。計数表は、データ圧縮処理部１６０ｂが保持しているものとする。文字ペア「Ａ，Ｂ」の出現数は２、文字ペア「Ｂ，Ａ」の出現数は３、文字ペア「Ａ，Ｃ」の出現数は２、文字ペア「Ｃ，Ｂ」の出現数は１、文字ペア「Ｃ，Ｄ」の出現数は１となる。ステップＳ１参照。
【００４９】
続いて、データ圧縮処理部１６０ｂは、計数表に登録した各文字ペアのうち、出現数が最大となる文字ペアを特定し、特定した文字ペアに未使用文字を割当てる。文字ペアと未使用文字の関係は、圧縮辞書データ１５０ｅに登録する。
【００５０】
ステップＳ１で作成した計数表を参照すると、文字ペア「Ｂ，Ａ」の出現数が最大となるので、データ圧縮処理部１６０ｂは、文字ペア「Ｂ，Ａ」に未使用文字「Ｘ」を割当てる。文字ペア「Ｂ，Ａ」に未使用文字「Ｘ」を割当てることで、文字列「ＡＢＡＢＡＣＢＡＣＤ」は、文字列「ＡＸＸＣＸＣＤ」となる。データ圧縮処理部１６０ｂは、文字ペア「Ｂ，Ａ」と未使用文字（符号）「Ｘ」の関係を圧縮辞書データ１５０ｅに登録する。
【００５１】
データ圧縮処理部１６０ｂは、文字列「ＡＸＸＣＸＣＤ」を参照し、文字ペアを特定する。文字列「ＡＸＸＣＸＣＤ」に含まれる文字ペアは、「Ａ，Ｘ」、「Ｘ，Ｘ」、「Ｘ，Ｃ」、「Ｃ，Ｘ」、「Ｃ，Ｄ」となる。
【００５２】
データ圧縮処理部１６０ｂは、文字列と各文字ペアを比較して、各文字ペアの出現数を計数し、計数表に登録する。文字ペア「Ａ，Ｘ」の出現数は１、文字ペア「Ｘ，Ｘ」の出現数は１、文字ペア「Ｘ，Ｃ」の出現数は２、文字ペア「Ｃ，Ｘ」の出現数は１、文字ペア「Ｃ，Ｄ」の出現数は１となる。ステップＳ２参照。
【００５３】
ステップＳ２で作成した計数表を参照すると、文字ペア「Ｘ，Ｃ」の出現数が最大となるので、データ圧縮処理部１６０ｂは、文字ペア「Ｘ，Ｃ」に未使用文字「Ｙ」を割当てる。文字ペア「Ｘ，Ｃ」に未使用文字を割当てることで、文字列「ＡＸＸＣＸＣＤ」は、文字列「ＡＸＹＹＤ」となる。データ圧縮処理部１６０ｂは、文字ペア「Ｘ，Ｃ」と未使用文字（符号）「Ｙ」の関係を圧縮辞書データ１５０ｅに登録する。
【００５４】
データ圧縮処理部１６０ｂは、文字列「ＡＸＹＹＤ」を参照し、文字ペアを特定する。文字列「ＡＸＹＹＤ」に含まれる文字ペアは、「Ａ，Ｘ」、「Ｘ，Ｙ」、「Ｙ，Ｙ」、「Ｙ，Ｄ」となる。
【００５５】
データ圧縮処理部１６０ｂは、文字列と各文字ペアを比較して、各文字ペアの出現数を計数し、計数表に登録する。文字ペア「Ａ，Ｘ」の出現数は１、「Ｘ，Ｙ」の出現数は１、「Ｙ，Ｙ」の出現数は１、「Ｙ，Ｄ」の出現数は１となる。ステップＳ３参照。
【００５６】
データ圧縮処理部１６０ｂは、各文字ペアの出現数が計数閾値α未満となった場合、あるいは、文字セットに未使用文字が存在しない場合に、文字列の圧縮を終了する。データ圧縮処理部１６０ｂは、文字列の圧縮が終了した場合に、圧縮後の文字列と圧縮辞書データ１５０ｅを出力する。ステップＳ４参照。
【００５７】
データ圧縮処理部１６０ｂは、ＸＭＬデータ１５０ａに含まれる全ての文字列に対して、上述した圧縮処理を実行する。以下の説明において、文字列を圧縮したＸＭＬデータを文字列圧縮済みデータと表記する。図１１は、文字列圧縮済みデータのデータ構造の一例を示す図である。図３のＸＭＬデータ１５０ａと、図１１の文字列圧縮済みデータを比較すると、文字列「ＡＢＡＢＡＣＢＡＣＤ」が文字列「ＡＸＹＹＤ」に圧縮されている。
【００５８】
続いて、タグ名を置換する処理について説明する。データ圧縮処理部１６０ｂは、文字列圧縮済みデータをスキャンし、文字列圧縮済みデータに出現する全てのタグ名を対応表１５０ｃに登録する。データ圧縮処理部１６０ｂは、対応表１５０ｃに登録されたタグ名に対して、それぞれ固有の符号を割当てる。そして、データ圧縮処理部１６０ｂは、文字列圧縮済みデータと対応表１５０ｃとを比較して、文字列圧縮済みデータのタグ名を、該当する符号に置換することで、符号化データ１５０ｂを生成する。
【００５９】
例えば、文字列圧縮済みデータを、図１１に示す文字列圧縮済みデータとし、対応表１５０ｃを、図５に示す対応表とする。この場合、データ圧縮処理部１６０ｂは、文字列圧縮済みデータ中のタグ名「AAA」、「BBB」、「CCC」はそれぞれ符号「1」、「2」、「3」に置換し、図４に示す符号化データを生成する。
【００６０】
続いて、抽出条件１５０ｇを変換して変換後抽出条件１５０ｈを生成する処理について説明する。データ圧縮処理部１６０ｂは、抽出条件１５０ｇと対応表１５０ｃを比較して、抽出条件１５０ｇに含まれるタグ名を、符号に置換することで、変換後抽出条件１５０ｈを生成する。
【００６１】
例えば、対応表１５０ｃを、図５に示す対応表とし、抽出条件１５０ｃを「/AAA/BBB="BACD"」とする。この場合、データ圧縮処理部１６０ｂは、抽出条件１５０ｃのタグ名「AAA」、「BBB」をそれぞれ「1」、「2」に置換し、変換後抽出条件１５０ｈ「/1/2="BACD"」を生成する。
【００６２】
次に、図２に示したＡＣマシン構築部１６０ｃについて説明する。ＡＣマシン構築部１６０ｃは、変換後抽出条件１５０ｈに含まれるキーワードに基づいて、当該キーワードを照合するＡＣマシン１５０ｄを生成する。そして、ＡＣマシン構築部１６０ｃは、圧縮辞書データ１５０ｅに基づいて、ＡＣマシン１５０ｄにスキップ遷移を追加することで、圧縮データ用ＡＣマシン１５０ｆを生成する。
【００６３】
以下において、ＡＣマシン構築部１６０ｃについて具体的に説明する。ＡＣマシン構築部１６０ｃがＡＣマシン１５０ｄを生成する処理について説明した後に、圧縮データ用ＡＣマシン１５０ｆを生成する処理について説明する。また、変換後抽出条件１５０ｈに含まれるキーワードの集合をパターン集合Πとし、説明の便宜上、パターン集合Π＝｛ＡＣ、ＢＡ、ＢＢ、ＢＡＡ、ＢＡＣＤ｝とする。
【００６４】
ＡＣマシン１５０ｄを生成する処理には、トライを構築する処理と、フェイラ遷移をトライに追加する処理が含まれる。図１２〜図１４は、トライＴ構築処理を説明するための図である。
【００６５】
図１２において、ＡＣマシン構築部１６０ｃは、初期状態０を作成し、初期状態の状態構造体における通常遷移先をすべて初期状態に設定する（図１２、ステップＳ１０）。そして、ＡＣマシン構築部１６０ｃは、パターン集合Πからパターン「ＡＣ」を取り出す。ＡＣマシン構築部１６０ｃは、文字「Ａ」を選択し、文字Ａによる初期状態０の通常遷移先を通常状態１に設定する。
【００６６】
ＡＣマシン構築部１６０ｃは、文字「Ｃ」を選択し、文字Ｃによる通常状態１の通常遷移先を照合状態２に設定する。また、ＡＣマシン構築部１６０ｃは、通常状態１の状態構造体において、照合状態２へのポインタg[C]に対応するパターンリストをPlist[C]=ACに設定する（図１２、ステップＳ１１）。
【００６７】
ＡＣマシン構築部１６０ｃは、初期状態０に戻り、パターン集合Πからパターン「ＢＡ」を取り出す。ＡＣマシン構築部１６０ｃは、文字「Ｂ」を選択し、文字Ｂによる初期状態０の通常遷移先を通常状態３に設定する。
【００６８】
ＡＣマシン構築部１６０ｃは、文字「Ａ」を選択し、文字Ａによる通常状態３の通常遷移先を照合状態４に設定する。また、ＡＣマシン構築部１６０ｃは、通常状態３の状態構造体において、照合状態４へのポインタg[A]に対応するパターンリストをPlist[A]=BAに設定する（図１２、ステップＳ１２）。
【００６９】
図１３において、ＡＣマシン構築部１６０ｃは、初期状態０に戻り、パターン集合Πからパターン「ＢＢ」を取り出し、文字「Ｂ」を選択する。ここで、文字Ｂによる初期状態０の通常遷移先は通常状態３であり、既に作成済みであるため、現在の状態を通常状態３に遷移する。
【００７０】
ＡＣマシン構築部１６０ｃは、文字「Ｂ」を選択し、文字Ｂによる通常状態３の通常遷移先を照合状態５に設定する。また、ＡＣマシン構築部１６０ｃは、状態３の状態構造体において、照合状態５へのポインタg[B]に対応するパターンリストをPlist[B]=BBに設定する（図１３、ステップＳ１３）。
【００７１】
ＡＣマシン構築部１６０ｃは、初期状態０に戻り、パターン集合Πからパターン「ＢＡＡ」を取り出し、文字「Ｂ」を選択する。ここで、文字Ｂによる初期状態０の通常遷移先は通常状態３であり、既に作成済みであるため、現在の状態を通常状態３に遷移する。
【００７２】
ＡＣマシン構築部１６０ｃは、文字「Ａ」を選択する。ここで、文字Ａによる通常状態３の通常遷移先は照合状態４であり、既に作成済みであるため、現在の状態を照合状態４に遷移する。
【００７３】
ＡＣマシン構築部１６０ｃは、文字「Ａ」を選択する。ＡＣマシン構築部１６０ｃは文字「Ａ」による照合状態４の通常遷移先を照合状態６に設定する。また、ＡＣマシン構築部１６０ｃは、状態４の状態構造体において、照合状態６へのポインタg[a]に対応するパターンリストをPlist[A]=BAAに設定する（図１３、ステップＳ１４）。
【００７４】
図１４において、ＡＣマシン構築部１６０ｃは、初期状態０に戻り、パターン集合Πからパターン「ＢＡＣＤ」を取り出し、文字「Ｂ」を選択する。ここで、文字Ｂによる初期状態０の通常遷移先は通常状態３であり、既に作成済みであるため、現在の状態を通常状態３に遷移する。
【００７５】
ＡＣマシン構築部１６０ｃは、文字「Ａ」を選択する。ここで、文字Ａによる通常状態３の通常遷移先は状態４であり、既に作成済みであるため、現在の状態を照合状態４に遷移する。
【００７６】
ＡＣマシン構築部１６０ｃは、文字「Ｃ」を選択する。ＡＣマシン構築部１６０ｃは、文字Ｃによる照合状態４の通常遷移先を通常状態７に設定する。ＡＣマシン構築部１６０ｃは、文字「Ｄ」を選択する。ＡＣマシン構築部１６０ｃは、文字Ｄによる通常状態７の通常遷移先を照合状態８に設定する（図１４、ステップＳ１５）。ステップＳ１５が終了した段階で、パターン集合Πに含まれる全てのパターンの登録が終了し、トライＴの構築処理が終了する。
【００７７】
次に、ＡＣマシン構築部１６０ｃがフェイラ遷移をトライに追加する処理について説明する。図１５〜図２３は、フェイラ遷移追加処理を説明するための図である。ＡＣマシン構築部１６０ｃは、初期状態０から通常遷移先となる状態を判定し、判定した状態をキュー（Queue）に登録する。ＡＣマシン構築部１６０ｃは、キューに登録された状態のフェイラ遷移先を初期状態０に設定する。ここで、初期状態０の通常遷移先は、通常状態１，３となるので、キューに１，３を登録する。また、通常状態１，３のフェイラ遷移先を初期状態０に設定する。図１５参照。
【００７８】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態１を取り出し、取り出した状態１を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。この場合、ＡＣマシン構築部１６０ｃは、文字Ｃを抽出し、集合Ｘに文字Ｃを格納する。
【００７９】
ＡＣマシン構築部１６０ｃは、集合Ｘから文字Ｃを取り出し、状態ｓの通常遷移先となる状態２をキューの最後尾に追加する。ＡＣマシン構築部１６０ｃは、状態１からフェイラ遷移した初期状態０に移行し、文字Ｃに対する通常遷移先を判定することで、状態nextのフェイラ遷移先を判定すると、初期状態０となる。ＡＣマシン構築部１６０ｃは、状態ｓ（通常状態１）から文字Ｃにより遷移する状態nextを判定し、判定した状態（照合状態２）のフェイラ遷移先を初期状態０に設定する。図１６参照。
【００８０】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態３を取り出し、取り出した状態３を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。この場合は、ＡＣマシン構築部１６０ｃは、文字Ａ、Ｂを抽出し、集合Ｘに文字Ａ、Ｂを格納する。
【００８１】
ＡＣマシン構築部１６０ｃは、集合Ｘから文字Ａを取り出し、状態ｓの文字Ａの通常遷移先となる状態４をキューの最後尾に追加する。ＡＣマシン構築部１６０ｃは、状態ｓからフェイラ遷移した初期状態０に移行し、文字Ａに対する通常遷移先を判定することで、状態nextのフェイラ遷移先を判定すると、状態１となる。ＡＣマシン構築部１６０ｃは、状態ｓ（通常状態３）から文字Ａにより遷移する状態nextを判定し、判定した状態（照合状態４）のフェイラ遷移先を状態１に設定する。図１７の状態４参照。
【００８２】
ＡＣマシン構築部１６０ｃは、集合Ｘから文字Ｂを取り出し、状態ｓ（通常状態３）の文字Ｂの通常遷移先となる状態５をキューの最後尾に追加する。ＡＣマシン構築部１６０ｃは、状態ｓからフェイラ遷移した初期状態０に移行し、文字Ｂに対する通常遷移先を判定することで、状態nextのフェイラ遷移先を判定すると、状態３となる。ＡＣマシン構築部１６０ｃは、状態ｓから文字Ｂにより遷移する状態nextを判定し、判定した状態（照合状態５）のフェイラ遷移先を状態３に設定する。図１７の状態５参照。
【００８３】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態２を取り出し、取り出した状態２を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。状態ｓに通常遷移先は存在しないので、次のステップに移行する。図１８参照。
【００８４】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態４を取り出し、取り出した状態４を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。この場合は、ＡＣマシン構築部１６０ｃは、文字Ａ、Ｃを抽出し、集合Ｘに文字Ａ、Ｃを格納する。
【００８５】
ＡＣマシン構築部１６０ｃは、集合Ｘから文字Ａを取り出し、状態ｓ（照合状態４）の文字Ａの通常遷移先となる状態６をキューの最後尾に追加する。ＡＣマシン構築部１６０ｃは、状態ｓからフェイラ遷移した状態１に移行する。状態１において、文字Ａに対する通常遷移先はNullであるため、再度フェイラ遷移し、初期状態０に移行する。
【００８６】
そして、初期状態０において、文字Ａに対する通常遷移先を判定することで、状態nextのフェイラ遷移先を判定すると、状態１となる。ＡＣマシン構築部１６０ｃは、状態ｓ（通常状態４）から文字Ａにより遷移する状態nextを判定し、判定した状態（照合状態６）のフェイラ遷移先を状態１に設定する。図１９の状態６参照。
【００８７】
ＡＣマシン構築部１６０ｃは、集合Ｘから文字Ｃを取り出し、状態ｓ（照合状態４）の文字Ｃの通常遷移先となる状態７をキューの最後尾に追加する。ＡＣマシン構築部１６０ｃは、状態ｓからフェイラ遷移した状態１に移行し、文字Ｃに対する通常遷移先を判定することで、状態nextのフェイラ遷移先を判定すると、状態２となる。ＡＣマシン構築部１６０ｃは、状態ｓから文字Ｃによる遷移する状態nextを判定し、判定した状態（通常状態７）のフェイラ遷移先を状態２に設定する。
【００８８】
また、ＡＣマシン構築部１６０ｃは、状態７のフェイラ遷移先が照合状態２となる。この場合、ＡＣマシン構築部１６０ｃは、状態４の状態構造体において、状態７へのポインタg[C]に対応するパターンリストをPlist[C]=ACに設定し、状態７を通常状態から照合状態に変更する。図１９参照の状態４、７参照。
【００８９】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態５を取り出し、取り出した状態５を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいてg[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。状態ｓに通常遷移先は存在しないので、次のステップに移行する。図２０参照。
【００９０】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態６を取り出し、取り出した状態６を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。状態ｓに通常遷移先は存在しないので、次のステップに移行する。図２１参照。
【００９１】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態７を取り出し、取り出した状態７を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。この場合は、ＡＣマシン構築部１６０ｃは、文字Ｄを抽出し、集合Ｘに文字Ｄを格納する。
【００９２】
ＡＣマシン構築部１６０ｃは、集合Ｘから文字Ｄを取り出し、状態ｓ（照合状態７）の文字Ｄの通常遷移先となる状態８をキューの最後尾に追加する。ＡＣマシン構築部１６０ｃは、状態ｓからフェイラ遷移した状態２に移行する。状態２において、文字Ｄに対する通常遷移先はNullであるため、再度フェイラ遷移し、初期状態０に移行する。
【００９３】
ＡＣマシン構築部１６０ｃは、初期状態０において、文字Ｄに対する通常遷移先を判定することで、状態nextのフェイラ遷移先を判定すると、初期状態０となる。ＡＣマシン構築部１６０ｃは、状態ｓ（照合状態７）から文字Ｄにより遷移する状態nextを判定し、判定した状態（照合状態８）のフェイラ遷移先を初期状態０に設定する。図２２の状態８参照。
【００９４】
ＡＣマシン構築部１６０ｃは、キューの先頭の状態８を取り出し、取り出した状態８を状態ｓに設定する。ＡＣマシン構築部１６０ｃは、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａを抽出し、集合Ｘに格納する。状態ｓに通常遷移先は存在しないので、次のステップに移行する。そして、キューに状態が存在しなくなった場合に、パターン集合ΠのＡＣマシンが完了する。図２３参照。
【００９５】
次に、ＡＣマシン構築部１６０ｃが、ＡＣマシン１５０ｄにスキップ遷移を追加して、圧縮データ用ＡＣマシン１５０ｆを生成する処理について説明する。圧縮辞書データ１５０ｅの文字ペアをａ，ｂとした場合、ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパスをスキャンし、文字ａの遷移と文字ｂの遷移が連続する箇所を判定する。そして、ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄの該当箇所にスキップ遷移を追加する。
【００９６】
また、ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパスをスキャンし文字ａの遷移と、文字ｂの遷移がフェイラ遷移を挟む箇所を判定する。そして、ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄの該当箇所にスキップ遷移を追加する。
【００９７】
図２４〜図２６は、圧縮データ用ＡＣマシン構築処理を説明するための図である。ＡＣマシン構築部１６０ｃは、圧縮辞書データ１５０ｅに登録された文字ペアに対応するスキップ遷移をＡＣマシン１５０ｄに追加する。
【００９８】
まず、ＡＣマシン構築部１６０ｃは、圧縮辞書データ１５０ｅの１段目に登録された文字ペア「Ｂ，Ａ」に対応するスキップ遷移をＡＣマシン１５０ｄに追加する。ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄに含まれる全パスをスキャンし、文字Ｂの遷移と文字Ａの遷移が連続する箇所を判定する。
【００９９】
ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパス上の状態ｓと状態ｔに対して、状態ｓの文字Ｂによる通常遷移先が状態ｔとなり（s.g[code(B)]=t）、かつ、状態ｔの、文字Ａによる通常遷移先が状態ｕとなる場合（s.g[code(A)]=u）に、状態ｓにスキップ遷移Ｘを作成する（s.g[code(X)]=u）。このとき、状態ｓのスキップ遷移Ｘのパターンリスト（s.Plist[code(X)]）は、s.Plist[code(X)]=s.Plist[code(B)]∪t.Plist[code(A)]とする。
【０１００】
ＡＣマシン１５０ｄの全パスの中で、（s.g[code(B)]=t）かつ（t.g[code(A)]=u）の条件を満たす状態ｓ、状態ｔ、状態ｕの組は、初期状態０、通常状態３、照合状態４となる。従って、ＡＣマシン構築部１６０ｃは、初期状態０の文字Ｘによる通常遷移先のポインタ（g[code(X)]）に、照合状態４を設定し、該当するパターンリスト（Plist[X]）に「ＢＡ」を登録する。図２４の初期状態０参照。
【０１０１】
続いて、ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパスをスキャンし文字Ｂの遷移と、文字Ａの遷移がフェイラ遷移を挟む箇所を判定する。ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパス上の状態ｓと状態ｔに対して、状態ｓの文字Ｂによる通常遷移先が状態ｔとなり（s.g[code(B)]=t）、かつ、状態ｔの、文字Ａによる通常遷移先がＮｕｌｌとなる（t.g[code(A)]=Null）状態ｔを全て集合Ｆに格納する。
【０１０２】
ＡＣマシン１５０ｄの全パスの中で、（s.g[code(B)]=t）かつ（t.g[code(A)]=Null）の条件を満たす状態ｔは、照合状態５となるため、ＡＣマシン構築部１６０ｃは、照合状態５を集合Ｆに格納する。ＡＣマシン構築部１６０ｃは、集合Ｆのうち、状態ｔからフェイラ遷移し、フェイラ遷移先の状態の文字Ａによる通常遷移先がＮｕｌｌ（t.fail.g[code(A)]=Null）となる状態ｔを削除する。照合状態５は、（t.fail.g[code(A)]=Null）の条件を満たさないので、集合Ｆに残る。
【０１０３】
ＡＣマシン構築部１６０ｃは、集合Ｆの任意の状態ｔに対して、状態ｔからフェイラ遷移し、フェイラ遷移先の状態の文字Ａによる通常遷移先を状態ｕ（t.fail.g[code(A)]=u）とする。また、ＡＣマシン構築部１６０ｃは、（s.g[code(B)]=t）の条件を満たす状態を状態ｓとする。このとき、状態ｓのスキップ遷移Ｘのパターンリスト（s.Plis[code(X)]）を、s.Plist[code(X)]=s.Plist[code(B)]∪t.fail.Plist[code(A)]とする。
【０１０４】
（t.fail.g[code(A)]=u）、（s.g[code(B)]=t）を満たす状態ｓは、通常状態３となる。ＡＣマシン構築部１６０ｃは、通常状態３の文字Ｘによる通常遷移先のポインタ（g[code(X)]）に、照合状態４を設定し、該当するパターンリスト（Plist[X]）に「ＢＢ，ＢＡ」を登録する。図２５の通常状態３参照。
【０１０５】
続いて、ＡＣマシン構築部１６０ｃは、圧縮辞書データ１５０ｅの２段目に登録された文字ペア「Ｘ，Ｃ」に対応するスキップ遷移をＡＣマシン１５０ｄに追加する。ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄの該当箇所にスキップ遷移を追加する。
【０１０６】
ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパス上の状態ｓと状態ｔに対して、状態ｓの文字Ｘによる通常遷移先が状態ｔとなり（s.g[code(X)]=t）、かつ、状態ｔの文字Ｃによる通常遷移先が状態ｕとなる場合（s.g[code(C)]=u）に、状態ｓにスキップ遷移Ｙを作成する（s.g[code(Y)]=u）。このとき、状態ｓのスキップ遷移Ｙのパターンリスト（s.Plist[code(Y)]）は、s.Plist[code(Y)]=s.Plist[code(X)]∪t.Plist[code(C)]とする。
【０１０７】
ＡＣマシン１５０ｄの全パスの中で、（s.g[code(X)]=t）かつ（s.g[code(C)]=u）の条件を満たす状態ｓ、状態ｔ、状態ｕの組は、初期状態０、照合状態４、照合状態７の組と、通常状態３、照合状態４、照合状態７の組となる。
【０１０８】
ＡＣマシン構築部１６０ｃは、初期状態０の文字Ｙによる通常遷移先のポインタ（g[code(Y)]）に、照合状態７を設定し、該当するパターンリスト（Plist[Y]）に「ＢＡ、ＡＣ」を登録する。図２６の初期状態０参照。
【０１０９】
また、ＡＣマシン構築部１６０ｃは、通常状態３の文字Ｙによる通常遷移先のポインタ（g[code(Y)]）に、照合状態７を設定し、該当するパターンリスト（Plist[Y]）に「ＢＢ、ＢＡ、ＡＣ」を登録する。図２６の通常状態３参照。
【０１１０】
続いて、ＡＣマシン構築部１６０ｃは、ＡＣマシン１５０ｄのパスをスキャンし文字Ｘの遷移と、文字Ｃの遷移がフェイラ遷移を挟む箇所を判定する。図２６に示すＡＣマシン１５０ｄにおいて、文字Ｘの遷移と、文字Ｃの遷移がフェイラ遷移を挟む箇所は存在しないので、図２６に示したＡＣマシンが、圧縮データ用ＡＣマシン１５０ｆとなる。
【０１１１】
次に、図２に示した照合処理部１６０ｄについて説明する。照合処理部１６０ｄは、照合対象となるテキストが与えられた場合に、与えられたテキストと圧縮データ用ＡＣマシン１５０ｆとを比較して、テキストに特定のキーワードが含まれているか否かを判定する処理部である。
【０１１２】
図２７〜図３２は、照合処理を説明するための図である。ここでは一例として、照合対象となるテキストを「ＡＸＹＹＤ」とする。照合処理部１６０ｄは、現在の状態ｓを圧縮データ用ＡＣマシン１５０ｆの初期状態０に設定する。図２７参照。
【０１１３】
照合処理部１６０ｄは、テキストの１文字目「Ａ」を読み出し、文字Ａによる初期状態０の通常遷移先を判定する。文字Ａによる初期状態０の遷移先は、通常状態１であるため、現在の状態ｓを通常状態１に設定する。図２８参照。
【０１１４】
照合処理部１６０ｄは、テキストの２文字目「Ｘ」を読み出し、文字Ｘによる通常状態３の遷移先を判定する。文字Ｘによる通常状態３の通常遷移先は存在しないので、通常状態３からフェイラ遷移し、状態ｓを初期状態０に設定する。
【０１１５】
照合処理部１６０ｄは、文字Ｘによる初期状態０の通常遷移先を判定する。文字Ｘによる初期状態０の通常遷移先は照合状態４であるため、現在の状態ｓを照合状態４に設定する。また、照合状態４にヒットしたため、照合処理部１６０ｄは、初期状態０のg[code(X)]に対応付けられたパターンリストPlist[X]={BA}を、集合Ｒに登録する。図２９参照。
【０１１６】
照合処理部１６０ｄは、テキストの３文字目「Ｙ」を読み出し、文字Ｙによる照合状態４の通常遷移先を判定する。文字Ｙによる照合状態４の通常遷移先は存在しないので、照合状態４からフェイラ遷移し、状態ｓを通常状態１に設定する。
【０１１７】
照合処理部１６０ｄは、文字Ｙによる通常状態１の通常遷移先を判定する。文字Ｙによる通常状態１の通常遷移先は存在しないので、通常状態１からフェイラ遷移し、状態ｓを初期状態０に設定する。
【０１１８】
照合処理部１６０ｄは、文字Ｙによる初期状態０の通常遷移先を判定する。文字Ｙによる初期状態０の通常遷移先は照合状態７であるため、現在の状態ｓを照合状態７に設定する。また、照合状態７にヒットしたため、照合処理部１６０ｄは、初期状態０のg[code(Y)]に対応付けられたパターンリストPlist[X]={BA,AC}を、集合Ｒに登録する。なお、照合処理部１６０ｄは、ＢＡが既に集合Ｒに登録されているので、ＡＣを集合Ｒに登録する。図３０参照。
【０１１９】
照合処理部１６０ｄは、テキストの４文字目「Ｙ」を読み出し、文字Ｙによる照合状態７の通常遷移先を判定する。文字Ｙによる照合状態７の通常遷移先は存在しないので、照合状態７からフェイラ遷移し、状態ｓを照合状態２に設定する。
【０１２０】
照合処理部１６０ｄは、文字Ｙによる照合状態２の通常遷移先を判定する。文字Ｙによる照合状態２の通常遷移先は存在しないので、照合状態２からフェイラ遷移し、状態ｓを初期状態０に設定する。
【０１２１】
照合処理部１６０ｄは、文字Ｙによる初期状態０の通常遷移先を判定する。文字Ｙによる初期状態０の通常遷移先は照合状態７であるため、現在の状態ｓを照合状態７に設定する。また、照合状態７にヒットしたため、照合処理部１６０ｄは、初期状態０のg[code(Y)]に対応付けられたパターンリストPlist[X]={BA,AC}を、集合Ｒに登録する。なお、照合処理部１６０ｄは、ＢＡ、ＡＣが既に集合Ｒに登録されているので、集合Ｒには何も登録しない。図３１参照。
【０１２２】
照合処理部１６０ｄは、テキストの５文字目「Ｄ」を読み出し、文字Ｄによる照合状態７の通常遷移先を判定する。文字Ｄによる照合状態７の通常遷移先は照合状態８であるため、現在の状態ｓを照合状態８に設定する。また、照合状態８にヒットしたため、照合所理部１６０ｄは、照合状態７のg[code(D)]に対応付けられたパターンリストPlist[D]={BACD}を、集合Ｒに登録する。図３２参照。
【０１２３】
図２７〜図３２に示したように、照合処理部１６０ｄは、テキストを１文字ずつ読み出して、圧縮データ用ＡＣマシン１５０ｆの各状態を遷移し、照合処理を実行することで、例えば、テキスト「ＡＸＹＹＤ」が特定のキーワード「ＢＡ、ＡＣ、ＢＡＤＣ」を含んでいることを判定する。なお、照合処理部１６０ｄは、テキスト「ＡＸＹＹＤ」をまとめて取得する代わりに、１文字ずつテキストを取得した場合でも、図２７〜図３２と同様にして、照合処理を実行する。
【０１２４】
次に、図２に示した切出処理部１６０ｅについて説明する。切出し処理部１６０ｅは、照合処理部１６０ｄと協働し、変換後抽出条件１５０ｈに対応する符号化データ１５０ｂの位置を算出する処理部である。以下の説明において、変換後抽出条件１５０ｈに対応する符号化データ１５０ｂの位置を切出し位置リストと表記する。
【０１２５】
切出し処理部１６０ｅは、切出し位置リストに対応する位置の情報を符号化データ１５０ｂから切出し、切出した情報を、検索条件の回答として出力部１２０または通信制御ＩＦ部１３０に出力する。
【０１２６】
以下において、切出処理部１６０ｅの処理を具体的に説明する。切出処理部１６０ｅは、符号化データ１５０ｂを１文字ずつスキャンし、文字の種類に応じた各種の処理を実行する。ここでは、スキャンした文字が、文字列部の場合、開始タグ「＜＞」の場合、終了タグの場合「＜／＞」に分けて説明する。
【０１２７】
スキャンした文字が文字列部の場合について説明する。切出処理部１６０ｅは、スキャンした文字が文字列部の場合に、スキャンした文字を照合処理部１６０ｄに出力し、圧縮データ用ＡＣマシン１５０ｆの照合状態に遷移したか否かの情報を照合処理部１６０ｄから取得する。
【０１２８】
上述した照合処理部１６０ｄは、上述した処理に加え、切出処理部１６０ｅから文字を取得した場合には、現在の状態ｓを遷移させ、照合状態に遷移したか否かを情報を切出処理部１６０ｅに通知するものとする。切出処理部１６０ｅは、照合状態に遷移した旨の情報を取得した場合には、キーワードフラグｋの値を１に設定する。
【０１２９】
続いて、スキャンした文字が開始タグの場合について説明する。切出処理部１６０ｅは、スキャンした文字が開始タグの場合に、タグ符号と現在の位置（符号化データ１５０ｂの先頭文字から数えた、該当タグ符号の「＜」までの数；start）をスタックＳに登録する。
【０１３０】
また、切出処理部１６０ｅは、スタックＳに登録したタグ符号が、変換後抽出条件１５０ｈの項目部と一致しているか否かを判定し、一致している場合には項目フラグｆを１に設定する。
【０１３１】
続いて、スキャンした文字が終了タグの場合について説明する。切出処理部１６０ｅは、スキャンした文字が終了タグの場合に、キーワードフラグｋと項目フラグｆが１であるか否かを判定する。キーワードフラグｋと項目フラグｆが１の場合に、切出処理部１６０ｅは、現在の位置（符号化データ１５０ｂの先頭文字から数えた、該当タグ符号の「＞」までの数）をendに登録し、スタックＳの最終要素のstartを取得する。そして、切出処理部１６０ｅは、取得したstartとendの組合せ（start、end）を切出し位置リストに登録する。切出処理部１６０ｅは、スタックＳからタグ符号を取り出し、キーワードフラグｋを０に設定する。
【０１３２】
ここで、符号化データ１５０ｂを図４に示す符号化データとし、変換後抽出条件「/1/2="BACD"」として、切出処理部１６０ｅの処理を説明する。切出処理部１６０ｅの初期設定として、キーワードフラグｋと項目フラグｆを０、スタックＳを空スタック、切出し位置リストＲを空リストとする。
【０１３３】
切出処理部１６０ｅは、符号化データ１５０ｂの文字「＜１＞」をスキャンする。文字「＜１＞」は、開始タグである。切出処理部１６０ｅは、スタックＳにタグ符号「＜１＞」と現在位置「１」をスタックＳに登録する。スタックＳ＝｛（＜１＞、１）｝。切出処理部１６０ｅは、スタックＳのタグ符号「＜１＞」が、変換後抽出条件の項目部「/1/2」と一致しないので、項目フラグｆを０のままにする。
【０１３４】
切出処理部１６０ｅは、符号化データ１５０ｂの文字「＜２＞」をスキャンする。文字「＜２＞」は、開始タグである。切出処理部１６０ｅは、スタックＳにタグ符号「＜２＞」と現在位置「４」をスタックＳに登録する。スタックＳ＝｛（＜１＞、１）、（＜２＞）、４｝。切出処理部１６０ｅは、スタックＳのタグ符号「＜１＞」、「＜２＞」が、変換後抽出条件の項目部「/1/2」と一致するので、項目フラグｆを１に設定する。
【０１３５】
切出処理部１６０ｅは、符号化データ１５０ｂの文字列「ＡＸＹＹＤ」をスキャンする。切出処理部１６０ｅは、文字列「ＡＸＹＹＤ」を照合処理部１６０ｄに出力し、照合結果を取得する。照合状態に遷移した旨が照合結果に含まれる場合、切出処理部１６０ｅは、キーワードフラグｋを１に設定する。
【０１３６】
切出処理部１６０ｅは、符号化データ１５０ｂの文字「＜２／＞」をスキャンする。文字「＜２／＞」は終了タグであり、項目フラグｆとキーワードフラグｋが１である。この場合、切出処理部１６０ｅは、end＝１５と、スタックＳの最終要素のstart値（＝４）の組を、切出し位置リストＲに登録する。Ｒ＝｛（４，１５）｝。切出処理部１６０ｅは、スタックＳから（＜２＞、４）を取り出す（ホップする）。スタックＳ＝｛（＜１＞、１）｝。切出処理部１６０ｅは、キーワードフラグｋを０に設定する。
【０１３７】
切出処理部１６０ｅは、符号化データ１５０ｂの文字「＜３＞」をスキャンする。文字「＜３＞」は、開始タグである。切出処理部１６０ｅは、スタックＳにタグ符号「＜３＞」と現在位置「１６」をスタックＳに登録する。スタックＳ＝｛（＜１＞、１）、（＜３＞）、１６｝。切出処理部１６０ｅは、スタックＳのタグ符号「＜１＞」、「＜３＞」が、変換後抽出条件の項目部「/1/2」と一致しないので、項目フラグｆを０に設定する。
【０１３８】
切出処理部１６０ｅは、符号化データ１５０ｂの文字列「ＡＸＹＹＤ」をスキャンする。切出処理部１６０ｅは、文字列「ＡＸＹＹＤ」を照合処理部１６０ｄに出力し、照合結果を取得する。照合状態に遷移した旨が照合結果に含まれる場合、切出処理部１６０ｅは、キーワードフラグｋを１に設定する。
【０１３９】
切出処理部１６０ｅは、符号化データ１５０ｂの文字「＜／３＞」をスキャンする。文字「＜／３＞」は終了タグである。キーワードフラグｋは１であるが、項目フラグｆは０であるため、切出処理部１６０ｅは、切出し位置リストＲに対する登録を行わない。切出処理部１６０ｅは、スタックＳから（＜３＞、１６）を取り出す（ポップする）。スタックＳ＝｛（＜１＞、１）｝。切出処理部１６０ｅは、キーワードフラグｋを０に設定する。
【０１４０】
切出処理部１６０ｅは、符号化データ１５０ｂの文字「＜／１＞」をスキャンする。文字「＜／１＞」は終了タグである。キーワードフラグｋと項目フラグｆが０であるため、切出処理部１６０ｅは、切出し位置リストＲに対する登録を行わない。切出処理部１６０ｅは、スタックＳから（＜１＞、１）を取り出す。スタックＳ＝空スタック。切出処理部１６０ｅは、キーワードフラグｋを０に設定する。
【０１４１】
切出処理部１６０ｅは、符号化データ１５０ｂを最後までスキャンしたので、切出し位置リストＲ＝｛（４，１５）｝に基づいて、情報を符号化データ１５０ｂから切り出す。この場合、切出し処理部１６０ｅは、符号化データ１５０ｂの先頭文字から４文字目と１６文字目の間に位置する文字「＜２＞ＡＸＹＹＤ＜／２＞」を切り出す。
【０１４２】
次に、本実施例２にかかる検索装置１００の処置手順について説明する。まず、データ圧縮処理部１６０ｂが実行する圧縮処理について説明する。図３３は、圧縮処理の処理手順を示すフローチャートである。
【０１４３】
図３３に示すように、データ圧縮処理部１６０ｂは、文字列計数処理を実行し（ステップＳ１０１）、辞書構築・文字列置換処理を実行する（ステップＳ１０２）。そして、データ圧縮処理部１６０ｂは、タグ名置換処理を実行する（ステップＳ１０３）。
【０１４４】
ここで、図３３のステップＳ１０１に示した文字列計数処理の処理手順について説明する。図３４は、文字列計数処理の処理手順を示すフローチャートである。図３４に示すように、データ圧縮処理部１６０ｂは、一つ前の文字ｃ０＝εに設定し、現在の文字ｃ１にＸＭＬデータＤ（ＸＭＬデータ１５０ａ）の先頭文字を代入する（ステップＳ１１１）。
【０１４５】
データ圧縮処理部１６０ｂは、計数表Ｔを初期化し、タグ内フラグｆ＝０に設定する（ステップＳ１１２）。データ圧縮処理部１６０ｂは、ＸＭＬデータＤに次の文字が存在するか否かを判定する（ステップＳ１１３）。データ圧縮処理部１６０ｂは、ＸＭＬデータＤに次の文字が存在しない場合に（ステップＳ１１４，Ｎｏ）、計数表Ｔを出力する（ステップＳ１１５）。
【０１４６】
一方、データ圧縮処理部１６０ｂは、ＸＭＬデータＤに次の文字が存在する場合に（ステップＳ１１４，Ｙｅｓ）、ｃ０＝ｃ１とし、ｃ１に次の文字を代入する（ステップＳ１１６）。データ圧縮処理部１６０ｂは、ｃ１がタグ開始記号（＜）またはタグ終了記号（＞）であるかを判定する（ステップＳ１１７）。
【０１４７】
データ圧縮処理部１６０ｂは、ｃ１がタグ開始記号ではなく、かつ、タグ終了記号ではない場合に（ステップＳ１１８，Ｎｏ）、ステップＳ１２１に移行する。一方、データ圧縮処理部１６０ｂは、ｃ１がタグ開始記号またはタグ終了記号の場合に（ステップＳ１１８，Ｙｅｓ）、ｃ１がタグ開始記号ならｆ＝１とし、ｃ１がタグ終了記号ならｆ＝０に設定する（ステップＳ１１９）。
【０１４８】
ｆ＝１の場合には（ステップＳ１２０，Ｎｏ）、ステップＳ１１３に移行する。ｆ＝０の場合に（ステップＳ１２０，Ｙｅｓ）、データ圧縮処理部１６０ｂは、ｃ０とｃ１を繋げた長さ２の文字列を計数表Ｔに登録する。該文字列が登録時未の場合、データ圧縮処理部１６０ｂは、該文字列の出現数を１増やし（ステップＳ１２１）、ステップＳ１１３に移行する。
【０１４９】
次に、図３３のステップＳ１０２に示した辞書構築・文字列置換処理の処理手順について説明する。図３５は、辞書構築・文字列置換処理の処理手順を示すフローチャートである。図３５に示すように、データ圧縮処理部１６０ｂは、未使用文字集合Ｕに文字が存在するか否かを判定する（ステップＳ１３１）。
【０１５０】
データ圧縮処理部１６０ｂは、未使用文字集合Ｕに文字が存在しない場合には（ステップＳ１３２，Ｎｏ）、ＸＭＬデータＤを、文字列圧縮済みデータＣとして出力し、圧縮辞書データＤｉｃ（圧縮辞書データ１５０ｅ）を出力する（ステップＳ１３３）。
【０１５１】
一方、データ圧縮処理部１６０ｂは、未使用文字集合Ｕに文字が存在する場合に（ステップＳ１３２，Ｙｅｓ）、圧縮辞書データ１５０ｅに未登録な文字列のうちで、もっとも頻度の高い（出現数が最も大きい）文字列ｓを計数表Ｔから検索する（ステップＳ１３４）。
【０１５２】
データ圧縮処理部１６０ｂは、文字列ｓの出現数が計数閾値α以上であるか否かを判定する（ステップＳ１３５）。データ圧縮処理部１６０ｂは、文字列ｓの出現数が計数閾値α未満の場合に（ステップＳ１３６，Ｎｏ）、ステップＳ１３３に移行する。
【０１５３】
データ圧縮処理部１６０ｂは、文字列ｓの出現数が計数閾値α以上の場合に（ステップＳ１３６，Ｙｅｓ）、未使用文字集合Ｕの文字ａに対して、（ｓ、ａ）の組を圧縮辞書データＤｉｃに加え、Ｕから文字ａを削除する（ステップＳ１３７）。
【０１５４】
データ圧縮処理部１６０ｂは、ＸＭＬデータＤ中の全ての文字列ｓを文字ａに置換し（ステップＳ１３８）、文字列計数処理を実行し（ステップＳ１３９）、ステップＳ１３１に移行する。図３５のステップＳ１３９に示す文字列計数処理は、図３４に示した文字列計数処理と同じである。
【０１５５】
次に、図３３のステップＳ１０３に示したタグ名置換処理の処理手順について説明する。図３６は、タグ名置換処理の処理手順を示すフローチャートである。図３６に示すように、データ圧縮処理部１６０ｂは、ＸＭＬデータＤをスキャンし、Ｄに出現する全てのタグ名を対応表Ｔ（対応表１５０ｃ）に登録する（ステップＳ１４１）。
【０１５６】
データ圧縮処理部１６０ｂは、対応表Ｔに登録された全てのタグ名に対して、符号を割り当てる（ステップＳ１４２）。データ圧縮処理部１６０ｂは、ＸＭＬデータＤの全てのタグ名を、対応表Ｔに割当てられた符号に変換し（ステップＳ１４３）、符号化データＢ（符号化データ１５０ｂ）を出力する（ステップＳ１４４）。
【０１５７】
次に、ＡＣマシン構築部１６０ｃ、照合処理部１６０ｄ、切出処理部１６０ｅが実行する構築処理について説明する。図３７は、構築処理の処理手順を示すフローチャートである。図３７に示すように、ＡＣマシン構築部１６０ｃは、抽出条件受け付け処理を実行する（ステップＳ２０１）。
【０１５８】
そして、ＡＣマシン構築部１６０ｃは、ＡＣマシン構築処理を実行し（ステップＳ２０２）、照合処理部１６０ｄ、切出処理部１６０ｅは、切出し位置計算処理を実行する（ステップＳ２０３）。
【０１５９】
ここで、図３７のステップＳ２０１に示した抽出条件受け付け処理の処理手順について説明する。図３８は、抽出条件受け付け処理の処理手順を示すフローチャートである。図３８に示すように、ＡＣマシン構築部１６０ｃは、抽出条件Ｑ（抽出条件１５０ｇ）を受け付ける（ステップＳ２１１）。
【０１６０】
ＡＣマシン構築部１６０ｃは、対応表１５０ｃを用いて抽出条件Ｑにおける項目名を書き換え（ステップＳ２１２）、書き換えた抽出条件Ｑを抽出条件Ｑ’とする（ステップＳ２１３）。
【０１６１】
続いて、図３７のステップＳ２０２に示したＡＣマシン構築処理の処理手順について説明する。図３９は、ＡＣマシン構築処理の処理手順を示すフローチャートである。図３９に示すように、ＡＣマシン構築部１６０ｃは、ΠのトライＴを構築し（ステップＳ２２１）、トライ（Π）にフェイラ遷移を追加する（ステップＳ２２２）。
【０１６２】
ＡＣマシン構築部１６０ｃは、ＡＣマシンＡＣ（Π）にスキップ遷移を追加し（ステップＳ２２３）、圧縮データ用ＡＣマシンＡＣ＿ｂ（Π、ｄｉｃ）を出力する（ステップＳ２２４）。
【０１６３】
ここで、図３９のステップＳ２２１に示したΠのトライＴを構築する処理について説明する。図４０は、ΠのトライＴを構築する処理の処理手順を示すフローチャートである。図４０に示すように、ＡＣマシン構築部１６０ｃは、初期状態（ｉｄ＝０）を作成し、トライ（Π）を初期状態のみで構成されるトライに設定する（ステップＳ２３１）。
【０１６４】
ＡＣマシン構築部１６０ｃは、初期状態の全ての通常遷移先を初期状態に設定し（ステップＳ２３２）、Πにパターンが存在するか否かを判定する（ステップＳ２３３）。ＡＣマシン構築部１６０ｃは、Πにパターンが存在しない場合に（ステップＳ２３４，Ｎｏ）、ΠのトライＴ（Π）を出力する（ステップＳ２３５）。
【０１６５】
ＡＣマシン構築部１６０ｃは、Πにパターンが存在しない場合に（ステップＳ２３４，Ｙｅｓ）、Πから１つパターンを取り出し、取り出したパターンをｐに設定する（ステップＳ２３６）。ＡＣマシン構築部１６０ｃは、パターン登録処理を実行し（ステップＳ２３７）、ステップＳ２３３に移行する。
【０１６６】
続いて、図４０のステップＳ２３７に示したパターン登録処理の処理手順について説明する。図４１は、パターン登録処理の処理手順を示すフローチャートである。図４１に示すように、ＡＣマシン構築部１６０ｃは、現在の状態ｓをトライＴの初期状態に設定し、ｓの前の状態ｒを空の状態に設定する（ステップＳ２４１）。
【０１６７】
ＡＣマシン構築部１６０ｃは、パターンｐに次の文字が存在するか否かを判定する（ステップＳ２４２）。ＡＣマシン構築部１６０ｃは、パターンｐに次の文字が存在しない場合に（ステップＳ２４３，Ｎｏ）、パターンｐの最後の文字（ａ）と状態ｒに対して、ｒのパターンリストPlist[code(a)]に、ｐを代入し（ステップＳ２４４）、トライＴを出力する（ステップＳ２４５）。
【０１６８】
一方、ＡＣマシン構築部１６０ｃは、パターンｐに次の文字が存在する場合に（ステップＳ２４３，Ｙｅｓ）、次の文字をａとし、ａのasciiコードをcode（a）に設定する（ステップＳ２４６）。ＡＣマシン構築部１６０ｃは、ｓの通常遷移g[code(a)]=Nullであるか否かを判定する（ステップＳ２４７）。
【０１６９】
ＡＣマシン構築部１６０ｃは、通常遷移g[code(a)]=Nullの場合に（ステップＳ２４８，Ｙｅｓ）、ステップＳ２５０に移行する。一方、ＡＣマシン構築部１６０ｃは、g[code(a)]=Nullではない場合に（ステップＳ２４８，Ｎｏ）、状態ｎを新規作成し、g[code(a)]=nに設定する（ステップＳ２４９）。ＡＣマシン構築部１６０ｃは、状態ｒに状態ｓを代入し、状態ｓにg[code(a)]を代入し（ステップＳ２５０）、ステップＳ２４２に移行する。
【０１７０】
次に、図３９のステップＳ２２２に示したトライ（Π）にフェイラ遷移を追加する処理について説明する。図４２、図４３は、トライ（Π）にフェイラ遷移を追加する処理の処理手順を示すフローチャートである。
【０１７１】
図４２に示すように、ＡＣマシン構築部１６０ｃは、初期状態から通常遷移できる全ての状態ｓに対して、それらのフェイラ遷移先に初期状態を代入し、現在の状態ｓをqueueに登録する（ステップＳ２５１）。
【０１７２】
ＡＣマシン構築部１６０ｃは、状態リストqueueに状態が存在するか否かを判定する（ステップＳ２５２）。ＡＣマシン構築部１６０ｃは、状態リストqueueに状態が存在しない場合に（ステップＳ２５３，Ｎｏ）、現在のトライＴをＡＣマシンαとして出力する（ステップＳ２５４）。
【０１７３】
ＡＣマシン構築部１６０ｃは、状態リストqueueに状態が存在する場合に（ステップＳ２５３，Ｙｅｓ）、状態リストqueueの先頭の状態をｓとし、状態リストqueueからｓを除去する（ステップＳ２５５）。
【０１７４】
ＡＣマシン構築部１６０ｃは、状態ｓの通常遷移が全てＮｕｌｌであるか否かを判定する（ステップＳ２５６）。ＡＣマシン構築部１６０ｃは、状態ｓの通常遷移が全てＮｕｌｌの場合に（ステップＳ２５７，Ｙｅｓ）、ステップＳ２５２に移行する。
【０１７５】
一方、ＡＣマシン構築部１６０ｃは、状態ｓの通常遷移が全てＮｕｌｌではない場合に（ステップＳ２５７，Ｎｏ）、状態ｓにおいて、g[code(a)]≠Nullとなる全ての文字ａの集合をＡに設定する（ステップＳ２５８）。
【０１７６】
ＡＣマシン構築部１６０ｃは、集合Ａに文字が存在するか否かを判定する（ステップＳ２５９）。ＡＣマシン構築部１６０ｃは、集合Ａに文字が存在しない場合に（ステップＳ２６０，Ｎｏ）、ステップＳ２５２に移行する。
【０１７７】
一方、ＡＣマシン構築部１６０ｃは、集合Ａに文字が存在する場合に（ステップＳ２６０，Ｙｅｓ）、図４３に移行し、集合Ａから文字を１つ取り出し、取り出した文字をａに設定する（ステップＳ２６１）。
【０１７８】
ＡＣマシン構築部１６０ｃは、状態ｓの通称遷移先next=g[code(a)]を、状態リストqueueの最後尾に追加し（ステップＳ２６２）、状態ｓからフェイラ遷移を繰り返し、文字ａに対する通常遷移先がＮｕｌｌにならない最初の状態をｆに設定する（ステップＳ２６３）。
【０１７９】
ＡＣマシン構築部１６０ｃは、状態ｆに対する文字ａの通常遷移先へのポインタfnext=g[code(a)]を判定し（ステップＳ２６４）、状態nextのフェイラ遷移先をfnext=g[code(a)]に設定する（ステップＳ２６５）。ＡＣマシン構築部１６０ｃは、状態nextを与える遷移のパターンリストに、状態fnextを与える遷移のパターンリストを足し合わせ（ステップＳ２６６）、図４２のステップＳ２５９に移行する。
【０１８０】
次に、図３９のステップＳ２２３に示したＡＣマシンＡＣ（Π）にスキップ遷移を追加する処理の処理手順について説明する。図４４は、ＡＣマシンＡＣ（Π）にスキップ遷移を追加する処理の処理手順を示すフローチャートである。図４４に示すように、ＡＣマシン構築部１６０ｃは、ｎ＝１に設定し（ステップＳ２７１）、圧縮辞書データｄｉｃにｎ行目が存在するか否かを判定する（ステップＳ２７２）。
【０１８１】
ＡＣマシン構築部１６０ｃは、圧縮辞書データｄｉｃにｎ行目が存在しない場合に（ステップＳ２７３，Ｎｏ）、現在のＡＣマシンＡＣ（Π）を圧縮データ用ＡＣマシンＡＣ＿ｂ（Π、ｄｉｃ）として出力する（ステップＳ２７４）。
【０１８２】
一方、ＡＣマシン構築部１６０ｃは、圧縮辞書データｄｉｃにｎ行目が存在する場合に（ステップＳ２７３，Ｙｅｓ）、圧縮辞書データｄｉｃのｎ行目において、ペア文字列を（ａ，ｂ）とおき、置換される文字列をＸに設定する（ステップＳ２７５）。
【０１８３】
ＡＣマシン構築部１６０ｃは、第１のスキップ遷移作成処理を実行し（ステップＳ２７６）、第２のスキップ遷移作成処理を実行する（ステップＳ２７７）。ＡＣマシン構築部１６０ｃは、ｎ＝ｎ＋１に設定し（ステップＳ２７８）、ステップＳ２７２に移行する。
【０１８４】
続いて、図４４のステップＳ２７６に示した第１のスキップ遷移作成処理の処理手順について説明する。図４５は、第１のスキップ遷移作成処理の処理手順を示すフローチャートである。図４５に示すように、ＡＣマシン構築部１６０ｃは、ＡＣマシンＡＣ（Π）の全パスの集合をＰとおき（ステップＳ２８１）、Ｐにパスが存在するか否かを判定する（ステップＳ２８２）。
【０１８５】
ＡＣマシン構築部１６０ｃは、Ｐにパスが存在しない場合に（ステップＳ２８３，Ｎｏ）、現在のＡＣマシンＡＣ（Π）を出力する（ステップＳ２８４）。一方、ＡＣマシン構築部１６０ｃは、Ｐにパスが存在する場合に（ステップＳ２８３，Ｙｅｓ）、Ｐから任意のパスを取り出す（ステップＳ２８５）。
【０１８６】
ＡＣマシン構築部１６０ｃは、パスを初期状態から葉に向かって走査する。そして、パス上の状態ｓとｔに対してs.g[code(a)]=t、かつt.g[code(a)]=uが成り立つ場合に、スキップ遷移s.g[code(X)]=uを作成する（ステップＳ２８６）。ＡＣマシン構築部１６０ｃは、Ｐからパスを消去し（ステップＳ２８７）、ステップＳ２８２に移行する。
【０１８７】
続いて、図４４のステップＳ２７７に示した第２のスキップ遷移作成処理の処理手順について説明する。図４６は、第２のスキップ遷移作成処理の処理手順を示すフローチャートである。
【０１８８】
ＡＣマシン構築部１６０ｃは、ＡＣマシンＡＣ（Π）の全状態を探索し（ステップＳ２９１）、ある状態ｓに対して、s.g[code(a)]=tかつt.g[code(b)]=NULLが成り立つものを、集合Ｆから除去する（ステップＳ２９２）。
【０１８９】
ＡＣマシン構築部１６０ｃは、集合Ｆに状態ｔが存在するか否かを判定する（ステップＳ２９４）。ＡＣマシン構築部１６０ｃは、集合Ｆに状態ｔが存在しない場合に（ステップＳ２９３，Ｎｏ）、第２のスキップ遷移作成処理を終了する。
【０１９０】
一方、ＡＣマシン構築部１６０ｃは、集合Ｆに状態ｔが存在する場合に（ステップＳ２９４，Ｙｅｓ）、集合Ｆから任意の状態ｔを選択する（ステップＳ２９５）。ＡＣマシン構築部１６０ｃは、t.fail.g[code(X)]=uとし、s.g[code(a)]=tとなる状態をｓとする場合、スキップ遷移s.g[code(X)]=uを作成する（ステップＳ２９６）。ＡＣマシン構築部１６０ｃは、選択済みの状態ｔを消去し（ステップＳ２９７）、ステップＳ２９３に移行する。
【０１９１】
次に、図３７のステップＳ２０３に示した切出し位置計算処理の処理手順について説明する。かかる切出し位置計算処理を実行することで、切出処理部１６０ｅは、抽出条件１５０ｇに対応する符号化データ１５０ｂの位置を計算し、計算した位置の情報を圧縮データのまま抽出する。図４７は、切出し位置計算処理の処理手順を示すフローチャートである。図４７に示すように、切出処理部１６０ｅは、符号化データＢの先頭文字をスキャンし（ステップＳ３０１）、スキャンした文字が文字列部であるか否かを判定する（ステップＳ３０２）。
【０１９２】
切出処理部１６０ｅは、スキャンした文字が文字列部である場合に（ステップＳ３０３，Ｙｅｓ）、文字にあわせて、圧縮データ用ＡＣマシン１５０ｆを１文字遷移させ、照合を検知した場合にｋ＝１に設定し（ステップＳ３０４）、ステップＳ３１１に移行する。
【０１９３】
一方、切出処理部１６０ｅは、スキャンした文字が文字列部でない場合に（ステップＳ３０３，Ｎｏ）、スキャンした文字が開始タグであるか終了タグであるかを判定する（ステップＳ３０５）。
【０１９４】
切出処理部１６０ｅは、スキャンした文字が終了タグの場合に（ステップＳ３０６，Ｎｏ）、ｆ＝１かつｋ＝１の場合に、現在位置をendに登録し、スタックＳの最終要素のstartを取得し、（start、end）をＲに登録する（ステップＳ３０７）。ここで、endに登録する現在位置は、符号化データ１５０ｂの先頭文字から数えた、終了タグ符号の「＞」までの数に対応する。切出処理部１６０ｅは、タグ符号をスタックＳからポップし（取り出し）、ｋ＝０に設定し（ステップＳ３０８）、ステップＳ３１０に移行する。
【０１９５】
一方、切出処理部１６０ｅは、スキャンした文字が開始タグの場合に（ステップＳ３０６，Ｙｅｓ）、タグ符号と現在位置startをスタックＳにプッシュする（格納する）（ステップＳ３０９）。ここで、現在位置startは、符号化データ１５０ｂの先頭文字から数えた、開始タグ符号の「＜」までの数に対応する。
【０１９６】
切出処理部１６０ｅは、スタックＳの値が、変換後抽出条件Ｑ’の項目部と一致する場合にｆ＝１とし、一致しない場合にｆ＝０とし（ステップＳ３１０）、全ての文字をスキャンしたか否かを判定する（ステップＳ３１１）。
【０１９７】
切出処理部１６０ｅは、全ての文字をスキャンしていない場合に（ステップＳ３１２，Ｎｏ）、次の文字をスキャンし（ステップＳ３１３）、ステップＳ３０２に移行する。一方、切出処理部１６０ｅは、全ての文字をスキャンした場合に（ステップＳ３１２，Ｙｅｓ）、Ｒを出力する（ステップＳ３１４）。
【０１９８】
上述してきたように、本実施例１にかかる検索装置１００は、データ圧縮処理部１６０ｂが、ＸＭＬデータ１５０ａを圧縮する場合に、ＸＭＬデータ１５０ａに含まれる文字列と、ＸＭＬデータ１５０ａに含まれる区切り文字とを区別して符号化した符号化データ１５０ｂを生成する。符号化データ１５０ｂは、文字列と区切文字を区別して符号化しているので、切出処理部１６０ｅが抽出条件に基づいて、符号化データ１５０ｂから圧縮データをそのまま切出しても、正確な検索結果を得ることが出来る。
【０１９９】
ところで、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０２００】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０２０１】
図４８は、実施例にかかる検索装置１００を構成するコンピュータのハードウェア構成を示す図である。図４８に示すように、このコンピュータ（検索装置）２００は、入力装置２０１、モニタ２０２、ＲＡＭ（Random  Access  Memory）２０３、ＲＯＭ（Read  Only  Memory）２０４、他の装置（例えば、端末装置）との間でデータの送受信を行う通信装置２０５、記憶媒体からデータを読み取る媒体読取装置２０６、ＣＰＵ（Central  Processing  Unit）２０７、ＨＤＤ（Hard  Disk  Drive）２０８をバス２０９で接続して構成される。
【０２０２】
そして、ＨＤＤ２０８には、上記した検索装置１００の機能と同様の機能を発揮する検索プログラム２０８ｂが記憶されている。ＣＰＵ２０７が、検索プログラム２０８ｂを読み出して実行することにより、検索プロセス２０７ａが起動される。ここで、検索プロセス２０７ａは、図２に示したデータ管理部１６０ａ、データ圧縮処理部１６０ｂ、ＡＣマシン構築部１６０ｃ、照合処理部１６０ｄ、切出処理部１６０ｅに対応する。
【０２０３】
また、ＨＤＤ２０８は、記憶部１５０に格納されたデータに対応する各種データ２０８ａを記憶する。ＣＰＵ２０７は、ＨＤＤ２０８に格納された各種データ２０８ａを読み出して、ＲＡＭ２０３に格納し、ＲＡＭ２０３に格納された各種データ２０３ａを利用して、ＸＭＬデータを圧縮し、抽出条件に対応するデータを圧縮データのまま抽出する。
【０２０４】
ところで、図４８に示した検索プログラム２０８ｂは、必ずしも最初からＨＤＤ２０８に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などに検索プログラム２０８ｂを記憶しておき、コンピュータがこれらから検索プログラム２０８ｂを読み出して実行するようにしてもよい。
【０２０５】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２０６】
（付記１）圧縮されたデータの集合を対象に検索処理を実行する検索システムであって、
データの属性を示す区切情報により各データが区切られたデータ集合を取得し、当該データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することで前記データ集合を圧縮する圧縮処理部
を有することを特徴とする検索システム。
【０２０７】
（付記２）付記１記載の検索システムであって、
前記圧縮処理部により圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、前記圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、前記検索条件の属性を符号化データに置換する置換処理部と、
前記検索条件の属性を符号化データに置換された検索条件と前記圧縮されたデータ集合を基にして、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力する検索処理部と
を有することを特徴とする検索システム。
【０２０８】
（付記３）付記２記載の検索システムであって、
前記検索処理部は、前記圧縮されたデータ集合を先頭から読み出して、前記検索条件の属性に対応する位置の区切情報に囲まれたデータに対応する符号化データを抽出し、抽出した符号化データに対応するデータが前記検索条件のデータを有するか否かを判定し、判定結果に基づいて、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定することを特徴とする検索システム。
【０２０９】
（付記４）コンピュータに、
データの属性を示す区切情報により各データが区切られた階層構造を有するデータ集合を取得し、当該データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することで前記データ集合を圧縮する圧縮処理機能
を実現させるためのプログラムを記録した記憶媒体。
【０２１０】
（付記５）付記４記載の記憶媒体であって、
前記圧縮処理機能により圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、前記圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、前記検索条件の属性を符号化データに置換する置換処理機能と、
前記検索条件の属性を符号化データに置換された検索条件と前記圧縮されたデータ集合を基にして、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力する検索処理機能と
を実現させるためのプログラムを記録した記憶媒体。
【０２１１】
（付記６）付記５記載の記憶媒体であって、
前記検索処理機能は、前記圧縮されたデータ集合を先頭から読み出して、前記検索条件の属性に対応する位置の区切情報に囲まれたデータに対応する符号化データを抽出し、抽出した符号化データに対応するデータが前記検索条件のデータを有するか否かを判定し、判定結果に基づいて、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定することを特徴とする記憶媒体。
【０２１２】
（付記７）圧縮装置が、
データの属性を示す区切情報により各データが区切られた階層構造を有するデータ集合を取得するステップと、
前記データ集合に含まれるデータに基づき符号化データに置換し、さらに、該データの属性を示す区切情報のみに基づき符号化データに置換することで前記データ集合を圧縮するステップと
を実行することを特徴とする圧縮方法。
【０２１３】
（付記８）検索装置が、
付記７に記載の圧縮装置により圧縮されたデータ集合を対象に、検索すべき属性およびデータを有する検索条件を取得した場合に、前記圧縮されたデータ集合の区切情報と置換前の区切情報の関係に基づいて、前記検索条件の属性を符号化データに置換するステップと、
前記検索条件の属性を符号化データに置換された検索条件と前記圧縮されたデータ集合を基にして、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定し、特定した領域に含まれるデータを出力するステップと
を実行することを特徴とする検索方法。
【０２１４】
（付記９）前記データを出力するステップにおいて、前記圧縮されたデータ集合を先頭から読み出して、前記検索条件の属性に対応する位置の区切情報に囲まれたデータに対応する符号化データを抽出し、抽出した符号化データに対応するデータが前記検索条件のデータを有するか否かを判定し、判定結果に基づいて、前記検索条件に指定される前記圧縮されたデータ集合上の領域を特定すること特徴とする付記８に記載の検索方法。
【符号の説明】
【０２１５】
１１０    入力部
１２０    出力部
１３０    通信制御ＩＦ部
１４０    入出力制御ＩＦ部
１５０    記憶部
１５０ａ  ＸＭＬデータ
１５０ｂ  符号化データ
１５０ｃ  対応表
１５０ｄ  ＡＣマシン
１５０ｅ  圧縮辞書データ
１５０ｆ  圧縮データ用ＡＣマシン
１５０ｇ  抽出条件
１５０ｈ  変換後抽出条件
１６０    制御部
１６０ａ  データ管理部
１６０ｂ  データ圧縮処理部
１６０ｃ  ＡＣマシン構築部
１６０ｄ  照合処理部
１６０ｅ  切出処理部
２００    コンピュータ（検索装置）
２０１    入力装置
２０２    モニタ
２０３    ＲＡＭ
２０３ａ，２０８ａ  各種データ
２０４    ＲＯＭ
２０５    通信制御装置
２０６    媒体読取装置
２０７    ＣＰＵ
２０７ａ  検索プロセス
２０８    ＨＤＤ
２０８ｂ  検索プログラム
２０９    バス
【図１】
2010287052.tif 000003
【図２】
2010287052.tif 000004
【図３】
2010287052.tif 000005
【図４】
2010287052.tif 000006
【図５】
2010287052.tif 000007
【図６】
2010287052.tif 000008
【図７】
2010287052.tif 000009
【図８】
2010287052.tif 000010
【図９】
2010287052.tif 000011
【図１０】
2010287052.tif 000012
【図１１】
2010287052.tif 000013
【図１２】
2010287052.tif 000014
【図１３】
2010287052.tif 000015
【図１４】
2010287052.tif 000016
【図１５】
2010287052.tif 000017
【図１６】
2010287052.tif 000018
【図１７】
2010287052.tif 000019
【図１８】
2010287052.tif 000020
【図１９】
2010287052.tif 000021
【図２０】
2010287052.tif 000022
【図２１】
2010287052.tif 000023
【図２２】
2010287052.tif 000024
【図２３】
2010287052.tif 000025
【図２４】
2010287052.tif 000026
【図２５】
2010287052.tif 000027
【図２６】
2010287052.tif 000028
【図２７】
2010287052.tif 000029
【図２８】
2010287052.tif 000030
【図２９】
2010287052.tif 000031
【図３０】
2010287052.tif 000032
【図３１】
2010287052.tif 000033
【図３２】
2010287052.tif 000034
【図３３】
2010287052.tif 000035
【図３４】
2010287052.tif 000036
【図３５】
2010287052.tif 000037
【図３６】
2010287052.tif 000038
【図３７】
2010287052.tif 000039
【図３８】
2010287052.tif 000040
【図３９】
2010287052.tif 000041
【図４０】
2010287052.tif 000042
【図４１】
2010287052.tif 000043
【図４２】
2010287052.tif 000044
【図４３】
2010287052.tif 000045
【図４４】
2010287052.tif 000046
【図４５】
2010287052.tif 000047
【図４６】
2010287052.tif 000048
【図４７】
2010287052.tif 000049
【図４８】
2010287052.tif 000050
【図４９】
2010287052.tif 000051