Ide untuk membuat fitur XYZ yang Anda maksudkan ke dalam situs web

Saya ingin memberi pengguna kemampuan untuk menelusuri daftar besar bisnis, namun tetap menemukan kecocokan yang hampir sama.

Adakah yang punya rekomendasi tentang cara terbaik melakukan hal ini ketika Anda tidak menargetkan kata-kata kamus sederhana, melainkan nama kompleks seperti Nama Bisnis ABC?

Salam.


person Keith Adler    schedule 08.12.2009    source sumber
comment
Saya setuju. Saya mengagumi kedalaman pengetahuan rekan-rekan insinyur perangkat lunak dan semua jawaban ini memberikan petunjuk yang baik.   -  person Keith Adler    schedule 09.12.2009


Jawaban (4)


Lihat artikel wikipedia tentang Jarak Levenshtein. Ini adalah konsep yang cukup sederhana untuk dipahami dan cukup mudah untuk mengimplementasikan algoritma dalam bahasa apa pun yang Anda gunakan, dalam kasus Anda, C#.

Saya menemukan contoh di C# untuk Anda di sini.

Selain itu, di sini adalah contoh korektor ejaan dari Peter Norvig dari Google. Dikatakan di podcast SO beberapa episode yang lalu bahwa Jon Skeet mencoba menulis ulang algoritma yang sama di C#. Tidak yakin apakah dia menyelesaikannya dan/atau membuatnya tersedia untuk umum.

person jamesaharvey    schedule 08.12.2009
comment
Barang bagus. Saya akan mengadaptasi ini untuk mengoperasikan sisi server SQL sebagai sproc untuk mendapatkan kinerja terbaik dan hanya menggunakannya ketika tidak ada kecocokan. Terima kasih atas wawasannya. - person Keith Adler; 09.12.2009
comment
Sebagai pembaruan, ini telah diterapkan di C# di sini codegrunt.co.uk/2010/11/02/ - person Keith Adler; 22.03.2011

Pertimbangkan untuk menggunakan pencocokan kata kunci dan edit kesamaan berdasarkan jarak. Mungkin digabungkan dengan 'penelusuran asli' menjadi 'benar-benar diklik'.

person Dr. Xray    schedule 08.12.2009

Ini mungkin solusi yang gila, tetapi bisakah Anda membagi nama bisnis berdasarkan spasi dan kemudian mencari semua item atau mungkin pasangan pertama.

Jadi, Anda dapat menelusuri 'ABC' dan 'Bisnis' tetapi tidak menyertakan 'Nama' karena mungkin akan memakan waktu terlalu lama.

Anda bahkan dapat memeriksa apakah string tersebut memiliki panjang tertentu, lalu memotongnya dan mencari saja pada 5 huruf pertama.

Pernahkah Anda melihat "soundex" sebagai cara pencarian melalui bisnis Anda. Sekali lagi, menurut saya Anda perlu membagi nama berdasarkan spasi.

person griegs    schedule 08.12.2009

Anda dapat memeriksa SQL Server SOUNDEX dan fungsi DIFFERENCE. SOUNDEX mengubah rangkaian karakter (seperti kata) menjadi kode 4 karakter yang akan sama untuk kata-kata yang bunyinya serupa. PERBEDAAN memberikan angka yang mewakili seberapa "berbeda" dua senar berdasarkan bunyinya.

Anda dapat, misalnya, membuat kolom terhitung berdasarkan fungsi SOUNDEX dan mencocokkan kolom tersebut nanti. Atau Anda bisa menggunakan DIFFERENCE dalam klausa WHERE.

person Aaron    schedule 08.12.2009
comment
Anda juga dapat melakukan pencarian Google untuk MetaPhone, yang pada dasarnya merupakan versi Soundex yang lebih kompleks. Soundex sebenarnya dibuat pada tahun 1918 dan merupakan algoritma yang sangat sederhana/dasar. Metaphone umumnya akan memberikan kecocokan yang lebih baik, tetapi tidak dibangun ke dalam SQL, meskipun ada banyak versi T-SQL yang ada - person Sparky; 09.12.2009