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

Post on 05-Jan-2016

38 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

安岡孝一

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

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

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

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

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

文字列 (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 」をメモリに連続配置

文字列処理の実用化

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

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

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

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

増加• Knuth-Morris-Pratt (1974)

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

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

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

Aho-Corasick アルゴリズム

ex) ITALY と TIE と TULIA を検索

INSTITUTE FOR RESEARCH IN HUMANITIES

I

TI

I

E

AT L

L

Y

UA

逆方向文字列マッチング

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

加• Commentz-Walter (1979)

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

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

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

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

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

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

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

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

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

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

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

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

• 1 文字≠ 1byte

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

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

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

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

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

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

を検索BD BD BD B5

A1 ~ AFB1 ~ FE

A1 ~ FE

B5 D9

BCFE

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

• 日本語 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

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

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

• 1 文字≠ 1byte

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

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

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

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

安岡孝一です

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

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

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

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

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

私はやすおか

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

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

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

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

安岡こういち

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

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

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

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

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

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

神武門

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

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

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

故宮の玄武門

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

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

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

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

• テキストの非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>

<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

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

私は です。

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

p

ruby

rbc

rb rb rbrb

rtc

rt rt rtrt

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

私は です。

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

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

検索アルゴリズムは?

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

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

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

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

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

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

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

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

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

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

今後の課題

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

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

か?

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

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

安岡孝一

top related