LZW 圧縮テキストに対する 高速文字列照合アルゴリズム 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科

Slides:



Advertisements
Similar presentations
Collage System 圧縮テキストパターン照合のための統一的枠組み
Advertisements

圧縮テキストに対する文字列照合問題 竹田研究室 博士課程二年 喜田 拓也.
文法変換に基づく圧縮 九州大学附属図書館 研究開発室 喜田拓也.
区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
第1回 確率変数、確率分布 確率・統計Ⅰ ここです! 確率変数と確率分布 確率変数の同時分布、独立性 確率変数の平均 確率変数の分散
LZ符号化 森田 岳史.
情報生命科学特別講義III (1) 文字列マッチング
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
コンパイラ 2011年10月17日
全体ミーティング (4/25) 村田雅之.
JavaによるCAI学習ソフトウェアの開発
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
5.チューリングマシンと計算.
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
アルゴリズムとデータ構造 2012年7月19日
5.チューリングマシンと計算.
C言語 配列 2016年 吉田研究室.
上坂吉則 尾関和彦 文一総合出版 宮崎大輔2003年6月28日(土)
データ構造と アルゴリズム 第二回 知能情報学部 新田直也.
模擬国内予選2014 Problem C 壊れた暗号生成器
データ構造と アルゴリズム 知能情報学部 新田直也.
コンパイラ 2012年10月15日
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
基礎情報科学のトピックス (平成15年度版) 喜田拓也 (
日本語解析済みコーパス管理ツール 「茶器」
アルゴリズムとデータ構造 2013年7月18日
A Unifying Framework for Compressed Pattern Matching
篠原 歩,石野 明 東北大学情報科学研究科 竹田 正幸 九州大学システム情報科学研究院 下薗 真一,坂本 比呂志 九州工業大学情報工学部
データ構造とプログラミング技法 (第10回) ー文字列照合(KMP法、BM法)ー.
形式言語とオートマトン2013 ー有限オートマトンー 第5日目
ネット時代の情報センス 基礎情報科学のトピックス.
九州大学大学院システム情報科学研究科 情報理学専攻 竹田研究室 博士課程3年 喜田 拓也
Pattern Matching on Compressed Texts
k 個のミスマッチを許した点集合マッチング・アルゴリズム
喜田 拓也,竹田 正幸,篠原 歩 九州大学大学院システム情報科学府 情報理学専攻
プログラミング言語論 第3回 BNF記法について(演習付き)
決定木とランダムフォレスト 和田 俊和.
Fast Pattern Matching Algorithms in Compressed Texts
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
文字列照合を用いた XMLデータアクセス機構の提案
Proceedings of the Third South American Workshop on String Processing.
確率的学習アルゴリズムを用いた有限状態オートマトンの抽出に関する研究
形式言語とオートマトン Formal Languages and Automata 第4日目
実行時情報に基づく OSカーネルのコンフィグ最小化
確率的学習アルゴリズムを用いた有限状態オートマトンの抽出に関する研究
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
Ibaraki Univ. Dept of Electrical & Electronic Eng.
アルゴリズムとデータ構造 2011年7月12日
情報処理概論Ⅰ 2007 第10回 2007/6/27 情報処理概論Ⅰ 第10回.
半構造化テキストに対する 文字列照合アルゴリズム
アルゴリズムとプログラミング (Algorithms and Programming)
GPGPUによる 飽和高価値 アイテム集合マイニング
データ圧縮技術による文字列照合処理の高速化に関する研究
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三
長さの制限付きギャップと 文字クラスを含むパタンに対する 照合アルゴリズムの改善
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
形式言語とオートマトン 中間試験解答例 2016年11月15実施 中島毅.
計算の理論 I 決定性有限オートマトン(DFA) と 非決定性有限オートマトン(NFA)
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
Data Clustering: A Review
構造的類似性を持つ半構造化文書における頻度分析
5.チューリングマシンと計算.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
コンパイラ 2012年10月11日
形式言語とオートマトン Formal Languages and Automata 第5日目
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
8.文字列処理 8.1 C#の文字列 C#では, “ABCD”のように文字列を2重引用符で挟んで指定します。ASCIIコード体系のとき,以下のような内部形式となります。 1 1 文字 ‘A’ ナル文字 1 1 文字 ‘B’ A B C D \ 文字 ‘C’ 1 1 文字 ‘D’ ナル文字‘\0’
Time Reversal E-Text: pp.80-83(PDF: pp.49-50) FM08002 太神 諭
Presentation transcript:

LZW 圧縮テキストに対する 高速文字列照合アルゴリズム 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科 九州大学大学院システム情報科学研究科の喜田です。 それでは「LZW圧縮テキストに対する高速文字列照合アルゴリズム」について説明をさせていただきます。

はじめに 文字列照合問題 (Pattern Matching Problem) ヲトコ ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ パターン : ヲトコ テキスト : ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ Knuth-Morris-Pratt 法 (1974) Boyer-Moore 法 (1977) Aho-Corasick 法 (1975) ここでタイトルにある文字列照合問題とは、 このようにパターンとテキストと呼ばれる二つの文字列が与えられたとき、 テキスト中からパターンを発見する問題のことをいいます。 この問題を解くためアルゴリズムは、既に数多く提案されています。 これらはどれもテキストの長さとパターンの長さの和に比例した時間で 問題を解決することができます。 Uratani-Takeda 法 (1992) O( テキストの長さ + パターンの長さ ) ・・・

目的 文書ファイル群 起動実験「やります。 僕が乗ります」「起動確率は0.0000000001%」 セントラルドグマ「初号機、完全に沈黙」せめて、人間らしく「僕はもうエヴァには乗りません」覚醒 強迫観念「ダメなのね・・・もう」シンクロ率400%「逃げちゃだめだ、逃げちゃだめだ・・・」アンビリカルケーブル断線「活動限界まで4分53秒」「私には他に何もないもの・・・」ヤシマ作戦 決戦、第3新東京市「あんたバカァ」セカンドインパクト「私達は選ぶ余裕なんてないのよ。生き残るための手段をね」強羅絶対防衛線 完璧なユニゾン「命令があればそうするわ」自己修復中 ジェリコの壁 人類補完計画「とれないや。血の匂い」「帰れ!」ディラックの海 「駄目です。停止信号受け付けません」「歌はいいねぇ。リリスの生み出した文化 この文字列照合の身近な例は検索です。 つまり大量の文書ファイル、たとえばメールや論文などの中から、 ある単語を含む文書を見つけたい場合、文字列照合を行います。 しかしながらこのような大量の文書は、しばしば、 圧縮して保存することがあります。

目的 圧縮文書ファイル群 aldoghqu3850pcxps;lafdjaeqw09bjzpafq05^@62:vzZIAPF’(90rwDEVcx0832nkvl;pzp99OPF:eDfja この状態では、単純に文字列照合を行うことができません。 一般的に、このような圧縮文書ファイルに対して文字列照合を行う場合、 一旦もとのファイルに展開した後、文字列照合を行うという方法がとられますが、手間がかかります。 そこで何とか圧縮文書ファイルのまま文字列照合を行なおう、 というのが研究の目的です。

Previous studies year researcher compression method 1988 Eliam-Tsoreff and Vishkin run-length 1992 Amir, Landau, and Vishkin two-dimensional 1995 Farach and Thorup LZ77 1996 Amir, Benson and Farach LZW 1997 Karpinski, et al. straight-line programs 1998 Kida, Takeda, Shinohara, Miyazaki, Arikawa Amir and Benson Gasieniec, et al. Miyazaki, Takeda, Shinohara これまでに多くの研究者が、この問題に取り組んできました。 特に自分は、LZW圧縮法と呼ばれる圧縮法で圧縮されたテキストファイル に対する文字列照合問題に取り組みました。 まずは、このLZW圧縮法について簡単に説明します。

Lempel-Ziv-Welch 圧縮法 (Unix の compress コマンド、 GIF形式の画像圧縮など) a b ab ab ba b c aba bc abab テキスト: 圧縮されたテキスト: 1 2 3 4 5 6 9 11 b a c 1 2 3 4 5 6 7 9 8 12 10 11 O(辞書木の大きさ) LZW圧縮法は、UnixのCompressコマンドやGIF形式の画像圧縮などに 利用されている、非常にポピュラーな圧縮法の一つです。 詳細な圧縮の手順は述べませんが、テキストを先頭から読み込んでゆき、 このような辞書木を構築します。 辞書木の各ノードは文字列に対応しており、 テキストの文字列に対応するノードの番号を圧縮テキストとして掃き出します。 たとえば aba だと 6 という具合になります。 圧縮テキストからも同一の辞書木を構築することができます。 その際、テキストを展開する必要がなく、辞書木を構築するだけならば、 圧縮テキストの長さに比例した時間で辞書木を構築することができます。 O( 圧縮テキストの長さ ) 辞書木: D

アルゴリズムの概要 (KMP法による文字列照合の場合) パターン : ヲトコ テキスト : ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ 1 2 3 探索の状態 ヲ ト コ 1. テキストから文字を読み込む。 本題に入ります。 普通のテキストの場合、KMP法で文字列照合を場合を例にとると、 このようにテキストから一文字読み込み、パターンと一致していれば状態を 次の段階に遷移させ、違っていたら戻るという処理を繰り返します。 双六と同様最後の状態に到達したらパターンが発見というわけです。 しかしLZW圧縮されたテキストの場合、文字の代わりに整数を読み取ります。 その整数は辞書木に示された文字列に対応しているので、したがって、 その文字列に対応した状態遷移を行なうようにアルゴリズムを拡張します。 2. 状態を更新する。 3. パターンが出現したかどうかを判断する。 4. 「1.」へ戻る。

アルゴリズムの概要 (LZW圧縮されたテキスト上の文字列照合の場合) パターン : ヲトコ テキスト : ヲモイコンダラシレンノミチヲイクガヲトコノ・・・ 1 2 3 探索の状態 ヲ ト コ 1. 圧縮テキストから数字(文字列)を読み込む。 つまり、この例で今状態 1 にあるとき、文字列「トコ」を現す整数を受け取った ならば、状態を 3 に更新するわけです。 文字列照合の流れはこのようになります。 しかしそれだけでは、ひとつ問題が生じます。 2. 辞書木と状態を更新する。 3. パターンが出現したかどうかを判断する。 4. 「1.」へ戻る。

アルゴリズムの概要 (LZW圧縮されたテキスト上の文字列照合の場合) 1 2 3 探索の状態 ヲ ト コ ・・・ ヲト コノドコンジヨウ ・・・ 状態: 2 状態: 0 パターンの出現を検知する関数が必要 Output( 現在の状態, 圧縮テキストの整数一個 ) 今この例で、状態 2 にあるとき、次に「コ」に対応する整数がきたならば、 パターンが出現したと分かりますが、もし「コノドコンジョウ」に対応する整数が 入力された場合、次の状態は 3 を飛ばして 0 になります。 すなわちこのような飛び飛びの状態遷移では、パターンの出現を見逃して しまう可能性があるわけです。 したがって、状態と整数からパターンの出現を見極める関数を別個に用意 する必要があります。 単純にテーブルを使ってこの関数を表現することもできますが、 定義域が大きいのでテーブルのサイズが問題になります。 今回われわれが提示したアルゴリズムでは辞書木の大きさのオーダーのテーブルを用意することで、この関数を実現することができました。 O(とりうる状態の個数×辞書木の大きさ) O(辞書木の大きさ)

実験の結果 5 10 15 20 25 30 テキストを一時ファイルに展開後検索 CPU time (s) テキストを展開しながら検索 T. Kida, M. Takeda, A Shinohara, M.miyazaki, and S. Arikawa. Multiple pattern matching in LZW compressed text. In J. A. Atorer and M. Cohn eds., Proceedings of Data Compression Conference ’98, pp. 103-112. IEEE Computer Society, March 1998 5 10 15 20 25 30 テキストを一時ファイルに展開後検索 CPU time (s) テキストを展開しながら検索 テキストを展開せずに検索 われわれは、既にこのアプローチが実際的にも有効であることを示しました。 この表はDataCompressionConference98という学会で発表したときのものです。 このときは Aho-Corasick 照合機械をベースに、圧縮テキスト上の文字列照合 アルゴリズムを構築しました。 今回の論文ではアルゴリズムの更なる高速化を図るために Shift-And 法と 呼ばれる文字列照合の方法をベースにしています。 5 10 15 20 25 Occurrence rate ( % ) (number of pattern occurrences / original text length)

Shift-And 法 (Abrahamson 1987, Wu-Manber 1992) aabac パターン:= マスクビット テキスト:= aabaacaabacab abc a b c 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 この Shift-And 法は比較的新しい文字列照合方法です。 まず、このようにパターン長のビットベクトルで照合の状態を表します。 また使用されている文字について、このようなマスクビットを用意します。 1が立っている個所は、この文字がパターンに現れている位置を示します。 状態遷移についてですが、3列目から4列目への遷移を例にとると、 まずビットベクトルをシフトさせます。一番上には1が入ります。 それからテキストの文字に対応するマスクビットとのアンドをとります。 その答えが次の状態となります。 1が立っているビットは、パターンの何ビット目までテキストと一致しているかを示しています。 したがってこの位置のビットが1であればパターンが発見されたと分かります。 この Shift-And 法は、実際に高速な文字列照合です。 また様々な拡張を比較的施し易いという特徴も持っています。 これをLZW圧縮テキスト上で文字列照合ができるように拡張しました。 その詳細は論文のほうをご覧下さい。 O( テキスト長 ) で照合可能 &

実験の結果(テキスト約 6.5Mb, 圧縮時約 3.4Mb) (Shift-And 法を利用したアルゴリズム) CPU時間(s) パターンの出現回数(出現 / テキスト長) (%) 0.5 1.0 2.0 3.0 1.5 2.5 3.5 4.0 0.000 0.001 0.014 0.066 0.151 0.498 1.460 Kida, et al. 1998 今回のアルゴリズム 実験の結果です。 こちらは前回の Aho-Corasick 法をベースにしたアルゴリズムです。 縦軸が時間で、横軸がパターンの出現回数です。 今回のアルゴリズムが前回より更に高速であることが示されました。 Sun SPARCstation20

まとめ 今後の課題 提案アルゴリズムの計算量 O(圧縮テキストの長さ+パターンの長さ+出現回数) 時間 O( 辞書木の大きさ ) 領域 展開後検索を行うよりも約 1.5 倍高速である。 またAho-Corasick法を利用したアルゴリズムより 1.3 倍高速である。 一般化した文字列照合問題やミスマッチを許した文字列照合も扱うことができる。 近似(文字の挿入・削除・置換を許す)文字列照合への対応 今後の課題 まとめです。 提案アルゴリズムは、展開後検索を行うよりも約 1.5 倍高速で、 Aho-Corasick法を利用した前回のアルゴリズムより 1.3 倍高速です。 また、一般化した文字列照合問題やミスマッチを許した文字列照合も 扱うことができます。 今後の課題は、近似文字列照合への対応です。 近似文字列照合とはパターンとのエディット・ディスタンス(編集距離)が k 以下の文字列を検索することです。 NATTO 1 例: NATO 2 GTO NAGOYA 1 KATO 3

一般化された文字列照合問題 Σ を文字の有限集合, Δ= { X ⊆Σ| X ≠φ} とする。 パターン P = X1 ... Xm (Xi ∈Δ) と テキスト T = T [1 : n] が与えられたとき、 T [ j : j+m-1 ] ⊆ P となるような j を求めよ。 一般化された文字列照合問題とは、 数式を交えて書くとこのようになります。 つまりパターンとしてこのような正規表現に制限を加えたような パターン文字列を照合する問題です。 (a+b)cde(f+g+h)i 例: 092-627-72XX ( X は 0~9 の数字 ) **えもん ( *は任意の文字 )

ミスマッチを許した文字列照合 パターン文字列のうち、 k 個以下の文字が置き換わった文字列もパターンと一致するとみなした検索。 例: Pattern : ムーミン, k = 1 とした場合 正 誤 ミスマッチを許した文字列照合とは、たとえばこの例のように、 パターンと k 個以下の文字が入れ替わった文字列もパターンに含む問題です。 ユーミン ラーメン ノーミン ローソン ムーラン ノーシン