سؤال

والمسألة هي وجود قاعدة بيانات مع حوالي 20K سجلات العملاء وأريد أن جعل أفضل جهد ممكن لتجنب إدخالات مكررة. قاعدة البيانات مايكروسوفت SQL Server 2005 أو التطبيق الذي يؤكد أن قاعدة البيانات مايكروسوفت دايناميكس / SL. أنا خلق خدمة ويب ASP.NET التي تتفاعل مع قاعدة البيانات. خدمتي يمكن إدراج سجلات العملاء في قاعدة البيانات، وقراءة السجلات من ذلك، أو تعديل هذه السجلات. سواء في بلدي خدمة ويب، أو من خلال MS الديناميات، أو في SQL Server، أود أن يعطي قائمة من المباريات المحتملة قبل المستخدم يؤكد سجل الإضافة الجديدة.

وهكذا المستخدم أن يقدم رقما قياسيا، إذا كان يبدو أن تكون فريدة من نوعها، وسجل ينقذ وترجع ID جديد. إذا كان هناك الازدواجية المحتملة، يمكن للمستخدم ثم يعيد مع تأكيد قائلا: "نعم، أرى التكرارات الممكنة، وهذا هو رقما قياسيا جديدا، وأنا أريد أن يقدمه".

وهذا أمر سهل إذا كان مجرد علامات الترقيم أو مساحة شيء (مثل إذا كنت تقوم بإدخال "، وشركة" وهناك "شركة المؤتمر الوطني العراقي" في قاعدة البيانات، ولكن ماذا إذا كان هناك تغييرات طفيفة مثل " شركة شركة "بدلا من" شركة شركة "أو إذا كان هناك من الدهون اصابع الاتهام إملائيا، مثل" Cmpany، وشركة "هل من الممكن إرجاع السجلات من هذا القبيل في القائمة؟ إذا كان الأمر تماما غير ممكن، وأنا سأتعامل مع ما لدي. انها مجرد يؤدي إلى مزيد من العمل في وقت لاحق، إذا تحتاج السجلات المراد دمجها بسبب الازدواجية.

هل كانت مفيدة؟

المحلول

ووتفاصيل منها خوارزمية سوف تعمل بشكل أفضل بالنسبة لك يعتمد إلى حد كبير على المجال الخاص بك، لذلك أود أن أقترح تجريب عدد قليل منها مختلفة - قد تحتاج حتى إلى الجمع بين عدد قليل للحصول على أفضل النتائج. قد تحتاج إلى preprocessed أو موحدة، وكذلك الاختصارات، وخاصة مجال منها محددة.

لأسماء، وكنت ربما يكون أفضل حالا مع خوارزمية الصوتية - التي يأخذ بعين الاعتبار النطق. وهذه النتيجة سميث وشميت قريبة من بعضها البعض، كما أنها سهلة الخلط عند <م> قوله الكلمات. مزدوجة Metaphone هو الخيار الأول جيد.

لالدهون الإشارة بالإصبع، وكنت ربما يكون أفضل حالا مع تحرير المسافة خوارزمية - الذي يعطي "الاختلاف" بين 2 الكلمات. ومن شأن هذه النتيجة سميث وSmoth قريبة من بعضها البعض - على الرغم من أن 2 قد تنزلق من خلال البحث الصوتي

وT-SQL ديه SOUNDEX و الفرق - ولكنها ل فقراء جدا. A Levenshtein البديل هو الخيار الكنسي، ولكن هناك خيارات أخرى جيدة - ومعظمها من السهل إلى حد ما ل<م> تنفيذ في C #، إذا لم تتمكن من العثور على تنفيذ مرخصة بشكل مناسب.

وكل هذه ستكون أسهل بكثير إلى رمز / استخدام من C # من T-SQL (على الرغم من أنني لم تجد <لأ href = "http://www.planet-source-code.com/vb/scripts/ ShowCode.asp؟ txtCodeId = 519 & lngWId = 5 "يختلط =" نوفولو noreferrer "> metaphone مزدوج في الاعتداء الرهيب من T-SQL التي قد تعمل في SQL).

وعلى الرغم من هذا سبيل المثال في الوصول (ولقد أبدا في الواقع نظرت إلى رمز، أو استخدام التنفيذ) عرض وشملت يعطي فكرة جيدة عن ما سوف الارجح في نهاية المطاف تحتاج إلى القيام به. هو رمز يستحق ربما نظرة، وربما ميناء من VBA.

نصائح أخرى

SOUNDEXing داخل SQL خادم. وأعتقد أنه سوف تعطيك ضبابي من المباريات المحتملة التي كنت تبحث عنها.

SOUNDEX @ MSDN

SOUNDEX @ ويكيبيديا

إذا كان من الممكن دمج Lucene.NET إلى solutionm الخاص بك يجب عليك بالتأكيد محاولة ذلك بها.

هل يمكن أن حاول استخدام بحث النص الكامل مع FREETEXT (أو FREETEXTTABLE) وظائف في محاولة لايجاد مباريات ممكنة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top