文字列探索と ページランク

文字列探索
文字列探索
• データベース(構造化データ)
キーを指定→そのキーを持つレコード検索
• テキスト(非構造データ)
検索したい文字の並び(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%