Send to your Kindle *** 打ち間違い(スペルミス)にも対応する方法 [#n84ce34f] AC法を使うなら、転置インデックス上のポインターを増やせばいい。 - ポインターを進めたとき、それ以外の(外れた)ノードにも仮のポインターを設ける。外れた場合の行き先はスタートノードなので、それ以外のノードとはひとつ先のノード全て。仮のポインターは生存期間が次の文字までの短いもの。これで1文字の打ち間違いを許容。 - ポインターを進めたとき、その先のノードにも仮のポインターを設けると、1文字脱字があっても適合するようになる。 - ポインターを進めたとき、元あったノードにも仮のポインターを設けると、余計な文字が1文字あっても適合するようになる。 - 仮のポインターを広い範囲にばらまけば、2文字以上の打ち間違いにも対応できる。 -- 外れたポインターをスタートノードに返す前に、ひとつ先のノードだけでなく、さらに先のノード(つまり2ホップ先)全てにも仮のポインターを設けると、2文字の打ち間違いにも適合するようになる。 -- 先のノードだけでなく、さらにひとつ先のノード全てにもポインターを設けると、2文字以上の脱字が続いても適合する。 -- 元のノードだけでなく、もう一つ前…つまり''元の元の''ノードにもポインターを設けると、2文字余計な文字が続いても適合する。 ポインターの性質… - 仮のポインターは進むと本物のポインターになる。進めなくてもスタートノードに戻れる。 - 仮のポインターの生存期間はスタートノードに戻るまででもいい。元から進めなければスタートに戻るものなので、同じアルゴリズムになる。 - 複数のポインターが同時にスタートノードに止まったとき、ひとつを残して他は消える。重複していても無駄なので消す。 ポインターはスタートからの経路を記録しているので、スタート以外で鉢合わせても重複とは見なせない。 正規表現を使うなら、パターン内の1文字ごとに「?」と「.?.?」を追加。「.?」の数が間違えていい文字数。 RIGHT:[[:t/リンク]] [[:t/柔らかいUI]] 曖昧リンクはリンクを先に作るときに効果的。 リンク先のページ名を不意に変えてしまっても有効だから。 異字体にも対応するとか。 いとゐとかも。 →「曖昧リンク」はリンク先が存在しなかったり一意でないBracketNameのリンク先とする。実装では[[曖昧さ回避ページ]](メタページ)へのリンクにする。 *** 打ち間違い(スペルミス)にも対応する方法 [#n84ce34f] AC法を使うなら、転置インデックス上のポインターを増やせばいい。 - ポインターを進めたとき、それ以外の(外れた)ノードにも仮のポインターを設ける。外れた場合の行き先はスタートノードなので、それ以外のノードとはひとつ先のノード全て。仮のポインターは生存期間が次の文字までの短いもの。これで1文字の打ち間違いを許容。 - ポインターを進めたとき、その先のノードにも仮のポインターを設けると、1文字脱字があっても適合するようになる。 - ポインターを進めたとき、元あったノードにも仮のポインターを設けると、余計な文字が1文字あっても適合するようになる。 - 仮のポインターを広い範囲にばらまけば、2文字以上の打ち間違いにも対応できる。 -- 外れたポインターをスタートノードに返す前に、ひとつ先のノードだけでなく、さらに先のノード(つまり2ホップ先)全てにも仮のポインターを設けると、2文字の打ち間違いにも適合するようになる。 -- 先のノードだけでなく、さらにひとつ先のノード全てにもポインターを設けると、2文字以上の脱字が続いても適合する。 -- 元のノードだけでなく、もう一つ前…つまり''元の元の''ノードにもポインターを設けると、2文字余計な文字が続いても適合する。 ポインターの性質… - 仮のポインターは進むと本物のポインターになる。進めなくてもスタートノードに戻れる。 - 仮のポインターの生存期間はスタートノードに戻るまででもいい。元から進めなければスタートに戻るものなので、同じアルゴリズムになる。 - 複数のポインターが同時にスタートノードに止まったとき、ひとつを残して他は消える。重複していても無駄なので消す。 ポインターはスタートからの経路を記録しているので、スタート以外で鉢合わせても重複とは見なせない。 正規表現を使うなら、パターン内の1文字ごとに「?」と「.?.?」を追加。「.?」の数が間違えていい文字数。