Package Exports
- @sideid/id-profanity-filter
- @sideid/id-profanity-filter/dist/index.esm.js
- @sideid/id-profanity-filter/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@sideid/id-profanity-filter) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ID-Profanity-Filter
Library JavaScript/TypeScript untuk mendeteksi, menyensor, dan menganalisis kata-kata kotor dalam Bahasa Indonesia dan bahasa daerah.
Fitur Utama
- 🔍 Deteksi Kata Kotor - Mendeteksi kata-kata kasar/kotor dalam teks Bahasa Indonesia
- ⚠️ Analisis Konten - Menganalisis tingkat keparahan dan kategori kata kotor
- 🔒 Penyensoran - Menyensor kata-kata kotor dengan berbagai opsi kustomisasi
- 🗺️ Dukungan Bahasa Daerah - Mencakup kata-kata dari berbagai daerah di Indonesia (Jawa, Sunda, Batak, dll)
- 🔧 Kustomisasi - Opsi untuk menambahkan whitelist dan daftar kata kustom
Instalasi
npm install @sideid/id-profanity-filter
# atau
yarn add @sideid/id-profanity-filter
# atau
pnpm add @sideid/id-profanity-filterPenggunaan Dasar
JavaScript / TypeScript
import IDProfanityFilter from '@sideid/id-profanity-filter';
// Buat instance filter
const filter = new IDProfanityFilter();
// Cek apakah teks mengandung kata kotor
const teks = 'Dasar anjing kamu, jangan banyak bacot!';
const hasProfanity = filter.isProfane(teks);
console.log(hasProfanity); // Output: true
// Filter kata kotor (sensorisasi)
const hasil = filter.filter(teks);
console.log(hasil.filtered); // Output: "Dasar **** kamu, jangan banyak ****!"
console.log(hasil.censored); // Output: 2 (jumlah kata yang disensor)
// Analisis konten
const analisis = filter.analyze(teks);
console.log(analisis.severityScore); // Output: 0.65 (contoh skor keparahan)
console.log(analisis.categories); // Output: ["profanity", "insult"]Utilitas Langsung
Anda juga dapat menggunakan fungsi utilitas langsung tanpa membuat instance:
import { idFilter } from '@sideid/id-profanity-filter';
const teks = 'Dasar anjing kamu, jangan banyak bacot!';
const hasil = idFilter.filter(teks);
console.log(hasil.filtered); // Output: "Dasar **** kamu, jangan banyak ****!"Dokumentasi API
Kelas IDProfanityFilter
Konstruktor
constructor(options?: FilterOptions)- options: Opsi konfigurasi filter (opsional)
Metode
filter(text: string): FilterResult
Menyensor kata kotor dalam teks.
- Hasil: Objek
FilterResultdengan properti:filtered: String teks yang sudah disensorcensored: Jumlah kata yang disensorreplacements: Array berisi detail kata yang disensor
isProfane(text: string): boolean
Memeriksa apakah teks mengandung kata kotor.
- Hasil: Boolean
truejika teks mengandung kata kotor,falsejika tidak
analyze(text: string): AnalysisResult
Menganalisis teks untuk mendapatkan informasi detail tentang kata kotor yang ditemukan.
- Hasil: Objek
AnalysisResultdengan properti:hasProfanity: Apakah teks mengandung kata kotormatches: Array kata kotor yang ditemukanmatchDetails: Array objek kata kotor dengan metadatacategories: Kategori kata kotor yang ditemukanregions: Daerah asal kata kotor yang ditemukanseverityScore: Skor keparahan (0-1)
batchAnalyze(texts: string[])
Menganalisis batch teks sekaligus dan memberikan ringkasan.
- Hasil: Objek yang berisi ringkasan analisis
analyzeBySentence(text: string)
Menganalisis teks per-kalimat.
- Hasil: Array dari hasil analisis per-kalimat
analyzeWithContext(text: string, contextWindowSize?: number)
Menganalisis teks dengan konteks di sekitar kata kotor.
- Hasil: Array dari kata kotor dengan konteks di sekitarnya
setOptions(options: Partial<FilterOptions>)
Mengubah opsi filter.
setWordList(wordList: string[])
Menetapkan daftar kata kustom.
addToWhitelist(word: string)
Menambahkan kata ke whitelist (akan diabaikan dalam filter).
removeFromWhitelist(word: string)
Menghapus kata dari whitelist.
Opsi Filter
interface FilterOptions {
wordList?: string[]; // List kata yang ingin difilter
replaceWith?: string; // Karakter pengganti untuk kata yang disensor
fullWordCensor?: boolean; // Apakah menyensor seluruh kata atau sebagian
detectLeetSpeak?: boolean; // Deteksi variasi penulisan (mis: a=4, e=3)
whitelist?: string[]; // Kata-kata yang dikecualikan dari filter
checkSubstring?: boolean; // Memeriksa substring (lebih ketat)
categories?: ProfanityCategory[]; // Kategori kata yang difilter
regions?: Region[]; // Daerah asal kata yang difilter
severityThreshold?: number; // Tingkat keparahan minimum (0-1)
}Contoh Penggunaan Lanjutan
Kustomisasi Opsi Filter
const filter = new IDProfanityFilter({
replaceWith: '#', // Menggunakan # sebagai karakter pengganti
fullWordCensor: false, // Hanya menyensor sebagian kata
detectLeetSpeak: true, // Mendeteksi variasi seperti "b4b1" untuk "babi"
categories: ['sexual', 'slur'], // Hanya filter kategori tertentu
regions: ['jawa', 'general'], // Hanya filter dari daerah tertentu
severityThreshold: 0.7, // Hanya filter kata dengan tingkat keparahan ≥ 0.7
});
// Atau mengubah opsi setelah inisialisasi
filter.setOptions({
replaceWith: '@',
fullWordCensor: true,
});Menggunakan Whitelist
const filter = new IDProfanityFilter();
// Menambahkan kata ke whitelist (akan diabaikan)
filter.addToWhitelist('anjing');
const teks =
'Anjing itu hewan peliharaan yang setia, tidak seperti bajingan itu';
const hasil = filter.filter(teks);
console.log(hasil.filtered);
// Output: "Anjing itu hewan peliharaan yang setia, tidak seperti ******* itu"Analisis Konten Mendalam
const filter = new IDProfanityFilter();
const teks = 'Dasar anjing sialan! Kamu ini memang bego dan goblok.';
// Analisis teks
const analisis = filter.analyze(teks);
console.log(analisis);
/* Output:
{
hasProfanity: true,
matches: ['anjing', 'sialan', 'bego', 'goblok'],
matchDetails: [
{ word: 'anjing', category: 'profanity', region: 'general', severity: 0.7, ... },
{ word: 'bego', category: 'insult', region: 'general', severity: 0.5, ... },
...
],
categories: ['profanity', 'insult'],
regions: ['general'],
severityScore: 0.64
}
*/Analisis Batch
const filter = new IDProfanityFilter();
const komentar = [
'Film ini sangat bagus, ceritanya menarik sekali!',
'Dasar goblok, sialan kamu!',
'Anjing emang filmnya, sampah banget.',
];
const hasil = filter.batchAnalyze(komentar);
console.log(hasil);
/* Output:
{
totalTexts: 3,
profaneTexts: 2,
cleanTexts: 1,
averageSeverity: 0.62,
topCategories: ['profanity', 'insult'],
topRegions: ['general'],
mostFrequentWords: [
{ word: 'anjing', count: 1 },
{ word: 'goblok', count: 1 },
{ word: 'sialan', count: 1 },
{ word: 'sampah', count: 1 }
]
}
*/Dukungan Regional
Library ini mendukung kata-kata kotor dari berbagai daerah di Indonesia:
- 🇮🇩 General - Kata-kata yang umum di seluruh Indonesia
- 🏝️ Jawa - Kata-kata dari bahasa Jawa
- 🏞️ Sunda - Kata-kata dari bahasa Sunda
- 🏙️ Betawi - Kata-kata dari bahasa Betawi
- 🌋 Batak - Kata-kata dari bahasa Batak
Dan daerah lainnya yang terus bertambah.
Kategori Kata
Kata-kata dikelompokkan berdasarkan kategori:
sexual: Kata-kata berbau seksualinsult: Kata-kata penghinaanprofanity: Umpatan umumslur: Perkataan merendahkan berdasarkan identitasdrugs: Terkait narkobadisgusting: Kata-kata menjijikkanblasphemy: Penistaan agama
Berkontribusi
Kami sangat menghargai kontribusi Anda! Untuk berkontribusi, silakan lihat panduan kontribusi.
Lisensi
Proyek ini dilisensikan di bawah MIT License.
Kontak & Dukungan
Jika Anda memiliki pertanyaan atau saran, silakan buka issue di repositori GitHub kami.