อ่าน 2 นาที
การจับคู่รูปแบบเกสตัลท์
การจับคู่รูปแบบเกสตั ลต์[ 1 ]หรือการจดจำรูปแบบแรตคลิฟฟ์/โอเบอร์สเฮลป์ [ 2 ] เป็นอัลกอริทึมการจับคู่สตริงเพื่อกำหนดความคล้ายคลึงกันของสตริงสองสตริงพัฒนาขึ้นในปี 1983 โดยจอห์น...
การจับคู่รูปแบบเกสตัลท์
การจับคู่รูปแบบเกสตั ลต์[ 1 ]หรือการจดจำรูปแบบแรตคลิฟฟ์/โอเบอร์สเฮลป์ [ 2 ] เป็นอัลกอริทึมการจับคู่สตริงเพื่อกำหนดความคล้ายคลึงกันของสตริงสองสตริงพัฒนาขึ้นในปี 1983 โดยจอห์น ดับเบิลยู. แรตคลิฟฟ์ และจอห์น เอ. โอเบอร์สเฮลป์และตีพิมพ์ในวารสารดร.ด็อบบ์ในเดือนกรกฎาคม 1988 [ 2 ]
อัลกอริทึม
ความคล้ายคลึงกันของสตริงสองสตริงจะถูกกำหนดโดยสูตรนี้: สองเท่าของจำนวนอักขระ ที่ตรงกัน หารด้วยจำนวนอักขระทั้งหมดของทั้งสองสตริง อักขระที่ตรงกันจะถูกกำหนดให้เป็นสตริงย่อยร่วมที่ยาวที่สุด[ 3 ]บวกกับจำนวนอักขระที่ตรงกันในบริเวณที่ไม่ตรงกันทั้งสองด้านของสตริงย่อยร่วมที่ยาวที่สุดแบบเรียกซ้ำ : [ 2 ] [ 4 ]
โดยที่ค่าตัวชี้วัดความคล้ายคลึงสามารถมีค่าได้ระหว่างศูนย์ถึงหนึ่ง:
ค่า 1 หมายถึงการจับคู่กันอย่างสมบูรณ์ของทั้งสองสตริง ในขณะที่ค่า 0 หมายถึงไม่มีการตรงกันเลย แม้แต่ตัวอักษรเดียวก็ไม่มีเหมือนกัน
ตัวอย่าง
| เอส | ว | ฉัน | เค | ฉัน | เอ็ม | อี | ดี | ฉัน | เอ |
|---|---|---|---|---|---|---|---|---|---|
| เอส | ว | ฉัน | เค | ฉัน | เอ็ม | เอ | เอ็น | ฉัน | เอ |
สตริงย่อยร่วมที่ยาวที่สุดคือWIKIM(สีเทาอ่อน) มี 5 ตัวอักษร ไม่มีสตริงย่อยเพิ่มเติมทางด้านซ้าย สตริงย่อยที่ไม่ตรงกันทางด้านขวาคือEDIAและANIAซึ่งมีสตริงย่อยร่วมที่ยาวที่สุดIA(สีเทาเข้ม) ยาว 2 ตัวอักษร เกณฑ์ความคล้ายคลึงกันถูกกำหนดโดย:
คุณสมบัติ
อักขระที่ใช้ในการจับคู่แบบ Ratcliff/Obershelp อาจแตกต่างกันอย่างมากจากลำดับย่อยร่วมที่ยาวที่สุดของสตริงที่กำหนด ตัวอย่างเช่นและมีสตริงย่อยร่วมที่ยาวที่สุดเพียงสตริงเดียว และไม่มีอักขระร่วมทางด้านขวาของการปรากฏ และเช่นเดียวกันทางด้านซ้าย ทำให้ได้อย่างไรก็ตาม ลำดับย่อยร่วมที่ยาวที่สุดของและคือโดยมีความยาวรวม
ความซับซ้อน
เวลาดำเนินการของอัลกอริธึมคือในกรณีที่เลวร้ายที่สุดและในกรณีเฉลี่ย การเปลี่ยนวิธีการคำนวณสามารถปรับปรุงเวลาดำเนินการได้อย่างมีนัยสำคัญ[ 1 ]
คุณสมบัติการสลับเปลี่ยน
การใช้งานไลบรารี Python ของอัลกอริธึมการจับคู่รูปแบบเกสตัลต์ไม่เป็นไปตามการสลับที่ : [ 5 ]
- ตัวอย่าง
สำหรับสายทั้งสองเส้น
และ
ผลลัพธ์ของตัวชี้วัดสำหรับ
แอปพลิเคชัน
ไลบรารีPythondifflibซึ่งเปิดตัวในเวอร์ชัน 2.1 [ 1 ]ใช้ขั้นตอนวิธีที่คล้ายคลึงกันซึ่งมีมาก่อนขั้นตอนวิธี Ratcliff-Obershelp เนื่องจากพฤติกรรมรันไทม์ที่ไม่เหมาะสมของเมตริกความคล้ายคลึงนี้ จึงได้มีการนำวิธีการสามวิธีมาใช้ สองวิธีนั้นให้ค่าขอบเขตบนในเวลาการทำงานที่เร็วกว่า[ 1 ]ตัวแปรที่เร็วที่สุดจะเปรียบเทียบเฉพาะความยาวของสตริงย่อยสองสตริงเท่านั้น: [ 6 ]
ขอบเขตบนที่สองคำนวณจากผลรวมของอักขระที่ใช้ทั้งหมดซึ่งปรากฏอยู่ในสตริงทั้งสอง หารด้วยความยาวของสตริงทั้งสอง แต่จะไม่พิจารณาลำดับของอักขระ
# การใช้งาน DQR ใน Python import collectionsdef quick_ratio ( s1 : str , s2 : str ) -> float : """คืนค่าขอบเขตบนของ ratio() อย่างรวดเร็ว""" length = len ( s1 ) + len ( s2 )ถ้าความยาวไม่ตรงกันให้คืนค่า1.0intersect = ( collections.Counter ( s1 ) & collections.Counter ( s2 ) ) matches = sum ( intersect.values ( ) ) return 2.0 * matches / lengthโดยทั่วไปแล้วสิ่งต่อไปนี้ใช้ได้:
เอกสารอ้างอิง
- 1 2 3 4 difflib — เครื่องมือช่วยในการคำนวณค่าความแตกต่างภายในเอกสารประกอบของ Python
- 1 2 3สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ Ratcliff/Obershelp การจดจำรูปแบบ
- ↑แม้ว่าสตริงสองสตริงอาจมีสตริงย่อยร่วมที่ยาวที่สุดหลายสตริง แต่ Ratcliff (1988) ดูเหมือนจะสันนิษฐานว่ามีเพียงสตริงย่อยร่วมที่ยาวที่สุดเพียงสตริงเดียว
- ↑ Ilya Ilyankou: การเปรียบเทียบอัลกอริทึม Jaro-Winkler และ Ratcliff/Obershelp ในการตรวจสอบการสะกดคำพฤษภาคม 2014 (PDF)
- ↑ Python's SequenceMatcher ทำงานอย่างไร?ที่ stackoverflow.com
- ↑นำมาจาก Python 3.7.0, difflib.py บรรทัดที่ 38–41 และ 676–686
อ่านเพิ่มเติม
- แรตคลิฟฟ์, จอห์น ดับเบิลยู.; เมตเซเนอร์, เดวิด (กรกฎาคม 1988) "การจับคู่รูปแบบ: แนวทางเกสตัลต์" บันทึกของดร. ด็อบบ์ (46)
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ การจับคู่รูปแบบเกสตัลท์
การจับคู่รูปแบบเกสตั ลต์[ 1 ]หรือการจดจำรูปแบบแรตคลิฟฟ์/โอเบอร์สเฮลป์ [ 2 ] เป็นอัลกอริทึมการจับคู่สตริงเพื่อกำหนดความคล้ายคลึงกันของสตริงสองสตริงพัฒนาขึ้นในปี 1983 โดยจอห์น...
อัลกอริทึม
ความคล้ายคลึงกันของสตริงสองสตริงจะถูกกำหนดโดยสูตรนี้: สองเท่าของจำนวนอักขระ ที่ตรงกัน หารด้วยจำนวนอักขระทั้งหมดของทั้งสองสตริง อักขระที่ตรงกันจะถูกกำหนดให้เป็นสตริงย่อยร่วมที่ยาวที่สุด[ 3...
ตัวอย่าง
เอสวฉันเคฉันเอ็มอีดีฉันเอเอสวฉันเคฉันเอ็มเอเอ็นฉันเอสตริงย่อยร่วมที่ยาวที่สุดคือWIKIM(สีเทาอ่อน) มี 5 ตัวอักษร ไม่มีสตริงย่อยเพิ่มเติมทางด้านซ้าย สตริงย่อยที่ไม่ตรงกันทางด้านขวาคือEDIAและANIAซึ่งมีสตริงย่อยร่วมที่ยาวที่สุดIA(สีเทาเข้ม) ยาว 2 ตัวอักษร...
คุณสมบัติ
อักขระที่ใช้ในการจับคู่แบบ Ratcliff/Obershelp อาจแตกต่างกันอย่างมากจากลำดับย่อยร่วมที่ยาวที่สุดของสตริงที่กำหนด ตัวอย่างเช่นและมีสตริงย่อยร่วมที่ยาวที่สุดเพียงสตริงเดียว และไม่มีอักขระร่วมทางด้านขวาของการปรากฏ และเช่นเดียวกันทางด้านซ้าย ทำให้ได้อย่างไรก็ตาม...