เมื่อใช้งานหลายโปรแกรมในเทอร์มินัล บางครั้งเรามักพิมพ์คำสั่งผิดและโปรแกรมก็จะแสดงข้อผิดพลาดขึ้นมา แต่บางโปรแกรม เช่น Git หรือ npm กลับสามารถแนะนำคำสั่งที่คล้ายกับคำสั่งที่เราพิมพ์ผิดได้ หรือบางครั้งก็แก้คำพิมพ์ผิดให้ทันทีและจัดการให้ผ่านไปอย่างเหมาะสมได้เอง ฟีเจอร์แบบนี้จริงๆ แล้วทำงานอย่างไร? บทความนี้จะลองสร้างฟีเจอร์แนะนำคำสั่งที่คล้ายกันขึ้นมาในลักษณะเดียวกัน เพื่อทำความเข้าใจหลักการของมัน
- นิยามปัญหา
→ ปัญหาการหาคำสั่งที่คล้ายกันสามารถแปลงเป็น “ปัญหาการตรวจสอบความคล้ายคลึงของสตริงสองชุด” ได้
- ระยะห่างการแก้ไข (Edit distance)
→ ระยะ Levenshtein (Levenshtein distance)
- แก้ปัญหา
5 ความคิดเห็น
คงไม่พูดถึง repo นี้ไม่ได้เลยนะครับ
https://github.com/nvbn/thefuck#how-it-works
ดูตัวอย่างด้านบนแล้วขำอยู่พักใหญ่เลย 555
ไม่ใช่แค่ฉันคนเดียวที่พิมพ์ผิด..
เป็นเรื่องที่น่าสนใจมาก ระยะห่างเลเวนชไตน์... ได้เรียนรู้อะไรใหม่ ๆ เลยนะ
อ่านได้อย่างเพลิดเพลินครับ
แต่ก็สงสัยว่า git ถูกพัฒนาด้วยวิธีนี้จริงหรือเปล่า
ดูแล้วก็น่าจะเป็นไปได้เหมือนกันที่จะเก็บรวบรวมประสบการณ์การใช้งานของผู้ใช้ในเชิงสถิติแล้วนำมาประมวลผล
git ใช้ระยะห่างแบบ Levenshtein ครับ ในลิงก์ด้านล่าง ถ้าดูหัวข้อ git จะมีซอร์สโค้ดส่วนที่เกี่ยวข้องของ git อยู่ด้วย :)
https://vishnubharathi.codes/blog/levenshtein-distance/
แนวทางที่อาศัยประสบการณ์ของผู้ใช้ในเชิงสถิติก็น่าสนใจเหมือนกัน แต่ดูเหมือนว่า a) คำสั่ง git มีความยาวสั้น และ b) จำนวนมีจำกัด เลยทำให้ใช้ Levenshtein ก็เพียงพอที่จะทำสิ่งที่ต้องการได้ครับ