半構造化テキストに対する文字列照合アルゴリズム

文字列照合を用いた
XMLデータアクセス機構の提案
喜田 拓也* 宮本 哲† 竹田 正幸†
*九州大学附属図書館研究開発室
†九州大学システム情報科学府情報理学専攻
発表者: 喜田 拓也
発表内容

研究の目的
既存の手法
 我々のアプローチ



文字列照合による処理の利点と問題点
提案アルゴリズム



誤検出を回避する方法
パスを考慮した照合処理
実験結果
XPathのサブセット
 まとめ

情報処理学会九州支部 若手の会セミナー
2002
2/15
既存の手法
メモリ
XML文書
“”
person
X
M
L
パ
ー
サ
ー
XML文書
person
person/
name
“”
person/
name/first
Makiko
first
person/
name/last
last
Tanaka
Makiko
…
Tanaka
…
name
DOM
API
情報処理学会九州支部 若手の会セミナー
2002
プ
ロ
グ
ラ
ム
3/15
我々のアプローチ
XML文書
メモリ
<person>
<name>
<first>
Makiko
</first>
<last>
Tanaka
</last>
</name>
</person>
XML文書
文
字
列
照
合
ア
ル
ゴ
リ
ズ
ム
情報処理学会九州支部 若手の会セミナー
2002
プ
ロ
グ
ラ
ム
4/15
利点
処理が高速
XML文書
少ないメモリで可
様々な応用
木構造


巨大なXML文書や大量の文書群を一括に処理
複数の質問を同時に処理
情報処理学会九州支部 若手の会セミナー
2002
5/15
文字列照合問題
パタン
テキスト
matching
Pattern matching is one of the most fundamental operations in string
processing. Recently, a new trend for accelerating pattern matching
has emerged: Speeding up pattern matching by text compression.
From the traditional criteria for data compression, i.e., compression
ratio and compression/decompression time, adaptive dictionary
methods such as the Lempel-Ziv family are often preferred. However,
such methods cannot speed up the pattern matching since an extra
work is needed to keep track of compression mechanism.
Knuth-Morris-Pratt (1974)
Boyer-Moore (1977)
Aho-Corasick (1975)
Shift-Or (1992)
情報処理学会九州支部 若手の会セミナー
2002
6/15
Aho-Corasick(AC)照合機械
パタン集合:={other, <mother>}
0
任意の
文字
o
1
t
2
h
e
3
4
r
other
5
<
14
6
m
7
o
8
t
9
h
10
e
11
r
>
12
13
other <mother>
goto遷移
failure遷移
情報処理学会九州支部 若手の会セミナー
2002
7/15
問題点

タグ名の一部分とマッチする
<body>
<h1>あのTVCM</h1>
<p>
<mother>
mother
</mother>
mを取ったらother、
<other>
他人
</other>
です.
</p>
</body>
情報処理学会九州支部 若手の会セミナー
2002
誤
っ
た
検
出
8/15
解決策
< 以外
の文字
<
>
> 以外
の文字
< 以外
の文字
14
<
15
o
0
> <
6
m
t
1
7
o
h
2
8
t
e
3
9
h
4
10
r
e
> 以外
の文字
情報処理学会九州支部 若手の会セミナー
2002
other
5
11
r
12
>
13
<mother>
9/15
PMM構築方法
< 以外
の文字
14
<
>
15
0
> 以外
の文字
< 以外
の文字
14
<
15
o
0
> <
6
m
t
1
7
o
h
2
8
t
e
3
9
h
4
10
r
e
> 以外
の文字
情報処理学会九州支部 若手の会セミナー
2002
other
5
11
r
12
>
13
<mother>
10/15
パスを考慮した照合
苗字が「Tanaka」の人を探したい!
<person><name><last>がTanaka
(Xpathだと,要素 //person/name/last/ が「Tanaka」)
情報処理学会九州支部 若手の会セミナー
2002
11/15
アイデア
スタック
0
(<last>,2)
<person>
(<name>,1)
(<person>,0)
<person>
以外のタグ
1
(<xml>,0)
<name>
2
< 以外
の文字
o
0
14
t
h
1
e
2
3
<last>
r
4
5
other
<
>
6
> 以外
の文字
3
<
15
m
7
o
8
t
9
h
10
e
11
r
12
>
13
<mother>
={<person>,</person>,<name>,</name>,<last>,</last>,…}
={Tanaka}
情報処理学会九州支部 若手の会セミナー
2002
12/15
実験結果

Sgrep(J. Jaakkola and P. Kilpeläinen)との比較
パタン
//text/"summers"
//test//"summers"
/site/regions/africa
/item/location/
"United_States"
Sgrep
38.44
37.02
51.85
提案アルゴリズム
12.40
12.30
12.23
CPU時間(秒)
テキスト:110MB(英文テキスト)
CPU : Celelon 366MHz
メモリ : 128MB
OS
: Kondara/MNU Linux 2.1 RC2
情報処理学会九州支部 若手の会セミナー
2002
13/15
処理可能なXPathのサブセット

文字列照合による手法の限界


先行ノードの指定はできない!
複雑なフィルタの指定は照合速度を著しく低下させる。
LocationPath
::= '/' RelativeLocationPath
NodeTest ::= QName
RelativeLocationPath ::= Step
| NodeType '(' ')'
| RelativeLocationPath '/' Step
NodeType ::= 'node'
Step
::= AxisSpecifier NodeTest
| 'text'
AxisSpecifier ::= AxisName '::'
| 'comment'
AxisName
::= 'attribute'
| 'processing-instruction'
| 'child'
| 'descendant'
| 'descendant-or-self'
/descendant::cars/child::car/attribute::node()
| 'following'
| 'following-sibling'
| 'self'
//cars/car/@*
| 'namespace'
情報処理学会九州支部 若手の会セミナー
2002
14/15
まとめ

XML文書に対する文字列照合処理


誤検出しない効率的な照合機械の構築
パスを考慮したアルゴリズム
Sgrepに比べ3倍以上高速
 処理可能なXPathのサブセットを定義


今後の課題


XPathのサブセットに対する実装
XML文書を圧縮して処理を高速化
情報処理学会九州支部 若手の会セミナー
2002
15/15