@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/README.md CHANGED
@@ -12,6 +12,8 @@ Library JavaScript/TypeScript untuk mendeteksi, menyensor, dan menganalisis kata
12
12
  - ⚠️ **Analisis Konten** - Menganalisis tingkat keparahan dan kategori kata kotor
13
13
  - 🔒 **Penyensoran** - Menyensor kata-kata kotor dengan berbagai opsi kustomisasi
14
14
  - 🗺️ **Dukungan Bahasa Daerah** - Mencakup kata-kata dari berbagai daerah di Indonesia (Jawa, Sunda, Batak, dll)
15
+ - 🧠 **Deteksi Cerdas** - Mendeteksi variasi ejaan, kata terpisah, dan kesamaan kata
16
+ - 🛡️ **Preset** - Preset filter siap pakai untuk berbagai kebutuhan
15
17
  - 🔧 **Kustomisasi** - Opsi untuk menambahkan whitelist dan daftar kata kustom
16
18
 
17
19
  ## Instalasi
@@ -42,7 +44,7 @@ console.log(hasProfanity); // Output: true
42
44
 
43
45
  // Filter kata kotor (sensorisasi)
44
46
  const hasil = filter.filter(teks);
45
- console.log(hasil.filtered); // Output: "Dasar **** kamu, jangan banyak ****!"
47
+ console.log(hasil.filtered); // Output: "Dasar ***** kamu, jangan banyak *****!"
46
48
  console.log(hasil.censored); // Output: 2 (jumlah kata yang disensor)
47
49
 
48
50
  // Analisis konten
@@ -51,6 +53,26 @@ console.log(analisis.severityScore); // Output: 0.65 (contoh skor keparahan)
51
53
  console.log(analisis.categories); // Output: ["profanity", "insult"]
52
54
  ```
53
55
 
56
+ ### Menggunakan Preset
57
+
58
+ ```typescript
59
+ import IDProfanityFilter from '@sideid/id-profanity-filter';
60
+
61
+ // Buat instance filter dengan preset
62
+ const filter = new IDProfanityFilter();
63
+ filter.usePreset('strict');
64
+
65
+ // Atau dengan opsi tambahan
66
+ filter.usePreset('childSafe', {
67
+ replaceWith: '#',
68
+ useRandomGrawlix: true,
69
+ });
70
+
71
+ const teks = 'Dasar anjing kamu, jangan banyak bacot!';
72
+ const hasil = filter.filter(teks);
73
+ console.log(hasil.filtered); // Output: "Dasar #@$%& kamu, jangan banyak $!@#%!"
74
+ ```
75
+
54
76
  ### Utilitas Langsung
55
77
 
56
78
  Anda juga dapat menggunakan fungsi utilitas langsung tanpa membuat instance:
@@ -60,7 +82,13 @@ import { idFilter } from '@sideid/id-profanity-filter';
60
82
 
61
83
  const teks = 'Dasar anjing kamu, jangan banyak bacot!';
62
84
  const hasil = idFilter.filter(teks);
63
- console.log(hasil.filtered); // Output: "Dasar **** kamu, jangan banyak ****!"
85
+ console.log(hasil.filtered); // Output: "Dasar ***** kamu, jangan banyak *****!"
86
+
87
+ // Menggunakan preset dengan API fungsi statis
88
+ const presetResult = idFilter.filter(
89
+ teks,
90
+ idFilter.getPresetOptions('moderate'),
91
+ );
64
92
  ```
65
93
 
66
94
  ## Dokumentasi API
@@ -103,6 +131,7 @@ Menganalisis teks untuk mendapatkan informasi detail tentang kata kotor yang dit
103
131
  - `categories`: Kategori kata kotor yang ditemukan
104
132
  - `regions`: Daerah asal kata kotor yang ditemukan
105
133
  - `severityScore`: Skor keparahan (0-1)
134
+ - `similarWords`: Kata-kata yang mirip dengan kata kotor (jika deteksi kesamaan diaktifkan)
106
135
 
107
136
  ##### `batchAnalyze(texts: string[])`
108
137
 
@@ -122,6 +151,13 @@ Menganalisis teks dengan konteks di sekitar kata kotor.
122
151
 
123
152
  - **Hasil**: Array dari kata kotor dengan konteks di sekitarnya
124
153
 
154
+ ##### `usePreset(presetName: string, additionalOptions?: Partial<FilterOptions>)`
155
+
156
+ Menggunakan preset filter yang telah ditentukan.
157
+
158
+ - **presetName**: Nama preset ('strict', 'moderate', 'light', 'childSafe', dll)
159
+ - **additionalOptions**: Opsi tambahan untuk override preset (opsional)
160
+
125
161
  ##### `setOptions(options: Partial<FilterOptions>)`
126
162
 
127
163
  Mengubah opsi filter.
@@ -138,10 +174,25 @@ Menambahkan kata ke whitelist (akan diabaikan dalam filter).
138
174
 
139
175
  Menghapus kata dari whitelist.
140
176
 
177
+ ##### `enableIndonesianVariations()`
178
+
179
+ Mengaktifkan deteksi variasi ejaan Bahasa Indonesia.
180
+
181
+ ##### `enableSplitWordDetection()`
182
+
183
+ Mengaktifkan deteksi kata yang dipisah.
184
+
185
+ ##### `enableSimilarityDetection(threshold: number = 0.8)`
186
+
187
+ Mengaktifkan deteksi berdasarkan kesamaan kata.
188
+
189
+ - **threshold**: Ambang batas kesamaan (0-1, default: 0.8)
190
+
141
191
  ### Opsi Filter
142
192
 
143
193
  ```typescript
144
194
  interface FilterOptions {
195
+ // Opsi dasar
145
196
  wordList?: string[]; // List kata yang ingin difilter
146
197
  replaceWith?: string; // Karakter pengganti untuk kata yang disensor
147
198
  fullWordCensor?: boolean; // Apakah menyensor seluruh kata atau sebagian
@@ -151,9 +202,42 @@ interface FilterOptions {
151
202
  categories?: ProfanityCategory[]; // Kategori kata yang difilter
152
203
  regions?: Region[]; // Daerah asal kata yang difilter
153
204
  severityThreshold?: number; // Tingkat keparahan minimum (0-1)
205
+
206
+ // Opsi lanjutan
207
+ useRandomGrawlix?: boolean; // Gunakan karakter acak untuk sensor (#@$%&!)
208
+ keepFirstAndLast?: boolean; // Simpan huruf pertama dan terakhir (a***g)
209
+ indonesianVariation?: boolean; // Deteksi variasi ejaan Bahasa Indonesia
210
+ detectSimilarity?: boolean; // Deteksi kata berdasarkan kesamaan
211
+ similarityThreshold?: number; // Ambang batas kesamaan (0-1)
212
+ detectSplit?: boolean; // Deteksi kata yang dipisah (a-n-j-i-n-g)
154
213
  }
155
214
  ```
156
215
 
216
+ ## Preset Filter
217
+
218
+ Library ini menyediakan beberapa preset yang dapat digunakan:
219
+
220
+ ### Preset Filter
221
+
222
+ - **strict**: Filter paling ketat, mendeteksi semua jenis kata kotor
223
+ - **moderate**: Filter tingkat menengah, mengabaikan kata-kata dengan tingkat keparahan rendah
224
+ - **light**: Filter ringan, hanya untuk kata-kata paling sensitif
225
+ - **childSafe**: Filter untuk konten anak-anak, sangat ketat
226
+
227
+ ### Preset Kategori
228
+
229
+ - **sexual**: Hanya memfilter kata-kata berbau seksual
230
+ - **insults**: Hanya memfilter kata-kata penghinaan
231
+ - **profanity**: Hanya memfilter umpatan umum
232
+
233
+ ### Preset Regional
234
+
235
+ - **general**: Hanya memfilter kata-kata umum di Indonesia
236
+ - **jawa**: Hanya memfilter kata-kata dari Jawa
237
+ - **sunda**: Hanya memfilter kata-kata dari Sunda
238
+ - **betawi**: Hanya memfilter kata-kata dari Betawi
239
+ - **batak**: Hanya memfilter kata-kata dari Batak
240
+
157
241
  ## Contoh Penggunaan Lanjutan
158
242
 
159
243
  ### Kustomisasi Opsi Filter
@@ -166,12 +250,14 @@ const filter = new IDProfanityFilter({
166
250
  categories: ['sexual', 'slur'], // Hanya filter kategori tertentu
167
251
  regions: ['jawa', 'general'], // Hanya filter dari daerah tertentu
168
252
  severityThreshold: 0.7, // Hanya filter kata dengan tingkat keparahan ≥ 0.7
169
- });
170
253
 
171
- // Atau mengubah opsi setelah inisialisasi
172
- filter.setOptions({
173
- replaceWith: '@',
174
- fullWordCensor: true,
254
+ // Opsi lanjutan
255
+ useRandomGrawlix: true, // Gunakan #@$%&! sebagai karakter pengganti
256
+ keepFirstAndLast: true, // Simpan huruf pertama dan terakhir (a***g)
257
+ indonesianVariation: true, // Deteksi variasi ejaan Indonesia
258
+ detectSimilarity: true, // Deteksi kata yang mirip
259
+ similarityThreshold: 0.8, // Ambang batas kesamaan
260
+ detectSplit: true, // Deteksi kata yang dipisah
175
261
  });
176
262
  ```
177
263
 
@@ -191,6 +277,74 @@ console.log(hasil.filtered);
191
277
  // Output: "Anjing itu hewan peliharaan yang setia, tidak seperti ******* itu"
192
278
  ```
193
279
 
280
+ ### Deteksi Variasi Ejaan dan Kata Terpisah
281
+
282
+ ```typescript
283
+ // Aktifkan deteksi variasi ejaan dan kata terpisah
284
+ const filter = new IDProfanityFilter({
285
+ indonesianVariation: true,
286
+ detectSplit: true,
287
+ detectLeetSpeak: true,
288
+ });
289
+
290
+ // Uji dengan variasi ejaan
291
+ const teks1 = 'Dasar kamu ini sangat bodoh, benar-benar b0d0h dan b-o-d-o-h!';
292
+ const hasil1 = filter.filter(teks1);
293
+ console.log(hasil1.filtered);
294
+ // Output: "Dasar kamu ini sangat *****, benar-benar ***** dan *********!"
295
+
296
+ // Uji dengan ejaan Indonesia yang berbeda
297
+ const teks2 = 'Dia sangat djail dan djudes dengan temannya';
298
+ const hasil2 = filter.filter(teks2);
299
+ console.log(hasil2.filtered);
300
+ // Output: "Dia sangat ***** dan ****** dengan temannya"
301
+ ```
302
+
303
+ ### Deteksi Berdasarkan Kesamaan
304
+
305
+ ```typescript
306
+ // Aktifkan deteksi kesamaan
307
+ const filter = new IDProfanityFilter();
308
+ filter.enableSimilarityDetection(0.75); // Set threshold kesamaan ke 0.75
309
+
310
+ const teks = 'Dia benar-benar anjiing dan gooblok!';
311
+ const analisis = filter.analyze(teks);
312
+
313
+ console.log(analisis.similarWords);
314
+ /* Output:
315
+ [
316
+ { word: "anjiing", original: "anjing", similarity: 0.83 },
317
+ { word: "gooblok", original: "goblok", similarity: 0.85 }
318
+ ]
319
+ */
320
+
321
+ const hasil = filter.filter(teks);
322
+ console.log(hasil.filtered);
323
+ // Output: "Dia benar-benar ****** dan *******!"
324
+ ```
325
+
326
+ ### Variasi Sensor Kata
327
+
328
+ ```typescript
329
+ // Sensor standar (asterisk)
330
+ const filter1 = new IDProfanityFilter();
331
+ console.log(filter1.filter('Dasar anjing kamu!').filtered);
332
+ // Output: "Dasar ***** kamu!"
333
+
334
+ // Sensor dengan grawlix random
335
+ const filter2 = new IDProfanityFilter({ useRandomGrawlix: true });
336
+ console.log(filter2.filter('Dasar anjing kamu!').filtered);
337
+ // Output: "Dasar #@$%& kamu!"
338
+
339
+ // Sensor dengan menyimpan huruf pertama dan terakhir
340
+ const filter3 = new IDProfanityFilter({
341
+ fullWordCensor: false,
342
+ keepFirstAndLast: true,
343
+ });
344
+ console.log(filter3.filter('Dasar anjing kamu!').filtered);
345
+ // Output: "Dasar a***g kamu!"
346
+ ```
347
+
194
348
  ### Analisis Konten Mendalam
195
349
 
196
350
  ```typescript
@@ -217,6 +371,57 @@ console.log(analisis);
217
371
  */
218
372
  ```
219
373
 
374
+ ### Analisis Konteks
375
+
376
+ ```typescript
377
+ const filter = new IDProfanityFilter();
378
+ const teks =
379
+ 'Saya sangat marah dengan sikapnya, dia benar-benar anjing dan bajingan!';
380
+
381
+ // Analisis konteks
382
+ const konteks = filter.analyzeWithContext(teks, 3);
383
+ console.log(konteks);
384
+
385
+ /* Output:
386
+ [
387
+ {
388
+ word: "anjing",
389
+ context: "benar-benar anjing dan bajingan",
390
+ position: { start: 43, end: 62 }
391
+ },
392
+ {
393
+ word: "bajingan",
394
+ context: "anjing dan bajingan!",
395
+ position: { start: 54, end: 63 }
396
+ }
397
+ ]
398
+ */
399
+ ```
400
+
401
+ ### Analisis Per-Kalimat
402
+
403
+ ```typescript
404
+ const filter = new IDProfanityFilter();
405
+ const teks =
406
+ 'Filmnya bagus sekali. Tetapi pemainnya seperti anjing, sangat buruk aktingnya.';
407
+
408
+ // Analisis per-kalimat
409
+ const kalimat = filter.analyzeBySentence(teks);
410
+ console.log(
411
+ kalimat.map(
412
+ (k) =>
413
+ k.sentence + (k.hasProfanity ? ' (Mengandung kata kotor)' : ' (Bersih)'),
414
+ ),
415
+ );
416
+
417
+ /* Output:
418
+ [
419
+ "Filmnya bagus sekali. (Bersih)",
420
+ "Tetapi pemainnya seperti anjing, sangat buruk aktingnya. (Mengandung kata kotor)"
421
+ ]
422
+ */
423
+ ```
424
+
220
425
  ### Analisis Batch
221
426
 
222
427
  ```typescript
@@ -258,8 +463,6 @@ Library ini mendukung kata-kata kotor dari berbagai daerah di Indonesia:
258
463
  - 🏙️ **Betawi** - Kata-kata dari bahasa Betawi
259
464
  - 🌋 **Batak** - Kata-kata dari bahasa Batak
260
465
 
261
- Dan daerah lainnya yang terus bertambah.
262
-
263
466
  ## Kategori Kata
264
467
 
265
468
  Kata-kata dikelompokkan berdasarkan kategori:
@@ -276,6 +479,24 @@ Kata-kata dikelompokkan berdasarkan kategori:
276
479
 
277
480
  Kami sangat menghargai kontribusi Anda! Untuk berkontribusi, silakan lihat [panduan kontribusi](CONTRIBUTING.md).
278
481
 
482
+ ### Menambahkan Kata Baru
483
+
484
+ Jika Anda ingin menambahkan kata baru ke database, silakan buat pull request dengan mengubah file yang sesuai di `src/constants/categories/` atau `src/constants/regions/`.
485
+
486
+ Format untuk menambahkan kata baru:
487
+
488
+ ```json
489
+ {
490
+ "word": "kata_kotor", // Kata yang akan difilter
491
+ "category": "insult", // Kategori kata
492
+ "region": "general", // Daerah asal kata
493
+ "severity": 0.7, // Tingkat keparahan (0-1)
494
+ "aliases": ["k4t4_kotor", "kata_k0t0r"], // Alias atau variasi umum
495
+ "description": "Deskripsi tentang kata", // Penjelasan tentang kata (opsional)
496
+ "context": "Konteks penggunaan kata" // Konteks penggunaan (opsional)
497
+ }
498
+ ```
499
+
279
500
  ## Lisensi
280
501
 
281
502
  Proyek ini dilisensikan di bawah [MIT License](LICENSE).
@@ -0,0 +1,258 @@
1
+ import { FilterOptions, ProfanityCategory, Region } from "../types";
2
+ export declare const DEFAULT_OPTIONS: FilterOptions;
3
+ export declare const FILTER_PRESETS: {
4
+ strict: {
5
+ checkSubstring: boolean;
6
+ detectLeetSpeak: boolean;
7
+ severityThreshold: number;
8
+ replaceWith?: string;
9
+ fullWordCensor?: boolean;
10
+ wordList?: string[];
11
+ whitelist?: string[];
12
+ categories?: ProfanityCategory[];
13
+ regions?: Region[];
14
+ useRandomGrawlix?: boolean;
15
+ keepFirstAndLast?: boolean;
16
+ indonesianVariation?: boolean;
17
+ detectSimilarity?: boolean;
18
+ similarityThreshold?: number;
19
+ detectSplit?: boolean;
20
+ };
21
+ moderate: {
22
+ severityThreshold: number;
23
+ replaceWith?: string;
24
+ fullWordCensor?: boolean;
25
+ detectLeetSpeak?: boolean;
26
+ checkSubstring?: boolean;
27
+ wordList?: string[];
28
+ whitelist?: string[];
29
+ categories?: ProfanityCategory[];
30
+ regions?: Region[];
31
+ useRandomGrawlix?: boolean;
32
+ keepFirstAndLast?: boolean;
33
+ indonesianVariation?: boolean;
34
+ detectSimilarity?: boolean;
35
+ similarityThreshold?: number;
36
+ detectSplit?: boolean;
37
+ };
38
+ light: {
39
+ severityThreshold: number;
40
+ categories: ProfanityCategory[];
41
+ replaceWith?: string;
42
+ fullWordCensor?: boolean;
43
+ detectLeetSpeak?: boolean;
44
+ checkSubstring?: boolean;
45
+ wordList?: string[];
46
+ whitelist?: string[];
47
+ regions?: Region[];
48
+ useRandomGrawlix?: boolean;
49
+ keepFirstAndLast?: boolean;
50
+ indonesianVariation?: boolean;
51
+ detectSimilarity?: boolean;
52
+ similarityThreshold?: number;
53
+ detectSplit?: boolean;
54
+ };
55
+ childSafe: {
56
+ checkSubstring: boolean;
57
+ detectLeetSpeak: boolean;
58
+ fullWordCensor: boolean;
59
+ severityThreshold: number;
60
+ replaceWith?: string;
61
+ wordList?: string[];
62
+ whitelist?: string[];
63
+ categories?: ProfanityCategory[];
64
+ regions?: Region[];
65
+ useRandomGrawlix?: boolean;
66
+ keepFirstAndLast?: boolean;
67
+ indonesianVariation?: boolean;
68
+ detectSimilarity?: boolean;
69
+ similarityThreshold?: number;
70
+ detectSplit?: boolean;
71
+ };
72
+ };
73
+ export declare const CATEGORY_PRESETS: {
74
+ sexual: {
75
+ categories: ProfanityCategory[];
76
+ replaceWith?: string;
77
+ fullWordCensor?: boolean;
78
+ detectLeetSpeak?: boolean;
79
+ checkSubstring?: boolean;
80
+ wordList?: string[];
81
+ whitelist?: string[];
82
+ regions?: Region[];
83
+ severityThreshold?: number;
84
+ useRandomGrawlix?: boolean;
85
+ keepFirstAndLast?: boolean;
86
+ indonesianVariation?: boolean;
87
+ detectSimilarity?: boolean;
88
+ similarityThreshold?: number;
89
+ detectSplit?: boolean;
90
+ };
91
+ insults: {
92
+ categories: ProfanityCategory[];
93
+ replaceWith?: string;
94
+ fullWordCensor?: boolean;
95
+ detectLeetSpeak?: boolean;
96
+ checkSubstring?: boolean;
97
+ wordList?: string[];
98
+ whitelist?: string[];
99
+ regions?: Region[];
100
+ severityThreshold?: number;
101
+ useRandomGrawlix?: boolean;
102
+ keepFirstAndLast?: boolean;
103
+ indonesianVariation?: boolean;
104
+ detectSimilarity?: boolean;
105
+ similarityThreshold?: number;
106
+ detectSplit?: boolean;
107
+ };
108
+ profanity: {
109
+ categories: ProfanityCategory[];
110
+ replaceWith?: string;
111
+ fullWordCensor?: boolean;
112
+ detectLeetSpeak?: boolean;
113
+ checkSubstring?: boolean;
114
+ wordList?: string[];
115
+ whitelist?: string[];
116
+ regions?: Region[];
117
+ severityThreshold?: number;
118
+ useRandomGrawlix?: boolean;
119
+ keepFirstAndLast?: boolean;
120
+ indonesianVariation?: boolean;
121
+ detectSimilarity?: boolean;
122
+ similarityThreshold?: number;
123
+ detectSplit?: boolean;
124
+ };
125
+ };
126
+ export declare const REGION_PRESETS: {
127
+ general: {
128
+ regions: Region[];
129
+ replaceWith?: string;
130
+ fullWordCensor?: boolean;
131
+ detectLeetSpeak?: boolean;
132
+ checkSubstring?: boolean;
133
+ wordList?: string[];
134
+ whitelist?: string[];
135
+ categories?: ProfanityCategory[];
136
+ severityThreshold?: number;
137
+ useRandomGrawlix?: boolean;
138
+ keepFirstAndLast?: boolean;
139
+ indonesianVariation?: boolean;
140
+ detectSimilarity?: boolean;
141
+ similarityThreshold?: number;
142
+ detectSplit?: boolean;
143
+ };
144
+ jawa: {
145
+ regions: Region[];
146
+ replaceWith?: string;
147
+ fullWordCensor?: boolean;
148
+ detectLeetSpeak?: boolean;
149
+ checkSubstring?: boolean;
150
+ wordList?: string[];
151
+ whitelist?: string[];
152
+ categories?: ProfanityCategory[];
153
+ severityThreshold?: number;
154
+ useRandomGrawlix?: boolean;
155
+ keepFirstAndLast?: boolean;
156
+ indonesianVariation?: boolean;
157
+ detectSimilarity?: boolean;
158
+ similarityThreshold?: number;
159
+ detectSplit?: boolean;
160
+ };
161
+ sunda: {
162
+ regions: Region[];
163
+ replaceWith?: string;
164
+ fullWordCensor?: boolean;
165
+ detectLeetSpeak?: boolean;
166
+ checkSubstring?: boolean;
167
+ wordList?: string[];
168
+ whitelist?: string[];
169
+ categories?: ProfanityCategory[];
170
+ severityThreshold?: number;
171
+ useRandomGrawlix?: boolean;
172
+ keepFirstAndLast?: boolean;
173
+ indonesianVariation?: boolean;
174
+ detectSimilarity?: boolean;
175
+ similarityThreshold?: number;
176
+ detectSplit?: boolean;
177
+ };
178
+ betawi: {
179
+ regions: Region[];
180
+ replaceWith?: string;
181
+ fullWordCensor?: boolean;
182
+ detectLeetSpeak?: boolean;
183
+ checkSubstring?: boolean;
184
+ wordList?: string[];
185
+ whitelist?: string[];
186
+ categories?: ProfanityCategory[];
187
+ severityThreshold?: number;
188
+ useRandomGrawlix?: boolean;
189
+ keepFirstAndLast?: boolean;
190
+ indonesianVariation?: boolean;
191
+ detectSimilarity?: boolean;
192
+ similarityThreshold?: number;
193
+ detectSplit?: boolean;
194
+ };
195
+ batak: {
196
+ regions: Region[];
197
+ replaceWith?: string;
198
+ fullWordCensor?: boolean;
199
+ detectLeetSpeak?: boolean;
200
+ checkSubstring?: boolean;
201
+ wordList?: string[];
202
+ whitelist?: string[];
203
+ categories?: ProfanityCategory[];
204
+ severityThreshold?: number;
205
+ useRandomGrawlix?: boolean;
206
+ keepFirstAndLast?: boolean;
207
+ indonesianVariation?: boolean;
208
+ detectSimilarity?: boolean;
209
+ similarityThreshold?: number;
210
+ detectSplit?: boolean;
211
+ };
212
+ };
213
+ export declare const REPLACEMENT_CHARS: {
214
+ asterisk: string;
215
+ hash: string;
216
+ dollar: string;
217
+ at: string;
218
+ percent: string;
219
+ underscore: string;
220
+ dash: string;
221
+ dot: string;
222
+ grawlix: string;
223
+ };
224
+ /**
225
+ * Membuat opsi custom dengan menggabungkan dengan default
226
+ *
227
+ * @param options Opsi yang akan digabungkan dengan default
228
+ * @returns Opsi yang sudah digabungkan
229
+ */
230
+ export declare function createOptions(options?: Partial<FilterOptions>): FilterOptions;
231
+ /**
232
+ * Mendapatkan opsi dari preset yang ada
233
+ *
234
+ * @param presetName Nama preset filter, kategori, atau region
235
+ * @param additionalOptions Opsi tambahan untuk mengganti preset
236
+ * @returns Opsi yang sudah digabungkan
237
+ */
238
+ export declare function getPresetOptions(presetName: string, additionalOptions?: Partial<FilterOptions>): FilterOptions;
239
+ /**
240
+ * Mendapatkan karakter pengganti
241
+ *
242
+ * @param type Tipe karakter pengganti
243
+ * @returns Karakter pengganti
244
+ */
245
+ export declare function getReplacementChar(type?: keyof typeof REPLACEMENT_CHARS): string;
246
+ /**
247
+ * Membuat karakter pengganti random dari grawlix
248
+ *
249
+ * @returns Karakter pengganti random
250
+ */
251
+ export declare function getRandomGrawlix(): string;
252
+ /**
253
+ * Membuat string pengganti untuk kata menggunakan grawlix random
254
+ *
255
+ * @param length Panjang string
256
+ * @returns String pengganti
257
+ */
258
+ export declare function makeRandomGrawlixString(length: number): string;
@@ -0,0 +1,9 @@
1
+ import { sexual } from './sexual';
2
+ import { insult } from './insult';
3
+ export declare const categories: {
4
+ sexual: import("../..").ProfanityWord[];
5
+ insult: import("../..").ProfanityWord[];
6
+ };
7
+ export { sexual, insult };
8
+ export declare const allCategoryWords: import("../..").ProfanityWord[];
9
+ export default allCategoryWords;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const insult: ProfanityWord[];
3
3
  export declare const insultWords: string[];
4
4
  export default insult;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const sexual: ProfanityWord[];
3
3
  export declare const sexualWords: string[];
4
4
  export default sexual;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const batak: ProfanityWord[];
3
3
  export declare const batakWords: string[];
4
4
  export default batak;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const betawi: ProfanityWord[];
3
3
  export declare const betawiWords: string[];
4
4
  export default betawi;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const general: ProfanityWord[];
3
3
  export declare const generalWords: string[];
4
4
  export default general;
@@ -0,0 +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';
6
+ export { general, jawa, sunda, betawi, batak, };
7
+ export declare const allRegionWords: import("../..").ProfanityWord[];
8
+ export default allRegionWords;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const jawa: ProfanityWord[];
3
3
  export declare const jawaWords: string[];
4
4
  export default jawa;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../../types';
1
+ import { ProfanityWord } from "../../types";
2
2
  export declare const sunda: ProfanityWord[];
3
3
  export declare const sundaWords: string[];
4
4
  export default sunda;
@@ -1,4 +1,4 @@
1
- import { ProfanityWord } from '../types';
1
+ import { ProfanityWord } from "../types";
2
2
  export declare const wordCategories: {
3
3
  sexual: string[];
4
4
  insult: string[];
@@ -1,4 +1,4 @@
1
- import { FilterOptions, AnalysisResult, ProfanityCategory, Region } from '../types';
1
+ import { FilterOptions, AnalysisResult, ProfanityCategory, Region } from "../types";
2
2
  /**
3
3
  * Menganalisis teks untuk kata kotor
4
4
  *
@@ -8,9 +8,9 @@ import { FilterOptions, AnalysisResult, ProfanityCategory, Region } from '../typ
8
8
  */
9
9
  export declare function analyze(text: string, options?: FilterOptions): AnalysisResult;
10
10
  /**
11
- * menganalisis daftar teks dan ringkasan
11
+ * Menganalisis daftar teks dan ringkasan
12
12
  *
13
- * @param texts Daftar teks yagn dianalisis
13
+ * @param texts Daftar teks yang dianalisis
14
14
  * @param options Opsi untuk analisis
15
15
  * @return Objek dengan ringkasan analisis
16
16
  */
@@ -40,7 +40,7 @@ export declare function analyzeBySentence(text: string, options?: FilterOptions)
40
40
  * Menganalisis teks untuk menemukan kata kotor pada konteks tertentu
41
41
  *
42
42
  * @param text Teks yang akan dianalisis
43
- * @param context Kata konteks untuk dicari di dekat kata kotor
43
+ * @param contextWindowSize Ukuran konteks (jumlah kata) di sekitar kata kotor
44
44
  * @param options Opsi untuk analisis
45
45
  * @returns Konteks di dekat kata kotor
46
46
  */