Menu

Khớp tên quốc gia và bí danh: xác định tên chuẩn trước

Muốn khớp được tên quốc gia và bí danh, hệ thống phải có một tên chuẩn trước đã. Bài này nói về thứ tự xử lý, rủi ro của khớp mờ và cách giữ bảng bí danh kiểm toán được.

Đăng ngày

  • tên quốc gia
  • bí danh
  • tìm kiếm

Cùng một nơi có thể được viết theo nhiều cách, và người dùng sẽ dùng cách nào họ quen nhất. Vì vậy bài toán khớp tên quốc gia và bí danh xuất hiện ở gần như mọi biểu mẫu có ô nhập tên nơi. Nhưng trước khi nói tới việc khớp, hệ thống phải trả lời được một câu hỏi khác: đâu là tên chuẩn. Bài này đi theo đúng thứ tự đó.

Vì sao cùng một quốc gia lại có nhiều cách viết?

Có nhiều nguyên nhân độc lập, và việc tách chúng ra giúp bạn xử lý đúng từng nhóm. Nguyên nhân thứ nhất là chuyện chữ hoa chữ thường, vốn là khác biệt về hình thức chứ không phải về nội dung. Nguyên nhân thứ hai là dấu, khi người dùng gõ thiếu dấu hoặc gõ theo cách khác với cách hệ thống hiển thị.

Nguyên nhân thứ ba là việc dùng tên đầy đủ hay tên rút gọn. Trong giao diện, tên dài thường bị rút ngắn, và người dùng có thể quen với dạng rút ngắn đó. Nguyên nhân thứ tư là việc dùng tên cũ đã đổi, hoặc dùng cách gọi phổ biến trong một ngôn ngữ khác.

Nguyên nhân thứ năm là lỗi gõ. Đây là nhóm khác hẳn bốn nhóm trên, vì nó không phải một cách viết hợp lệ mà là một sai sót. Trộn nó với các nhóm còn lại sẽ khiến bạn chấp nhận những giá trị lẽ ra nên bị từ chối.

Vì năm nguyên nhân này cần năm cách xử lý khác nhau, hệ thống cần phân biệt chúng chứ không nên gộp vào một cơ chế khớp duy nhất. Đây là lý do việc đầu tiên luôn là xác định tên chuẩn.

Chốt tên chuẩn trước khi nói tới khớp

Tên chuẩn là giá trị mà hệ thống coi là đúng và dùng cho mọi việc nội bộ. Không có nó, mọi phép so sánh đều trở thành so sánh giữa hai giá trị đều có thể sai.

Tên chuẩn nên thỏa ba điều kiện. Điều kiện thứ nhất là ổn định, nghĩa là nó không đổi chỉ vì giao diện đổi ngôn ngữ. Điều kiện thứ hai là duy nhất, nghĩa là hai bản ghi khác nhau không thể có cùng một tên chuẩn. Điều kiện thứ ba là không phụ thuộc vào cách hiển thị, để việc sửa nhãn không làm đổi dữ liệu bên dưới.

Trong thực tế, nhiều hệ thống dùng một mã ổn định làm khoá và dùng tên hiển thị làm nhãn. Đây là cách tách đúng, và nó giải quyết luôn vấn đề nhiều tên hiển thị cho cùng một bản ghi.

Sau khi có tên chuẩn, các cách viết khác trở thành bí danh. Mỗi bí danh chỉ cần trỏ về một tên chuẩn, và việc khớp trở thành việc tra bảng thay vì việc đoán.

Điều cần cẩn thận là một số bí danh có thể trỏ tới nhiều hơn một bản ghi trong một số ngữ cảnh. Khi đó hệ thống phải hỏi lại người dùng thay vì tự chọn, vì mọi lựa chọn tự động đều có thể sai.

Thứ tự xử lý chữ hoa chữ thường và dấu

Thứ tự xử lý quan trọng vì kết quả khác nhau tùy vào việc bạn làm gì trước. Một thứ tự hợp lý là chuẩn hoá hình thức trước, rồi mới so sánh, và chỉ khi đã thất bại mới tới các bước nới lỏng hơn.

Bước đầu tiên là bỏ qua khác biệt về chữ hoa chữ thường. Đây là bước an toàn nhất vì nó gần như không bao giờ làm hai nơi khác nhau trở nên giống nhau. Với tiếng Việt, việc này cần được làm cẩn thận vì chữ hoa có dấu vẫn phải giữ nguyên dấu.

Bước thứ hai là xử lý dấu. Đây là bước rủi ro hơn, vì bỏ dấu có thể làm hai tên khác nhau trở nên trùng nhau. Vì vậy bước này chỉ nên dùng cho tìm kiếm, không nên dùng để lưu giá trị.

Bước thứ ba là bỏ qua khoảng trắng thừa và các dấu câu trong tên. Bước này giúp ích nhiều trong thực tế, vì người dùng hay gõ sai dấu câu, nhưng nó cũng làm tăng khả năng trùng nhau nên cần được kiểm thử kỹ.

Bước thứ tư là xét các bí danh đã biết. Đây là bước có căn cứ rõ ràng nhất, vì mỗi bí danh đều do con người thêm vào và có thể kiểm tra lại.

Nếu tất cả các bước trên đều thất bại, hệ thống nên trả về trạng thái không khớp thay vì cố đoán. Một trạng thái không khớp rõ ràng dễ sửa hơn một kết quả đoán sai.

Khớp mờ gây hại trong trường hợp nào?

Khớp mờ là kỹ thuật cho phép tìm ra kết quả gần đúng khi người dùng gõ sai. Nó hữu ích cho tìm kiếm, nhưng gây hại khi được dùng để quyết định giá trị lưu xuống.

Hại thứ nhất là việc chọn sai bản ghi. Khi hai tên gần giống nhau, khớp mờ có thể chọn bản ghi sai, và lỗi này lan sang mọi trường phụ thuộc. Người dùng thường không nhận ra vì giao diện vẫn hiển thị một tên trông hợp lý.

Hại thứ hai là việc chấp nhận dữ liệu sai. Nếu khớp mờ được dùng để kiểm tra tính hợp lệ, những giá trị gần đúng sẽ được coi là hợp lệ. Về lâu dài, tập dữ liệu sẽ chứa nhiều cách viết khác nhau cho cùng một nơi.

Hại thứ ba là việc khó tái hiện. Kết quả của khớp mờ phụ thuộc vào ngưỡng và vào tập dữ liệu hiện có. Khi tập dữ liệu thay đổi, cùng một giá trị nhập vào có thể cho ra kết quả khác, và điều đó làm việc điều tra trở nên rất khó.

Cách dùng an toàn là để khớp mờ đề xuất, còn người dùng quyết định. Hệ thống hiển thị vài khả năng, người dùng chọn một, và giá trị được lưu là giá trị đã được chọn chứ không phải giá trị đoán ra.

Cũng nên ghi lại những lần khớp mờ được dùng, để sau này có thể xem lại những chỗ nào hệ thống đã phải đoán. Đây là nguồn thông tin tốt cho việc bổ sung bí danh.

Tên hiển thị và khoá lưu trữ phải tách nhau

Đây là nguyên tắc bao trùm cả bài, và nó giải quyết phần lớn vấn đề nếu được áp dụng đúng từ đầu.

Tên hiển thị phục vụ người đọc. Nó có thể đổi theo ngôn ngữ giao diện, có thể được rút ngắn, và có thể được sửa mà không ảnh hưởng tới dữ liệu.

Khoá lưu trữ phục vụ hệ thống. Nó không đổi, không phụ thuộc ngôn ngữ, và là thứ được ghi vào mọi bản ghi có liên quan.

Khi hai thứ này bị trộn, mọi thay đổi về nhãn hiển thị đều trở thành thay đổi dữ liệu. Những thay đổi như vậy rất khó hoàn tác, và chúng thường chỉ được phát hiện khi các báo cáo lịch sử bắt đầu lệch nhau.

Một cách kiểm tra đơn giản là thử đổi nhãn hiển thị của một mục và xem có bản ghi nào bị ảnh hưởng không. Nếu có, hệ thống đang lưu tên thay vì lưu khoá.

Việc lưu tên cũng làm cho các thống kê trở nên mong manh, vì một lần sửa nhãn có thể tách một nhóm thành hai. Đây là loại sai số rất khó phát hiện và rất tốn công sửa.

Phần dành cho nhà phát triển: bảng bí danh phải kiểm toán được

Bảng bí danh là dữ liệu, không phải mã. Nếu nó nằm rải rác trong mã nguồn, bạn sẽ không kiểm toán được nó, và mỗi lần thêm một bí danh lại phải phát hành lại ứng dụng.

Vài điểm nên chốt:

  • Chốt một tên chuẩn cho mỗi bản ghi, và để mọi cách viết khác trỏ về nó.
  • Cho mỗi bí danh một lý do và một mốc thời gian, để biết vì sao nó tồn tại.
  • Chỉ dùng bước bỏ dấu cho tìm kiếm, không dùng để lưu giá trị.
  • Để khớp mờ đề xuất chứ không tự quyết định giá trị được lưu.
  • Kiểm thử những cặp tên gần giống nhau, vì đây là nơi khớp mờ gây hại nhiều nhất.

Bạn có thể mở danh mục quốc gia và vùng lãnh thổ để đối chiếu cách hiển thị tên, ví dụ Bra-xin. Bảng bí danh, các cách viết và giá trị nhập nêu trong bài chỉ là ví dụ do bài tự dựng ra để minh hoạ cơ chế khớp; chúng không phải là danh sách tên chính thức của bất kỳ nơi nào và không nên được dùng làm căn cứ pháp lý hay nghiệp vụ.

Bước tiếp theo

Hãy thử lấy một giá trị đã lưu và kiểm tra xem nó là tên hiển thị hay là khoá ổn định. Sau đó, bài kiểm thử trường chọn quốc gia nói về việc kiểm thử ô tìm kiếm và sắp xếp, còn bài quốc gia và ngôn ngữ khác nhau giải thích vì sao việc chọn cách viết không được suy ra từ ngôn ngữ giao diện.

Đọc tiếp

Bài viết về Định dạng địa chỉ và danh tính theo quốc gia