Bunu düşündüm ve örneğin bir kullanıcı bir yazım hatası yazarsa, bir veritabanında bulanık arama nasıl çözümler bulmaya çalışıyorum. Bunun arkasındaki mantıkla ilgili göze çarpan sorunlar var mı? Çalışacak mı ve daha önce yapıldı mı?
Aramak istediğimiz masamız:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Bu yüzden fiziksel metin için ham metin gövdesini saklıyoruz. Diğer 2 sütun, aşağıdaki şekilde önceden hesaplanan aramalar için kullanılır:
Soundex
Beden kelimelere bölünür ve soundex versiyonuna çevrilir. IE;
H252 B54 C23 E33... etc
Yani birisi 'dinosore' girebilir ve makale gövdesi 'dinozor'u okur, her ikisi de B26 için değerlendirir. Daha sonra arama teriminin soundex değeri üzerinde bir LIKE çalıştırırız.
Karakter Kodlu
Karakterleri asal sayılara eşleyen bir karakter eşlemesi verildiğinde IE:
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
Bir kullanıcı 'merhaba' yazmak istiyorsa, ancak iki veya daha fazla karakteri değiştirdiyse, örneğin 'hlelo', aynı sayıya bakar. Ham gövdeyi kelimelere ayırın, her kelimeyi hazırlayın ve veritabanında saklayın, size benzeyen bir alan sağlayın:
330 6825 330 1050... etc
Daha sonra bu değeri arama ile metrikleri eşleştirebiliriz.
Yararları
- Yazmaya karşı korumalı yazım hataları
- Fonetik yanlış yazımlar
- Daha anadili İngilizce konuşma dostu
- Herhangi bir dilde çalışır (soundex'in çalıştığı yerde)
Yorumlar ve düşünceler? Bir çeşit çok katmanlı arama. Tabii ki daha iyi hale getirmek için ağırlık değerlerini geri alabilirsiniz (IE gerçek bir metin beden eşleşmesi daha değerlidir), ancak bu yazım hataları ve arama yapamayan anadili İngilizce olmayanlar için iyi bir çözüm müdür?