อัลกอริทึมของ Levensteinขึ้นอยู่กับจำนวนของการแทรกการลบและการแทนที่ในสตริง
น่าเสียดายที่มันไม่ได้คำนึงถึงการสะกดผิดที่พบบ่อยซึ่งเป็นการขนย้ายของ 2 ตัวอักษร (เช่นบางคนที่น่ากลัวและบางคนที่น่ากลัว) ดังนั้นผมจึงต้องการมีประสิทธิภาพมากขึ้นขั้นตอนวิธีการ Damerau-Levenstein
ฉันไม่คิดว่ามันเป็นความคิดที่ดีที่จะใช้ระยะทางกับสายอักขระทั้งหมดเนื่องจากเวลาเพิ่มขึ้นอย่างฉับพลันเมื่อเปรียบเทียบกับความยาวของสายอักขระ แต่ยิ่งแย่ลงไปกว่านั้นเมื่อองค์ประกอบที่อยู่เช่น ZIP ถูกลบออกที่อยู่ที่แตกต่างกันโดยสิ้นเชิงอาจตรงกันได้ดีกว่า (วัดโดยใช้เครื่องคิดเลข Levenshtein ออนไลน์ ):
1 someawesome street, anytown, F100 211 (reference)
1 someawesome st.,anytown (difference of 15, same address)
1 otherplaces street,anytown,F100211 (difference of 13, different ddress)
1 sameawesome street, othertown, CA98200 (difference of 13, different ddress)
anytown, 1 someawesome street (28 different same address)
anytown, F100 211, 1 someawesome street (37 different same address)
ผลกระทบเหล่านี้มักทำให้ชื่อถนนสั้นลง
ดังนั้นคุณควรใช้อัลกอริธึมที่ชาญฉลาดกว่า ตัวอย่างเช่นArthur Ratz เผยแพร่ใน CodeProjectอัลกอริทึมสำหรับการเปรียบเทียบข้อความอัจฉริยะ อัลกอริทึมไม่พิมพ์ระยะทาง (แน่นอนว่ามันสามารถทำให้ดีขึ้นตามลำดับ) แต่มันระบุสิ่งที่ยากบางอย่างเช่นการย้ายบล็อกข้อความ (เช่นการสลับระหว่างเมืองและถนนระหว่างตัวอย่างแรกและตัวอย่างสุดท้ายของฉัน)
หากอัลกอริทึมดังกล่าวนั้นกว้างเกินไปสำหรับกรณีของคุณคุณควรทำงานโดยใช้ส่วนประกอบและเปรียบเทียบส่วนประกอบที่เปรียบเทียบได้เท่านั้น นี่ไม่ใช่เรื่องง่ายหากคุณต้องการแยกรูปแบบที่อยู่ใด ๆ ในโลก แต่ถ้าเป้าหมายมีความเฉพาะเจาะจงมากขึ้นพูดสหรัฐก็เป็นไปได้อย่างแน่นอน ตัวอย่างเช่น "ถนน", "เซนต์.", "สถานที่", "plazza" และการสะกดผิดปกติของพวกเขาสามารถเปิดเผยส่วนถนนของที่อยู่ส่วนที่สำคัญที่สุดซึ่งในหลักการจะเป็นตัวเลข รหัสไปรษณีย์จะช่วยในการค้นหาเมืองหรืออาจเป็นองค์ประกอบสุดท้ายของที่อยู่หรือหากคุณไม่ต้องการคาดเดาคุณสามารถค้นหารายชื่อเมือง (เช่นการดาวน์โหลดฐานข้อมูลรหัสไปรษณีย์ฟรี) จากนั้นคุณสามารถใช้ Damerau-Levenshtein กับส่วนประกอบที่เกี่ยวข้องเท่านั้น