文字列探索...2012/11/27  · n = =/ >= < >

Post on 12-Jul-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

文字列探索

文字列探索

• データベース(構造化データ) キーを指定→そのキーを持つレコード検索

• テキスト(非構造データ) 検索したい文字の並び(string):パターン 探査される文字列を含む情報:テキスト →腕ずくの方法 KMP(Knuth-Morris-Pratt)法 BM(Boyer-Moore)法

腕ずくの方法

a c

a c

a c

a b a c d

a b a c d

Patten

Text

Pattern

Text

Pattern

Text

照合失敗

照合失敗

照合成功

a b a 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先頭位置を返す

start

i=0

j=0

j=j+1 i=i+1

text[i+j]:pattern[j]

return=-1

returnを返す

return=i

腕ずくの文字列照合フローチャート

textからpatternを探索する

text, pattern は文字型配列

M:textの文字列長

N :patternの文字列長

出力(戻り値)はpatternが

含まれる場合→textの先頭位置,

含まれない場合→-1 を返す

(文字列型配列要素添え字)

i:比較しているtext文字型配列要素添え字

j:比較しているpattern文字型配列要素添え字

M

N

=

=/

>=

<

>

<=

探索終了条件

照合成功時は

textとpatternを同時に

右へ1シフト

照合失敗時は

textのみを右へ1シフト

patternはリセットして先頭へ戻す

patternの文字列を

すべて調べたか?

j:N i:M-N

M abcabababccbacabcabb N ababc

腕ずくの方法の計算量

テキスト: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: abcabababccbacabcabb ->t[0-19]

pattern: 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 abcab

テキスト: xyzabcabcde 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(ランキング)段階では、これらが関連性 の高さ順にソートされる。

検索要求発行

ロンドン バス 時刻表 マッチング ランキング

マッチしたページ ランク付け されたページ

マッチング→ランキング

1 2 3 the cat sat on the mat

the dog stood on the mat

the cat stood while a dog sat

1,2,3のWebページから成るWWW

a 3 cat 1 3 dog 2 3 mat 1 2 on 1 2 sat 1 3 stood 2 3 the 1 2 3 while 3

Webページ番号だけから成る索引(インデックス)ファイル

フレーズ検索“cat sat“を実現できるか?

2 3 the cat sat on the mat

the dog stood on the mat

the cat stood while a dog sat

a 3-5 (ページ番号3の5番目) cat 1-2 3-2 dog 2-2 3-6 mat 1-6 2-6 on 1-4 2-4 sat 1-3 3-7 stood 2-3 3-3 the 1-1 1-5 2-1 2-5 3-1 while 3-4

1 2 1 3 4

6 5

2 1 3

4 6 5

2 1 3

4 6 5 7

Webページ番号+単語位置情報から成る 索引(インデックス)ファイル

(ページ番号-位置情報)

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.

2 1

also 1-19 ・・・ cause 1-6 2-2 ・・・ malaria 1-8 2-19 ・・・ whom 2-15

マラリアを引き起こす原因について説明しているページはどっち? →コンピュータに判断させる方法は? →文章の意味を理解させる人工知能を作る →もっと簡単は方法は? →索引ファイルだけを使う方法がある(精度は落ちるかもしれない)

マラリアに関連するWebページ

1 2 3

the cat sat on the mat

the dog stood on the mat

the cat stood while a dog sat

my cat my dog my pets

タイトルと本文を持つWebページ

2 3

<body> the cat sat on the mat </body>

<body> the dog stood on the mat </body>

the cat stood while a dog sat </body>

<title> my cat </title>

1 <title> my dog </title>

<title> my pets </title> <body>

ブラウザー表示

HTMLライクな表示:<>メタワード,タグ

a cat dog mat my on pets sat stood the while </body> <body> </title> <title>

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 1-1 2-1 3-1

dog: 2-3 2-7 3-11 <title>: 1-1 2-1 3-1 </title>: 1-4 2-4 3-4

<title End>

<title End>

<title End>

タグと文字を含んだインデックスファイル タイトルにdogを含むページを検索したい

Webページランキング (Googleの基本的アイデア)

アーニーのスクランブル エッグレシピ

ボウルで4個の卵と 塩胡椒少々を混ぜる・・・

バートのスクランブル エッグレシピ

まず大さじ1杯のバターを 溶かす・・・

アーニーのレシピ はよい

バートのレシピは とてもいい

私はバートのレシピが本当に気に入った

バートのレシピは すばらしい

パートのページを参照しているリンクが3つ アーニーのページを参照しているリンクが1つ →バートのページ評価>アーニーのページ評価

ハイパーリンク トリック

アーニーのスクランブル エッグレシピ

ボウルで4個の卵と 塩胡椒少々を混ぜる・・・

バートのスクランブル エッグレシピ

まず大さじ1杯のバターを 溶かす・・・

ジョン・マコーミックの ホームページ

私は一度アーニーのレシピ を試してみたが、決して悪い ものではなかった。

アリス・ウォーターズの ホームページ

バートのレシピは、間違いなく 最良のレシピの1つだ。

ジョン・マコーミック:コンピュータ科学者 アリス・ウォーターズ:有名なシェフ →バートのページ評価>アーニーのページ評価 でも,コンピュータはどちらが権威をもつページなのか分からない

オーソリティ トリック

アーニーのスクランブル エッグレシピ

ボウルで4個の卵と 塩胡椒少々を混ぜる・・・

バートのスクランブル エッグレシピ

まず大さじ1杯のバターを 溶かす・・・

ジョン・マコーミックの ホームページ

私は一度アーニーのレシピ を試してみたが、決して悪い ものではなかった。

アリス・ウォーターズの ホームページ

バートのレシピは、間違いなく 最良のレシピの1つだ。

2

2

100

100

1 1 1 1

1 1

1 1

1 1

・・・100pages・・・

オーソリティトリックの近似計算

A B

C D E

ハイパーリンクの循環参照の例.A、B、Eページは、Aからスタートして、B、続いてEに移動し, 最後に出発点であるAに戻ってこれてしまうので循環参照を形成している。

A 2 2

B

1 C

1 D

2 E

A 4 4

B

1 C

1 D

4 E

循環参照によって起きる問題。 A、B、Eのスコアはいつも修正が必要になり、無限に大きくなっていってしまう。

循環参照問題

濃い色:サーファーが訪れたページ 破線の矢印:ランダムな再スタート サーファーは、Aからスタートし、2回のランダムな再スタートをはさんで, ランダムにハイパーリンクを選択している。

B

A

C

D

ランダムサーファーモデル

A

B

C

D 118 126 144 101

109

55 55

74

32

58

16

46

15

21

17

13

A

B

C

D 13% 14% 10%

10%

4%

7% 5%

2%

4%

2%

4% 4%

2%

2%

2%

15%

1000回 (訪問回数)

100万回 (訪問割合)

ランダムサーファーモデルの シミュレーション

アーニーのスクランブル エッグレシピ

バートのスクランブル エッグレシピ

1%

ジョン・マコーミックの ホームページ

アリス・ウォーターズの ホームページ

0.4%

・・・100pages・・・

28%

1% 32%

0.4% 0.4% 0.4%

0.4% 0.4%

0.4% 0.4%

0.4% 0.4%

サーファーオーソリティ(1)

A 33% 31%

B

3% 30% 3%

C D E

サーファーオーソリティ(2)

top related