ฉันกำลังมองหาไลบรารี JavaScript การค้นหาที่คลุมเครือเพื่อกรองอาร์เรย์ ฉันได้ลองใช้fuzzyset.jsและfuse.jsแล้ว แต่ผลลัพธ์แย่มาก (มีการสาธิตที่คุณสามารถลองได้ในหน้าที่เชื่อมโยง)
หลังจากอ่านข้อมูลเกี่ยวกับระยะทาง Levenshtein แล้วมันทำให้ฉันรู้สึกแย่เพราะประมาณว่าผู้ใช้กำลังมองหาอะไรเมื่อพวกเขาพิมพ์ สำหรับผู้ที่ไม่ทราบว่าระบบจะคำนวณว่าหลายแทรก , ลบและแทนมีความจำเป็นที่จะทำให้สองสายตรง
ข้อบกพร่องที่เห็นได้ชัดอย่างหนึ่งซึ่งได้รับการแก้ไขในแบบจำลอง Levenshtein-Demerau คือทั้งblubและboobถือว่าใกล้เคียงกับbulb (แต่ละอันต้องใช้การทดแทนสองครั้ง) มันเป็นที่ชัดเจน แต่ที่หลอดไฟมีมากขึ้นคล้ายกับร้องไห้สะอึกสะอื้นกว่าคนโง่และเป็นรูปแบบที่ผมกล่าวถึงเพียงตระหนักดีว่าโดยให้transpositions
ฉันต้องการใช้สิ่งนี้ในบริบทของการเติมข้อความดังนั้นหากฉันมีอาร์เรย์['international', 'splint', 'tinder']
และข้อความค้นหาของฉันเป็นintฉันคิดว่านานาชาติควรมีอันดับสูงกว่าเฝือกแม้ว่าในอดีตจะมีคะแนน (สูงกว่า = แย่กว่า) ถึง 10 เทียบกับของหลัง 3.
สิ่งที่ฉันกำลังมองหา (และจะสร้างขึ้นหากไม่มี) คือไลบรารีที่ทำสิ่งต่อไปนี้:
- ให้น้ำหนักการปรับแต่งข้อความต่างๆ
- การชั่งน้ำหนักแต่ละการจัดการจะแตกต่างกันไปขึ้นอยู่กับตำแหน่งที่ปรากฏในคำหนึ่ง (การปรับเปลี่ยนในช่วงแรกมีค่าใช้จ่ายสูงกว่าการจัดการในช่วงปลาย)
- ส่งคืนรายการผลลัพธ์ที่เรียงตามความเกี่ยวข้อง
มีใครเจออะไรแบบนี้บ้าง? ฉันตระหนักดีว่า StackOverflow ไม่ใช่สถานที่ที่จะขอคำแนะนำซอฟต์แวร์ แต่โดยนัย (ไม่ใช่อีกต่อไป!) ในด้านบนคือ: ฉันคิดเกี่ยวกับวิธีนี้ถูกต้องหรือไม่?
แก้ไข
ฉันพบกระดาษดีๆ (pdf)ในหัวข้อนี้ หมายเหตุและข้อความที่ตัดตอนมาบางส่วน:
ฟังก์ชั่นการแก้ไขระยะห่างจะกำหนดต้นทุนที่ค่อนข้างต่ำให้กับลำดับการแทรกหรือการลบ
ฟังก์ชันระยะทาง Monger-Elkan (Monge & Elkan 1996) ซึ่งเป็นตัวแปรที่สัมพันธ์กันของฟังก์ชันระยะทาง Smith-Waterman (Durban et al. 1998) ที่มีพารามิเตอร์ต้นทุนเฉพาะ
สำหรับระยะทาง Smith-Waterman (วิกิพีเดีย) "แทนที่จะดูลำดับทั้งหมดอัลกอริทึม Smith – Waterman จะเปรียบเทียบส่วนของความยาวที่เป็นไปได้ทั้งหมดและปรับการวัดความคล้ายคลึงกันให้เหมาะสมที่สุด" เป็นแนวทาง n-gram
เมตริกที่คล้ายคลึงกันในวงกว้างซึ่งไม่ได้ขึ้นอยู่กับโมเดลระยะแก้ไขคือเมตริก Jaro (Jaro 1995; 1989; Winkler 1999) ในเอกสารบันทึกการเชื่อมโยงได้รับผลลัพธ์ที่ดีโดยใช้รูปแบบต่างๆของวิธีนี้ซึ่งขึ้นอยู่กับจำนวนและลำดับของอักขระทั่วไประหว่างสองสตริง
ตัวแปรนี้เนื่องจาก Winkler (1999) ยังใช้ความยาว P ของคำนำหน้าทั่วไปที่ยาวที่สุด
(ดูเหมือนจะมีไว้สำหรับสตริงสั้น ๆ เป็นหลัก)
เพื่อจุดประสงค์ในการกรอกข้อความวิธีการของ Monger-Elkan และ Jaro-Winkler ดูเหมือนจะเหมาะสมที่สุด การเพิ่มตัวชี้วัด Jaro ของ Winkler ช่วยให้น้ำหนักจุดเริ่มต้นของคำมีน้ำหนักมากขึ้นได้อย่างมีประสิทธิภาพ และแง่มุมของ Monger-Elkan หมายความว่าความจำเป็นในการเติมคำให้สมบูรณ์ (ซึ่งเป็นเพียงลำดับของการเพิ่มเติม) จะไม่ทำให้เสียอรรถรสมากเกินไป
สรุป:
การจัดอันดับ TFIDF ทำได้ดีที่สุดในบรรดาเมตริกระยะทางที่ใช้โทเค็นหลายตัวและเมตริกระยะการแก้ไข Affine-gap ที่ปรับแต่งแล้วที่เสนอโดย Monge และ Elkan ทำงานได้ดีที่สุดในบรรดาเมตริกระยะแก้ไขสตริง เมตริกระยะทางที่ดีอย่างน่าประหลาดใจคือรูปแบบการฮิวริสติกที่รวดเร็วซึ่งเสนอโดย Jaro และต่อมาขยายโดย Winkler สิ่งนี้ใช้งานได้เกือบเช่นเดียวกับโครงการ Monge-Elkan แต่ลำดับความสำคัญเร็วกว่า วิธีง่ายๆอย่างหนึ่งในการรวมวิธี TFIDF และ Jaro-Winkler คือการแทนที่การจับคู่โทเค็นที่แน่นอนที่ใช้ใน TFIDF ด้วยการจับคู่โทเค็นโดยประมาณตามรูปแบบ Jaro-Winkler ชุดค่าผสมนี้ทำงานได้ดีกว่า Jaro-Winkler หรือ TFIDF เล็กน้อยโดยเฉลี่ยและบางครั้งก็ทำงานได้ดีกว่ามาก นอกจากนี้ยังมีประสิทธิภาพใกล้เคียงกับการเรียนรู้ร่วมกันของเมตริกที่ดีที่สุดหลายรายการที่พิจารณาในเอกสารนี้