Soundex

Soundex là một thuật toán ngữ âm để liệt kê các từ theo âm sắc, theo cách phát âm của tiếng Anh. Mục đích là mã hóa những từ có cùng cách phát âm qua những đặc trưng giống nhau, từ đó người ta có thể tìm được một từ nào đó dù có sai sót nhỏ trong chính tả từ đó. Thuật toán Soundex là thuật toán được sử dụng rộng rãi nhất trong các thuật toán ngữ âm. Rất nhiều thuật toán ngữ âm hiện có nền tảng từ sự cải tiến của thuật toán Soundex.

Lịch sử
Soundex được phát triển bơi Robert Russell và Margaret Odell, được cấp bằng sáng chế vào các năm 1918  và 1922 . Một biến thể của Soundex là thuật toán American Soundex được sử dụng trong những năm 1930 để xem xét lại quá trình điều tra dân số Mỹ những năm từ 1890 cho đến 1920. Mã Soundex trở nên phổ biến vào những năm 1960, khi là chủ đề của nhiều bài báo trên tạp chí và các phương tiện truyền thông của ACM, và đặc biệt là sau khi được Donald Knuth miêu tả chi tiết trong cuốn sách nổi tiếng của ông - The Art of Computer Programming.

Quy tắc cơ bản
Mã Soundex trả về một xâu bao gồm có một chữ cái và 3 trong số theo sau: chữ cái là chữ cái đầu tiên của từ đó, và các số mã hóa cho các phụ âm còn lại. Các phụ âm có âm sắc giống nhau được mã bởi các trọng số giống nhau, ví dụ, âm lưỡi B, F, P, và V được mã hóa là 1. Các nguyên âm có thể ảnh hưởng đến việc mã hóa, nhưng không bao giờ được mã hóa trực tiếp trừ khi chúng xuất hiện ngay ở đầu của từ.

Thuật toán chi tiết như sau:
 Lưu chữ cái đầu tiên trong xâu.
 Loại bỏ mọi chữ cái sau đây, trừ khi nó là chữ cái đầu tiên: a, e, h, i, o, u, w, y
 Gán các trọng số cho các chữ cái còn lại (sau chữ cái đầu tiên) như sau:
 b, f, p, v = 1
 c, g, j, k, q, s, x, z = 2
 d, t = 3
 l = 4
 m, n = 5
 r = 6
 Nếu 2 hay nhiều chữ cái có trọng số giống nhau ở sát nhau trong từ ban đầu (trước bước 1), hay cách nhau chỉ bởi chữ h hay chữ w (chỉ có trong tiếng Mỹ), thì bỏ qua tất cả.
 Trả lại 4 ký tự đầu tiên, thêm 0 vào bên phải nếu ít hơn 4 ký tự được trả về.

Sử dụng thuật toán này, cả "Robert" và "Rupert" đều trả về chuỗi "R163" trong khi từ "Rubin" sẽ trả về "R150".

Thuật toán áp dụng cho tiếng Mỹ
Vẫn tuân theo thuật toán cơ bản, nhưng có thêm các yêu cầu sau:
 Không quan tâm đến các phụ âm W, H, Y và các nguyên âm A, E, I, O, U.
 Khi có 2 hay nhiều chữ cái có cùng trọng số ở cạnh nhau, thì chỉ mã hóa một chữ cái. Ví dụ: 
 Sheppard S-163
 Sacks S-200
 Một chữ cái đi ngay sau chữ cái đầu tiên và có cùng trọng số với chữ cái đầu tiên thì bỏ qua chữ cái này (không mã hóa). Ví dụ:
 Schebowitz S-132
 Scklar S-460
 2 hay nhiều chữ cái chỉ cách nhau bởi chữ H hay W thì chỉ mã hóa một chữ cái. Ví dụ:
 Sokwzy S-200
 Schkolink S-452
 Khi một chữ cái lập lại nhiều lần và được ngăn cách bởi một hay nhiều nguyên âm A, E, I, O, U hoặc Y, ta vẫn mã hóa tất cả các chữ cái đó. Ví dụ:
 Staten S-335
 Simone S-550
 Với những từ không chứa bất kỳ chữ cái nào có một trong 6 trọng số trên - tức là sau chữ cái đầu chỉ có các chữ cái không có trọng số, ta gán toàn bộ số trọng số sau là 0. Ví dụ:
 Shea S-000
 Lee L-000

Tham khảo

Liên kết ngoài
 Hệ thống mã Soundex  (Tổ chức NARA, Hoa Kỳ)
 Hàm Soundex trong PHP
 Soundex trong JavaScript 
 Soundex trong ngôn ngữ Ruby 
 Soundex trong Python 
 Mã Soundex bằng ngôn ngữ C 
 Kiểm thử mã Soundex của một từ tiếng Anh 

Thuật toán
Ngữ âm