@sideid/id-profanity-filter 1.9.4 → 1.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/examples/basic.ts CHANGED
@@ -1,52 +1,71 @@
1
+ import { IDProfanityFilter, idFilter } from '../src/index';
2
+
1
3
  /**
2
- * Contoh penggunaan dasar ID-Profanity-Filter
4
+ * Contoh Penggunaan Dasar ID-Profanity-Filter
5
+ * ==========================================
6
+ * File ini menunjukkan fungsi dasar dari library.
3
7
  */
4
- import IDProfanityFilter from '../src/index';
5
8
 
6
- // Contoh penggunaan sederhana
9
+ console.log('=== Contoh Penggunaan Dasar ID-Profanity-Filter ===\n');
7
10
 
8
- // 1. Buat instance filter
11
+ // ===== Contoh 1: Inisialisasi dasar =====
9
12
  const filter = new IDProfanityFilter();
10
13
 
11
- // 2. Contoh teks dengan kata kasar
12
- const text = 'Dasar anjing kamu, jangan banyak bacot!';
13
-
14
- // 3. Cek apakah teks mengandung kata kotor
15
- const hasProfanity = filter.isProfane(text);
16
- console.log('Teks mengandung kata kotor:', hasProfanity);
17
-
18
- // 4. Filter kata kotor
19
- const filteredResult = filter.filter(text);
20
- console.log('Teks asli:', text);
21
- console.log('Teks tersensor:', filteredResult.filtered);
22
- console.log('Jumlah kata yang disensor:', filteredResult.censored);
23
- console.log('Kata-kata yang disensor:', filteredResult.replacements);
24
-
25
- // 5. Analisis teks
26
- const analysis = filter.analyze(text);
27
- console.log('\nHasil Analisis:');
28
- console.log('- Mengandung kata kotor:', analysis.hasProfanity);
29
- console.log('- Kata kotor yang ditemukan:', analysis.matches);
30
- console.log('- Kategori kata kotor:', analysis.categories);
31
- console.log('- Daerah asal kata kotor:', analysis.regions);
32
- console.log('- Skor keparahan:', analysis.severityScore);
33
-
34
- // 6. Gunakan opsi kustom
14
+ const teks = 'Dasar anjing kamu, jangan banyak bacot!';
15
+ console.log('Teks asli:', teks);
16
+
17
+ // Cek apakah teks mengandung kata kotor
18
+ const hasProfanity = filter.isProfane(teks);
19
+ console.log('Mengandung kata kotor?', hasProfanity);
20
+
21
+ // Filter kata kotor (sensorisasi)
22
+ const hasil = filter.filter(teks);
23
+ console.log('Teks disensor:', hasil.filtered);
24
+ console.log('Jumlah kata disensor:', hasil.censored);
25
+ console.log('Detail penggantian:', hasil.replacements);
26
+
27
+ console.log('\n=== Contoh Analisis Dasar ===\n');
28
+
29
+ // Analisis konten
30
+ const analisis = filter.analyze(teks);
31
+ console.log('Mengandung kata kotor?', analisis.hasProfanity);
32
+ console.log('Kata-kata kotor yang ditemukan:', analisis.matches);
33
+ console.log('Kategori kata kotor:', analisis.categories);
34
+ console.log('Daerah asal kata:', analisis.regions);
35
+ console.log('Tingkat keparahan:', analisis.severityScore.toFixed(2));
36
+
37
+ console.log('\n=== Contoh Fungsi Statis ===\n');
38
+
39
+ // Menggunakan fungsi statis
40
+ const staticResult = idFilter.filter(teks);
41
+ console.log('Teks disensor (fungsi statis):', staticResult.filtered);
42
+
43
+ // ===== Contoh 2: Mengubah karakter pengganti =====
44
+ filter.setOptions({ replaceWith: '#' });
45
+ console.log('\nTeks disensor dengan #:', filter.filter(teks).filtered);
46
+
47
+ // ===== Contoh 3: Hanya menyensor sebagian kata =====
35
48
  filter.setOptions({
36
- replaceWith: '#',
49
+ replaceWith: '*',
37
50
  fullWordCensor: false,
51
+ keepFirstAndLast: true,
38
52
  });
53
+ console.log(
54
+ '\nTeks disensor sebagian (first & last):',
55
+ filter.filter(teks).filtered,
56
+ );
39
57
 
40
- console.log('\nHasil filter dengan opsi kustom:');
41
- console.log(filter.filter(text).filtered);
58
+ // ===== Contoh 4: Metode analisis lain =====
59
+ const kalimat =
60
+ 'Saya sangat suka filmnya. Tapi pemainnya seperti anjing, aktingnya buruk.';
61
+ console.log('\nContoh kalimat untuk analisis per-kalimat:', kalimat);
42
62
 
43
- // 7. Tambahkan kata ke whitelist (pengecualian)
44
- filter.addToWhitelist('anjing');
45
- console.log('\nHasil filter setelah "anjing" di-whitelist:');
46
- console.log(filter.filter(text).filtered);
47
-
48
- // 8. Gunakan fungsi utilitas langsung
49
- import { idFilter } from '../src/index';
50
-
51
- console.log('\nPenggunaan utilitas langsung:');
52
- console.log(idFilter.filter(text, { replaceWith: '@' }).filtered);
63
+ const kalimatAnalisis = filter.analyzeBySentence(kalimat);
64
+ console.log('\nAnalisis per-kalimat:');
65
+ kalimatAnalisis.forEach((hasil, index) => {
66
+ console.log(`Kalimat ${index + 1}: ${hasil.sentence}`);
67
+ console.log(`- Mengandung kata kotor: ${hasil.hasProfanity}`);
68
+ if (hasil.hasProfanity) {
69
+ console.log(`- Kata kotor: ${hasil.matches.join(', ')}`);
70
+ }
71
+ });
@@ -0,0 +1,140 @@
1
+ import { IDProfanityFilter, idFilter, FilterOptions } from '../src/index';
2
+
3
+ /**
4
+ * Contoh Penggunaan ID-Profanity-Filter dengan Daftar Kustom
5
+ * =======================================================
6
+ * File ini menunjukkan cara menggunakan library dengan daftar kata kustom.
7
+ */
8
+
9
+ console.log('=== Contoh Penggunaan dengan Daftar Kata Kustom ===\n');
10
+
11
+ // ===== Contoh 1: Menggunakan daftar kata kustom =====
12
+ // Daftar kata kotor kustom
13
+ const customBadWords = ['jelek', 'buruk', 'sampah', 'payah', 'lemah', 'amatir'];
14
+
15
+ // Buat instance dengan daftar kata kustom
16
+ const filter = new IDProfanityFilter({
17
+ wordList: customBadWords,
18
+ replaceWith: '#',
19
+ });
20
+
21
+ const teks1 = 'Film itu sangat jelek dan payah, sepertinya dibuat oleh amatir.';
22
+ console.log('Teks asli:', teks1);
23
+ console.log('Hasil filter kustom:', filter.filter(teks1).filtered);
24
+
25
+ // ===== Contoh 2: Menggabungkan daftar kata kustom dengan daftar bawaan =====
26
+ console.log('\n=== Menggabungkan Daftar Kata ===\n');
27
+
28
+ // Reset filter ke pengaturan default
29
+ filter.setOptions({});
30
+
31
+ // Tambahkan kata-kata kustom tapi tetap deteksi kata-kata bawaan
32
+ const teks2 = 'Film itu sangat jelek dan payah, dibuat oleh anjing amatir.';
33
+ console.log('Teks asli:', teks2);
34
+
35
+ // Analisis hanya dengan kata bawaan
36
+ console.log('Analisis standar:');
37
+ const standarAnalisis = filter.analyze(teks2);
38
+ console.log('- Kata terdeteksi:', standarAnalisis.matches);
39
+
40
+ // Tambahkan kata kustom
41
+ filter.setWordList([...customBadWords]);
42
+ console.log('\nAnalisis dengan kata kustom ditambahkan:');
43
+ const customAnalisis = filter.analyze(teks2);
44
+ console.log('- Kata terdeteksi:', customAnalisis.matches);
45
+
46
+ // ===== Contoh 3: Whitelist untuk pengecualian kontekstual =====
47
+ console.log('\n=== Penggunaan Whitelist ===\n');
48
+
49
+ // Kita ingin kata "anjing" diperbolehkan jika dalam konteks binatang
50
+ filter.setOptions({});
51
+ filter.addToWhitelist('anjing');
52
+
53
+ const teks3a = 'Anjing adalah hewan peliharaan yang setia.';
54
+ const teks3b = 'Dasar anjing kamu, tidak punya perasaan!';
55
+
56
+ console.log('Teks dengan konteks binatang:', teks3a);
57
+ console.log('Terdeteksi sebagai kata kotor?', filter.isProfane(teks3a));
58
+
59
+ // Tambahkan kembali "anjing" ke daftar kata kotor
60
+ filter.removeFromWhitelist('anjing');
61
+ console.log('\nSetelah dihapus dari whitelist:');
62
+ console.log('Terdeteksi sebagai kata kotor?', filter.isProfane(teks3a));
63
+
64
+ // ===== Contoh 4: Membuat preset kustom =====
65
+ console.log('\n=== Membuat Preset Kustom ===\n');
66
+
67
+ // Kita bisa membuat preset filter kustom
68
+ const myCustomPreset: FilterOptions = {
69
+ replaceWith: '●', // Karakter pengganti
70
+ fullWordCensor: false,
71
+ keepFirstAndLast: true,
72
+ detectLeetSpeak: true,
73
+ indonesianVariation: true,
74
+ detectSplit: false,
75
+ useRandomGrawlix: false,
76
+ categories: ['insult', 'profanity'],
77
+ severityThreshold: 0.3,
78
+ whitelist: ['anjing'], // Untuk konteks binatang
79
+ };
80
+
81
+ const teks4 = 'Anjing itu lucu, tidak seperti si goblok dan bego itu.';
82
+ console.log('Teks asli:', teks4);
83
+
84
+ // Gunakan preset kustom
85
+ filter.setOptions(myCustomPreset);
86
+ console.log('Hasil preset kustom:', filter.filter(teks4).filtered);
87
+
88
+ // ===== Contoh 5: Filter berdasarkan kategori atau daerah saja =====
89
+ console.log('\n=== Filter Berdasarkan Kategori atau Daerah ===\n');
90
+
91
+ // Filter hanya kata dari kategori "sexual"
92
+ filter.setOptions({
93
+ categories: ['sexual'],
94
+ wordList: [], // Reset daftar kata kustom
95
+ });
96
+
97
+ const teks5 =
98
+ 'Ngewe dan bokep itu kata kotor, bego dan anjing tidak terfilter.';
99
+ console.log('Teks asli:', teks5);
100
+ console.log('Filter hanya kategori sexual:', filter.filter(teks5).filtered);
101
+
102
+ // Filter hanya kata dari daerah "jawa"
103
+ filter.setOptions({
104
+ categories: [],
105
+ regions: ['jawa'],
106
+ });
107
+
108
+ const teks5b = 'Kata jancuk dan cuk dari Jawa, anjing adalah kata umum.';
109
+ console.log('\nTeks asli:', teks5b);
110
+ console.log('Filter hanya daerah jawa:', filter.filter(teks5b).filtered);
111
+
112
+ // ===== Contoh 6: Custom wordList dengan metadata =====
113
+ console.log('\n=== Custom wordList dengan Metadata ===\n');
114
+
115
+ // Ini contoh jika Anda ingin membuat daftar kata lengkap dengan metadata
116
+ const customWordsWithMetadata = [
117
+ {
118
+ word: 'jelek',
119
+ category: 'insult' as any,
120
+ region: 'general' as any,
121
+ severity: 0.4,
122
+ aliases: ['jelex', 'jlk'],
123
+ },
124
+ {
125
+ word: 'payah',
126
+ category: 'insult' as any,
127
+ region: 'general' as any,
128
+ severity: 0.3,
129
+ aliases: ['pyh', 'payaah'],
130
+ },
131
+ ];
132
+
133
+ // Namun untuk filter sederhana, cukup gunakan kata-kata saja
134
+ filter.setOptions({
135
+ wordList: customWordsWithMetadata.map((w) => w.word),
136
+ });
137
+
138
+ const teks6 = 'Performanya sangat jelek dan payah sekali.';
139
+ console.log('Teks asli:', teks6);
140
+ console.log('Filter dengan wordList kustom:', filter.filter(teks6).filtered);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideid/id-profanity-filter",
3
- "version": "1.9.4",
3
+ "version": "1.9.6",
4
4
  "description": "Library filter kata kotor dalam Bahasa Indonesia",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -1,31 +1,31 @@
1
- // import { sexual } from './sexual';
2
- // import { insult } from './insult';
1
+ import { sexual } from './sexual';
2
+ import { insult } from './insult';
3
3
  // import { profanity } from './profanity';
4
4
  // import { slur } from './slur';
5
5
  // import { drugs } from './drugs';
6
6
  // import { disgusting } from './disgusting';
7
7
  // import { blasphemy } from './blasphemy';
8
8
 
9
- // export const categories = {
10
- // sexual, // Kata-kata berbau seksual
11
- // insult, // Kata-kata penghinaan
12
- // profanity, // Umpatan umum
13
- // slur, // Perkataan merendahkan berdasarkan identitas
14
- // drugs, // Terkait narkoba
15
- // disgusting, // Kata-kata menjijikkan
16
- // blasphemy, // Penistaan agama
17
- // };
9
+ export const categories = {
10
+ sexual, // Kata-kata berbau seksual
11
+ insult, // Kata-kata penghinaan
12
+ // profanity, // Umpatan umum
13
+ // slur, // Perkataan merendahkan berdasarkan identitas
14
+ // drugs, // Terkait narkoba
15
+ // disgusting, // Kata-kata menjijikkan
16
+ // blasphemy, // Penistaan agama
17
+ };
18
18
 
19
- // export { sexual, insult, profanity, slur, drugs, disgusting, blasphemy };
19
+ export { sexual, insult };
20
20
 
21
- // export const allCategoryWords = [
22
- // ...sexual,
23
- // ...insult,
24
- // ...profanity,
25
- // ...slur,
26
- // ...drugs,
27
- // ...disgusting,
28
- // ...blasphemy,
29
- // ];
21
+ export const allCategoryWords = [
22
+ ...sexual,
23
+ ...insult,
24
+ // ...profanity,
25
+ // ...slur,
26
+ // ...drugs,
27
+ // ...disgusting,
28
+ // ...blasphemy,
29
+ ];
30
30
 
31
- // export default allCategoryWords;
31
+ export default allCategoryWords;
@@ -1,8 +1,8 @@
1
- // import { general } from './general';
2
- // import { jawa } from './jawa';
3
- // import { sunda } from './sunda';
4
- // import { betawi } from './betawi';
5
- // import { batak } from './batak';
1
+ import { general } from './general';
2
+ import { jawa } from './jawa';
3
+ import { sunda } from './sunda';
4
+ import { betawi } from './betawi';
5
+ import { batak } from './batak';
6
6
  // import { minang } from './minang';
7
7
  // import { bali } from './bali';
8
8
  // import { madura } from './madura';
@@ -17,46 +17,46 @@
17
17
  // import { ntt } from './ntt';
18
18
  // import { ntb } from './ntb';
19
19
 
20
- // export {
21
- // general,
22
- // jawa,
23
- // sunda,
24
- // betawi,
25
- // batak,
26
- // minang,
27
- // bali,
28
- // madura,
29
- // bugis,
30
- // aceh,
31
- // ambon,
32
- // papua,
33
- // manado,
34
- // banjar,
35
- // palembang,
36
- // lampung,
37
- // ntt,
38
- // ntb,
39
- // };
20
+ export {
21
+ general,
22
+ jawa,
23
+ sunda,
24
+ betawi,
25
+ batak,
26
+ // minang,
27
+ // bali,
28
+ // madura,
29
+ // bugis,
30
+ // aceh,
31
+ // ambon,
32
+ // papua,
33
+ // manado,
34
+ // banjar,
35
+ // palembang,
36
+ // lampung,
37
+ // ntt,
38
+ // ntb,
39
+ };
40
40
 
41
- // export const allRegionWords = [
42
- // ...general,
43
- // ...jawa,
44
- // ...sunda,
45
- // ...betawi,
46
- // ...batak,
47
- // ...minang,
48
- // ...bali,
49
- // ...madura,
50
- // ...bugis,
51
- // ...aceh,
52
- // ...ambon,
53
- // ...papua,
54
- // ...manado,
55
- // ...banjar,
56
- // ...palembang,
57
- // ...lampung,
58
- // ...ntt,
59
- // ...ntb,
60
- // ];
41
+ export const allRegionWords = [
42
+ ...general,
43
+ ...jawa,
44
+ ...sunda,
45
+ ...betawi,
46
+ ...batak,
47
+ // ...minang,
48
+ // ...bali,
49
+ // ...madura,
50
+ // ...bugis,
51
+ // ...aceh,
52
+ // ...ambon,
53
+ // ...papua,
54
+ // ...manado,
55
+ // ...banjar,
56
+ // ...palembang,
57
+ // ...lampung,
58
+ // ...ntt,
59
+ // ...ntb,
60
+ ];
61
61
 
62
- // export default allRegionWords;
62
+ export default allRegionWords;