กลับไปหน้าบทความ

อ่าน 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 ]

ตัวอย่าง

สำหรับสายทั้งสองเส้น

และ

ผลลัพธ์ของตัวชี้วัดสำหรับ

คือการใช้สตริงย่อย, , , และสำหรับGESTALT PATE
เมตริกนี้ใช้กับสตริงย่อย, , , , .GESTALT PRACI

แอปพลิเคชัน

ไลบรารี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. 1 2 3 4 difflib — เครื่องมือช่วยในการคำนวณค่าความแตกต่างภายในเอกสารประกอบของ Python
  2. 1 2 3สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ Ratcliff/Obershelp การจดจำรูปแบบ
  3. แม้ว่าสตริงสองสตริงอาจมีสตริงย่อยร่วมที่ยาวที่สุดหลายสตริง แต่ Ratcliff (1988) ดูเหมือนจะสันนิษฐานว่ามีเพียงสตริงย่อยร่วมที่ยาวที่สุดเพียงสตริงเดียว
  4. Ilya Ilyankou: การเปรียบเทียบอัลกอริทึม Jaro-Winkler และ Ratcliff/Obershelp ในการตรวจสอบการสะกดคำพฤษภาคม 2014 (PDF)
  5. Python's SequenceMatcher ทำงานอย่างไร?ที่ stackoverflow.com
  6. นำมาจาก Python 3.7.0, difflib.py บรรทัดที่ 38–41 และ 676–686

อ่านเพิ่มเติม

  • แรตคลิฟฟ์, จอห์น ดับเบิลยู.; เมตเซเนอร์, เดวิด (กรกฎาคม 1988) "การจับคู่รูปแบบ: แนวทางเกสตัลต์" บันทึกของดร. ด็อบบ์ (46)

ดูเพิ่มเติม

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การจับคู่รูปแบบเกสตัลท์

การจับคู่รูปแบบเกสตั ลต์[ 1 ]หรือการจดจำรูปแบบแรตคลิฟฟ์/โอเบอร์สเฮลป์ [ 2 ] เป็นอัลกอริทึมการจับคู่สตริงเพื่อกำหนดความคล้ายคลึงกันของสตริงสองสตริงพัฒนาขึ้นในปี 1983 โดยจอห์น...

อัลกอริทึม

ความคล้ายคลึงกันของสตริงสองสตริงจะถูกกำหนดโดยสูตรนี้: สองเท่าของจำนวนอักขระ ที่ตรงกัน หารด้วยจำนวนอักขระทั้งหมดของทั้งสองสตริง อักขระที่ตรงกันจะถูกกำหนดให้เป็นสตริงย่อยร่วมที่ยาวที่สุด[ 3...

ตัวอย่าง

เอสวฉันเคฉันเอ็มอีดีฉันเอเอสวฉันเคฉันเอ็มเอเอ็นฉันเอสตริงย่อยร่วมที่ยาวที่สุดคือWIKIM(สีเทาอ่อน) มี 5 ตัวอักษร ไม่มีสตริงย่อยเพิ่มเติมทางด้านซ้าย สตริงย่อยที่ไม่ตรงกันทางด้านขวาคือEDIAและANIAซึ่งมีสตริงย่อยร่วมที่ยาวที่สุดIA(สีเทาเข้ม) ยาว 2 ตัวอักษร...

คุณสมบัติ

อักขระที่ใช้ในการจับคู่แบบ Ratcliff/Obershelp อาจแตกต่างกันอย่างมากจากลำดับย่อยร่วมที่ยาวที่สุดของสตริงที่กำหนด ตัวอย่างเช่นและมีสตริงย่อยร่วมที่ยาวที่สุดเพียงสตริงเดียว และไม่มีอักขระร่วมทางด้านขวาของการปรากฏ และเช่นเดียวกันทางด้านซ้าย ทำให้ได้อย่างไรก็ตาม...