Sắp xếp tiếng Việt API

Sắp xếp danh sách tiếng Việt đúng thứ tự từ điển (a ă â, d đ, thanh điệu), so sánh chuỗi, tạo khoá sắp xếp cho DB, nhóm theo chữ cái, xếp theo tên.

GETPOSThttps://apibox.io.vn/v1/vn-sort

Gửi danh sách (items, hoặc mỗi dòng một mục trong text), API trả về danh sách xếp theo thứ tự từ điển tiếng Việt: chữ cái a ă â b c d đ e ê g h i k l m n o ô ơ p q r s t u ư v x y, rồi đến thanh điệu ngang < huyền < hỏi < ngã < sắc < nặng, rồi đến chữ hoa thường: đúng thứ tự của từ điển tiếng Việt và bảng so sánh "vi" của CLDR, khác với thứ tự byte của cơ sở dữ liệu (chữ "Đ" bị xếp sau "Z") hay lỗi vi_VN tồn tại lâu năm của glibc. Thanh điệu được so theo từng âm tiết nên "hoà" và "hòa" bằng nhau; số được xếp tự nhiên (mục 9 trước mục 10); ignore_tones chỉ so chữ cái; có thêm case_sensitive, desc, unique.

by=given_name xếp họ tên như danh sách lớp, danh sách nhân viên (theo tên, rồi họ, rồi tên đệm: An đứng trước Bình bất kể họ gì); danh sách object được xếp theo field. Các thao tác khác: compare (a, b → -1 / 0 / 1), key (khoá sort_key xếp được theo byte để lưu vào cột cơ sở dữ liệu, và search_key không dấu), group (nhóm theo chữ cái đầu, Đ tách riêng khỏi D, cho danh bạ) và normalize (đặt dấu kiểu cũ / mới: hòa ↔ hoà, thúy ↔ thuý).

Tối đa 10.000 mục mỗi lần; chỉ tính toán, không lưu dữ liệu.

Tham số

TênVị tríKiểuBắt buộcMặc định
itemsbodyarraykhôngCác chuỗi (hoặc object kèm field) cần xếp, tối đa 10.000. Hoặc text: mỗi dòng một mục.
actionbody|querystringkhôngsortsort, compare (kèm a, b), key, group hoặc normalize.
bybody|querystringkhôngfullfull, given_name (Tên rồi Họ) hoặc family_name cho họ tên.
ignore_tonesbody|querybooleankhôngfalseChỉ so chữ cái, bỏ qua thanh điệu (bá = ba).
numericbody|querybooleankhôngtrueXếp số tự nhiên (2 trước 10).
fieldbody|querystringkhôngThuộc tính dùng để xếp khi mục là object.
descbody|querybooleankhôngfalseXếp giảm dần. Có thêm case_sensitive, unique; tone_style old / new cho normalize.

Ví dụ

curl -X POST "https://apibox.io.vn/v1/vn-sort" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":["Đức","Dũng","anh","ăn","An","bà","ba","bá","item 10","item 9"]}'

Kết quả trả về

{
  "count": 10,
  "sorted": [
    "An",
    "anh",
    "ăn",
    "ba",
    "bà",
    "bá",
    "Dũng",
    "Đức",
    "item 9",
    "item 10"
  ],
  "options": {
    "tones": true,
    "caseSensitive": false,
    "numeric": true,
    "by": "full"
  },
  "collation": "Vietnamese alphabet a ă â b c d đ e ê g h i k l m n o ô ơ p q r s t u ư v x y; tones ngang < huyền < hỏi < ngã < sắc < nặng"
}

Ứng dụng

  • Xếp đúng tên khách hàng, sản phẩm trong ứng dụng dùng SQLite, D1, MongoDB
  • In danh sách lớp xếp theo tên
  • Lưu khoá sắp xếp và khoá tìm kiếm tiếng Việt vào cơ sở dữ liệu
  • Làm mục lục danh bạ A–Z với Đ là chữ cái riêng

Hỏi đáp

Sao không sắp xếp ngay trong cơ sở dữ liệu?

Nhiều hệ (SQLite / D1, MongoDB mặc định, collation nhị phân) xếp theo mã ký tự nên Đ đứng sau Z và chữ có dấu bị dồn xuống cuối. Lưu sort_key từ action=key để xếp đúng ở bất kỳ đâu.

Thứ tự thanh điệu thế nào?

Ngang, huyền, hỏi, ngã, sắc, nặng: thứ tự của từ điển tiếng Việt và bảng so sánh tiếng Việt của CLDR / ICU (ba, bà, bả, bã, bá, bạ).

"Hoà" và "hòa" có như nhau không?

Có: thanh điệu được so theo âm tiết nên hai cách đặt dấu được xếp và so sánh như nhau; action=normalize đưa về một kiểu thống nhất.

API liên quan

Bắt đầu với 1.000 request miễn phí mỗi tháng. Nhận API key miễn phí →