سؤال

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

  • 110 اختبار St
  • 110 اختبار سانت
  • 110 اختبار الشارع

على الرغم من أن بسيطة ، يمكنك أن تتخيل الوضع أكثر تعقيدا scenerios.أنا أحاول تطوير خوارزمية بسيطة من شأنها أن تكون قادرة على تطابق فوق عناوين رئيسية.

على سبيل المثال.المفتاح قد يكون "11TEST" - أول اثنين من 110, أول اثنين من الاختبار أول اثنين من شارع البديل.مباراة كاملة الرئيسية سوف يتضمن أيضا 5 الأولى من الرمز البريدي وكذلك حتى في المثال أعلاه ، الكامل الرئيسية قد تبدو "11TEST44680".

أنا أبحث عن أفكار خوارزمية فعالة أو الموارد يمكنني النظر عن الاعتبارات عند وضع هذا.أي أفكار يمكن أن تكون البرمجية الزائفة أو في اللغة التي تختارها.

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

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

المحلول

أنا أعمل على نفس الخوارزمية ونحن نتكلم ، فإنه يجب التعامل مع عناوين في كندا والولايات المتحدة الأمريكية والمكسيك والمملكة المتحدة بحلول الوقت الذي أنا به.المشكلة أنا التي تواجه أنهم في قاعدة البيانات الخاصة بنا في 3 الميدانية عادي شكل [من كان يظن أن فكرة جيدة يجب أن تكون النار IMHO] ، لذلك تحاول التعامل مع الطرق الريفية العامة شحنات كبيرة الحجم أجهزة الاستقبال متعددة البلدان المحافظة مقابلالدولة مقابلمقاطعة الرموز البريدية مقابلالرمز البريدي رموز الأخطاء الإملائية ليست صغيرة أو بسيطة المهمة.

الأخطاء الإملائية وحده ليس بالأمر الهين خصوصا عندما تحصل على البلدان التي تستخدم الفرنسية أسماء مطابقة سان, سانت, St, الظريف, القديسين, Saintes, Sts, هذا, Grand, غراند, اسرة, جراند مع أو من دون فترة أو الواصلة إلى أكبر جزء من اسم السبب لا نهاية من أداء القضايا وخاصة عندما St يمكن أن يعني سانت أو الشارع قد أو قد لا يكون قد دخل في السياق الصحيح (أيالمؤنث مقابلالمذكر).ما إذا كان العنوان إلى حد كبير تم إدخالها بشكل صحيح ولكن قد غير صحيحة مقاطعة أو الرمز البريدي ؟

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

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

هتاف - [بن على afsinc نقطة ca]

نصائح أخرى

إذا كنت تفضل عدم تطوير أحد المنتجات وبدلاً من ذلك استخدام منتج جاهز يستخدم العديد من التقنيات المذكورة هنا، فراجع: http://www.melissadata.com/dqt/matchup-api.htm

تنصل:وكان لي دور في تطويرها والعمل في الشركة.

في المملكة المتحدة سوف نستخدم:

  • اسم المنزل أو رقمه (حيث يتضمن الاسم رقم الشقة للمجمعات السكنية)
  • شفرة البريد

من المؤكد أنك يجب أن تستخدم الرمز البريدي، ولكن في الولايات المتحدة أعتقد أن الرموز البريدية الخاصة بك تغطي مناطق واسعة جدًا مقارنة بالرموز البريدية في المملكة المتحدة.لذلك سوف تحتاج إلى استخدام الشارع والمدينة.

لن يفرق مثالك بين 11 Test Street و110 - 119 Test Street وما إلى ذلك.

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

إذا كنت تأخذ الكراك في هذا أود تحويل كل عنوان السلسلة إلى شجرة باستخدام مجموعة محددة مسبقا من أجل العمليات.

على سبيل المثال.110 اختبار شارع Apt 3.في أي مكان كاليفورنيا 90210 =>

  1. الحصول على نوع من العنوان.على سبيل المثال شارع عناوين مختلفة الأشكال أن عناوين الأرياف و هذا يختلف من بلد إلى آخر.
  2. وبالنظر إلى أن هذا هو عنوان الشارع على السلسلة التي تمثل نوع من الشارع وتحويل ذلك إلى enum (eBoulevard, eRoad ، الخ..)
  3. وبالنظر إلى أن هذا هو عنوان الشارع, سحب اسم الشارع (متجر في أقل الأحوال)
  4. وبالنظر إلى أن هذا هو عنوان الشارع, سحب رقم الشارع
  5. وبالنظر إلى أن هذا هو عنوان الشارع ، والبحث عن أي شقة رقم (يمكن أن يكون من قبل الشارع رقم مع اندفاعة ، يمكن أن يكون بعد "Apt.", الخ...)

       eStreet  //1.an enum of possible address types eg. eStreet, eRuralRoute,...
          |
       eStreet        //2.an enum of street types eg. eStreet, eBlvd, eWay,...
       /   |   \
    

    رقم اسم مناسب | | | اختبار 110 3

على سبيل المثال.ص ص#3 أي مكان كاليفورنيا 90210 =>

  1. الحصول على نوع من العنوان:الطريق الريفي
  2. وبالنظر إلى أن هذا هو الطريق الريفي عنوان على الطريق رقم

       eRuralRoute 
          |
          3
    

سوف تحتاج إلى القيام بشيء مماثل في البلد والدولة والرمز البريدي المعلومات.

ثم قارن الناتج الأشجار.

وهذا يجعل المقارنة بسيطة جدا ، ومع ذلك ، فإن قانون لتوليد الأشجار صعبة للغاية.قد ترغب في اختبار حماقة من ذلك على آلاف من عناوين.مشكلتك أبسط إذا كان لنا فقط عناوين يهمك;البريطانية عناوين كما سبق ذكره هي مختلفة تماما ، و الكندية العنوان قد يكون الفرنسي في لهم (على سبيل المثال.المكان د'Arms, Rue لوران, الخ...)

إذا كان من المفيد لشركتك أن تكتب أداة تطبيع العنوان الخاصة بها، فأنا أقترح البدء بـ معيار عنوان USPS.وبدلاً من ذلك، هناك أي عدد من البائعين الذين يقدمون أدوات من جانب الخادم وخدمات الويب لتطبيع العناوين وتصحيحها والتحقق منها.

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

إذا لم تختر استخدام نظام موجود، فإحدى الأفكار هي القيام بما يلي:

  • استخراج الأرقام من سطر العنوان
  • استبدال كلمات الشوارع الشائعة بالفراغات
  • إنشاء سلسلة مطابقة

أي:"555 شارع القناة":

  • رقم المستخرج يعطي "555" + "شارع القناة"
  • استبدال كلمات الشارع يعطي "555" + "القناة"
  • إنشاء سلسلة مطابقة يعطي "555Canal"

"Canal st 555" سيعطي نفس سلسلة المطابقة.

أعني بكلمات الشارع الكلمات والاختصارات لكلمة "street" في لغتك، على سبيل المثال "st"، "st."، "blv"، "ave"، "avenue"، إلخ، كلها تمت إزالتها من السلسلة.

من خلال استخراج الأرقام وفصلها عن السلسلة، لا يهم إذا كانت الأولى أو الأخيرة.

استخدام هوية للمفتاح الأساسي, ، سيكون هذا دائمًا فريدًا وسيسهل دمج التكرارات لاحقًا.

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

لديك عمليتين "حفظ"

  • بعد الحفظ الأولي، قم بإجراء بحث للبحث عن التطابقات، وقدم لهم قائمة بالمطابقات المحتملة بالإضافة إلى القائمة الجديدة.
  • بعد تحديد المعرف الجديد، احفظه، وإذا اختاروا واحدًا موجودًا، استخدم هذا المعرف

تنظيف البيانات.حاول إزالة "street" و"st" و"drive" وما إلى ذلك وتخزينها على هيئة StreetType char(1) الذي يستخدم FK في جدول يحتوي على الاختصارات المناسبة، حتى تتمكن من إنشاء الشارع.

انظر إلى SOUNDEX والفرق

لقد عملت في شركات كبيرة تحتفظ بقوائم بريدية، ولم يحاولوا القيام بذلك تلقائيًا، بل استخدموا أشخاصًا لتصفية الجديد من المزيفين لأنه من الصعب جدًا القيام بذلك.خطط لميزة الدمج حتى تتمكن من دمج التكرارات يدويًا عند حدوثها، وتموج القيم من خلال PKs.

يمكنك إلقاء نظرة على واجهة برمجة تطبيقات خرائط Google ومعرفة ما إذا كان بإمكانك إدخال عنوانك واستعادة المطابقة.ليس لدي علم بالأمر، هذه مجرد تكهنات.

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