@sideid/id-profanity-filter 1.11.6 → 1.11.8
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/dist/index.d.ts +2 -2
- package/dist/index.esm.js +1345 -455
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1345 -455
- package/dist/index.js.map +1 -1
- package/dist/types/config/options.d.ts +1 -1
- package/dist/types/constants/categories/blasphemy.d.ts +1 -1
- package/dist/types/constants/categories/disgusting.d.ts +1 -1
- package/dist/types/constants/categories/drugs.d.ts +1 -1
- package/dist/types/constants/categories/insult.d.ts +1 -1
- package/dist/types/constants/categories/profanity.d.ts +1 -1
- package/dist/types/constants/categories/sexual.d.ts +1 -1
- package/dist/types/constants/categories/slur.d.ts +1 -1
- package/dist/types/constants/regions/bali.d.ts +1 -1
- package/dist/types/constants/regions/batak.d.ts +1 -1
- package/dist/types/constants/regions/betawi.d.ts +1 -1
- package/dist/types/constants/regions/general.d.ts +1 -1
- package/dist/types/constants/regions/madura.d.ts +4 -0
- package/dist/types/constants/regions/minang.d.ts +4 -0
- package/dist/types/constants/regions/sunda.d.ts +1 -1
- package/dist/types/constants/wordList.d.ts +10 -1
- package/dist/types/core/analyzer.d.ts +1 -1
- package/dist/types/core/filter.d.ts +1 -1
- package/dist/types/core/matcher.d.ts +1 -1
- package/dist/types/types/index.d.ts +2 -2
- package/dist/types/utils/regexUtils.d.ts +1 -1
- package/package.json +1 -1
- package/src/config/options.ts +25 -30
- package/src/constants/categories/blasphemy.ts +26 -15
- package/src/constants/categories/disgusting.ts +62 -54
- package/src/constants/categories/drugs.ts +56 -47
- package/src/constants/categories/insult.ts +80 -76
- package/src/constants/categories/profanity.ts +98 -92
- package/src/constants/categories/sexual.ts +74 -65
- package/src/constants/categories/slur.ts +73 -66
- package/src/constants/regions/aceh.ts +5 -174
- package/src/constants/regions/bali.ts +4 -137
- package/src/constants/regions/batak.ts +5 -9
- package/src/constants/regions/betawi.ts +19 -22
- package/src/constants/regions/general.ts +140 -144
- package/src/constants/regions/jawa.ts +11 -29
- package/src/constants/regions/madura.ts +57 -0
- package/src/constants/regions/minang.ts +53 -0
- package/src/constants/regions/sunda.ts +343 -19
- package/src/constants/wordList.ts +31 -34
- package/src/core/analyzer.ts +15 -26
- package/src/core/filter.ts +23 -39
- package/src/core/matcher.ts +25 -49
- package/src/index.ts +5 -16
- package/src/types/index.ts +26 -25
- package/src/utils/ahoCorasick.ts +1 -1
- package/src/utils/regexUtils.ts +37 -43
- package/src/utils/similarityUtils.ts +13 -28
- package/src/utils/stringUtils.ts +30 -38
- /package/{prettierrc → .prettierrc} +0 -0
|
@@ -1,32 +1,356 @@
|
|
|
1
|
-
import { ProfanityWord } from
|
|
1
|
+
import { ProfanityWord } from '../../types';
|
|
2
2
|
|
|
3
3
|
export const sunda: ProfanityWord[] = [
|
|
4
4
|
{
|
|
5
|
-
word:
|
|
6
|
-
category:
|
|
7
|
-
region:
|
|
5
|
+
word: 'bagong',
|
|
6
|
+
category: 'insult',
|
|
7
|
+
region: 'sunda',
|
|
8
8
|
severity: 0.5,
|
|
9
|
-
aliases: [
|
|
10
|
-
description:
|
|
11
|
-
context:
|
|
9
|
+
aliases: ['bagog'],
|
|
10
|
+
description: 'Secara harfiah berarti babi hutan, digunakan sebagai hinaan',
|
|
11
|
+
context: 'Hinaan untuk menyebut orang yang dianggap jorok atau rakus',
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
word:
|
|
15
|
-
category:
|
|
16
|
-
region:
|
|
14
|
+
word: 'belegug',
|
|
15
|
+
category: 'insult',
|
|
16
|
+
region: 'sunda',
|
|
17
17
|
severity: 0.5,
|
|
18
|
-
aliases: [
|
|
19
|
-
description:
|
|
20
|
-
context:
|
|
18
|
+
aliases: ['belecuk', 'beledog'],
|
|
19
|
+
description: 'Kata yang mengacu pada kebodohan seseorang',
|
|
20
|
+
context: 'Hinaan untuk menyebut orang yang dianggap tidak pintar',
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
word:
|
|
24
|
-
category:
|
|
25
|
-
region:
|
|
23
|
+
word: 'goblog',
|
|
24
|
+
category: 'insult',
|
|
25
|
+
region: 'sunda',
|
|
26
26
|
severity: 0.6,
|
|
27
|
-
aliases: [
|
|
28
|
-
description:
|
|
29
|
-
context:
|
|
27
|
+
aliases: ['goblok', 'golbok'],
|
|
28
|
+
description: 'Kata yang mengacu pada kebodohan seseorang',
|
|
29
|
+
context: 'Hinaan untuk menyebut orang yang dianggap tidak pintar',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
word: 'aing',
|
|
33
|
+
category: 'insult',
|
|
34
|
+
region: 'sunda',
|
|
35
|
+
severity: 0.3,
|
|
36
|
+
aliases: [],
|
|
37
|
+
description: 'Kata ganti orang pertama yang kasar',
|
|
38
|
+
context: 'Digunakan saat berbicara dengan teman dekat, tapi termasuk kasar',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
word: 'sia',
|
|
42
|
+
category: 'insult',
|
|
43
|
+
region: 'sunda',
|
|
44
|
+
severity: 0.3,
|
|
45
|
+
aliases: ['silaing'],
|
|
46
|
+
description: 'Kata ganti orang kedua yang kasar',
|
|
47
|
+
context: "Digunakan sebagai pengganti 'kamu' dalam bentuk kasar",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
word: 'anjing',
|
|
51
|
+
category: 'profanity',
|
|
52
|
+
region: 'sunda',
|
|
53
|
+
severity: 0.8,
|
|
54
|
+
aliases: ['anying'],
|
|
55
|
+
description: 'Kata umpatan yang sangat umum',
|
|
56
|
+
context: 'Digunakan dalam berbagai konteks: marah, kaget, bahkan kagum',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
word: 'anjir',
|
|
60
|
+
category: 'profanity',
|
|
61
|
+
region: 'sunda',
|
|
62
|
+
severity: 0.6,
|
|
63
|
+
aliases: [],
|
|
64
|
+
description: 'Turunan dari kata anjing yang lebih halus',
|
|
65
|
+
context: 'Digunakan saat kesal, marah, terpesona',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
word: 'kehed',
|
|
69
|
+
category: 'insult',
|
|
70
|
+
region: 'sunda',
|
|
71
|
+
severity: 0.6,
|
|
72
|
+
aliases: [],
|
|
73
|
+
description: 'Sialan',
|
|
74
|
+
context: 'Digunakan sebagai ungkapan kekesalan',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
word: 'modar',
|
|
78
|
+
category: 'profanity',
|
|
79
|
+
region: 'sunda',
|
|
80
|
+
severity: 0.7,
|
|
81
|
+
aliases: [],
|
|
82
|
+
description: 'Secara harfiah berarti mati',
|
|
83
|
+
context: 'Digunakan sebagai ungkapan kemarahan atau ancaman',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
word: 'koplok',
|
|
87
|
+
category: 'insult',
|
|
88
|
+
region: 'sunda',
|
|
89
|
+
severity: 0.6,
|
|
90
|
+
aliases: [],
|
|
91
|
+
description: 'Setara dengan kata goblok',
|
|
92
|
+
context: 'Digunakan sebagai kata umpatan untuk menyebut orang bodoh',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
word: 'beungeut',
|
|
96
|
+
category: 'insult',
|
|
97
|
+
region: 'sunda',
|
|
98
|
+
severity: 0.5,
|
|
99
|
+
aliases: [],
|
|
100
|
+
description: 'Kata kasar untuk muka/wajah',
|
|
101
|
+
context: 'Digunakan untuk menghina wajah seseorang',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
word: 'lebok',
|
|
105
|
+
category: 'insult',
|
|
106
|
+
region: 'sunda',
|
|
107
|
+
severity: 0.5,
|
|
108
|
+
aliases: [],
|
|
109
|
+
description: 'Kata kasar untuk makan',
|
|
110
|
+
context: "Digunakan dalam konteks 'rasakan' atau 'makan tuh'",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
word: 'ontohod',
|
|
114
|
+
category: 'insult',
|
|
115
|
+
region: 'sunda',
|
|
116
|
+
severity: 0.5,
|
|
117
|
+
aliases: [],
|
|
118
|
+
description: 'Kata yang mengacu pada kebodohan seseorang',
|
|
119
|
+
context: 'Populer dari cerita Kabayan sebagai ungkapan untuk orang bodoh',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
word: 'ngajedog',
|
|
123
|
+
category: 'insult',
|
|
124
|
+
region: 'sunda',
|
|
125
|
+
severity: 0.4,
|
|
126
|
+
aliases: [],
|
|
127
|
+
description: "Bentuk kasar dari 'diam'",
|
|
128
|
+
context: 'Digunakan untuk menyuruh seseorang diam dengan kasar',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
word: 'halik',
|
|
132
|
+
category: 'insult',
|
|
133
|
+
region: 'sunda',
|
|
134
|
+
severity: 0.5,
|
|
135
|
+
aliases: [],
|
|
136
|
+
description: "Bentuk kasar dari 'awas'",
|
|
137
|
+
context: 'Digunakan untuk menggertak atau mengusir orang',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
word: 'sungut',
|
|
141
|
+
category: 'insult',
|
|
142
|
+
region: 'sunda',
|
|
143
|
+
severity: 0.5,
|
|
144
|
+
aliases: ['babangus'],
|
|
145
|
+
description: 'Kata kasar untuk mulut',
|
|
146
|
+
context: 'Digunakan untuk menghina cara bicara seseorang',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
word: 'belekok',
|
|
150
|
+
category: 'insult',
|
|
151
|
+
region: 'sunda',
|
|
152
|
+
severity: 0.5,
|
|
153
|
+
aliases: [],
|
|
154
|
+
description: 'Kata yang mengacu pada kebodohan seseorang',
|
|
155
|
+
context: 'Serupa dengan belegug atau goblok',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
word: 'boloho',
|
|
159
|
+
category: 'insult',
|
|
160
|
+
region: 'sunda',
|
|
161
|
+
severity: 0.4,
|
|
162
|
+
aliases: [],
|
|
163
|
+
description: 'Kata yang mengacu pada kebodohan seseorang',
|
|
164
|
+
context: 'Versi lebih halus dari kata bodoh',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
word: 'bebel',
|
|
168
|
+
category: 'insult',
|
|
169
|
+
region: 'sunda',
|
|
170
|
+
severity: 0.5,
|
|
171
|
+
aliases: [],
|
|
172
|
+
description: 'Setara dengan kehed',
|
|
173
|
+
context: 'Digunakan untuk mengekspresikan kekesalan',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
word: 'hakan',
|
|
177
|
+
category: 'insult',
|
|
178
|
+
region: 'sunda',
|
|
179
|
+
severity: 0.5,
|
|
180
|
+
aliases: [],
|
|
181
|
+
description: 'Kata kasar untuk makan',
|
|
182
|
+
context: "Digunakan dalam konteks 'rasakan' atau 'makan tuh'",
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
word: 'bagoy',
|
|
186
|
+
category: 'insult',
|
|
187
|
+
region: 'sunda',
|
|
188
|
+
severity: 0.5,
|
|
189
|
+
aliases: [],
|
|
190
|
+
description: 'Turunan dari kata Bagong',
|
|
191
|
+
context: 'Umum digunakan di Priangan Barat seperti Cianjur dan Sukabumi',
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
word: 'pehul',
|
|
195
|
+
category: 'insult',
|
|
196
|
+
region: 'sunda',
|
|
197
|
+
severity: 0.6,
|
|
198
|
+
aliases: ['peot hulu'],
|
|
199
|
+
description: "Akronim dari 'peot hulu', menghina seseorang tidak punya otak",
|
|
200
|
+
context: 'Digunakan untuk menghina kecerdasan seseorang',
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
word: 'pamatuk',
|
|
204
|
+
category: 'insult',
|
|
205
|
+
region: 'sunda',
|
|
206
|
+
severity: 0.5,
|
|
207
|
+
aliases: [],
|
|
208
|
+
description: 'Paruh pada unggas',
|
|
209
|
+
context: 'Digunakan untuk mengumpat orang yang banyak bicara',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
word: 'itil',
|
|
213
|
+
category: 'sexual',
|
|
214
|
+
region: 'sunda',
|
|
215
|
+
severity: 0.9,
|
|
216
|
+
aliases: [],
|
|
217
|
+
description: 'Kata sangat kasar untuk alat kelamin perempuan',
|
|
218
|
+
context: 'Kata vulgar yang sangat tabu',
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
word: 'nyingkah',
|
|
222
|
+
category: 'insult',
|
|
223
|
+
region: 'sunda',
|
|
224
|
+
severity: 0.5,
|
|
225
|
+
aliases: [],
|
|
226
|
+
description: 'Cara kasar untuk menyuruh pergi',
|
|
227
|
+
context: 'Digunakan untuk mengusir orang',
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
word: 'mantog',
|
|
231
|
+
category: 'insult',
|
|
232
|
+
region: 'sunda',
|
|
233
|
+
severity: 0.4,
|
|
234
|
+
aliases: [],
|
|
235
|
+
description: 'Kata kasar untuk pulang',
|
|
236
|
+
context: 'Biasanya diucapkan orang tua kepada anak yang tak kunjung pulang',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
word: 'cungur',
|
|
240
|
+
category: 'insult',
|
|
241
|
+
region: 'sunda',
|
|
242
|
+
severity: 0.6,
|
|
243
|
+
aliases: [],
|
|
244
|
+
description: 'Kata kasar untuk mulut',
|
|
245
|
+
context: 'Digunakan untuk menghina cara bicara seseorang',
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
word: 'bangkawarah',
|
|
249
|
+
category: 'insult',
|
|
250
|
+
region: 'sunda',
|
|
251
|
+
severity: 0.6,
|
|
252
|
+
aliases: ['si bangkawarah'],
|
|
253
|
+
description: 'Sebutan untuk orang yang nakal keterlaluan',
|
|
254
|
+
context: 'Menunjukkan orang yang tidak mendapat pendidikan baik',
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
word: 'bolokotondo',
|
|
258
|
+
category: 'insult',
|
|
259
|
+
region: 'sunda',
|
|
260
|
+
severity: 0.6,
|
|
261
|
+
aliases: [],
|
|
262
|
+
description: 'Kutu, dipakai sebagai kata kasar',
|
|
263
|
+
context: "Seperti 'bangsat' dalam bahasa Indonesia",
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
word: 'babatok',
|
|
267
|
+
category: 'insult',
|
|
268
|
+
region: 'sunda',
|
|
269
|
+
severity: 0.5,
|
|
270
|
+
aliases: [],
|
|
271
|
+
description: 'Tempurung kepala',
|
|
272
|
+
context: 'Digunakan untuk menghina kecerdasan seseorang',
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
word: 'polo',
|
|
276
|
+
category: 'insult',
|
|
277
|
+
region: 'sunda',
|
|
278
|
+
severity: 0.6,
|
|
279
|
+
aliases: [],
|
|
280
|
+
description: 'Otak secara fisik',
|
|
281
|
+
context: 'Dikatakan untuk isi kepala binatang, kasar jika untuk manusia',
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
word: 'gubug',
|
|
285
|
+
category: 'insult',
|
|
286
|
+
region: 'sunda',
|
|
287
|
+
severity: 0.4,
|
|
288
|
+
aliases: ['ngagubug'],
|
|
289
|
+
description: 'Mengambil tanpa permisi',
|
|
290
|
+
context: 'Menuduh seseorang mengambil barang tanpa ijin',
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
word: 'padog',
|
|
294
|
+
category: 'insult',
|
|
295
|
+
region: 'sunda',
|
|
296
|
+
severity: 0.5,
|
|
297
|
+
aliases: ['madog'],
|
|
298
|
+
description: 'Mencuri',
|
|
299
|
+
context: 'Kata kasar yang menuduh seseorang mencuri',
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
word: 'kokod',
|
|
303
|
+
category: 'insult',
|
|
304
|
+
region: 'sunda',
|
|
305
|
+
severity: 0.4,
|
|
306
|
+
aliases: [],
|
|
307
|
+
description: 'Kata kasar untuk tangan',
|
|
308
|
+
context: 'Digunakan untuk memarahi orang yang tidak sopan menggunakan tangan',
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
word: 'cokor',
|
|
312
|
+
category: 'insult',
|
|
313
|
+
region: 'sunda',
|
|
314
|
+
severity: 0.4,
|
|
315
|
+
aliases: [],
|
|
316
|
+
description: 'Kata kasar untuk kaki',
|
|
317
|
+
context: 'Digunakan untuk memarahi orang yang tidak sopan menggunakan kaki',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
word: 'nyatu',
|
|
321
|
+
category: 'insult',
|
|
322
|
+
region: 'sunda',
|
|
323
|
+
severity: 0.4,
|
|
324
|
+
aliases: [],
|
|
325
|
+
description: 'Kata kasar untuk makan',
|
|
326
|
+
context: 'Seperti cara makan hewan, sangat kasar jika untuk manusia',
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
word: 'lolodok',
|
|
330
|
+
category: 'insult',
|
|
331
|
+
region: 'sunda',
|
|
332
|
+
severity: 0.5,
|
|
333
|
+
aliases: [],
|
|
334
|
+
description: 'Makan dengan cara berisik',
|
|
335
|
+
context: 'Menghina cara makan seseorang yang seperti unggas',
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
word: 'soblog',
|
|
339
|
+
category: 'insult',
|
|
340
|
+
region: 'sunda',
|
|
341
|
+
severity: 0.6,
|
|
342
|
+
aliases: [],
|
|
343
|
+
description: 'Turunan dari goblog atau goblok',
|
|
344
|
+
context: 'Digunakan sebagai penghinaan untuk menyebut orang bodoh',
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
word: 'heunceut beureum',
|
|
348
|
+
category: 'sexual',
|
|
349
|
+
region: 'sunda',
|
|
350
|
+
severity: 1.0,
|
|
351
|
+
aliases: [],
|
|
352
|
+
description: 'Kata yang sangat vulgar dan tabu',
|
|
353
|
+
context: 'Sangat tidak pantas diucapkan di tempat umum',
|
|
30
354
|
},
|
|
31
355
|
];
|
|
32
356
|
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { ProfanityWord } from
|
|
2
|
-
import { sexualWords } from
|
|
3
|
-
import { insultWords } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { ProfanityWord } from '../types';
|
|
2
|
+
import { sexualWords } from './categories/sexual';
|
|
3
|
+
import { insultWords } from './categories/insult';
|
|
4
|
+
import { profanityWords } from './categories/profanity';
|
|
5
|
+
import { slurWords } from './categories/slur';
|
|
6
|
+
import { drugsWords } from './categories/drugs';
|
|
7
|
+
import { disgustingWords } from './categories/disgusting';
|
|
8
|
+
import { blasphemyWords } from './categories/blasphemy';
|
|
9
9
|
|
|
10
|
-
import { general, generalWords } from
|
|
11
|
-
import { jawa, jawaWords } from
|
|
12
|
-
import { sunda, sundaWords } from
|
|
13
|
-
import { betawi, betawiWords } from
|
|
14
|
-
import { batak, batakWords } from
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
import { general, generalWords } from './regions/general';
|
|
11
|
+
import { jawa, jawaWords } from './regions/jawa';
|
|
12
|
+
import { sunda, sundaWords } from './regions/sunda';
|
|
13
|
+
import { betawi, betawiWords } from './regions/betawi';
|
|
14
|
+
import { batak, batakWords } from './regions/batak';
|
|
15
|
+
import { minang, minangWords } from './regions/minang';
|
|
16
|
+
import { bali, baliWords } from './regions/bali';
|
|
17
|
+
import { madura, maduraWords } from './regions/madura';
|
|
18
18
|
// import { bugis, bugisWords } from './regions/bugis';
|
|
19
|
-
|
|
19
|
+
import { aceh, acehWords } from './regions/aceh';
|
|
20
20
|
// import { ambon, ambonWords } from './regions/ambon';
|
|
21
21
|
// import { papua, papuaWords } from './regions/papua';
|
|
22
22
|
// import { manado, manadoWords } from './regions/manado';
|
|
@@ -29,11 +29,11 @@ import { batak, batakWords } from "./regions/batak";
|
|
|
29
29
|
export const wordCategories = {
|
|
30
30
|
sexual: sexualWords,
|
|
31
31
|
insult: insultWords,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
profanity: profanityWords,
|
|
33
|
+
slur: slurWords,
|
|
34
|
+
drugs: drugsWords,
|
|
35
|
+
disgusting: disgustingWords,
|
|
36
|
+
blasphemy: blasphemyWords,
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
export const wordRegions = {
|
|
@@ -42,11 +42,11 @@ export const wordRegions = {
|
|
|
42
42
|
sunda: sundaWords,
|
|
43
43
|
betawi: betawiWords,
|
|
44
44
|
batak: batakWords,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
minang: minangWords,
|
|
46
|
+
bali: baliWords,
|
|
47
|
+
madura: maduraWords,
|
|
48
48
|
// bugis: bugisWords,
|
|
49
|
-
|
|
49
|
+
aceh: acehWords,
|
|
50
50
|
// ambon: ambonWords,
|
|
51
51
|
// papua: papuaWords,
|
|
52
52
|
// manado: manadoWords,
|
|
@@ -63,11 +63,11 @@ export const wordObjects: ProfanityWord[] = [
|
|
|
63
63
|
...sunda,
|
|
64
64
|
...betawi,
|
|
65
65
|
...batak,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
...minang,
|
|
67
|
+
...bali,
|
|
68
|
+
...madura,
|
|
69
69
|
// ...bugis,
|
|
70
|
-
|
|
70
|
+
...aceh,
|
|
71
71
|
// ...ambon,
|
|
72
72
|
// ...papua,
|
|
73
73
|
// ...manado,
|
|
@@ -122,10 +122,7 @@ export function getWordMetadata(word: string): ProfanityWord | undefined {
|
|
|
122
122
|
return wordObjects.find(
|
|
123
123
|
(item) =>
|
|
124
124
|
item.word.toLowerCase() === word.toLowerCase() ||
|
|
125
|
-
(item.aliases &&
|
|
126
|
-
item.aliases.some(
|
|
127
|
-
(alias) => alias.toLowerCase() === word.toLowerCase(),
|
|
128
|
-
)),
|
|
125
|
+
(item.aliases && item.aliases.some((alias) => alias.toLowerCase() === word.toLowerCase()))
|
|
129
126
|
);
|
|
130
127
|
}
|
|
131
128
|
|
package/src/core/analyzer.ts
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
FilterOptions,
|
|
3
|
-
AnalysisResult,
|
|
4
|
-
ProfanityCategory,
|
|
5
|
-
Region,
|
|
6
|
-
} from "../types";
|
|
1
|
+
import { FilterOptions, AnalysisResult, ProfanityCategory, Region } from '../types';
|
|
7
2
|
import {
|
|
8
3
|
findProfanity,
|
|
9
4
|
findProfanityWithMetadata,
|
|
10
5
|
findCategories,
|
|
11
6
|
findRegions,
|
|
12
7
|
calculateSeverity,
|
|
13
|
-
} from
|
|
14
|
-
import { splitIntoSentences } from
|
|
8
|
+
} from './matcher';
|
|
9
|
+
import { splitIntoSentences } from '../utils/stringUtils';
|
|
15
10
|
import {
|
|
16
11
|
findPossibleProfanityBySimiliarity,
|
|
17
12
|
findProfanityByLevenshteinDistance,
|
|
18
|
-
} from
|
|
19
|
-
import { createContextRegex } from
|
|
20
|
-
import { DEFAULT_OPTIONS } from
|
|
13
|
+
} from '../utils/similarityUtils';
|
|
14
|
+
import { createContextRegex } from '../utils/regexUtils';
|
|
15
|
+
import { DEFAULT_OPTIONS } from '../config/options';
|
|
21
16
|
|
|
22
17
|
/**
|
|
23
18
|
* Menganalisis teks untuk kata kotor
|
|
@@ -26,10 +21,7 @@ import { DEFAULT_OPTIONS } from "../config/options";
|
|
|
26
21
|
* @param options Opsi untuk analisis
|
|
27
22
|
* @return AnalysisResult dengan hasil analisis
|
|
28
23
|
*/
|
|
29
|
-
export function analyze(
|
|
30
|
-
text: string,
|
|
31
|
-
options: FilterOptions = {},
|
|
32
|
-
): AnalysisResult {
|
|
24
|
+
export function analyze(text: string, options: FilterOptions = {}): AnalysisResult {
|
|
33
25
|
const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
|
|
34
26
|
|
|
35
27
|
const matches = findProfanity(text, mergedOptions);
|
|
@@ -65,7 +57,7 @@ export function analyze(
|
|
|
65
57
|
text,
|
|
66
58
|
wordList,
|
|
67
59
|
mergedOptions.similarityThreshold || 0.8,
|
|
68
|
-
mergedOptions.maxLevenshteinDistance || 2
|
|
60
|
+
mergedOptions.maxLevenshteinDistance || 2
|
|
69
61
|
);
|
|
70
62
|
|
|
71
63
|
similarWords = levenshteinResults.map((item) => ({
|
|
@@ -77,7 +69,7 @@ export function analyze(
|
|
|
77
69
|
similarWords = findPossibleProfanityBySimiliarity(
|
|
78
70
|
text,
|
|
79
71
|
wordList,
|
|
80
|
-
mergedOptions.similarityThreshold || 0.8
|
|
72
|
+
mergedOptions.similarityThreshold || 0.8
|
|
81
73
|
);
|
|
82
74
|
}
|
|
83
75
|
}
|
|
@@ -103,7 +95,7 @@ export function analyze(
|
|
|
103
95
|
*/
|
|
104
96
|
export function batchAnalyze(
|
|
105
97
|
texts: string[],
|
|
106
|
-
options: FilterOptions = {}
|
|
98
|
+
options: FilterOptions = {}
|
|
107
99
|
): {
|
|
108
100
|
totalTexts: number;
|
|
109
101
|
profaneTexts: number;
|
|
@@ -116,10 +108,7 @@ export function batchAnalyze(
|
|
|
116
108
|
const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
|
|
117
109
|
const results = texts.map((text) => analyze(text, mergedOptions));
|
|
118
110
|
const profaneTexts = results.filter((result) => result.hasProfanity).length;
|
|
119
|
-
const totalSeverity = results.reduce(
|
|
120
|
-
(sum, result) => sum + result.severityScore,
|
|
121
|
-
0,
|
|
122
|
-
);
|
|
111
|
+
const totalSeverity = results.reduce((sum, result) => sum + result.severityScore, 0);
|
|
123
112
|
const averageSeverity = profaneTexts > 0 ? totalSeverity / profaneTexts : 0;
|
|
124
113
|
const allCategories = results.flatMap((result) => result.categories);
|
|
125
114
|
const categoryCount: Record<string, number> = {};
|
|
@@ -175,7 +164,7 @@ export function batchAnalyze(
|
|
|
175
164
|
*/
|
|
176
165
|
export function analyzeBySentence(
|
|
177
166
|
text: string,
|
|
178
|
-
options: FilterOptions = {}
|
|
167
|
+
options: FilterOptions = {}
|
|
179
168
|
): Array<AnalysisResult & { sentence: string }> {
|
|
180
169
|
const sentences = splitIntoSentences(text);
|
|
181
170
|
const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
|
|
@@ -201,7 +190,7 @@ export function analyzeBySentence(
|
|
|
201
190
|
export function analyzeWithContext(
|
|
202
191
|
text: string,
|
|
203
192
|
contextWindowSize: number = 5,
|
|
204
|
-
options: FilterOptions = {}
|
|
193
|
+
options: FilterOptions = {}
|
|
205
194
|
): Array<{
|
|
206
195
|
word: string;
|
|
207
196
|
context: string;
|
|
@@ -221,9 +210,9 @@ export function analyzeWithContext(
|
|
|
221
210
|
|
|
222
211
|
let match;
|
|
223
212
|
while ((match = regex.exec(text)) !== null) {
|
|
224
|
-
const beforeContext = match[1] ||
|
|
213
|
+
const beforeContext = match[1] || '';
|
|
225
214
|
const wordMatch = match[2];
|
|
226
|
-
const afterContext = match[3] ||
|
|
215
|
+
const afterContext = match[3] || '';
|
|
227
216
|
|
|
228
217
|
result.push({
|
|
229
218
|
word: wordMatch,
|