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