So sánh độ giống nhau của chuỗi online
So sánh chuỗi (Levenshtein, Jaro-Winkler, token set, trigram), tìm mục gần nhất trong danh sách và gom cụm trùng lặp, bỏ dấu tiếng Việt khi so.
Kết quả
Bấm “Chạy” để xem kết quả.
Có ba chế độ. compare (a, b) trả về mọi điểm số từ 0 tới 1: Levenshtein chuẩn hoá, Jaro-Winkler, token sort và token set ratio (như rapidfuzz), độ giống trigram (như pg_trgm của PostgreSQL) và combined là trung bình các điểm, kèm khoảng cách sửa (edit distance). search (query, choices tới 10.000 mục) trả về các mục khớp nhất vượt threshold kèm vị trí. dedupe (items tới 5.000 mục) gom các mục gần trùng thành cụm với một đại diện và trả về danh sách đã khử trùng; các cặp chỉ được so khi có chung trigram nên danh sách lớn vẫn nhanh.
Trước khi so, chuỗi được chuẩn hoá: bỏ phân biệt hoa thường và dấu tiếng Việt (Nguyễn = nguyen, đ = d), dấu câu thành khoảng trắng và mở rộng các chữ viết tắt thông dụng (TP. = thành phố, Q. = quận, P. = phường, Cty = công ty, CP = cổ phần, TM = thương mại, HCM = Hồ Chí Minh…). Có thể tắt bằng keep_accents, case_sensitive và abbreviations=false, và bỏ các từ nhiễu bằng ignore (ví dụ "tnhh, cong ty").
Chọn điểm số bằng algorithm: token_set cho tên có thứ tự từ hoặc từ thừa khác nhau (tên công ty, tên sản phẩm), jaro_winkler cho chuỗi ngắn và lỗi gõ ở cuối, levenshtein cho mã, trigram cho văn bản dài. Không lưu dữ liệu.
Dùng trong code của bạn
curl -X POST "https://apibox.io.vn/v1/fuzzy-match" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"a":"Cty TNHH Thương mại ABC, Q.1, TP.HCM","b":"Công ty TNHH TM ABC Quận 1 Hồ Chí Minh"}'const res = await fetch('https://apibox.io.vn/v1/fuzzy-match', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"a": "Cty TNHH Thương mại ABC, Q.1, TP.HCM",
"b": "Công ty TNHH TM ABC Quận 1 Hồ Chí Minh"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/fuzzy-match",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"a": "Cty TNHH Thương mại ABC, Q.1, TP.HCM", "b": "Công ty TNHH TM ABC Quận 1 Hồ Chí Minh"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/fuzzy-match');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"a":"Cty TNHH Thương mại ABC, Q.1, TP.HCM","b":"Công ty TNHH TM ABC Quận 1 Hồ Chí Minh"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Tài liệu API → Nhận API key miễn phí
Hỏi đáp
Nên dùng điểm số nào?
combined là lựa chọn mặc định tốt. token_set bỏ qua thứ tự từ và từ thừa, jaro_winkler ưu tiên phần đầu giống nhau, levenshtein đếm số lần sửa, trigram hợp với văn bản dài.
Có bỏ qua dấu tiếng Việt không?
Có, mặc định bỏ dấu, hoa thường và dấu câu; đặt keep_accents=true khi "Hà" và "Ha" phải được coi là khác nhau.
Danh sách được lớn tới đâu?
search nhận tới 10.000 mục, dedupe tới 5.000 mục, mỗi mục tối đa 1.000 ký tự.