Bài toán tưởng đơn giản: Khi nào dùng "a", khi nào dùng "an" trong tiếng Anh?
Một lập trình viên đã dành cả ngày để phân tích quy tắc dùng mạo từ "a" và "an" trong tiếng Anh, phát hiện chỉ có 129 trong tổng số 32.455 từ cần xử lý ngoại lệ. Bài toán tưởng chừng đơn giản này lại ẩn chứa nhiều điều thú vị về ngôn ngữ và lập trình.

Bài toán tưởng đơn giản: Khi nào dùng "a", khi nào dùng "an" trong tiếng Anh?
Trong tiếng Anh, mạo từ bất định "a" thường đứng trước danh từ, ví dụ a raccoon (một con gấu mèo). Nhưng với một số từ, ta lại dùng "an", ví dụ an apple (một quả táo). Quy tắc tưởng chừng đơn giản này lại là một bài toán thú vị đối với các lập trình viên khi cần sinh văn bản tự động.
Khi xây dựng chương trình sinh văn bản tự động, tác giả bài viết cần một hàm a_or_an("apple") để trả về mạo từ đúng. Thoạt nhìn, chỉ cần kiểm tra chữ cái đầu tiên có phải nguyên âm hay không là xong. Nhưng cách làm này sẽ cho ra kết quả sai như an unicorn thay vì a unicorn.
Minh họa quy tắc xác định a/an
Quy tắc thực sự nằm ở âm thanh, không phải chữ viết
Quy tắc chính xác không dựa trên việc từ viết bắt đầu bằng nguyên âm hay không, mà dựa trên việc từ đọc lên bắt đầu bằng nguyên âm hay không.
- Từ unicorn bắt đầu bằng chữ cái nguyên âm (u) nhưng lại có âm đầu là phụ âm (Y).
- Từ hour bắt đầu bằng chữ cái phụ âm (h) nhưng âm đầu lại là nguyên âm (OW).
Đây chính là lý do các quy tắc đơn giản dựa trên ký tự thường thất bại. Để giải quyết đúng, cần tra cứu phiên âm (phonetic) của từ thay vì chỉ nhìn vào mặt chữ.
Chỉ 129 từ cần ngoại lệ trong hơn 32.000 từ
Tác giả đã dành một ngày để phân tích dữ liệu, xây dựng biểu đồ trực quan và tổng hợp kết quả. Điều bất ngờ là trong danh sách 32.455 từ, chỉ có 129 từ cần xử lý ngoại lệ.
"Tôi khá bất ngờ khi chỉ có 129 trong số 32.455 từ trong danh sách của mình cần ngoại lệ."
Con số này cho thấy quy tắc dựa trên hai chữ cái đầu tiên có thể xử lý đúng phần lớn trường hợp, và chỉ một lượng nhỏ từ cần bảng tra cứu riêng.
Bài học về lập trình và việc dùng công cụ phù hợp
Tác giả cũng chia sẻ một ghi chú thú vị về quá trình làm việc:
"Tôi không dùng LLM để viết bất kỳ đoạn code nào trong số này, nhưng nhìn lại thì lẽ ra tôi nên dùng. Đây là code dùng một lần để trả lời một câu hỏi. Nó không cần sạch sẽ hay dễ bảo trì. Nó chỉ cần đúng."
Theo tác giả, nếu dùng LLM, ông đã có thể dành ít thời gian hơn cho thuật toán đơn giản hóa trie và việc phân tích cmudict, cũng như không phải học lại thư viện d3.js.
Đây là một ví dụ điển hình cho thấy ngay cả những bài toán tưởng chừng nhỏ nhặt trong lập trình cũng có thể ẩn chứa sự phức tạp thú vị — và đôi khi, việc chọn đúng công cụ quan trọng hơn việc tự viết mọi thứ từ đầu.
Bài viết liên quan

Công nghệ
Nộp đơn xin việc lẽ ra nên khó hơn. Thật đấy
25 tháng 8, 2026

Công nghệ
Mô hình AI hàng đầu giỏi Vật lý đến đâu? Nghiên cứu mới chỉ ra các bài kiểm tra hiện hành đang đánh giá sai
16 tháng 9, 2026
Công nghệ
Trận chiến với Dream Devourer trong Chrono Trigger: Khi lỗi tràn số nguyên trở thành vũ khí
19 tháng 9, 2026