シフタアルゴリズムによる曖昧パタンマッチ
「restaurant」を認識する状態遷移機械.iconは「restaurant」というパタンを正確に認識するためのものであるが、これを拡張することによって曖昧検索を実行できる状態遷移機械を構築することができる。
たとえば曖昧検索によって「ristorante」という文字列が「restaurant」に近いということを認識することができる。
「restaurant」と「ristorante」の差異.icon
「restaurant」を認識する状態遷移機械.iconに状態を追加して 0~3 個のミスマッチを許すrestaurantの状態遷移機械.iconのように拡張することにより、検索単語「restaurant」に対して0~3 個のミスマッチを許す曖昧検索を実行することができる。
0~3 個のミスマッチを許すrestaurantの状態遷移機械.icon
最下行の右端の◎は入力が完全に「restaurant」にマッチしたときの遷移先であり、下から二番目の行の右端の◎は1 文字誤りを含んでマッチしたときの遷移先を示している。
「*」(あらゆる文字にマッチ)、「$ \epsilon」(空文字にマッチ) による縦と斜め方向の遷移を追加していることにより曖昧マッチングが可能になっている。
最初は左下のノードだけがアクティブになっているが、「r」以外の文字が入力されたときは「*」と書かれた遷移がアクティブとなり、接続されたノードがアクティブになる。
同時に「$ \epsilon」と書かれた遷移も自動的にアクティブになる。
これらの組み合わせにより、1文字余分/1 文字不足/文字置換に対する曖昧検索が可能になっている。
この状態遷移機械に「ristorante」という文字列を入力したときの様子を図15 に示す。
図 15 「restaurant」を認識するマッチャに「ristorante」を入力.
"r"の認識後の状態
https://gyazo.com/68edefc030d270774ae93808ae794772
"ri"の認識後の状態
https://gyazo.com/3e5a994f6d3cfe0247c4db5399622644
"ris"の認識後の状態
https://gyazo.com/c1e30ba2875354160420578ae55edba5
"ristorante"の認識後の状態
https://gyazo.com/7ddab61ec6a20a4f2e078d351486c7c2
「ristorante」による遷移が終了すると、右上のノードだけがアクティブになっているので、「ristorante」と「restaurant」は3 文字誤りでマッチすることがわかる。図 15 の状態遷移は複雑に見えるが、4 個の整数変数の間の論理演算を行なうだけで遷移を計算しているため高速でメモリ効率も良い。