で、名前が近い
つまり、文字列が近い検索って
どうするんだろうと考えてみたけどその続き
いろいろ試してみたところ
ひとまず調べあげるのは
どれだけ文字列が一致しているか?
だけでイイんじゃないかと考えてみた
例えば
123456 という文字列の
隣あった文字の並び方は
以下のようになる
123456
12345
23456
1234
2345
3456
123
234
345
456
12
23
34
45
56
1
2
3
4
5
6
の全部で21個となる、
Maxには matchPattern という検索方法があるので
あとは、この文字列候補が検索対象に
どれくらい含まれているか調べればいいんじゃないかな
134562に含まれているのは
1、2、3、4、5、6、34、45、56、345、456、3456、の
全部で12個
なので、(12.0/21.0) *100 = 57.14
となって元の文字列に比べて、似ている率57%って感じ
489752では、同じように
4、5、2、が一致するので合計3個
大体14%くらい似ているという感じ
ほかに、検索元の文字列数がすくないと
自ずと分母が小さくなっちゃうから、もしかしたら、すくない文字列の場合は
連続文字列の方を優先するように
係数を付けておいた方が良いカモね
とりあえず、コレで一回つくってみよう
ただ、forループ重ねるだけだから
そんなに難しくはないと思うんだけどね
ココにもう一個加えるとしたら
文字の誤認
これはナカナカ厄介だなたとえば、スマホとかの文字入力時の候補とか
googleの もしかしてコレ? は統計データとかから取ってくるのだと思うので
アル程度のデータベースが必要だから、これは大変だ
たとえばBを8と誤認していたとか
よくあるIとlを誤認していたっていのうは
文字の形が近いとか、似ているのを
検索してくる
って事だから
んーどうしたらいいんだろう?
変な話し、文字を一回ピクセルに分解して
どれくらい、そのピクセルが一致しているか調べたら
誤認しているか調べられないかな?
どっちにしても、統計データとか割り当てデータとか
なにか、とっかかりが必要なんだろうな
んーどうしたらいいんだろう?
Pingback: その他 名前が近いっていう検索方法 その3 « sakaiden