স্ট্রিং থেকে ব্যবহারযোগ্য রাস্তার ঠিকানা, শহর, রাজ্য, জিপ পার্স করুন [বন্ধ]


131

সমস্যা: আমার কাছে একটি অ্যাক্সেস ডাটাবেস থেকে একটি ঠিকানা ক্ষেত্র রয়েছে যা স্কেল সার্ভার ২০০৫ এ রূপান্তরিত হয়েছে This এই ক্ষেত্রটিতে সমস্ত কিছু এক ক্ষেত্রে রয়েছে। আমার ঠিকানার পৃথক বিভাগগুলিকে একটি সাধারণ টেবিলের উপযুক্ত ক্ষেত্রগুলিতে পার্স করা দরকার। আমার প্রায় 4,000 রেকর্ডের জন্য এটি করা দরকার এবং এটি পুনরাবৃত্তিযোগ্য হওয়া দরকার।

অনুমিতি:

  1. মার্কিন যুক্তরাষ্ট্রে একটি ঠিকানা ধরে (এখন জন্য)

  2. ধরে নিন যে ইনপুট স্ট্রিংটিতে মাঝে মধ্যে একটি ঠিকানা (যে ব্যক্তি সম্বোধন করা হচ্ছে) এবং / অথবা দ্বিতীয় রাস্তার ঠিকানা (যেমন স্যুট বি) থাকবে

  3. রাষ্ট্র সংক্ষিপ্ত হতে পারে

  4. জিপ কোডটি স্ট্যান্ডার্ড 5 ডিজিট বা পিন + 4 হতে পারে

  5. কিছু ঘটনা টাইপস আছে

আপডেট: উত্থাপিত প্রশ্নের জবাবে, মান সর্বজনীনভাবে অনুসরণ করা হয়নি, আমাকে পৃথক মান সংরক্ষণ করতে হবে, কেবল জিওকোড এবং ত্রুটিগুলি নয় টাইপো (উপরে সংশোধন করা)

নমুনা তথ্য:

  • এপি ক্রল এবং পুত্র 2299 লুইস-জর্জিটাউন হুই, জর্জিটাউন, ডি 1994

  • 11522 শওনি রোড, গ্রিনউড ডিই 19950

  • 144 কিংস হাইওয়ে, এসডাব্লু ডোভার, ডি 19901

  • সংহত কনস্ট্রেট। পরিষেবাদি 2 পেনস ওয়ে স্যুট 405 নতুন ক্যাসল, ডি 19720

  • হামেস রিয়েলটি 33 ব্রাইডল রিজ কোর্ট, লুইস, ডি 19958

  • নিকোলস খনন 2742 পুলাসকি হুই নিউয়ার্ক, ডিই 19711

  • 2284 ব্রায়ান জিয়ন রোড, স্মির্ণা, ডিই 1990 1990

  • ভিইআই ডোভার ক্রসরোডস, এলএলসি 1500 সর্পেনটাইন রোড, স্যুট 100 বাল্টিমোর এমডি 21

  • 580 উত্তর ডুপন্ট হাইওয়ে ডোভার, ডিই 19901

  • পিও বক্স 778 ডোভার, ডি 19903


কয়েক দফায় প্রশ্ন: 1. কোন ডিলিমিটার? 2. স্ট্রিংয়ের ক্ষেত্রে ফিল্ড অর্ডার কী? ৩. ডেটা ত্রুটির ক্ষেত্রে আপনি কী আচরণ চান (এসকিউএল টেবিলের একটি ক্ষেত্রের মধ্যে EG ঠিকানা সরানো, অন্যকে ফাঁকা ছেড়ে দিন)
জে মুনি

ভাল প্রশ্ন এবং খুব আকর্ষণীয় উত্তর। জিপ থেকে পিছনে কাজ করা একটি সাধারণ থিম বলে মনে হয়, তবে আপনি গ্রাহকদের কাছ থেকে কাঁচা ডেটা নিলে জিপটি সঠিক নাও হতে পারে। আমি অনুমান করেছি যে বেশিরভাগ সাইটে উদাহরণস্বরূপ 90210-তে সংখ্যক ঠিকানার ঠিকানা রয়েছে।
কেভিন উইলিয়ামস

4
কেভিন: হ্যাঁ, কারণ আপনি আমেরিকানরা কানাডিয়ানদের একটি "জিপ" কোডের প্রয়োজনে লক আউট করতে এবং আমাদের ডাক কোডগুলি স্বীকার না করে, আমাদের সিস্টেমকে বাইপাস করার জন্য জব্রিশে প্রবেশ করতে বাধ্য করে .... দুর্ভাগ্যবশত, একমাত্র জিপ আই জানা আছে 90210 :-) সম্পাদনা: কিছুই নয় ... আপনি সম্ভবত খ্রিস্টপূর্ব থেকে আমার থেকে কয়েক কিলোমিটার দূরে বাস করেন। আপনি সম্ভবত একই জিনিসটি তখনও করতে পারেন :
পি

2
এটির প্রসারিত ওভারভিউয়ের জন্য এই এসও প্রশ্নটি দেখুন ।
ম্যাট

উত্তর:


118

আমি এই জাতীয় পার্সিংয়ের উপর অনেক কাজ করেছি। কারণ এখানে ত্রুটি রয়েছে যা আপনি 100% নির্ভুলতা পাবেন না, তবে বেশিরভাগ পথটি পেতে আপনি করতে পারেন এমন কয়েকটি জিনিস রয়েছে এবং তারপরে একটি ভিজ্যুয়াল বিএস পরীক্ষা করুন। এটি সম্পর্কে সাধারণ উপায় এখানে। এটি কোড নয়, কারণ এটি লেখার পক্ষে এটি বেশ একাডেমিক, কোনও অদ্ভুততা নেই, কেবলমাত্র প্রচুর স্ট্রিং হ্যান্ডলিং।

(এখন আপনি কিছু নমুনা ডেটা পোস্ট করেছেন, আমি কিছু ছোটখাট পরিবর্তন করেছি)

  1. পিছনে কাজ। জিপ কোড থেকে শুরু করুন, যা শেষের কাছাকাছি হবে এবং দুটি পরিচিত ফর্ম্যাটগুলির মধ্যে একটিতে: XXXXX বা XXXXX-XXXX X যদি এটি প্রদর্শিত না হয় তবে আপনি ধরে নিতে পারেন যে আপনি নীচে নীচে শহর, রাজ্যের অংশে রয়েছেন।
  2. পরবর্তী জিনিস, জিপের আগে, রাষ্ট্র হতে চলেছে, এবং এটি হয় একটি দুটি অক্ষরের বিন্যাসে, বা শব্দ হিসাবে হবে as এগুলি কী হবে তা আপনি জানেন - তাদের মধ্যে কেবল 50 টি রয়েছে। এছাড়াও, আপনি বানানের ত্রুটিগুলির ক্ষতিপূরণে সহায়তা করতে শব্দগুলি সাউন্ডেক্স করতে পারেন।
  3. তার আগে শহরটি ছিল এবং এটি সম্ভবত রাজ্যের মতো একই লাইনে রয়েছে। আপনি জিপের উপর ভিত্তি করে শহর এবং রাজ্যটি পরীক্ষা করতে একটি জিপ-কোড ডাটাবেস ব্যবহার করতে পারেন , বা কমপক্ষে এটি বিএস সনাক্তকারী হিসাবে ব্যবহার করতে পারেন।
  4. রাস্তার ঠিকানাটি সাধারণত এক বা দুটি লাইন হবে। দ্বিতীয় লাইনটি সাধারণত একটি স্যুট নম্বর থাকবে তবে এটি কোনও পিও বাক্সও হতে পারে।
  5. এটি প্রথম বা দ্বিতীয় লাইনে কোনও নাম সনাক্ত করা খুব অসাধ্য হতে চলেছে, যদিও এটি একটি সংখ্যার সাথে উপসর্গ করা না হলে (বা যদি এটি "অ্যাটন:" বা "মনোযোগ সহকারে উপসর্গযুক্ত করা হয়") তবে এটি আপনাকে ইঙ্গিত দিতে পারে এটি নাম বা ঠিকানা লাইন কিনা to

আমি এই কিছুটা সাহায্য করে আশা করি।


14
যদিও এটি সত্য যে 50 টি রাজ্য রয়েছে, ইউএসপিএস বলছে যে আপনি আমেরিকান সশস্ত্র বাহিনী গণনা করেন তবে মার্কিন যুক্তরাষ্ট্রের ডাক পরিষেবাের ডোমেনে 59 টি দ্বি-বর্ণ সংক্ষিপ্তসার রয়েছে। usps.com/send/official-abbreviations.htm
মাইক শেরিল 'ক্যাট রিকল'

17
"কেবল 50" বলতে বোঝায় যে খুব সুন্দর সংখ্যক আছে। এটি "কেবলমাত্র 65" হতে পারে তবে হাতে সমস্যাটি সমাধান করা গুরুত্বপূর্ণ নয় not
টিম সুলিভান

4
এই অ্যালগরিদমটি ইউএসপিএস প্রকাশনা 28
ম্যাট

92

আমি মনে করি সমস্যাটিকে আউটসোর্সিং করা সবচেয়ে ভাল বাজি: এটি Google (বা ইয়াহু) জিওকোডারকে প্রেরণ করুন। জিওকোডার কেবলমাত্র ল্যাট / লম্বা নয় (যা এখানে আগ্রহের নয়) নয়, তবে ঠিকানাটি সমৃদ্ধ বিশ্লেষণও করে যা আপনি প্রেরণ করেনি এমন ক্ষেত্রগুলি সহ (জিপ + ৪ এবং কাউন্টি সহ) returns

উদাহরণস্বরূপ, "1600 অ্যাম্ফিথিয়েটার পার্কওয়ে, মাউন্টেন ভিউ, সিএ" ফলন পার্স করে

{
  "name": "1600 Amphitheatre Parkway, Mountain View, CA, USA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [
    {
      "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "AddressDetails": {
        "Country": {
          "CountryNameCode": "US",
          "AdministrativeArea": {
            "AdministrativeAreaName": "CA",
            "SubAdministrativeArea": {
              "SubAdministrativeAreaName": "Santa Clara",
              "Locality": {
                "LocalityName": "Mountain View",
                "Thoroughfare": {
                  "ThoroughfareName": "1600 Amphitheatre Pkwy"
                },
                "PostalCode": {
                  "PostalCodeNumber": "94043"
                }
              }
            }
          }
        },
        "Accuracy": 8
      },
      "Point": {
        "coordinates": [-122.083739, 37.423021, 0]
      }
    }
  ]
}

এখন তা পার্সেবল!


4
যেহেতু এটি একটি ব্যাচ প্রক্রিয়া, তাই আমি জিওকোডিংয়ের জন্য একটি থ্রেড পুল ব্যবহার করার পরামর্শ দিচ্ছি যাতে আপনি একবারে একাধিক ঠিকানা জমা দিতে পারেন (গুগল কোনও ধরণের ব্যাচের ইন্টারফেস সমর্থন করে?)
ডেভিড

এটি অ্যাড্রেস লাইন দুইটিতে সত্যই সহায়তা করবে না (প্রশ্নের পিন্ট 5)
ক্রিস্টোফার মাহান

71
পরিষেবার শর্তাদি প্রায়শই বাণিজ্যিক এবং / বা অ-প্রজাতন্ত্র ব্যবহারের জন্য এখানে সীমাবদ্ধ ফ্যাক্টর।
জে

এটি একটি ভাল সমাধান তবে এমন প্রান্তের কেস রয়েছে যার জন্য গুগল / ইয়াহু ফলাফল দেয় না, উদাহরণস্বরূপ এমন নতুন ঠিকানা এবং ঠিকানা যা কেবল তাদের ডাটাবেসে অনুপস্থিত।
পিটার ডিউইজ

এটি একটি ভাল সমাধান হবে "যদি" গুগল তাদের এমএপিএস অ্যাপির ব্যাচ কলগুলিকে সীমাবদ্ধ করেনি
হেক্টর

25

মূল পোস্টার সম্ভবত দীর্ঘ উপর সরানো হয়েছে, কিন্তু আমি পার্ল porting একটি ছুরিকাঘাত নেন জিও :: StreetAddress মার্কিন দ্বারা ব্যবহৃত মডিউল geocoder.us সি # টি, CodePlex তে এটি ডাম্প এবং মনে করে যে, মানুষ ভবিষ্যতে এই প্রশ্নের জুড়ে হুমড়ি may এটি দরকারী খুঁজে পেতে:

মার্কিন ঠিকানা পার্সার

প্রকল্পের হোম পেজে, আমি এর (খুব বাস্তব) সীমাবদ্ধতাগুলি সম্পর্কে কথা বলার চেষ্টা করি। যেহেতু এটি ইউএসপিএসের বৈধ রাস্তার ঠিকানার ডেটাবেস দ্বারা সমর্থনপ্রাপ্ত নয়, পার্সিং অস্পষ্ট হতে পারে এবং এটি প্রদত্ত ঠিকানার বৈধতাটিকে নিশ্চিত বা অস্বীকার করতে পারে না। এটি কেবল স্ট্রিং থেকে ডেটা বের করার চেষ্টা করতে পারে।

আপনি যখন বেশিরভাগ ক্ষেত্রে সঠিক ক্ষেত্রগুলিতে ডেটা সেট করতে চান বা ডেটা এন্ট্রিতে একটি শর্টকাট সরবরাহ করতে চান (ব্যবহারকারীদের একাধিক ক্ষেত্রের মধ্যে ট্যাবিংয়ের পরিবর্তে কোনও পাঠ্যবক্সে কোনও ঠিকানা আটকে দেওয়া দেওয়া হয়) তখন এটি ক্ষেত্রে ব্যবহৃত হয়। এটি কোনও ঠিকানার বিতরণযোগ্যতা যাচাই করার জন্য নয়

এটি স্ট্রিট লাইনের উপরের কোনও অংশকে বিশ্লেষণ করার চেষ্টা করে না, তবে কেউ সম্ভবত রেজেক্সের সাথে কিছু যুক্তিসঙ্গতভাবে পেতে পেতে পারে - আমি সম্ভবত এটি বাড়ির নম্বরটি থেকে ভেঙে ফেলব।


17

স্মার্টিস্ট্রিটসে একটি নতুন বৈশিষ্ট্য রয়েছে যা স্বেচ্ছাসেবী ইনপুট স্ট্রিংগুলি থেকে ঠিকানাগুলি বের করে। (দ্রষ্টব্য: আমি স্মার্টস্ট্রিটসে কাজ করি না))

এটি উপরের প্রশ্নে প্রদত্ত নমুনা ইনপুট থেকে সফলভাবে সমস্ত ঠিকানা বের করেছে। (যাইহোক, 10 টি ঠিকানার মধ্যে 9 টিই বৈধ)

এখানে কিছু আউটপুট দেওয়া হয়েছে:এখানে চিত্র বর্ণনা লিখুন

এবং এখানে একই অনুরোধের সিএসভি-ফর্ম্যাট করা আউটপুট:

ID,Start,End,Segment,Verified,Candidate,Firm,FirstLine,SecondLine,LastLine,City,State,ZIPCode,County,DpvFootnotes,DeliveryPointBarcode,Active,Vacant,CMRA,MatchCode,Latitude,Longitude,Precision,RDI,RecordType,BuildingDefaultIndicator,CongressionalDistrict,Footnotes
1,32,79,"2299 Lewes-Georgetown Hwy, Georgetown, DE 19947",N,,,,,,,,,,,,,,,,,,,,,,
2,81,119,"11522 Shawnee Road, Greenwood DE 19950",Y,0,,11522 Shawnee Rd,,Greenwood DE 19950-5209,Greenwood,DE,19950,Sussex,AABB,199505209226,Y,N,N,Y,38.82865,-75.54907,Zip9,Residential,S,,AL,N#
3,121,160,"144 Kings Highway, S.W. Dover, DE 19901",Y,0,,144 Kings Hwy,,Dover DE 19901-7308,Dover,DE,19901,Kent,AABB,199017308444,Y,N,N,Y,39.16081,-75.52377,Zip9,Commercial,S,,AL,L#
4,190,232,"2 Penns Way Suite 405 New Castle, DE 19720",Y,0,,2 Penns Way Ste 405,,New Castle DE 19720-2407,New Castle,DE,19720,New Castle,AABB,197202407053,Y,N,N,Y,39.68332,-75.61043,Zip9,Commercial,H,,AL,N#
5,247,285,"33 Bridle Ridge Court, Lewes, DE 19958",Y,0,,33 Bridle Ridge Cir,,Lewes DE 19958-8961,Lewes,DE,19958,Sussex,AABB,199588961338,Y,N,N,Y,38.72749,-75.17055,Zip7,Residential,S,,AL,L#
6,306,339,"2742 Pulaski Hwy Newark, DE 19711",Y,0,,2742 Pulaski Hwy,,Newark DE 19702-3911,Newark,DE,19702,New Castle,AABB,197023911421,Y,N,N,Y,39.60328,-75.75869,Zip9,Commercial,S,,AL,A#
7,341,378,"2284 Bryn Zion Road, Smyrna, DE 19904",Y,0,,2284 Bryn Zion Rd,,Smyrna DE 19977-3895,Smyrna,DE,19977,Kent,AABB,199773895840,Y,N,N,Y,39.23937,-75.64065,Zip7,Residential,S,,AL,A#N#
8,406,450,"1500 Serpentine Road, Suite 100 Baltimore MD",Y,0,,1500 Serpentine Rd Ste 100,,Baltimore MD 21209-2034,Baltimore,MD,21209,Baltimore,AABB,212092034250,Y,N,N,Y,39.38194,-76.65856,Zip9,Commercial,H,,03,N#
9,455,495,"580 North Dupont Highway Dover, DE 19901",Y,0,,580 N DuPont Hwy,,Dover DE 19901-3961,Dover,DE,19901,Kent,AABB,199013961803,Y,N,N,Y,39.17576,-75.5241,Zip9,Commercial,S,,AL,N#
10,497,525,"P.O. Box 778 Dover, DE 19903",Y,0,,PO Box 778,,Dover DE 19903-0778,Dover,DE,19903,Kent,AABB,199030778781,Y,N,N,Y,39.20946,-75.57012,Zip5,Residential,P,,AL,

আমি সেই বিকাশকারী যিনি মূলত পরিষেবাটি লিখেছিলেন। আমাদের প্রয়োগ করা অ্যালগরিদমটি এখানে কোনও নির্দিষ্ট উত্তর থেকে কিছুটা আলাদা, তবে প্রতিটি উত্তোলন করা ঠিকানা অ্যাড্রেস লুকিং এপিআই-এর বিপরীতে যাচাই করা হয়, যাতে আপনি এটি বৈধ কিনা না তা নিশ্চিত হতে পারেন। প্রতিটি যাচাইকৃত ফলাফলের গ্যারান্টিযুক্ত, তবে আমরা জানি যে অন্যান্য ফলাফলগুলি নিখুঁত হবে না কারণ এই থ্রেডে যেমন স্পষ্টভাবে বর্ণিত হয়েছে, ঠিক তেমন ঠিকানা কখনও কখনও মানুষের জন্যও অনির্দেশ্য থাকে।


2
স্মার্টস্ট্রিটগুলি তারা যা করে তাতে অবিশ্বাস্যভাবে ভাল। শুনে তারা খুব খুশি যে এটি একটি এপিআই যা তারা সমর্থন করে।
ftrotter

16

আমি অতীতে এটি করেছি।

হয় এটি ম্যানুয়ালি করুন, (একটি দুর্দান্ত গুই তৈরি করুন যা ব্যবহারকারী এটি দ্রুত করতে সহায়তা করে) অথবা এটি স্বয়ংক্রিয়ভাবে তৈরি করুন এবং সাম্প্রতিক ঠিকানা ডাটাবেসের বিরুদ্ধে পরীক্ষা করুন (আপনাকে এটি কিনতে হবে) এবং ম্যানুয়ালি ত্রুটিগুলি পরিচালনা করতে হবে।

ম্যানুয়াল হ্যান্ডলিংয়ে প্রতি 10 সেকেন্ড সময় নেবে, যার অর্থ আপনি প্রতি ঘন্টা 3600/10 = 360 করতে পারেন, সুতরাং 4000 আপনাকে প্রায় 11-12 ঘন্টা সময় নিতে হবে। এটি আপনাকে নির্ভুলতার একটি উচ্চ হার দেবে।

অটোমেশনের জন্য আপনার সাম্প্রতিক ইউএস অ্যাড্রেস ডাটাবেস দরকার এবং এর বিপরীতে আপনার নিয়মগুলি টুইঙ্ক করুন। আমি রেজেজেসে অভিনব না হওয়ার পরামর্শ দিচ্ছি (দীর্ঘমেয়াদী বজায় রাখা কঠিন, তাই অনেক ব্যতিক্রম)। ডাটাবেসের বিরুদ্ধে 90% ম্যাচের জন্য যান, বাকীটি নিজেই করুন।

Http://pe.usps.gov/cpim/ftp/pubs/Pub28/pub28.pdf এ ডাক অ্যাড্রেসিং স্ট্যান্ডার্ডস (ইউএসপিএস) এর একটি অনুলিপি পান এবং লক্ষ্য করুন যে এটি 130+ পৃষ্ঠা দীর্ঘ long বাস্তবায়নের জন্য রেজিেক্সগুলি বাদাম হবে।

আন্তর্জাতিক ঠিকানাগুলির জন্য, সমস্ত বেট বন্ধ রয়েছে। মার্কিন ভিত্তিক কর্মীরা বৈধতা দিতে সক্ষম হবে না।

বিকল্পভাবে, একটি ডেটা পরিষেবা ব্যবহার করুন। আমার অবশ্য কোনও সুপারিশ নেই।

তদ্ব্যতীত: আপনি যখন মেইলে স্টাফটি প্রেরণ করবেন (এটি ঠিক এর জন্য কী?) আপনি খামের (ঠিক জায়গায়) ঠিকানার অনুরোধ করা ঠিক করেছেন এবং ডাটাবেস আপডেট করবেন তা নিশ্চিত করুন। (আমরা সামনের ডেস্ক ব্যক্তির পক্ষে এটি করার জন্য একটি সহজ গি তৈরি করেছি; যে ব্যক্তি প্রকৃতপক্ষে মেলের মাধ্যমে বাছাই করে)

শেষ অবধি, আপনার যখন স্ক্রাবড ডেটা থাকবে তখন নকলগুলি সন্ধান করুন।


14

এখানে পরামর্শের পরে, আমি ভিবিতে নিম্নলিখিত ফাংশনটি তৈরি করেছি যা উত্তীর্ণযোগ্য তৈরি করে, যদিও সর্বদা নিখুঁত হয় না (যদি কোনও সংস্থার নাম এবং স্যুট লাইন দেওয়া হয় তবে এটি স্যুট এবং শহরের সংমিশ্রণে) ব্যবহারযোগ্য ডেটা ব্যবহার করে। আমার নিজের নিয়ম, ইত্যাদি ভঙ্গ করার জন্য দয়া করে বিনা দ্বিধায় মন্তব্য / রিফ্যাক্টর / চিৎকার করুন:

Public Function parseAddress(ByVal input As String) As Collection
    input = input.Replace(",", "")
    input = input.Replace("  ", " ")
    Dim splitString() As String = Split(input)
    Dim streetMarker() As String = New String() {"street", "st", "st.", "avenue", "ave", "ave.", "blvd", "blvd.", "highway", "hwy", "hwy.", "box", "road", "rd", "rd.", "lane", "ln", "ln.", "circle", "circ", "circ.", "court", "ct", "ct."}
    Dim address1 As String
    Dim address2 As String = ""
    Dim city As String
    Dim state As String
    Dim zip As String
    Dim streetMarkerIndex As Integer

    zip = splitString(splitString.Length - 1).ToString()
    state = splitString(splitString.Length - 2).ToString()
    streetMarkerIndex = getLastIndexOf(splitString, streetMarker) + 1
    Dim sb As New StringBuilder

    For counter As Integer = streetMarkerIndex To splitString.Length - 3
        sb.Append(splitString(counter) + " ")
    Next counter
    city = RTrim(sb.ToString())
    Dim addressIndex As Integer = 0

    For counter As Integer = 0 To streetMarkerIndex
        If IsNumeric(splitString(counter)) _
            Or splitString(counter).ToString.ToLower = "po" _
            Or splitString(counter).ToString().ToLower().Replace(".", "") = "po" Then
                addressIndex = counter
            Exit For
        End If
    Next counter

    sb = New StringBuilder
    For counter As Integer = addressIndex To streetMarkerIndex - 1
        sb.Append(splitString(counter) + " ")
    Next counter

    address1 = RTrim(sb.ToString())

    sb = New StringBuilder

    If addressIndex = 0 Then
        If splitString(splitString.Length - 2).ToString() <> splitString(streetMarkerIndex + 1) Then
            For counter As Integer = streetMarkerIndex To splitString.Length - 2
                sb.Append(splitString(counter) + " ")
            Next counter
        End If
    Else
        For counter As Integer = 0 To addressIndex - 1
            sb.Append(splitString(counter) + " ")
        Next counter
    End If
    address2 = RTrim(sb.ToString())

    Dim output As New Collection
    output.Add(address1, "Address1")
    output.Add(address2, "Address2")
    output.Add(city, "City")
    output.Add(state, "State")
    output.Add(zip, "Zip")
    Return output
End Function

Private Function getLastIndexOf(ByVal sArray As String(), ByVal checkArray As String()) As Integer
    Dim sourceIndex As Integer = 0
    Dim outputIndex As Integer = 0
    For Each item As String In checkArray
        For Each source As String In sArray
            If source.ToLower = item.ToLower Then
                outputIndex = sourceIndex
                If item.ToLower = "box" Then
                    outputIndex = outputIndex + 1
                End If
            End If
            sourceIndex = sourceIndex + 1
        Next
        sourceIndex = 0
    Next
    Return outputIndex
End Function

parseAddress"এপি ক্রল অ্যান্ড সোন 2299 লুইস-জর্জিটাউন হুই, জর্জিটাউন, ডি 19947" ফাংশনটি পাস করে :

2299 Lewes-Georgetown Hwy
A. P. Croll & Son  
Georgetown
DE
19947

13

আমি এখন প্রায় 5 বছর ধরে অ্যাড্রেস প্রসেসিং ডোমেনে কাজ করছি এবং সত্যিকারের কোনও রূপালী বুলেট নেই। সঠিক সমাধানটি ডেটার মানের উপর নির্ভর করতে চলেছে। যদি এটি খুব মূল্যবান না হয় তবে অন্যান্য উত্তরের হিসাবে এটি পার্সারের মাধ্যমে ফেলে দিন। এটি এমনকি কিছুটা মূল্যবান হলে আপনার অবশ্যই পার্সারের সমস্ত ফলাফলের মূল্যায়ন / সংশোধন করা দরকার। আপনি যদি একটি সম্পূর্ণ স্বয়ংক্রিয়, পুনরাবৃত্তযোগ্য সমাধানের সন্ধান করছেন তবে আপনি সম্ভবত গ্রুপ 1 বা ট্রিলিয়ামের মতো কোনও ঠিকানা সংশোধন বিক্রেতার সাথে কথা বলতে চান।


8

এটি আপনার সমস্যার সমাধান করবে না, তবে এই ঠিকানাগুলির জন্য আপনার যদি কেবল ল্যাট / লম্বা ডেটা প্রয়োজন হয় তবে গুগল ম্যাপস এপিআই অ-বিন্যাসিত ঠিকানাগুলি বেশ ভালভাবে পার্স করবে।

ভাল পরামর্শ, বিকল্পভাবে আপনি গুগল ম্যাপে প্রতিটি ঠিকানার জন্য একটি সিআরএল অনুরোধ সম্পাদন করতে পারেন এবং এটি সঠিকভাবে ফর্ম্যাট করা ঠিকানা ফিরে আসবে। সেখান থেকে আপনি আপনার হৃদয়ের বিষয়বস্তুতে পুনরায় ভাগ করতে পারেন।


7

জেমস এ। রোজেনের প্রস্তাবিত সমাধানের বিষয়ে +1 হ'ল এটি আমার পক্ষে ভাল কাজ করেছে, তবে পরিপূর্ণদের পক্ষে এই সাইটটি একটি আকর্ষণীয় পাঠযোগ্য এবং আমি বিশ্বব্যাপী ঠিকানার ডকুমেন্টিংয়ে দেখা সবচেয়ে ভাল প্রচেষ্টা: http://www.columbia.edu/kermit /postal.html


6

ঠিকানাগুলি রেকর্ড করা আছে এমন কোনও মানদণ্ড কি আদৌ আছে? উদাহরণ স্বরূপ:

  1. স্ট্রিট 1 থেকে স্ট্রিট 1 শহর থেকে জিপ থেকে আলাদা করে কি সর্বদা কমা বা নতুন লাইন থাকে?
  2. ঠিকানার ধরণগুলি (রাস্তা, রাস্তা, বুলেভার্ড ইত্যাদি) সবসময় বানানযুক্ত থাকে? সর্বদা সংক্ষেপে? প্রতিটি কিছু?
  3. "ত্রুটি" সংজ্ঞায়িত করুন।

আমার সাধারণ উত্তরটি নিয়মিত প্রকাশের একটি সিরিজ, যদিও এর জটিলতা উত্তরের উপর নির্ভর করে। এবং যদি এখানে কোনও সামঞ্জস্যতা না থাকে তবে আপনি কেবলমাত্র একটি রেজেক্সের সাহায্যে আংশিক সাফল্য অর্জন করতে সক্ষম হতে পারেন (অর্থাত্: জিপ কোড এবং রাজ্য ফিল্টারিং) এবং হাতে হাতে বাকীটি করতে হবে (বা কমপক্ষে খুব বিশ্রামের মধ্যে দিয়ে যেতে হবে) আপনি ত্রুটিগুলি চিহ্নিত করেছেন তা নিশ্চিত করে সাবধানতা অবলম্বন করুন)।


6

নমুনা ডেটার জন্য অন্য একটি অনুরোধ।

যেমনটি উল্লেখ করা হয়েছে আমি জিপ থেকে পিছনে কাজ করব।

আপনার জিপ হয়ে গেলে আমি একটি জিপ ডাটাবেস জিজ্ঞাসা করব, ফলাফলগুলি সংরক্ষণ করব এবং স্ট্রিং থেকে সেগুলি এবং জিপটি সরিয়ে ফেলব।

এটি আপনাকে ঠিকানা জগাখিচুড়ি দিয়ে ছেড়ে দেবে। সর্বাধিক (সমস্ত?) ঠিকানাগুলি একটি সংখ্যার সাথে শুরু হবে যাতে বাকী স্ট্রিংটিতে কোনও সংখ্যার প্রথম উপস্থিতিটি খুঁজে বের করে স্ট্রিংয়ের (নতুন) প্রান্তে সব কিছু ধরে ফেলুন। এটি আপনার ঠিকানা হবে। এই নম্বরটির বামে যে কোনও কিছু সম্ভবত অ্যাড্রেসী।

আপনার এখন সিটি, রাজ্য এবং জিপ একটি সারণীতে এবং সম্ভবত দুটি স্ট্রিং, ঠিকানা এবং ঠিকানা থাকা উচিত। ঠিকানার জন্য, "স্যুট" বা "অ্যাপ্ট" এর অস্তিত্ব পরীক্ষা করুন। ইত্যাদি এবং এটিকে দুটি মানগুলিতে বিভক্ত করুন (ঠিকানা লাইন 1 এবং 2)।

অ্যাড্রেসির জন্য আমি এই স্ট্রিংয়ের শেষ শব্দটি শেষ নাম হিসাবে প্যান্ট করব এবং বাকীটিকে প্রথম নামের ক্ষেত্রে রেখে দেব put আপনি যদি এটি না করতে চান তবে আপনাকে শুরুতে অভিবাদন (মি।, মিসেস, ড। ইত্যাদি) পরীক্ষা করে দেখতে হবে এবং নামটি কীভাবে স্থান রয়েছে তার সংখ্যার উপর ভিত্তি করে কিছু অনুমান করা উচিত তৈরি

আমি মনে করি না যে আপনি 100% নির্ভুলতার সাথে পার্স করার কোনও উপায় আছে।


6

ব্যবহার করে দেখুন www.address-parser.com । আমরা তাদের ওয়েব পরিষেবা ব্যবহার করি, যা আপনি অনলাইনে পরীক্ষা করতে পারেন


1
এটি একটি বৃহত এইচটিএমএল ডকুমেন্টে ঠিকানা সন্ধানের মতো কোনও কিছুর জন্য ভাল কাজ করে। আমি কেবল ইচ্ছুক যে তারা একটি বিশ্রাম ইন্টারফেস আছে এবং না SOAP। এই লিঙ্কটি ভাগ করে নেওয়ার জন্য ধন্যবাদ।
jspooner

1
আপনি যদি তাদের সাথে অনুমোদিত হন তবে আপনাকে এটি প্রকাশ করতে হবে।
ম্যাট

1
যদি তারা দাম দেওয়ার আগে তাদের পরিষেবাটি কতটা মূল্যবান বলে দাবি করে a
টোস্ট

5

নমুনা তথ্যের ভিত্তিতে:

  1. আমি স্ট্রিং শেষে শুরু হবে। একটি জিপ-কোড (উভয় ফর্ম্যাট) পার্স করুন। প্রথম স্থানের শেষে পড়ুন। যদি কোনও জিপ কোড ত্রুটি পাওয়া যায় নি।

  2. স্পেস এবং বিশেষ অক্ষরের (কমা) জন্য প্রান্তটি তখন ট্রিম করুন

  3. তারপরে স্টেটে চলে যান, আবার স্পেসটি ডিলিমিটার হিসাবে ব্যবহার করুন। 2 বর্ণের রাষ্ট্রের কোডগুলি এবং পুরো রাষ্ট্রের নামগুলি বৈধতা দেওয়ার জন্য হয়ত অনুসন্ধানের তালিকাটি ব্যবহার করুন। যদি কোনও বৈধ রাষ্ট্র পাওয়া যায় না, ত্রুটি।

  4. আবার শেষ থেকে স্পেস এবং কমাগুলি ছাঁটাই।

  5. শহরটি জটিল হয়ে ওঠে, নগরীতে খুব বেশি ডেটা পাওয়ার ঝুঁকিতে আমি এখানে একটি কমা ব্যবহার করব। কমা বা লাইনের শুরুটির সন্ধান করুন।

  6. আপনার যদি এখনও স্ট্রিংয়ের মধ্যে অক্ষর থাকে, তবে এগুলি সমস্ত একটি ঠিকানা ক্ষেত্রে সরিয়ে দিন।

এটি নিখুঁত নয়, তবে এটি একটি বেশ ভাল সূচনা পয়েন্ট হওয়া উচিত।


4

যদি এটি মানুষের প্রবেশ করা ডেটা হয়, তবে আপনি ব্যতিক্রমগুলি সম্পর্কে কোড দেওয়ার চেষ্টা করতে অনেক বেশি সময় ব্যয় করবেন।

চেষ্টা করুন:

  1. জিপ কোডটি বের করতে নিয়মিত প্রকাশ

  2. সঠিক ঠিকানা পেতে জিপ কোড লুকিং (উপযুক্ত সরকারী ডিবি এর মাধ্যমে)

  3. পুরানো পুরাতন সাথে নতুন ডেটা ম্যানুয়ালি যাচাই করার জন্য একটি ইন্টার্ন পান


3

এটি আপনার সমস্যার সমাধান করবে না, তবে এই ঠিকানাগুলির জন্য আপনার যদি কেবল ল্যাট / লম্বা ডেটা প্রয়োজন হয় তবে গুগল ম্যাপস এপিআই অ-বিন্যাসিত ঠিকানাগুলি বেশ ভালভাবে পার্স করবে।


3

রিকোগনি কনট্যাক্ট একটি উইন্ডোজ সিওএম অবজেক্ট যা মার্কিন যুক্তরাষ্ট্র এবং ইউরোপীয় ঠিকানাগুলিকে পার্স করে। আপনি সরাসরি এটি http://www.loquisoft.com/index.php?page=8 এ চেষ্টা করতে পারেন


রিকোগনি যোগাযোগটি জনসাধারণের কাছে বন্ধ রয়েছে বলে মনে হচ্ছে। অ্যাক্সেসের জন্য একটি যোগাযোগ ফর্ম জমা দেওয়ার প্রয়োজন, তবে কোনও উত্তর নেই। তাদের সাথে যোগাযোগ রাখার উপায় হয়তো অন্য কেউ জানেন।
লুক ভ্যান


3

এই ধরণের সমস্যাটি ডেটাতে অন্তর্নিহিত অস্পষ্টতার কারণে সমাধান করা শক্ত।

এখানে একটি পার্ল ভিত্তিক সমাধান যা রাস্তার ঠিকানার অনেকগুলি বৈধ সংমিশ্রণটি পার্স করতে নিয়মিত প্রকাশের উপর ভিত্তি করে একটি পুনরাবৃত্ত বংশদ্ভুত ব্যাকরণ গাছকে সংজ্ঞায়িত করে: http://search.cpan.org/~kimryan/Lingua-EN-AddressParse-1.20/lib/Lingua / ইএন / অ্যাড্রেসপার্স.এমপি । এটিতে ঠিকানার মধ্যে সাব-প্রোপার্টি অন্তর্ভুক্ত রয়েছে: 12 ম এভিনিউ এন স্যুট # 2 কোথাও সিএ 12345 মার্কিন যুক্তরাষ্ট্র

এটি উপরে উল্লিখিত http://search.cpan.org/~timb/Geo-StreetAddress-US-1.03/US.pm এর মতো , তবে যুক্তরাষ্ট্রে, যেমন যুক্তরাজ্য, অস্ট্রেলিয়া এবং মার্কিন যুক্তরাষ্ট্র থেকে নেই এমন ঠিকানাগুলির জন্যও কাজ করে কানাডা।

আপনার এক নমুনা ঠিকানার জন্য আউটপুট এখানে। নোট করুন যে নাম বিভাগটি প্রথমে "এপি ক্রল অ্যান্ড সোন 2299 লুইস-জর্জিটাউন, জর্জিটাউন, ডি 19947" থেকে "2299 লুইস-জর্জিটাউন হুই, জর্জিটাউন, ডিই 1994" এ নামিয়ে আনতে হবে। স্ট্রিংয়ে পাওয়া প্রথম সংখ্যা পর্যন্ত সমস্ত ডেটা সরিয়ে এটি সহজেই অর্জন করা যায়।

Non matching part       ''
Error                   '0'
Error descriptions      ''
Case all                '2299 Lewes-Georgetown Hwy Georgetown DE 19947'
COMPONENTS              ''
country                 ''
po_box_type             ''
post_box                ''
post_code               '19947'
pre_cursor              ''
property_identifier     '2299'
property_name           ''
road_box                ''
street                  'Lewes-Georgetown'
street_direction        ''
street_type             'Hwy'
sub_property_identifier ''
subcountry              'DE'
suburb                  'Georgetown'

2

যেহেতু কথায় ত্রুটি হওয়ার সম্ভাবনা রয়েছে, তাই স্ট্রিংগুলির তুলনা করতে এলসিএস অ্যালগরিদমের সাথে মিলিত সৌডেক্স ব্যবহার করার বিষয়ে চিন্তা করুন, এটি অনেক সাহায্য করবে!


2

গুগল এপিআই ব্যবহার করে

$d=str_replace(" ", "+", $address_url);
$completeurl ="http://maps.googleapis.com/maps/api/geocode/xml?address=".$d."&sensor=true"; 
$phpobject = simplexml_load_file($completeurl);
print_r($phpobject);

1
এটি সম্ভবত টোসের বিপরীতে তবে দেখে মনে হচ্ছে এটির কাজ করা উচিত - যদিও প্রশ্নটি পুনরায় পড়া, এটি প্রয়োজনীয়তার সাথে পুরোপুরি ফিট করে না।
জেমি বুল

2

রুবি বা রেল বিকাশকারীদের জন্য একটি দুর্দান্ত রত্ন পাওয়া যায় যা Street_address নামে পরিচিত । আমি এটি আমার প্রকল্পের একটিতে ব্যবহার করছি এবং এটি আমার প্রয়োজনীয় কাজটি করে।

আমার কেবলমাত্র ইস্যু ছিল যখনই কোনও ঠিকানা যখন এই ফর্ম্যাটে থাকে তখন P. O. Box 1410 Durham, NC 27702 তা শূন্য হয় এবং অতএব আমাকে "পিও বক্স" প্রতিস্থাপন করতে হয়েছিল '' এবং এর পরে এটি এটি বিশ্লেষণ করতে সক্ষম হয়।


উপরে মডিউল লিঙ্ক করুন নষ্ট হয়ে গেছে, এই পরিবর্তে ব্যবহার করুন: search.cpan.org/~kimryan/Lingua-EN-AddressParse
কিম রায়ান

1

একটি জিপ কোড দেওয়া ডেটা পরিষেবাগুলি আপনাকে সেই জিপ কোডে রাস্তার নামের তালিকা দেবে।

জিপ বা সিটি স্টেট নিষ্কাশনের জন্য একটি রেজেক্স ব্যবহার করুন - সঠিকটির সন্ধান করুন বা কোনও ত্রুটি যদি উভয়ই পায়। কোনও ডেটা উত্স থেকে রাস্তার তালিকা টানুন শহর এবং রাজ্য এবং তারপরে রাস্তার ঠিকানা সংশোধন করুন। আপনি একবার কোনও বৈধ ঠিকানা লাইন 1, শহর, রাজ্য এবং জিপ পেয়ে গেলে আপনি ঠিকানায় লাইন ২.৩ এ অনুমান করতে পারেন


1

এটি কীভাবে সম্ভব হবে তা আমি জানি না, তবে আমি এটি উল্লিখিতটি দেখিনি তাই আমি ভেবেছিলাম আমি এগিয়ে গিয়ে পরামর্শ দেব:

আপনি যদি কঠোরভাবে মার্কিন যুক্তরাষ্ট্রে থাকেন ... সমস্ত জিপ কোড, রাজ্য, শহর এবং রাস্তাগুলির একটি বিশাল ডাটাবেস পান। এখন আপনার ঠিকানাগুলিতে এটি সন্ধান করুন। আপনি যা খুঁজে পেয়েছেন তা পরীক্ষার মাধ্যমে আপনি যাচাই করতে পারেন, যদি বলুন, যে শহরটি আপনি পেয়েছেন সে রাজ্যে আপনি যে রাজ্যটি পেয়েছেন তা বিদ্যমান রয়েছে বা যা খুঁজে পেয়েছেন সেই রাস্তায় আপনি যে শহরটি পেয়েছেন সেটিতে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে। যদি তা না হয় তবে সম্ভাবনা জন জনের রাস্তার পক্ষে নয়, তবে ঠিকানাটির নাম ... মূলত, আপনি সবচেয়ে বেশি তথ্য পেতে পারেন এবং এর বিপরীতে আপনার ঠিকানাগুলি যাচাই করে নিন। একটি চূড়ান্ত উদাহরণ হ'ল এ এর ​​সমস্ত ঠিকানাগুলির তালিকা পাওয়া এবং তারপরে আপনার প্রতিটি ঠিকানার সাথে সবচেয়ে প্রাসঙ্গিক ম্যাচটি কোনটির সাথে মিলবে ...


1

পার্ল জিও :: StreetAddress :: মার্কিন প্যাকেজটির জাভাস্ক্রিপ্ট পোর্ট রয়েছে: https://github.com/hassansin/parse-address । এটি রেজেক্স ভিত্তিক এবং মোটামুটি ভালভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.