文字列探索 文字列探索 • データベース(構造化データ) キーを指定→そのキーを持つレコード検索 • テキスト(非構造データ) 検索したい文字の並び(string):パターン 探査される文字列を含む情報:テキスト →腕ずくの方法 KMP(Knuth-Morris-Pratt)法 BM(Boyer-Moore)法 腕ずくの方法 Patten a c 照合失敗 Text a Pattern Text a b a a c b a a b a d 照合失敗 c a Pattern Text c d c c 照合成功 d 腕ずくの方法 ①パターンをテキストの先頭に合わせる ②パターンとテキストを照合 一致→探索の成功 不一致→パターンを1文字ずらす,②へ ③上記手順を繰り返し,パターンがテキスト 末尾に来れば不一致と判断→探索の失敗 文字列照合の例 text: M abcabababccbacabcabb ->t[0-19] N ababc pattern: ababc -> p[0-4] oox ababc x ababc x ababc oooox ababc x ababc ooooo -> t[5] 照合に成功したらtext先頭位置を返す M 腕ずくの文字列照合フローチャート start textからpatternを探索する text, pattern は文字型配列 M:textの文字列長 N :patternの文字列長 出力(戻り値)はpatternが 含まれる場合→textの先頭位置, 含まれない場合→-1 を返す (文字列型配列要素添え字) i=0 i:比較しているtext文字型配列要素添え字 j=0 j:比較しているpattern文字型配列要素添え =/ text[i+j]:pattern[j] 照合成功時は = textとpatternを同時に j=j+1 右へ1シフト M abcabababccbacabcabb N ababc < patternの文字列を すべて調べたか? j:N >= return=i returnを返す N 照合失敗時は textのみを右へ1シフト patternはリセットして先頭へ戻す i=i+1 <= i:M-N 探索終了条件 > return=-1 腕ずくの方法の計算量 テキスト:aaaa….aaa (100文字) パターン:aaaaab(6文字) ①の回数(先頭文字に合わせる回数)? ②の回数(照合回数)? よって,文字比較回数は? テキスト1000文字,10000文字の場合は? よってオーダーは? 単純ソートと比較すると? 100-6+1=95 6 6x95=570 腕ずくの方法の計算量 • テキスト:n文字,パターンm文字 • 最大計算量 テキスト:aaaaaaaaaaaaaaaaaaaaaaaaab パターン:aaaab ①の回数(先頭文字に合わせる回数):(n-m+1) ②の回数(照合回数):m よって,文字比較回数は m(n-m+1) テキスト長n>>パターン長mなので, n-m+1 nearly= n O(mn) nearly = O(n) KMP(クヌース,モーリス,プラット)法 • 腕ずくの方法 →照合失敗時に毎回右へ1シフト →失敗状況に合わせてジャンプできる筈 • 失敗関数の導入 パターンu-1番目の文字まで一致, u番目の文字で不一致が発生した時の 移動量(パターンを何文字右へ移動すべきか)を調 べて表にしておく KMP法, 失敗関数の作成 パターン:tartar, テキスト:????? 4文字目で失敗 tartar, tarb???? tartar →パターンを4文字分ずらして,パターンの1文字目から比較 5文字目で失敗 tartar, tart????? →パターンを5文字分ずらして,パターンの1文字目から比較 6文字目で失敗 tartar, tarta??? →パターンを6文字分ずらして,パターンの1文字目から比較 KMP法の適用例 text: pattern: abcabababccbacabcabb ->t[0-19] ababc -> p[0-4] 上記をKMP法により照合せよ. ※KMP法は,文字列前半が一致,後半が不一致の場 合に効果が現れるが,実際は,不一致が多く発生し ており効果が小さく,腕ずくの方法より遅いこともあ り,実際にはあまり利用されていない. BM (Boyer-Moore)法 テキスト文字列の最後から照合し不一致文字に注目 →一致ではなく,不一致の状況に合わせて, ずらす量を決める (ケース1:dはパターンにないので3ずらす) パターン: abc abc テキスト: abdefgh abdefgh (ケース2:aはパターン1文字目にあるので2ずらす) パターン: abc abc テキスト: abaabcd abaabcd BM法(2) (ケース3:zはパターンにないので5ずらすと駄目.注目点zを5 ずらしてそこを最終文字列とする(3ずらす)) パターン: テキスト: abcab xyzabcabcde abcab xyzabcabcde (ケース4:aは2回目出現のパターン4文字目にあるの で1ずらす) パターン: abcab abcab テキスト: aabcabcabc aabcabcabc BM法の改良 テキスト:xabcxabcx… xoo パターン:xbacx bはパターンに含まれるので最右のbまで1文字 ずらす.でも末尾cxで終わらないから,cxのある 箇所まで3文字ずらす. 例題(1) TOKKYOKYOKAKYOKU (テキスト) KYOKU (パターン) (Yはパターンに含まれているので、そこまで3文字ずらす。) TOKKYOKYOKAKYOKU KYOKU (Yはパターンに含まれているので、そこまで3文字ずらす。) TOKKYOKYOKAKYOKU KYOKU (Aはパターンに含まれていないので、そこを超えて5文字ずらす。) TOKKYOKYOKAKYOKU KYOKU (照合成功) 例題(2) TOKKYOKYOKAKYOKU (テキスト) KYOKU (パターン) ※移動量(パターンの末尾文字の照合時) K 1 Y 3 O 2 U 0 Others 5 上記の表は不完全。末尾でなければ補正必要 ※末尾から2文字目で不一致が検出されれば (移動量ー1)が移動量となる。 検索エンジン 索引ファイル マッチング→ランキング ランク付け されたページ マッチしたページ 検索要求発行 ロンドン バス 時刻表 マッチング ランキング ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ウェブ検索には、マッチングとランキングの2段階がある。第1(マッチング)段階終了後は、 マッチした数干~数百万ものページが残される。第2(ランキング)段階では、これらが関連性 の高さ順にソートされる。 Webページ番号だけから成る索引(インデックス)ファイル 1 the cat sat on the mat 2 a cat dog mat on sat stood the while the dog stood on the mat 3 1 2 1 1 1 2 1 3 3 3 2 2 3 3 2 3 3 1,2,3のWebページから成るWWW フレーズ検索“cat sat“を実現できるか? the cat stood while a dog sat Webページ番号+単語位置情報から成る 索引(インデックス)ファイル 1 the cat sat on 1 2 3 4 the mat 5 6 2 the 1 on 4 dog stood 2 3 the mat 5 6 3 (ページ番号-位置情報) a cat dog mat on sat stood the while 3-5 (ページ番号3の5番目) 1-2 3-2 2-2 3-6 1-6 2-6 1-4 2-4 1-3 3-7 2-3 3-3 1-1 1-5 2-1 2-5 3-1 3-4 the cat stood 1 2 3 while a dog sat 5 6 7 4 マラリアに関連するWebページ 1 2 By far the most common cause of malaria is being bitten by an infected mosquito, but there are also other ways to contract the disease. Our cause was not helped by the poor health of the troops, many of whom were suffering from malaria and other tropical diseases. also 1-19 ・・・ cause 1-6 2-2 ・・・ malaria 1-8 2-19 ・・・ whom 2-15 マラリアを引き起こす原因について説明しているページはどっち? →コンピュータに判断させる方法は? →文章の意味を理解させる人工知能を作る →もっと簡単は方法は? →索引ファイルだけを使う方法がある(精度は落ちるかもしれない) タイトルと本文を持つWebページ ブラウザー表示 1 2 my cat 3 my dog the dog stood on the mat the cat sat on the mat my pets the cat stood while a dog sat HTMLライクな表示:<>メタワード,タグ 1 <title> my cat </title> <body> the cat sat on the mat </body> 2 <title> my dog </title> <body> the dog stood on the mat </body> 3 <title> my pets </title> <body> the cat stood while a dog sat </body> タグと文字を含んだインデックスファイル タイトルにdogを含むページを検索したい a cat dog mat my on pets sat stood the while </body> < <body> t </title> i <title> t 3-10 1-3 1-7 3-7 2-3 2-7 3-11 1-11 2-11 1-2 2-2 3-2 1-9 2-9 3-3 1-8 3-12 2-8 3-8 1-6 1-10 2-6 2-10 3-6 3-9 1-12 2-12 3-13 1-5 2-5 3-5 <1-4 2-4 3-4 t1-1 2-1 3-1 i< l 2-3 2-7 3-11 tt e li E <title>: 1-1 2-1 3-1 et n El d </title>: 1-4 2-4 3-4 ne > dE >n dog: Webページランキング (Googleの基本的アイデア) ハイパーリンク トリック アーニーのスクランブル エッグレシピ バートのスクランブル エッグレシピ ボウルで4個の卵と 塩胡椒少々を混ぜる・・・ まず大さじ1杯のバターを 溶かす・・・ アーニーのレシピ はよい 私はバートのレシピが 本当に気に入った バートのレシピは すばらしい バートのレシピは とてもいい パートのページを参照しているリンクが3つ アーニーのページを参照しているリンクが1つ →バートのページ評価>アーニーのページ評価 オーソリティ トリック アーニーのスクランブル エッグレシピ バートのスクランブル エッグレシピ ボウルで4個の卵と 塩胡椒少々を混ぜる・・・ まず大さじ1杯のバターを 溶かす・・・ ジョン・マコーミックの ホームページ アリス・ウォーターズの ホームページ 私は一度アーニーのレシピ を試してみたが、決して悪い ものではなかった。 バートのレシピは、間違いなく 最良のレシピの1つだ。 ジョン・マコーミック:コンピュータ科学者 アリス・ウォーターズ:有名なシェフ →バートのページ評価>アーニーのページ評価 でも,コンピュータはどちらが権威をもつページなのか分からない オーソリティトリックの近似計算 アーニーのスクランブル エッグレシピ バートのスクランブル エッグレシピ ボウルで4個の卵と 塩胡椒少々を混ぜる・・・ まず大さじ1杯のバターを 溶かす・・・ 2 ジョン・マコーミックの ホームページ 私は一度アーニーのレシピ を試してみたが、決して悪い ものではなかった。 1 1 100 アリス・ウォーターズの ホームページ バートのレシピは、間違いなく 最良のレシピの1つだ。 100 2 1 1 1 1 ・・・100pages・・・ 1 1 1 1 循環参照問題 A C B D E ハイパーリンクの循環参照の例.A、B、Eページは、Aからスタートして、B、続いてEに移動し, 最後に出発点であるAに戻ってこれてしまうので循環参照を形成している。 A C 1 B 2 A 2 D 1 E 2 C 1 B 4 4 D 1 E 循環参照によって起きる問題。 A、B、Eのスコアはいつも修正が必要になり、無限に大きくなっていってしまう。 4 ランダムサーファーモデル B C A 濃い色:サーファーが訪れたページ 破線の矢印:ランダムな再スタート サーファーは、Aからスタートし、2回のランダムな再スタートをはさんで, ランダムにハイパーリンクを選択している。 D ランダムサーファーモデルの シミュレーション B 109 1000回 (訪問回数) 16 74 55 58 13 C 46 55 32 17 21 A 118 126 15 101 144 D B 100万回 (訪問割合) 10% 2% 7% 4% 2% C 15% D 5% 4% 4% 4% 2% 2% A 13% 14% 10% 2% サーファーオーソリティ(1) アーニーのスクランブル エッグレシピ バートのスクランブル エッグレシピ 1% 28% ジョン・マコーミックの ホームページ アリス・ウォーターズの ホームページ 1% 0.4% 0.4% 0.4% 32% 0.4% 0.4% 0.4% ・・・100pages・・・ 0.4% 0.4% 0.4% 0.4% サーファーオーソリティ(2) A B 33% C 31% D 3% E 3% 30%
© Copyright 2024 Paperzz