パタンマッチャをGenerate and Filter で利用
展開ヘルプでは、
を幅優先的に
のように
木構造に展開するのと同時に、ユーザから与えられた検索文字列とそれまでに生成された文字列とのマッチングを行なって
シフタアルゴリズムのマッチング状況を木のノードに格納する。
ユーザから「時計 3 時」☆という検索パタンが与えられたときは
のような状態遷移機械を利用する。
この状態遷移機械の初期状態での各ノードのアクティブ状態は
になる。シフタアルゴリズムによる表現では
{00100, 01000, 10000}
となるので、この値を開始ノードS に格納しておく。
この状態遷移機械が「時」を認識すると、S に格納された値と入力文字「時」からマッチング状態が計算されてアクティブ状態が
に変化し、この値
{01110, 11100, 11000}
を 2 番目のノードに格納する。
このように、各ノードのマッチング状態は遷移前のノードの状態と遷移文字のみから計算されてノードに保存される。状態遷移機械を木構造に展開して文字列を生成するのと同時にシフタアルゴリズムのマッチングを実行し、その結果のマッチングパタンを出力される木構造のノードに格納することにより、文字列の出力とフィルタリングを同時に行なう
Generate and Filterが実現されることになる。
ノード1 のマッチ状態を見るとシフタアルゴリズムのマッチャの右上のノードがアクティブになっているため、「時間を3」および「時刻を3」という文字列が「時計 3 時」というパタンに曖昧度2 でマッチしていることがわかる。また2 では最右桁の上から二番目のノードもアクティブになっているため、「時間を3 時」および「時刻を3 時」という文字列が「時計 3 時」に曖昧度1 でマッチしていることがわかる。