Tại sao số từ khác nhau giữa Microsoft Word và bộ đếm trực tuyến? Giải mã thuật toán tách từ
Mục lục nội dung
1. Nghịch lý đếm từ giữa các phần mềm soạn thảo
Khi các dịch giả, nhà báo hoặc sinh viên nộp bài luận, họ thường gặp phải một hiện tượng kỳ lạ: cùng một đoạn văn bản khi dán vào Microsoft Word cho ra 500 từ, nhưng khi kiểm tra trên Google Docs hoặc một trang web trực tuyến lại hiển thị 515 hoặc 492 từ. Sự chênh lệch này xuất phát từ thuật toán tách từ (Word Segmentation / Tokenization).
Nhiều công cụ trực tuyến thô sơ chỉ đơn giản cắt chuỗi bằng biểu thức chính quy \s+ (mọi khoảng trắng). Cách làm này dẫn đến việc đếm sai các trường hợp biên đặc thù trong văn bản thực tế.
2. Bốn điểm khác biệt then chốt trong thuật toán đếm từ
| Trường hợp văn bản | Ví dụ | Xử lý trong MS Word | Bộ đếm trực tuyến đơn giản |
|---|---|---|---|
| Từ ghép có dấu gạch ngang | state-of-the-art |
Tính là 1 từ duy nhất | Thường tính là 4 từ riêng rẽ |
| Từ viết tắt có dấu nháy | don't, it's |
Tính là 1 từ | Tùy thuộc có coi dấu nháy là ký tự tách từ hay không |
| Số kèm dấu phân cách | 1,000,000 hoặc $50.00 |
Tính là 1 từ | Nếu tách theo dấu phẩy có thể bị đếm thành 3 từ |
| Dấu gạch nối dài (Em-dash) | từ này—từ kia |
Tính là 2 từ tách biệt | Nếu không có dấu cách, bộ đếm thô sẽ tính là 1 từ |
3. Đặc thù đếm từ trong Tiếng Việt: “Tiếng” vs “Từ ghép”
Trong ngôn ngữ học Tiếng Việt, có sự phân biệt rõ ràng giữa tiếng (âm tiết đơn lẻ) và từ (từ đơn hoặc từ phức). Ví dụ, cụm “học sinh” hay “công nghệ thông tin” về mặt ngữ nghĩa là 1 từ ghép hoặc cụm từ, nhưng bao gồm 2 hoặc 4 âm tiết được ngăn cách bởi dấu cách.
Trong ngành dịch thuật chuyên nghiệp, biên tập báo chí và các phần mềm soạn thảo chuẩn quốc tế (như Word và Google Docs), tiêu chuẩn công nghiệp thống nhất quy ước: mỗi âm tiết tiếng Việt được phân tách bởi khoảng trắng được tính là 1 từ. Đây là cơ sở để tính toán đơn giá dịch vụ và dung lượng văn bản một cách khách quan và minh bạch.
4. Tiêu chuẩn Unicode Text Segmentation (UAX #29)
GoToolstack áp dụng tiêu chuẩn phân đoạn văn bản quốc tế Unicode Standard Annex #29 (UAX #29) thông qua API hiện đại Intl.Segmenter(locale, { granularity: 'word' }). Cơ chế này nhận diện chính xác các ranh giới từ mà không bị nhầm lẫn bởi các dấu chấm câu, biểu tượng cảm xúc (emoji) hay ký tự định dạng ẩn.