2009-12-08 14 views
16

Kullanıcılara geniş bir iş listesinden arama yapma, ancak yakın eşleşmeleri bulma olanağı vermek istiyorum."XYZ demek istediniz" özelliğini web sitenize eklemek için fikirler

kimse ABC İşletme Adını gibi herhangi basit sözlük kelimeleri hedefleyen değilken bu konuda gitmek için en iyi nasıl tavsiyelerde, ancak bunun yerine karmaşık isimler var mı?

Saygılarımızla.

+0

+1. –

+0

Katılıyorum. Yazılım mühendislerimin bilgi derinliğine hayranım ve tüm bu cevaplar iyi bir yol. –

cevap

7

Levenshtein distance'daki wikipedia makalesine göz atın. Kafanızı sarmak için oldukça basit bir kavramdır ve sizin kullandığınız dilde (C#) bir algoritma uygulamak oldukça kolaydır.

Sizin için C# içinde bir örnek buldum here.

Ayrıca here Google'dan Peter Norvig bir yazım düzelticinin bir örnektir. SO podcast'inden birkaç bölüm önce Jon Skeet'in C# 'da aynı algoritmanın yeniden yazılmaya çalıştığı söylendi. Tamamladıysa ve/veya kamuya açık hale getirip getirmediğinden emin değil.

+0

Harika şeyler. Bunu mümkün olan en iyi performansı elde etmek için bir sproc olarak SQL server-side çalışacak şekilde ayarlayacağım ve sadece eşleşme olmadığında kullanacağım. Anlayış için teşekkürler. –

+0

Bir güncelleştirme olarak, bu C# http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig-Spelling-Corrector.html –

2

Anahtar kelime eşleşmesini kullanmayı ve mesafeye dayalı benzerliği düzenlemeyi düşünün. 'Asıl aranan' ile 'gerçekte tıklanmış' bir araya gelebilir.

1

Bu muhtemelen çılgın bir çözümdür ama could Eğer boşluk işletme adını bölmek ve sonra tüm öğeleri ya da belki ilk çift ya arayın.

Bu yüzden 'ABC' ve 'Business' üzerinde arama yapabilir, ancak 'Name' yazabilirsiniz, bu çok uzun sürebilir.

Hatta dize belli bir uzunlukta olup olmadığını görmek ardından Döşeme ve sadece ilk demek 5 harf arama yapmak için kontrol edebilirsiniz.

Eğer işletmelerin arasında arama yolu olarak " soundex" bir göz oldu mu. Tekrar, ismi boşlukla ayırmanız gerektiğini düşünüyorum.

1

Sen SQL Server SOUNDEX ve DIFFERENCE fonksiyonları kontrol edebilirsiniz. SOUNDEX, bir karakter dizisini (bir kelime gibi), benzer sondaj sözcükleri için aynı olacak olan 4 karakterli bir koda dönüştürür. FARK, "farklı" iki dizenin sese nasıl dayandığını gösteren bir sayı verir. Örneğin, SOUNDEX işlevine dayalı bir hesaplanmış sütun oluşturabilir ve daha sonra bu sütunda eşleştirebilirsiniz. Ya da bir WHERE maddesinde FARKI kullanabilirsiniz. Daha iyi cevapları görmek için

+1

adresinde uygulanmıştır. Ayrıca Google arama yapabilirsiniz. Temel olarak Soundex'in daha karmaşık bir versiyonu olan MetaPhone. Soundex aslında 1918'de kuruldu ve çok basit/temel bir algoritma. Metaphone genellikle daha iyi eşleşmeler verir, ancak SQL'in pek çok T-SQL sürümü olmasına rağmen, yerleşik değildir. – Sparky

İlgili konular