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.
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ên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
items | body | array | không | Cá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. | |
action | body|query | string | không | sort | sort, compare (kèm a, b), key, group hoặc normalize. |
by | body|query | string | không | full | full, given_name (Tên rồi Họ) hoặc family_name cho họ tên. |
ignore_tones | body|query | boolean | không | false | Chỉ so chữ cái, bỏ qua thanh điệu (bá = ba). |
numeric | body|query | boolean | không | true | Xếp số tự nhiên (2 trước 10). |
field | body|query | string | không | Thuộc tính dùng để xếp khi mục là object. | |
desc | body|query | boolean | không | false | Xế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"]}'const res = await fetch('https://apibox.io.vn/v1/vn-sort', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"items": [
"Đức",
"Dũng",
"anh",
"ăn",
"An",
"bà",
"ba",
"bá",
"item 10",
"item 9"
]
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-sort",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"items": ["Đức", "Dũng", "anh", "ăn", "An", "bà", "ba", "bá", "item 10", "item 9"]},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-sort');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"items":["Đức","Dũng","anh","ăn","An","bà","ba","bá","item 10","item 9"]}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));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
So sánh văn bản
So sánh hai đoạn văn bản theo dòng, từ, ký tự, câu hoặc JSON; nhận danh sách thay đổi, tỉ lệ giống nhau và bản diff dạng unified.
a-bTạo slug
Chuyển tiêu đề thành slug URL gọn gàng: bỏ dấu tiếng Việt (cả chữ đ), tuỳ chọn ký tự phân cách, giữ chữ hoa và giới hạn độ dài.
123Thống kê văn bản
Đếm số từ, ký tự, câu, đoạn và dòng; ước tính thời gian đọc và thời gian nói; liệt kê các từ xuất hiện nhiều nhất trong văn bản.