แนวทางในการสร้างคำแนะนำที่ฉันใช้แล้วประสบความสำเร็จ แต่ไม่เคยมีมาก่อนคือการคำนวณคำแนะนำล่วงหน้า (เมื่อสร้างพจนานุกรม) โดยใช้ฟังก์ชันแฮช "ไม่ถูกต้อง"
แนวคิดคือการดูประเภทของข้อผิดพลาดในการสะกดที่ผู้คนสร้างขึ้นและออกแบบฟังก์ชันแฮชที่จะกำหนดการสะกดที่ไม่ถูกต้องให้กับที่เก็บข้อมูลเดียวกันกับการสะกดที่ถูกต้อง
ตัวอย่างเช่นความผิดพลาดที่พบบ่อยคือการใช้สระผิดเช่นที่แน่นอนแทนแน่นอน ดังนั้นคุณจึงออกแบบฟังก์ชันแฮชที่ถือว่าสระทั้งหมดเป็นตัวอักษรเดียวกัน วิธีง่ายๆในการทำเช่นนั้นคือขั้นแรก "ทำให้เป็นปกติ" ของคำที่ป้อนจากนั้นจึงใส่ผลลัพธ์ที่เป็นมาตรฐานผ่านฟังก์ชันแฮชปกติ ในตัวอย่างนี้ฟังก์ชั่น normalizing อาจลดลงสระทั้งหมดเพื่อให้กลายเป็นdefinite
dfnt
จากนั้นคำว่า "normalized" จะถูกแฮชด้วยฟังก์ชันแฮชทั่วไป
แทรกคำศัพท์ในพจนานุกรมทั้งหมดของคุณลงในดัชนีเสริม (ตารางแฮช) โดยใช้ฟังก์ชันแฮชพิเศษนี้ ที่เก็บข้อมูลในตารางนี้จะมีรายการการชนกันที่ยาวเนื่องจากฟังก์ชันแฮช "ไม่ดี" แต่รายการการชนกันเหล่านั้นเป็นคำแนะนำที่คำนวณล่วงหน้าเป็นหลัก
ตอนนี้เมื่อคุณพบคำที่สะกดผิดคุณจะค้นหารายการการชนกันสำหรับที่เก็บข้อมูลที่แมปการสะกดผิดในดัชนีเสริม Ta da: คุณมีรายการแนะนำ! สิ่งที่คุณต้องทำคือจัดลำดับคำบนนั้น
ในทางปฏิบัติคุณจะต้องมีดัชนีเสริมสองสามตัวพร้อมกับฟังก์ชันแฮชอื่น ๆ เพื่อจัดการข้อผิดพลาดประเภทอื่น ๆ เช่นตัวอักษรที่ถูกเปลี่ยนตำแหน่งตัวอักษรเดี่ยว / คู่และแม้แต่ตัวอักษรที่คล้ายกับ Soundex ที่เรียบง่ายเพื่อตรวจจับการสะกดคำที่สะกดผิด ในทางปฏิบัติฉันพบว่าการออกเสียงแบบง่าย ๆ นั้นไปได้ไกลและล้าสมัยโดยพื้นฐานแล้วการออกแบบมาเพื่อค้นหาการพิมพ์ผิดเล็กน้อย
ดังนั้นตอนนี้คุณจะค้นหาการสะกดผิดในดัชนีเสริมแต่ละรายการและเชื่อมรายการการชนกันก่อนจัดอันดับ
โปรดจำไว้ว่ารายการการชนกันมีเฉพาะคำที่อยู่ในพจนานุกรม ด้วยวิธีการที่พยายามสร้างการสะกดแบบอื่น (เช่นในบทความ Peter Norvig) คุณจะได้ผู้สมัคร (นับหมื่น) นับพันคนที่คุณต้องกรองตามพจนานุกรมก่อน ด้วยวิธีการคำนวณล่วงหน้าคุณอาจมีผู้สมัครสองร้อยคนและคุณรู้ว่าพวกเขาสะกดถูกต้องทั้งหมดดังนั้นคุณจึงข้ามไปที่การจัดอันดับได้โดยตรง
ปรับปรุง : ฉันได้พบตั้งแต่คำอธิบายขั้นตอนวิธีการหนึ่งที่คล้ายกับนี้FAROO กระจายค้นหา นี่ยังคงเป็นการค้นหาแบบ จำกัด ระยะทางแก้ไข แต่ก็เร็วมากเพราะขั้นตอนการคำนวณล่วงหน้าทำงานเหมือนกับแนวคิด "ฟังก์ชันแฮชที่ไม่ถูกต้อง" ของฉัน FAROO ใช้แนวคิดที่ จำกัด เกี่ยวกับฟังก์ชันแฮชที่ไม่ถูกต้อง