テキスト検索は 文字列検索でも木検索でもない

42
テテテテテテテ テテテテテテテテテテテテテテ テテテテテテテテテテテテテテテテテテテテテテテ テテテ

Upload: leola

Post on 05-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

テキスト検索は 文字列検索でも木検索でもない. 京都大学人文科学研究所附属漢字情報研究センター 安岡孝一. テキスト処理とコンピュータの出会い. IBM 704 (1954) 入出力に CPY 命令を使用 連続したメモリの内容を順次入出力 FORTRAN I (1956) 「 Hollerith field 」を FORMAT 文に導入 定数長の連続した文字の列 メモリ空間上に連続的に配置. 文字列 (string) の登場. ALGOL 60 (1960) BNF によって定式化 「 string 」を 1 次元の文字の列として定義. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: テキスト検索は 文字列検索でも木検索でもない

テキスト検索は文字列検索でも木検索でもな

い京都大学人文科学研究所附属漢字情報研究センター

安岡孝一

Page 2: テキスト検索は 文字列検索でも木検索でもない

テキスト処理とコンピュータの出会い

• IBM 704 (1954)入出力に CPY 命令を使用

• 連続したメモリの内容を順次入出力

• FORTRAN I (1956)「 Hollerith field 」を FORMAT 文に導入

• 定数長の連続した文字の列• メモリ空間上に連続的に配置

Page 3: テキスト検索は 文字列検索でも木検索でもない

文字列 (string) の登場

• ALGOL 60 (1960)BNF によって定式化「 string 」を 1 次元の文字の列として定義

<proper string> ::= <any sequence of basic symbols not containing ‘ or ’>|<empty><open string> ::= <proper string>|‘<open string>’|<open string><open string><string> ::= ‘<open string>’

多くの実装では「 string 」をメモリに連続配置

Page 4: テキスト検索は 文字列検索でも木検索でもない

文字列処理の実用化

• IBM System/360 (1964)メモリ単位を 8bit=1byte に1 文字 =1byte (EBCDIC)

• PL/I (1964)CHARACTER 型を規定文字列に対する比較操作が可能に

Page 5: テキスト検索は 文字列検索でも木検索でもない

文字列検索アルゴリズムの登場

• Morris-Pratt (1970)部分マッチング後の検索キーのシフト量を

増加• Knuth-Morris-Pratt (1974)

Morris-Pratt をさらに改良• Aho-Corasick (1975)

複数の検索キーに対し平行して検索

Page 6: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 7: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 8: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 9: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 10: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 11: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 12: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 13: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 14: テキスト検索は 文字列検索でも木検索でもない

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Page 15: テキスト検索は 文字列検索でも木検索でもない

逆方向文字列マッチング

• Boyer-Moore (1977)検索キーの末尾からマッチングをおこなう非マッチング時の検索キーのシフト量を増

加• Commentz-Walter (1979)

複数の検索キーに対し Boyer-Moore を適用

Page 16: テキスト検索は 文字列検索でも木検索でもない

Commentz-Walter アルゴリズム

ex) ITALY と TIE と TULIA を検索

I T A L

4

4

3

5

5

5

6

6

7

7

T I

T U L I A

E

Y L 1

I 1

T 2

U 3

その他 3

INSTITUTE FOR RESEARCH IN HUMANITIES

Page 17: テキスト検索は 文字列検索でも木検索でもない

Commentz-Walter アルゴリズム

ex) ITALY と TIE と TULIA を検索

I T A L

4

4

3

5

5

5

6

6

7

7

T I

T U L I A

E

Y L 1

I 1

T 2

U 3

その他 3

INSTITUTE FOR RESEARCH IN HUMANITIES

Page 18: テキスト検索は 文字列検索でも木検索でもない

Commentz-Walter アルゴリズム

ex) ITALY と TIE と TULIA を検索

I T A L

4

4

3

5

5

5

6

6

7

7

T I

T U L I A

E

Y

INSTITUTE FOR RESEARCH IN HUMANITIES

L 1

I 1

T 2

U 3

その他 3

Page 19: テキスト検索は 文字列検索でも木検索でもない

Commentz-Walter アルゴリズム

ex) ITALY と TIE と TULIA を検索

I T A L

4

4

3

5

5

5

6

6

7

7

T I

T U L I A

E

Y

INSTITUTE FOR RESEARCH IN HUMANITIES

L 1

I 1

T 2

U 3

その他 3

Page 20: テキスト検索は 文字列検索でも木検索でもない

Commentz-Walter アルゴリズム

ex) ITALY と TIE と TULIA を検索

I T A L

4

4

3

5

5

5

6

6

7

7

T I

T U L I A

E

Y

INSTITUTE FOR RESEARCH IN HUMANITIES

L 1

I 1

T 2

U 3

その他 3

Page 21: テキスト検索は 文字列検索でも木検索でもない

Commentz-Walter アルゴリズム

ex) ITALY と TIE と TULIA を検索

I T A L

4

4

3

5

5

5

6

6

7

7

T I

T U L I A

E

Y

INSTITUTE FOR RESEARCH IN HUMANITIES

L 1

I 1

T 2

U 3

その他 3

Page 22: テキスト検索は 文字列検索でも木検索でもない

漢字テキスト検索への応用

• 1 文字≠ 1byteex) 「安岡の 1 族」を日本語 EUC で表現

安 岡 の 1 族B0 C2 B2 AC A4 CE 31 C2 B2

単純なバイト列マッチングでは検索に失敗?

Page 23: テキスト検索は 文字列検索でも木検索でもない

漢字テキスト検索への応用

• 1 文字≠ 1byte

• 異体字による曖昧検索ex) 「帝國大學」の検索

「帝国大学」も「帝國大学」も「帝国大學」も…

幾何級数的に組み合わせが増える

「國」の異体字 : 国、囯、囻、圀、囶「學」の異体字 : 学、斈、斆、斅

Page 24: テキスト検索は 文字列検索でも木検索でもない

漢字テキスト検索への応用

• 篠原-有川 (1985)Aho-Corasick を漢字テキスト用に改良ex) 日本語 EUC で「十週休」と「十周休」

を検索BD BD BD B5

A1 ~ AFB1 ~ FE

A1 ~ FE

B5 D9

BCFE

Page 25: テキスト検索は 文字列検索でも木検索でもない

漢字における逆方向マッチング

• 日本語 EUC やシフト JIS では難しい• UTF-8 を考案 (1993)

– ISO 10646 (Unicode) の変形の一種– 1 文字を 1 ~ 6 バイトで表現

• 1 バイト目には 00 ~ 7F 、 C0 ~ FE を使用• 2 バイト目以降には 80 ~ BF を使用

安 岡 の 1 族E5 AE 89 E5 B2 A1 E3 81 AE 31 E6 97 8F安 岡 の 1 族E5 AE 89 E5 B2 A1 E3 81 AE 31 E6 97 8F

Page 26: テキスト検索は 文字列検索でも木検索でもない

UTF-8 での逆方向マッチング

• Commentz-Walter を使用可能∵ 文字間にマッチングすることはありえな

いex) 「大学」「大學」「大斈」を検索

7

7

7

8

8

91011

A6B8

AD

AD8

8896E6

E5

E5E5 A4 A7

88 1

96 2

A4 5

A6 1

A7 4

AD 2

B8 1

E5 3

E6 3

他 6

Page 27: テキスト検索は 文字列検索でも木検索でもない

漢字テキスト検索への応用

• 1 文字≠ 1byte

• 異体字による曖昧検索• テキストの非1次元性

Page 28: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索

私は安岡孝一です。やす おか こう いち

安岡孝一です

私は安岡孝一です。やす おか こう いち

Page 29: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索

私は安岡孝一です。やす おか こう いち

私は安岡孝一です。やす おか こう いち

私はやすおか

Page 30: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索

私は安岡孝一です。やす おか こう いち

私は安岡孝一です。やす おか こう いち

安岡こういち

Page 31: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索

私は安岡孝一です。やす おか こう いち

Page 32: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索• 本文に埋め込まれた注の検索

故宮の神 ( 玄の避諱 ) 武門に向かった。故宮の神 ( 玄の避諱 ) 武門に向かった。

神武門

Page 33: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索• 本文に埋め込まれた注の検索

故宮の神 ( 玄の避諱 ) 武門に向かった。故宮の神 ( 玄の避諱 ) 武門に向かった。

故宮の玄武門

Page 34: テキスト検索は 文字列検索でも木検索でもない

漢字テキストの非1次元性

• ルビつきテキストの検索• 本文に埋め込まれた注の検索

故宮の神 ( 玄の避諱 ) 武門に向かった。

Page 35: テキスト検索は 文字列検索でも木検索でもない

テキスト検索は文字列検索ではない

• テキストの非1次元性にどう対処するか– XML/XHTML を使う?

ex) XHTML における Ruby Annotation (2001)<p> 私は <ruby xml:lang=“ja”><rbc><rb> 安 </rb><rb> 岡 </rb><rb> 孝 </rb><rb> 一 </rb></rbc><rtc><rt> やす </rt><rt> おか </rt><rt> こう </rt><rt> いち </rt></rtc></ruby> です。 </p>

Page 36: テキスト検索は 文字列検索でも木検索でもない

<p> 私は <ruby xml:lang=“ja”><rbc><rb> 安 </rb><rb> 岡 </rb><rb> 孝 </rb><rb> 一 </rb></rbc><rtc><rt> やす </rt><rt> おか </rt><rt> こう </rt><rt> いち </rt></rtc></ruby> です。 </p> p

ruby

rbc

rb rb rbrb

rtc

rt rt rtrt

安 岡 孝 一 やす おか こう いち

私は です。

Page 37: テキスト検索は 文字列検索でも木検索でもない

木構造がテキストの流れと合致しない

p

ruby

rbc

rb rb rbrb

rtc

rt rt rtrt

安 岡 孝 一 やす おか こう いち

私は です。

Page 38: テキスト検索は 文字列検索でも木検索でもない

テキスト検索は文字列検索ではない

• テキストの非1次元性にどう対処するか– Directed Acyclic Graph でテキストを実装?

検索アルゴリズムは?

Page 39: テキスト検索は 文字列検索でも木検索でもない

DAG テキストの検索アルゴリズム

• Aho-Corasick 風アルゴリズム– 深さ優先で容易に実装可能– パスが縮退した際の打ち切りは容易

• Commentz-Walter 風アルゴリズム– 深さ優先で実装可能

通ってきたノードを記憶する必要あり

– パスが縮退した際の打ち切り条件が複雑

Page 40: テキスト検索は 文字列検索でも木検索でもない

DAG テキストの検索アルゴリズム

• 分岐と縮退によるパス数の爆発

• 縮退時の打ち切りは?– Aho-Corasick 風アルゴリズム

初期状態に戻れば確実に打ち切れる– Commentz-Walter 風アルゴリズム

「その他」が起これば確実に打ち切れる

Page 41: テキスト検索は 文字列検索でも木検索でもない

今後の課題

• DAG テキスト検索アルゴリズムの高速化– パス数の爆発を抑えられるか?– 縮退時の打ち切り条件を tight にできる

か?– もっと効率のよいアルゴリズムはない

か?

Page 42: テキスト検索は 文字列検索でも木検索でもない

テキスト検索は文字列検索でも木検索でもな

い京都大学人文科学研究所附属漢字情報研究センター

安岡孝一