Saya memikirkan hal ini, dan telah mencoba menemukan solusi tentang cara fuzzy mencari database, jika misalnya seorang pengguna mengetik kesalahan ejaan. Adakah masalah mencolok dengan logika di balik ini? Apakah ini akan berhasil dan sudah pernah dilakukan sebelumnya?
Meja kami, kami ingin mencari:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Jadi kami menyimpan badan teks mentah untuk tampilan fisik. 2 kolom lainnya digunakan untuk pencarian yang dihitung dengan cara berikut:
Soundex
Tubuh dibagi menjadi kata-kata itu, dan diterjemahkan ke versi soundex itu. Yaitu, tubuh yang dihasilkan mungkin seperti:
H252 B54 C23 E33... etc
Jadi seseorang mungkin masuk 'dinosore', dan artikel di badan bertuliskan 'dinosaurus' keduanya dievaluasi ke B26. Kami kemudian menjalankan LIKE pada nilai soundex istilah pencarian.
Kode Karakter
Diberikan pemetaan karakter yang memetakan karakter ke bilangan prima, yaitu:
h = 2
e = 3
l = 5
o = 7
p = 11
c = 13
help = 2*3*5*11 = 330
hello = 2*3*5*5*7 = 1050
hell = 2*3*5*5 = 150
hlep = 2*5*3*11 = 330
cello = 13*3*5*5*7 = 6825
Jika pengguna bermaksud mengetik 'halo' tetapi mereka mengganti dua atau lebih karakter di sekitar misalnya 'hlelo', mereka akan mengevaluasi ke nomor yang sama. Membagi tubuh mentah menjadi kata-kata, meng-encode prime setiap kata dan menyimpannya dalam database memberi Anda bidang yang terlihat seperti:
330 6825 330 1050... etc
Kami kemudian dapat menyukai pencarian pada nilai ini untuk mencocokkan mistypes.
Manfaat
- Kesalahan ketik terlindungi
- Ejaan salah fonetik terlindungi
- Lebih ramah berbahasa Inggris non asli
- Akan bekerja dalam bahasa apa pun (tempat soundex bekerja)
Komentar dan pemikiran? Semacam pencarian berlapis-lapis. Anda tentu saja dapat mengembalikan nilai bobot untuk membuatnya lebih baik (yaitu kecocokan teks tubuh literal lebih bernilai), tetapi apakah ini solusi yang baik untuk kesalahan pengejaan dan penutur asli bahasa Inggris yang bukan asli yang melakukan pencarian?