Cách đếm từ và ký tự
Dán cùng một văn bản vào hai ứng dụng, bạn có thể nhận được hai kết quả đếm khác nhau. Chưa chắc bên nào sai: chúng đang đếm những thứ khác nhau. Hướng dẫn này giải thích các đơn vị thường gặp và vì sao các con số khác nhau.
Bốn cách đếm ký tự
Máy tính lưu văn bản dưới dạng Unicode, và một "ký tự" có thể được đo ở nhiều cấp độ:
- Cụm grapheme là thứ người đọc nhìn thấy như một ký tự, chẳng hạn "é", "한" hoặc "👍🏽".
- Điểm mã (code point) là các giá trị Unicode riêng lẻ. Một ký tự nhìn thấy có thể gồm nhiều điểm mã.
- Đơn vị mã UTF-16 là thứ mà
lengthcủa JavaScript và một số ngôn ngữ lập trình khác đếm. Các ký tự nằm ngoài Mặt phẳng đa ngôn ngữ cơ bản (BMP), bao gồm phần lớn emoji, chiếm hai đơn vị. - Byte UTF-8 là thứ mà tệp hoặc cột cơ sở dữ liệu lưu trữ. Chữ cái ASCII chiếm một byte, chữ Latin có dấu thường là hai, ký tự tiếng Hàn, Trung và Nhật thường là ba, còn emoji từ bốn byte trở lên.
| Văn bản | Grapheme | Điểm mã | Đơn vị UTF-16 | Byte UTF-8 |
|---|---|---|---|---|
| a | 1 | 1 | 1 | 1 |
| é (một điểm mã) | 1 | 1 | 1 | 2 |
| é (e + dấu kết hợp) | 1 | 2 | 2 | 3 |
| 한 (âm tiết tiếng Hàn) | 1 | 1 | 1 | 3 |
| 👍 | 1 | 1 | 2 | 4 |
| 👍🏽 (có màu da) | 1 | 2 | 4 | 8 |
| 👨👩👧 (emoji gia đình) | 1 | 5 | 8 | 18 |
Dấu kết hợp và văn bản tiếng Hàn
Một số ký tự có thể được lưu theo nhiều cách. "é" có thể là một điểm mã dựng sẵn duy nhất, hoặc một chữ "e" thường theo sau là một dấu kết hợp. Hai dạng trông giống hệt nhau, nhưng dạng thứ hai có thêm một điểm mã và một byte. Văn bản sao chép từ một số hệ thống, chẳng hạn tên tệp trên một số hệ điều hành, có thể dùng dạng tách rời.
Tiếng Hàn cũng gặp vấn đề tương tự. Một âm tiết như "한" thường được lưu thành một điểm mã, nhưng cũng có thể được viết thành các jamo riêng (ㅎ, ㅏ, ㄴ) ghép lại trên màn hình. Bộ đếm dựa trên grapheme hiển thị 1 trong cả hai trường hợp, còn đếm theo điểm mã cho 1 hoặc 3. Chuẩn hóa Unicode (NFC hoặc NFD) chuyển đổi giữa hai dạng này.
Đếm từ trong các ngôn ngữ khác nhau
Trong tiếng Anh, tách theo dấu cách cho số từ khá hợp lý, dù từ có gạch nối, dạng rút gọn, số và URL vẫn có thể được các công cụ khác nhau đếm theo cách khác nhau.
Tiếng Trung, Nhật và Thái thường được viết không có dấu cách giữa các từ, nên tách theo dấu cách sẽ đếm cả câu thành một từ. Các bộ đếm tốt hơn dùng bộ tách từ dựa trên từ điển và quy tắc. Bộ đếm của LeedyBox dùng Intl.Segmenter của trình duyệt, công cụ xác định ranh giới từ cho nhiều ngôn ngữ. Việc tách từ trong các ngôn ngữ này phụ thuộc vào quy ước, nên kết quả có thể khác với công cụ khác hoặc với cách đếm của con người. Vì lý do đó, một số nhà xuất bản ở các ngôn ngữ này đếm ký tự thay vì đếm từ.
Vì sao các ứng dụng và trang web đếm khác nhau
Một giới hạn như "tối đa 280 ký tự" hoặc "VARCHAR(255)" có thể được đo bằng grapheme, điểm mã, đơn vị UTF-16 hoặc byte, tùy hệ thống. Một số dịch vụ còn tính mỗi liên kết là một độ dài cố định hoặc coi một số hệ chữ là "nặng" hơn. Khi cần nằm trong một giới hạn, hãy tìm hiểu hệ thống đích dùng đơn vị nào và so sánh với con số đó. Bộ đếm của LeedyBox hiển thị grapheme, đơn vị UTF-16 và byte UTF-8 cạnh nhau, kèm công cụ kiểm tra giới hạn, để bạn thấy mình còn cách giới hạn bao xa theo đơn vị liên quan.
Dòng, đoạn và ký tự xuống dòng
Số dòng phụ thuộc vào cách lưu ký tự xuống dòng. Windows thường dùng hai ký tự (CR LF), còn Linux và macOS dùng một (LF). Công cụ đếm ký tự thô có thể tính một lần xuống dòng của Windows là hai. Ký tự xuống dòng ở cuối văn bản có thể được hoặc không được tính là một dòng trống thêm. Đoạn văn thường được đếm là các khối ngăn cách bởi một hoặc nhiều dòng trống, nên một lần xuống dòng bên trong đoạn không bắt đầu đoạn mới.
Ước tính thời gian đọc
Thời gian đọc được tính bằng cách chia số từ cho một tốc độ đọc giả định. Tốc độ thực tế thay đổi theo người đọc, ngôn ngữ và mức độ chuyên môn của văn bản, và bản thân số từ cũng phụ thuộc vào cách tách từ. Hãy coi ước tính này là gợi ý sơ bộ để lên kế hoạch thay vì một phép đo.
Câu hỏi thường gặp
Vì sao một emoji được tính là 2 ký tự trong một số ứng dụng?
Những ứng dụng đó đếm đơn vị mã UTF-16. Phần lớn emoji được lưu thành hai đơn vị, và emoji có màu da hoặc ghép nhiều người dùng nhiều đơn vị hơn.
Tôi nên dùng cách đếm nào cho giới hạn cột cơ sở dữ liệu?
Hãy xem tài liệu của cơ sở dữ liệu. Một số giới hạn tính bằng ký tự, số khác tính bằng byte, nên số byte UTF-8 thường là con số cần so sánh.
Bộ đếm có gửi văn bản của tôi đi đâu không?
Công cụ Đếm từ & ký tự của LeedyBox chạy trên trình duyệt của bạn, nên văn bản bạn dán được đếm trên thiết bị của bạn.