วิธีการเรียนรู้แบบ Heuristic สำหรับการนำ DIFF แบบยืดหยุ่นมาใช้


12

ฉันได้สร้างการใช้ DIFF เพื่อเปรียบเทียบการแก้ไขเอกสารในที่ทำงาน มันขึ้นอยู่กับมี O (ND) ความแตกต่างขั้นตอนวิธีการและรูปแบบของมัน

สิ่งหนึ่งที่มีความสำคัญคือการบันทึกรายการการเปลี่ยนแปลงและตีความให้เป็นข้อความที่มนุษย์อ่านได้ ในขณะที่อัลกอริทึมในปัจจุบันมีประสิทธิภาพมากมันก็มากจนยากที่จะขยาย

คำถามสั้น ๆ

ฉันคิดถึงการพยายามใช้ A * และฮิวริสติกที่เพิ่มบทลงโทษสำหรับ "การเปลี่ยน" แนวคิดที่จะทำให้เรียบโดยไม่จำเป็น "เพิ่มลบเพิ่มลบเพิ่มลบ" เพื่อให้ง่ายต่อการแยกวิเคราะห์เป็นสิ่งที่มนุษย์สามารถอ่านได้ โดยทั่วไปเปลี่ยนปัญหาเส้นทางที่สั้นที่สุดของฉันให้เป็นปัญหาเส้นทางที่ง่ายที่สุด

และแน่นอนไม่สร้างผลลัพธ์ที่ "ลบทุกอย่างเพิ่มทุกอย่าง " เสมอ

เสียงนี้สมเหตุสมผลหรือไม่

มีความสำคัญสำหรับการใช้ฮิวริสติกในการนำ DIFF ไปใช้หรือไม่? ฮิวริสติกคืออะไร?

ปัญหา:

หากมีการลบประโยคยาวและประโยคยาวอื่นถูกลบออก แต่พวกเขาแบ่งปันอย่างน้อยหนึ่งคำให้พูดว่า "with" การออกจากคำทั่วไปเพียงอย่างเดียว (ไม่ใช่ทั้งการเพิ่มและการลบ) จะเป็นการสร้างเส้นทางที่สั้นที่สุด อย่างไรก็ตามนี่เป็นเพียงแค่ทำให้งงงวยบริบทของการเปลี่ยนแปลงกับมนุษย์พยายามอ่านพิมพ์จากการเปลี่ยนแปลง

ตัวอย่างด้วย DIFF ปัจจุบัน:

  • ข้อความเก่า: สะอาด: Powerwash และเป่าให้แห้งด้วยอากาศในร้าน
  • ข้อความใหม่: ล้าง: เช็ดด้วยอะซิโตนและผ้าสำลีฟรี
  • เปลี่ยนรายการบันทึกย่อ:
    • เปลี่ยน "Powerwash แล้วเป่าให้แห้ง" เป็น "Wipe with acetone"
    • เปลี่ยน "ซื้ออากาศ" เป็น "อะซิโตนและผ้าสำลีฟรี"

หมายเหตุ: ใช้ "Change" แทน "ลบ" shop air "เพิ่ม" acetone ""

อย่างที่คุณเห็นบันทึกย่อที่สองสูญเสียบริบททั้งหมดและโดยที่ยังไม่ได้ดูชุดข้อความแบบเก่าและใหม่ที่คุณไม่เข้าใจว่ามันหมายถึงอะไร

หมายเหตุเกี่ยวกับเครื่องหมายวรรคตอน:

ฉันมีเครื่องหมายวรรคตอนคั่นเป็น "คำ" แยกเพื่อที่ฉันจะได้รับ

  • เพิ่ม "("

แทน

  • เปลี่ยน "ซ่อมแซม" เป็น "(ซ่อม"

เพราะสิ่งนี้น่ารังเกียจ อย่างไรก็ตามนั่นหมายความว่าหากมีแม้แต่เครื่องหมายจุลภาคในข้อความทั้งสอง (ตรงข้ามกับคำว่า "กับ" ในตัวอย่างก่อนหน้า) สิ่งเดียวกันจะเกิดขึ้น

ทางออกที่เป็นไปได้:

ฉันคิดว่าฉันสามารถใช้อัลกอริทึมการค้นหาพา ธ ที่แตกต่างกันแทนซึ่งทำให้ฉันมีความยืดหยุ่นในการเพิ่มน้ำหนักให้กับ "พา ธ " การเปลี่ยนแปลงที่แตกต่างกันซึ่งอาจเหมาะสมกับคนมากขึ้น บางทีฉันอาจทำให้การเดินทางไปยังโหนดที่มีเครื่องหมายวรรคตอนมีน้ำหนักน้อย (ไม่แน่ใจว่าสิ่งนี้จะส่งผลกระทบต่อสิ่งอื่น)

จากนั้นฉันจะได้รับตัวอย่างก่อนหน้าเพื่อแสดงรายการต่อไปนี้:

  • เปลี่ยนรายการบันทึกย่อ:
    • เปลี่ยน "Powerwash แล้วเป่าให้แห้งด้วยอากาศในร้าน" เป็น "เช็ดด้วยอะซิโตนและผ้าสำลีฟรี"

ดู! ชัดเจนมากขึ้น!

ฉันรู้ว่าฉันจะได้รับความนิยมในการแสดงและฉันอาจต้องทำการปรับปรุงครั้งใหญ่ในโปรแกรมของฉัน แต่มันสำคัญกว่าที่จะได้ผลลัพธ์สุดท้ายที่ฉันต้องการ

บรรทัดล่างสุด:

อีกครั้งมีความสำคัญสำหรับการใช้ฮิวริสติกในการนำ DIFF ไปใช้และมันคืออะไร

ความคิดอื่น ๆ? การลงทุนในเวลาที่เหมาะสม? ความคิดอื่น ๆ ? ขั้นตอนวิธีอื่น ๆ ?

ขอบคุณล่วงหน้า!

แก้ไข:

ฉันพยายามชี้แจง / ทำให้คำถามของฉันเป็นของแข็งและทำให้คำถามของฉันเป็นแบบทั่วไปเพื่อเพิ่มการวิเคราะห์พฤติกรรมในอัลกอริทึมของฉันแทนที่จะใช้ A * โดยพื้นฐานแล้วสิ่งเดียวกันในตัวอย่างนี้ แต่ฉันก็ยังคิดอย่างแม่นยำมากขึ้นในตอนนี้ โพสต์นี้ลึกซึ้ง

คำตอบ:


1

คุณอาจทำในรูปแบบ vimdiff:

ขั้นตอนที่ 1: การระบุประโยคที่เพิ่มลบและแก้ไข

ขั้นตอนที่ 2: สำหรับแต่ละประโยคที่ถูกแก้ไขค้นหาคำแรกและคำสุดท้ายที่มีการเปลี่ยนแปลงและตัดสิ่งที่ไม่ได้อยู่ระหว่างคำทั้งสองนี้

หากคุณต้องการเพิ่มโครงสร้างไวยากรณ์ให้สอดคล้องกันดูที่ internals ของhttp://www.languagetool.org/หรืออื่น ๆ ที่แสดงในโพสต์นี้

เกี่ยวกับการนำเสนอ: คุณอาจนำเสนอทั้งสองประโยคของประโยคนั้นภายใต้อีกบท คุณอาจต้องการแสดงบริบทสำหรับการเปลี่ยนแปลงแต่ละครั้ง สำหรับแรงบันดาลใจให้ดูที่ latexdiff ซึ่งสามารถพิมพ์ข้อความที่เพิ่มเป็นสีน้ำเงินที่เป็นที่สุดท้ายในเวอร์ชันสุดท้ายของข้อความและข้อความที่ถูกลบในเชิงอรรถ (แม้เข้ากันได้กับ\usepackage[para]{footmisc})


นี่เป็นเพียงปัญหาของการแสดงผลไม่ใช่คำถามหลักของการจับคู่แบบฮิวริสติก
Adam Zuckerman

คุณอ่านย่อหน้าที่สองของฉันหรือไม่
user2987828

ฉันทำ. คุณช่วยอธิบายสิ่งที่คุณพยายามอธิบายได้ไหม การอ่านครั้งแรก (และครั้งที่สอง) ของฉันทำให้ฉันคิดว่าคุณยังคงอธิบายวิธีการแสดงข้อมูลไม่ใช่ดำเนินการ
Adam Zuckerman

ขณะนี้ฉันสามารถใช้ html เพื่อจัดรูปแบบการเพิ่มและลบตัวแสดงการแก้ไข stackexchange เป็นสิ่งที่เป็นแรงบันดาลใจให้ฉัน นี่ไม่ใช่ปัญหาของฉัน
ptpaterson

1
ฉันต้องเข้าใจให้ดีขึ้นว่าฉันจะใช้วิธีการค้นหากราฟแบบอื่นเพื่อค้นหาความแตกต่างได้อย่างไร เดิมที่ฉันสร้างกราฟได้อย่างมีประสิทธิภาพด้วยน้ำหนักที่เท่ากันทุกขอบและทำการค้นหาในเชิงลึกก่อนเพื่อค้นหาการเพิ่ม / ลบ / คงการเคลื่อนที่ทั้งหมดจนถึงจุดสิ้นสุด ฉันกำลังพิจารณาเพิ่มน้ำหนักที่แตกต่างกันไปที่ขอบและเพิ่มการแก้ปัญหา
ptpaterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.