การจับคู่ชื่อประเทศกับชื่อเรียกอื่นเป็นปัญหาที่ดูเหมือนแก้ได้ด้วยการเทียบข้อความ แต่ความจริงคือเป็นปัญหาของการตกลงความหมายก่อน แล้วจึงเป็นการเทียบข้อความ บทความนี้จึงไล่ลำดับตั้งแต่การกำหนดชื่อหลัก ไปจนถึงขีดจำกัดที่ควรยอมรับว่าจับคู่ไม่ได้
ทำไมชื่อประเทศหนึ่งจึงมีได้หลายแบบ?
เพราะชื่อประเทศถูกใช้ในบริบทที่ต่างกัน แต่ละบริบทต้องการความยาวและระดับความเป็นทางการต่างกัน ชื่อที่ใช้ในเอกสารราชการจึงยาวและเป็นทางการกว่าชื่อที่ใช้ในชีวิตประจำวัน
เพราะภาษาที่ใช้เขียนชื่อนั้นมีหลายภาษา และแต่ละภาษามีธรรมเนียมการทับศัพท์ของตัวเอง ซึ่งทำให้ชื่อในภาษาหนึ่งไม่สามารถแปลงเป็นอีกภาษาหนึ่งได้อย่างตรงตัวเสมอ
เพราะชื่อเรียกที่ไม่เป็นทางการและคำย่อถูกใช้กันจริงจนกลายเป็นส่วนหนึ่งของภาษาที่ผู้ใช้ค้นหา และระบบที่รองรับเฉพาะชื่อทางการจะดูเหมือนค้นไม่เจอทั้งที่มีข้อมูลอยู่
เพราะชื่อเดิมที่เคยเป็นทางการยังคงอยู่ในข้อมูลเก่าและในความทรงจำของผู้ใช้บางกลุ่ม การปฏิเสธชื่อเดิมจะทำให้ข้อมูลที่เคยถูกต้องอ่านไม่ได้
ทั้งสี่เหตุผลนี้ทำให้การมีชื่อเดียวต่อหนึ่งประเทศไม่เพียงพอ และการมีหลายชื่อก็ต้องมีกฎว่าชื่อใดเป็นชื่อหลัก
ชื่อหลักควรถูกกำหนดอย่างไร?
ชื่อหลักควรเลือกจากแหล่งอ้างอิงที่นิยามไว้ชัดเจนและมีการเผยแพร่การเปลี่ยนแปลง ไม่ใช่เลือกจากความคุ้นเคยของทีม
หน้าที่ของชื่อหลักไม่ใช่การแสดงผลให้ผู้ใช้เห็น แต่คือการเป็นค่าอ้างอิงที่ทุกส่วนของระบบเทียบกับมัน การแสดงผลใช้ชื่อที่เหมาะกับผู้อ่านแต่ละกลุ่มได้ แต่ค่าอ้างอิงต้องมีเพียงหนึ่งเดียว
การมีชื่อหลักเพียงหนึ่งเดียวยังทำให้การตรวจความซ้ำซ้อนทำได้จริง เพราะถ้าไม่มีชื่อหลัก จะไม่มีเกณฑ์ว่าสองรายการที่ชื่อต่างกันเป็นรายการเดียวกันหรือไม่
สิ่งที่ต้องระวังคือการเปลี่ยนชื่อหลักบ่อย เพราะการเปลี่ยนจะกระทบข้อมูลย้อนหลังจำนวนมาก ชื่อหลักจึงควรเปลี่ยนเฉพาะเมื่อมีการเปลี่ยนแปลงอย่างเป็นทางการ ไม่ใช่เมื่อมีทีมใหม่เข้ามาและชอบชื่ออื่นมากกว่า
| ประเภทชื่อ | ใช้ทำอะไร | ควรเป็นค่าอ้างอิงหรือไม่ |
|---|---|---|
| ชื่อหลักตามมาตรฐาน | อ้างอิงภายในระบบ | ควร |
| ชื่อที่แสดงต่อผู้ใช้ | แสดงผลตามภาษา | ไม่ควร |
| ชื่อเรียกอย่างไม่เป็นทางการ | ช่วยการค้นหา | ไม่ควร |
| ชื่อเดิมที่เลิกใช้ | อ่านข้อมูลเก่า | ไม่ควร |
สิ่งที่มองไม่เห็นในข้อความมีผลต่อการเทียบอย่างไร?
ข้อความที่ดูเหมือนเหมือนกันบนหน้าจออาจไม่เหมือนกันในระดับข้อมูล เพราะตัวอักษรที่ประกอบเป็นรูปเดียวกันสามารถสร้างได้ด้วยรหัสที่ต่างกัน และบางภาษามีรูปเขียนที่ต้องประกอบจากหลายส่วน
ผลคือการเทียบแบบตรงตัวจะไม่พบรายการที่ควรพบ ซึ่งเป็นปัญหาที่ตรวจหายากเพราะผู้ใช้เห็นชื่อที่ถูกต้องบนหน้าจอ จึงไม่เข้าใจว่าทำไมระบบหาไม่เจอ
มาตรฐานสากลด้านการทำให้ข้อความเป็นรูปแบบเดียวกันถูกออกแบบมาเพื่อแก้ปัญหานี้ สิ่งที่ต้องทำคือทำให้ทั้งข้อมูลที่เก็บไว้และข้อความที่ผู้ใช้พิมพ์ผ่านวิธีเดียวกันก่อนเทียบ
อีกจุดที่มองไม่เห็นคือช่องว่างและเครื่องหมายวรรคตอนที่ซ่อนอยู่ รวมถึงช่องว่างที่ไม่ใช่ช่องว่างปกติ ซึ่งมักติดมาจากการคัดลอกวาง
สิ่งที่ต้องหลีกเลี่ยงคือการแก้ข้อความที่ผู้ใช้ส่งมาแล้วบันทึกทับ เพราะเมื่อการแก้ผิด จะไม่เหลือข้อมูลต้นฉบับให้ตรวจสอบ
ตารางชื่อเรียกอื่นควรมีอะไรบ้าง?
รายการแรกคือชื่อในแต่ละภาษาที่ระบบรองรับ ซึ่งใช้รองรับการค้นหาของผู้ใช้ที่พิมพ์ด้วยภาษาของตัวเอง
รายการที่สองคือชื่อเรียกอย่างไม่เป็นทางการและคำย่อที่ผู้ใช้ใช้จริง ซึ่งเก็บได้จากการรวบรวมคำค้นและจากรายงานของฝ่ายสนับสนุน
รายการที่สามคือชื่อเดิมที่เลิกใช้แล้ว ซึ่งต้องมีวันที่เริ่มและวันที่สิ้นสุด เพื่อให้รู้ว่าควรใช้กับข้อมูลช่วงใด
รายการที่สี่คือรหัสทุกระบบที่ระบบอื่นอ้างอิง ซึ่งช่วยให้เชื่อมข้อมูลกับระบบภายนอกได้โดยไม่ต้องเทียบชื่อ
ทุกแถวในตารางควรมีที่มาและวันที่กำกับ เพื่อให้ตรวจสอบได้ว่าข้อมูลนี้มาจากที่ใด และควรถูกทบทวนเมื่อใด
เมื่อการปรับให้เป็นรูปแบบเดียวกันทำเสร็จแล้ว ชื่อที่เทียบได้จะถูกนำไปใช้ในช่องค้นหาและการเลือกพื้นที่ ซึ่งเป็นจุดที่ผลของการเทียบปรากฏต่อผู้ใช้ทันที และเป็นจุดที่ควรมีกรณีทดสอบรองรับชื่อหลายรูปแบบไว้อย่างชัดเจน ตามที่อธิบายไว้ในบทความการทดสอบช่องเลือกประเทศ
การจับคู่แบบคลาดเคลื่อนควรไปได้ไกลแค่ไหน?
การจับคู่แบบคลาดเคลื่อนมีประโยชน์เมื่อผู้ใช้พิมพ์ผิดเล็กน้อย และเป็นเรื่องที่ผู้ใช้คาดหวังจากช่องค้นหาในปัจจุบัน
แต่การจับคู่แบบคลาดเคลื่อนมีอันตรายเมื่อชื่อของสองพื้นที่ต่างกันเพียงเล็กน้อย ซึ่งเป็นกรณีที่พบได้จริงในภาษาที่มีรูปเขียนใกล้เคียงกัน
แนวทางที่ปลอดภัยคือใช้การจับคู่แบบนี้เพื่อเสนอตัวเลือกให้ผู้ใช้ยืนยัน ไม่ใช่เพื่อตัดสินใจแทนผู้ใช้ การเสนอตัวเลือกที่ผิดแล้วให้ผู้ใช้แก้ ยังเสียเวลาน้อยกว่าการบันทึกข้อมูลผิดโดยไม่มีใครรู้
สิ่งที่ต้องกำหนดล่วงหน้าคือระดับความคลาดเคลื่อนที่ยอมรับได้ และต้องทดสอบกับคู่ชื่อที่ใกล้เคียงกันมากที่สุดที่หาได้ ไม่ใช่ทดสอบเฉพาะกรณีที่ผิดชัดเจน
ในงานที่มีความเสี่ยงสูง เช่นการบันทึกข้อมูลที่ต้องตรงกับเอกสาร ควรบังคับให้ผู้ใช้ยืนยันเสมอเมื่อเป็นการจับคู่แบบคลาดเคลื่อน
การทดสอบช่องค้นหาด้วยชื่อหลายรูปแบบมีรายละเอียดในบทความประเทศกับภาษาไม่เหมือนกัน
สำหรับนักพัฒนา: เก็บต้นฉบับไว้เสมอ
ข้อแรกคือเก็บข้อความตามที่ผู้ใช้ส่งมาโดยไม่แก้ไข และทำสำเนาที่ผ่านการปรับให้เป็นรูปแบบเดียวกันไว้ใช้อีกช่อง การมีสองช่องทำให้การแก้การตีความทำได้โดยไม่ต้องขอข้อมูลจากผู้ใช้ใหม่
ข้อที่สองคือทำการปรับให้เป็นรูปแบบเดียวกันที่จุดเดียวในระบบ ไม่ใช่กระจายไปตามหลายที่ เพราะการปรับที่ต่างกันในแต่ละจุดเป็นสาเหตุที่ผลการเทียบไม่ตรงกัน
ข้อที่สามคือให้ผลการจับคู่บอกได้ว่าตรงกันแบบใด ตรงทั้งหมด ตรงหลังการปรับ หรือตรงแบบคลาดเคลื่อน เพราะผู้ใช้และทีมสนับสนุนต้องรู้ว่าควรเชื่อถือผลนั้นมากแค่ไหน
ข้อที่สี่คือเขียนการทดสอบด้วยคู่ชื่อที่ต่างกันเฉพาะสิ่งที่มองไม่เห็นและคู่ชื่อที่คล้ายกันมาก เพราะเป็นสองกลุ่มที่ทำให้เกิดข้อผิดพลาดแบบเงียบ
ข้อที่ห้าคือทำให้รายการชื่อเรียกอื่นแก้ไขได้โดยไม่ต้องแก้โค้ด พร้อมบันทึกว่าใครเพิ่มและเมื่อใด
จะเริ่มปรับปรุงการจับคู่ได้จากตรงไหน
เริ่มจากการตกลงว่าชื่อใดคือชื่อหลักของแต่ละประเทศ แล้วตรวจว่าระบบเทียบชื่อทั้งหมดกับชื่อหลักนั้นจริง ถ้าพบว่ามีที่ใดเทียบกับชื่อที่แสดงต่อผู้ใช้ ที่แห่งนั้นคือจุดที่จะพังเมื่อภาษาที่แสดงเปลี่ยน
ถ้าต้องการดูตัวอย่างรายการประเทศและภูมิภาคที่จัดเรียงไว้ หน้าประเทศและภูมิภาคบนเว็บไซต์นี้รวมรายการไว้พร้อมข้อมูลของแต่ละแห่ง และประเด็นว่าข้อความที่ต่างกันตามภาษามีผลต่อการเทียบอย่างไรอยู่ในบทความการตรวจสอบที่อยู่กับการปรับให้เป็นมาตรฐาน
ตารางชื่อเรียกอื่นและรูปเขียนต่าง ๆ ที่ยกมาในบทความนี้เป็นตัวอย่างที่ผู้เขียนสร้างขึ้นเพื่ออธิบายวิธีการ ไม่ได้เป็นรายการที่รวบรวมจากข้อมูลผู้ใช้จริง