การกำหนดความคล้ายคลึงกันของสตริงที่กำหนดให้กับชุดของสตริง


10

ฉันไม่แน่ใจว่าคำถามนี้เป็นของที่นี่และฉันขอโทษถ้าไม่ได้ สิ่งที่ฉันต้องการทำคือการพัฒนาวิธีการเขียนโปรแกรมที่ฉันสามารถตรวจสอบความน่าจะเป็นว่าสตริงที่กำหนด "เป็น" ในถุงของสตริง ตัวอย่างเช่นถ้าฉันมีชื่อเมือง 10,000 ชื่อในอเมริกาและมีสตริง "ฟิลาเดลเฟีย" ฉันต้องการวัดเชิงปริมาณของโอกาสที่ 'ฟิลาเดลเฟีย' เป็นชื่อเมืองในสหรัฐอเมริกาตามชื่อเมืองที่ฉันรู้จัก ในขณะที่ฉันรู้ว่าฉันจะไม่สามารถแยกชื่อเมืองจริงออกจากชื่อเมืองปลอมในบริบทนี้อย่างน้อยฉันก็คาดหวังว่าจะมีสตริงเช่น "123.75" และ "สุนัขจิ้งจอกสีแดงอย่างรวดเร็วกระโดดข้ามสุนัขสีน้ำตาลขี้เกียจ" ยกเว้น เกณฑ์บางอย่าง

ในการเริ่มต้นฉันดูที่ Levenshtein Distance และแหย่เล็กน้อยเกี่ยวกับวิธีการนำไปใช้กับปัญหาอย่างน้อยค่อนข้างคล้ายกับที่ฉันพยายามแก้ไข แอปพลิเคชั่นที่น่าสนใจอย่างหนึ่งที่ฉันค้นพบคือการตรวจจับการลอกเลียนแบบโดยมีกระดาษหนึ่งเล่มอธิบายว่าระยะทางของ Levenshtein ถูกนำไปใช้กับอัลกอริทึม Smith-Waterman ที่แก้ไขเพื่อทำคะแนนเอกสารได้อย่างไร คำถามของฉันคือถ้าใครสามารถชี้ให้ฉันไปในทิศทางที่ถูกต้องกับอัลกอริทึมหรือวิธีการอื่นที่อาจช่วยฉันได้ ฉันรู้สึกว่านี่อาจเป็นปัญหาที่บางคนในอดีตพยายามแก้ไข แต่จนถึงตอนนี้ Google-fu ของฉันก็ล้มเหลวฉัน


หากคุณมีตัวอย่างเชิงบวกและเชิงลบคุณสามารถลองฝึกการจําแนก สำหรับคุณสมบัติในการเริ่มต้นฉันจะลองดึงสถิติง่ายๆเช่นที่ Yuval Filmus แนะนำ
Nick


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

คำตอบ:


5

สถิติที่ดีกว่าที่จะนึกถึงก็คือการวิเคราะห์ความยาวของคำและการวิเคราะห์กรัม สำหรับความยาวของคำคุณสามารถรวบรวมสถิติการกระจายความยาวของชื่อเมืองและเปรียบเทียบกับความยาวของสิ่งที่คุณได้รับ การวิเคราะห์แบบn -gram ดูที่การกระจายของลำดับของตัวอักษรnตัวในข้อความตัวอย่างของคุณ (พูดว่าn = 2 ) ทั้งสองวิธีสามารถรวมกันได้nnnn=2

เมื่อกำหนดฮิวริสติกคุณสามารถใช้โอกาสที่จะได้คะแนนซึ่งสูงกว่าสำหรับข้อความตัวอย่าง (หวังว่า) เพื่อกำหนดเกณฑ์ที่เหมาะสมคุณสามารถทำการตรวจสอบข้าม เลือกชุดวลีตัวอย่างที่ไม่ใช่ชื่อเมือง แบ่งชื่อเมืองออกเป็นสองส่วนส่วนใหญ่ (พูด 80%) และส่วนเล็ก (พูด 20%) ฝึกโมเดลของคุณในส่วนใหญ่ (นั่นคือรวบรวมสถิติในส่วนใหญ่) จากนั้นประเมินโมเดลของคุณในส่วนเล็ก ๆ และบนตัวอย่างวลีที่ไม่ดี ตรวจสอบว่ามีเกณฑ์ที่สมเหตุสมผลที่ส่งชื่อเมืองส่วนใหญ่หรือไม่ แต่มีวลีที่ไม่ดีจำนวนเล็กน้อย


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

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

1
1n+1n
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.