Badword Filter adalah library Node.js untuk mendeteksi kata kasar Bahasa Indonesia menggunakan normalisasi teks, deteksi leet speak, dan Levenshtein similarity dengan threshold adaptif.
Dirancang ringan, minim false positive, dan mudah dikonfigurasi.
- Normalisasi teks (simbol, karakter berulang, leet speak
4nj1ng→anjing) - Threshold adaptif — kata pendek butuh kecocokan lebih tinggi
- Whitelist mendukung frasa multi-kata (
"anjing laut") - Exact match via
Set(fast path) + fuzzy match (fallback) - Quick reject berdasarkan perbedaan panjang kata
- Consonant skeleton matching dengan threshold minimum
- Bisa dikustomisasi (dictionary, whitelist, threshold)
- 3 mode:
flag(),censor(),analyze()
git clone <repository-url>
cd badword-filterAtau salin manual: index.js, words.json, whitelist.json
const Badwords = require('./index');
const bw = new Badwords();const bw = new Badwords({
simThreshold: 0.85, // threshold similarity umum (default: 0.82)
consonantThreshold: 0.80, // threshold dengan consonant match (default: 0.75)
});const bw = new Badwords({
dictionary: ['anjing', 'bangsat', 'tolol'],
whitelist: ['anjing laut', 'konyol'],
});bw.flag('anjir tolol banget');
// true
bw.flag('ini anjing laut');
// false (frasa whitelist)
bw.flag('4nj1ng lo');
// true (leet speak terdeteksi)bw.censor('anjir tolol banget');
// "*** *** banget"
bw.censor('dasar gblk', '[SENSOR]');
// "dasar [SENSOR]"bw.analyze('anjir tolol banget');{
text: 'anjir tolol banget',
words: 3,
badwords: ['anjir', 'tolol'],
count: 2,
censored: '*** *** banget',
locations: [0, 1]
}bw.badwords('asu lo bangsat');
// ['asu', 'bangsat']- Normalisasi — lowercase, hapus simbol, konversi leet speak (
4→a,1→i,3→e,0→o,5→s,7→t), kompres karakter berulang - Whitelist frasa — cek frasa multi-kata (mis.
"anjing laut") di level kalimat, posisi yang cocok dilewati - Whitelist kata — cek kata tunggal yang aman
- Exact match — pencocokan langsung via
Set(O(1)) - Fuzzy match — Levenshtein similarity dengan:
- Quick reject: perbedaan panjang > 2 → lewati
- Threshold adaptif: kata ≤4 huruf butuh ≥0.90, kata panjang ≥0.82
- Consonant match: kerangka konsonan identik + similarity ≥ threshold
["anjing", "bangsat", "kontol", "tolol"]Mendukung kata tunggal dan frasa multi-kata:
["anjing laut", "konyol", "anything"]- Library ini berbasis heuristik, bukan NLP
- Sesuaikan threshold dengan konteks aplikasi
- Gunakan whitelist untuk kasus spesifik
Kontribusi sangat terbuka 🙌
- Fork → branch baru → perubahan → Pull Request
- Laporkan bug atau ajukan saran via Issues
MIT License