วิธีทำที่อยู่ไปรษณีย์จับคู่แบบคลุมเครือ


14

ฉันต้องการทราบวิธีจับคู่ที่อยู่ทางไปรษณีย์เมื่อรูปแบบของพวกเขาแตกต่างกันหรือเมื่อหนึ่งในนั้นถูกสะกดผิด

จนถึงตอนนี้ฉันได้พบวิธีแก้ไขปัญหาต่าง ๆ แต่ฉันคิดว่ามันค่อนข้างเก่าและไม่มีประสิทธิภาพมาก ฉันแน่ใจว่ามีวิธีที่ดีกว่าอยู่แล้วดังนั้นหากคุณมีการอ้างอิงสำหรับฉันที่จะอ่านฉันแน่ใจว่ามันเป็นเรื่องที่น่าสนใจหลายคน

วิธีแก้ปัญหาที่ฉันพบ (ตัวอย่างอยู่ใน R):

  • ระยะทางของ Levenshtein ซึ่งเท่ากับจำนวนอักขระที่คุณต้องแทรกลบหรือเปลี่ยนเพื่อแปลงคำหนึ่งไปเป็นอีกคำหนึ่ง

    agrep("acusait", c("accusait", "abusait"), max = 2, value = TRUE) ## [1] "accusait" "abusait"

  • การเปรียบเทียบหน่วยเสียง

    library(RecordLinkage) soundex(x<-c('accusait','acusait','abusait')) ## [1] "A223" "A223" "A123"

  • การใช้ตัวแก้ไขการสะกดคำ(ในที่สุดก็เป็นตัวแบบเบย์เหมือนของ Peter Norvig)แต่ก็ไม่ได้มีประสิทธิภาพมากสำหรับการพูด

  • ฉันคิดเกี่ยวกับการใช้คำแนะนำของ Google แนะนำ แต่ก็ไม่ได้มีประสิทธิภาพมากสำหรับที่อยู่ไปรษณีย์ส่วนบุคคล

  • คุณสามารถจินตนาการโดยใช้วิธีการเรียนรู้แบบมีผู้สอนในเครื่อง แต่คุณจำเป็นต้องจัดเก็บคำขอที่ผู้ใช้สะกดผิดให้ทำเช่นนั้นซึ่งไม่ใช่ตัวเลือกสำหรับฉัน


ผมขอแนะนำให้ใช้ฐานข้อมูลจริงที่สนับสนุนการจับคู่สตริงเลือน: posgres มันจะมีประสิทธิภาพ
เอ็ม

สหรัฐอเมริกาเท่านั้นแคนาดาสหราชอาณาจักรฝรั่งเศสญี่ปุ่นหลายประเทศ ... ? สำหรับแต่ละคนคุณจะพิจารณา / เดาว่าเป็นภาษาและประเทศใดจากนั้นจึงใช้ตัวจําแนกเฉพาะของประเทศ คุณมีชุดฝึกอบรมและมีการกระจายประเทศหรือไม่?
smci

คุณลงเอยด้วยสิ่งนี้ที่ไหน วิธีการแก้ปัญหาที่เราคิดคือการขัดและเพิ่มที่อยู่และชื่อสถานที่แล้วกดปุ่ม google geocoding และวาง API เว็บจากนั้นทำการคำนวณคร่าวๆเพื่อกำหนดผลลัพธ์ที่ถูกต้องเมื่อเปรียบเทียบกับข้อมูลดิบ มันเป็น clunky เล็ก ๆ น้อย ๆ แต่ใช้งานได้ แต่จะต้องมีวิธีที่สง่างามกว่านี้ในการทำให้ที่อยู่และสถานที่ / สถานที่ปกติกลับสู่ปกติ
Chris Smith

คำตอบ:


9

ในขณะที่คุณใช้ R คุณอาจต้องการดูแพคเกจ stringdist และตัวชี้วัดระยะทาง Jaro-Winkler ที่สามารถใช้ในการคำนวณได้ สิ่งนี้ได้รับการพัฒนาที่สำนักงานสำมะโนประชากรของสหรัฐ

ดูข้อมูลเพิ่มเติมเกี่ยวกับระยะทาง Jaro และ Jaro-Winkler ในวารสารนี้

สำหรับการเปรียบเทียบเทคนิคการจับคู่ต่าง ๆ อ่านบทความนี้


4

มีวิธีที่ฉลาดมากมายในการขยายระยะทางของ Levenshtein เพื่อให้ได้ภาพที่สมบูรณ์ยิ่งขึ้น คำแนะนำสั้น ๆ เกี่ยวกับโมดูลที่มีประโยชน์ (สำหรับไพ ธ อน) ชื่อ ' Fuzzy Wuzzy ' อยู่ที่นี่โดยทีมงานของ SeatGeek

สองสิ่งที่คุณสามารถทำได้คือความคล้ายคลึงกันของสตริงบางส่วน (ถ้าคุณมีสตริงความยาวต่างกันพูด m & n กับ m <n) จากนั้นคุณจับคู่กับอักขระ m เท่านั้น คุณยังสามารถแยกสตริงออกเป็นโทเค็น (คำแต่ละคำ) และดูว่าชุดโทเค็นจับคู่หรือเรียงลำดับตามตัวอักษรและเรียงลำดับอย่างไร


4

อีกเทคนิคที่นิยมสำหรับการตรวจสอบการแข่งขันสตริงบางส่วน ( แต่ปกติที่ระดับเอกสาร) จะshingling ในสาระสำคัญมันเป็นวิธีการเคลื่อนย้ายหน้าต่างว่าสารสกัดจากชุดของ N-กรัมสำหรับคำเป้าหมาย / doc และเปรียบเทียบพวกเขาไปยังชุด n-กรัมสำหรับคำอื่น ๆ / เอกสารผ่านทางค่าสัมประสิทธิ์ Jaccard มานนิงและเพื่อนร่วมงาน (2008) พูดคุยใกล้เคียงกับรายการที่ซ้ำกันและการจัดการในบริบทของการค้นคืนข้อมูล


4

ฉันได้เขียน matcher fuzzy probabalistic ทั่วไปใน Python ซึ่งจะทำงานที่เหมาะสมในการจับคู่ข้อมูลประเภทใดก็ได้:

https://github.com/robinl/fuzzymatcher

มันอยู่ในหน่วยความจำดังนั้นคุณอาจไม่ต้องการใช้มันเพื่อจับคู่ชุดข้อมูลที่สูงกว่าประมาณ 100k แถว

ฉันยังได้เขียนโครงการที่คล้ายกับที่อยู่ในสหราชอาณาจักรโดยเฉพาะ แต่นี่ถือว่าคุณสามารถเข้าถึง Addressbase Premium ได้ อันนี้ไม่ได้อยู่ในหน่วยความจำจึงถูกนำมาใช้กับที่อยู่ 100m หรือมากกว่านั้นในสหราชอาณาจักร ดูที่นี่:

https://github.com/RobinL/AddressMatcher

หากคุณต้องการที่จะได้รับนี้ไปได้อย่างรวดเร็วฉัน reccommend ใช้libpostalปกติอยู่ของคุณและจากนั้นให้อาหารพวกเขาเข้าไปใน fuzzymatcher ทั่วไปของฉัน ( pip install fuzzymatcher)

คุณสามารถค้นหาตัวอย่างการใช้งานที่นี่


สวัสดี Robin ฉันสนใจห้องสมุด AddressMatcher ของคุณ คุณมีเอกสารเกี่ยวกับวิธีการใช้งานหรือไม่? ฉันมีปัญหาตรงนี้ - ต้องจับคู่ที่อยู่ 1 ชุด (ยุ่ง) กับที่อยู่อื่น (ที่อยู่ไปรษณีย์อย่างเป็นทางการ) ขอบคุณ
SCool

1
เศร้ากับที่อยู่ matcher มันไม่สำคัญเลยและฉันไม่มีเอกสารที่ดี สิ่งสำคัญที่คุณต้องการคือการโหลด addressbase พรีเมียมผลิตภัณฑ์เชิงพาณิชย์ลงใน postgresql
RobinL

ตกลงขอบคุณที่กลับมาหาฉัน ฉันทำงานกับฉันสมมติว่า Addressbase รุ่นพรีเมี่ยมของไอร์แลนด์เรียกว่า Eircode ซึ่งจะเข้ากันไม่ได้ คุณคิดว่าการจับคู่ที่คลุมเครือจะขึ้นอยู่กับงานในการจับคู่ที่อยู่ในสภาพแวดล้อมการผลิตหรือไม่ ฉันแค่ต้องการเพิ่มรหัสไปรษณีย์ต่อท้ายที่อยู่ในข้อมูลของฉันที่ไม่มีพวกเขาเช่นค้นหา Eircode databse '1 Main Street, Some Town, County'และถ้าฉันพบคู่ที่ตรงกัน - นำรหัสไปรษณีย์กลับมา
SCool

1
matcher ฟัซซี่ - ใช่ฉันคิดว่าคุ้มค่าที่จะไป มันควรจะทำงานได้ดีพอสมควรสำหรับรายการที่อยู่เล็ก ๆ เพื่อค้นหาภายในรายการของที่อยู่เชิงอำนาจ (เช่น eircode) บนเครื่องขนาดใหญ่ ตัวเลือกอื่นคือ pacakge fastlink ใน R
RobinL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.