@sideid/id-profanity-filter 1.0.0 → 1.9.4
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/package.json +1 -2
- package/src/config/options.ts +178 -0
- package/src/constants/categories/index.ts +31 -31
- package/src/constants/categories/insult.ts +114 -114
- package/src/constants/categories/sexual.ts +99 -100
- package/src/constants/regions/batak.ts +17 -17
- package/src/constants/regions/betawi.ts +39 -39
- package/src/constants/regions/general.ts +111 -111
- package/src/constants/regions/index.ts +62 -62
- package/src/constants/regions/jawa.ts +102 -102
- package/src/constants/regions/sunda.ts +35 -35
- package/src/constants/wordList.ts +125 -125
- package/src/core/analyzer.ts +225 -204
- package/src/core/filter.ts +129 -129
- package/src/core/matcher.ts +259 -267
- package/src/index.ts +188 -133
- package/src/types/index.ts +88 -115
- package/src/utils/regexUtils.ts +203 -0
- package/src/utils/similarityUtils.ts +195 -0
- package/src/utils/stringUtils.ts +213 -0
- package/tsconfig.json +1 -1
- /package/{jest.config.js → jest.config.mjs} +0 -0
- /package/{rollup.config.js → rollup.config.mjs} +0 -0
|
@@ -1,100 +1,99 @@
|
|
|
1
|
-
import { ProfanityWord } from
|
|
2
|
-
import { general } from
|
|
3
|
-
import { jawa } from
|
|
4
|
-
import { sunda } from
|
|
5
|
-
import { betawi } from
|
|
6
|
-
|
|
7
|
-
export const sexual: ProfanityWord[] = [
|
|
8
|
-
...general.filter((word) => word.category ===
|
|
9
|
-
...jawa.filter((word) => word.category ===
|
|
10
|
-
...sunda.filter((word) => word.category ===
|
|
11
|
-
...betawi.filter((word) => word.category ===
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
export default sexual;
|
|
1
|
+
import { ProfanityWord } from "../../types";
|
|
2
|
+
import { general } from "../regions/general";
|
|
3
|
+
import { jawa } from "../regions/jawa";
|
|
4
|
+
import { sunda } from "../regions/sunda";
|
|
5
|
+
import { betawi } from "../regions/betawi";
|
|
6
|
+
|
|
7
|
+
export const sexual: ProfanityWord[] = [
|
|
8
|
+
...general.filter((word) => word.category === "sexual"),
|
|
9
|
+
...jawa.filter((word) => word.category === "sexual"),
|
|
10
|
+
...sunda.filter((word) => word.category === "sexual"),
|
|
11
|
+
...betawi.filter((word) => word.category === "sexual"),
|
|
12
|
+
{
|
|
13
|
+
word: "bokep",
|
|
14
|
+
category: "sexual",
|
|
15
|
+
region: "general",
|
|
16
|
+
severity: 0.7,
|
|
17
|
+
aliases: ["bkp", "bokap"],
|
|
18
|
+
description: "Istilah untuk video atau konten pornografi",
|
|
19
|
+
context: "Kata yang mengacu pada materi pornografi",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
word: "coli",
|
|
23
|
+
category: "sexual",
|
|
24
|
+
region: "general",
|
|
25
|
+
severity: 0.8,
|
|
26
|
+
aliases: ["col", "coly"],
|
|
27
|
+
description: "Istilah untuk masturbasi laki-laki",
|
|
28
|
+
context: "Kata vulgar yang merujuk pada aktivitas seksual pribadi",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
word: "desah",
|
|
32
|
+
category: "sexual",
|
|
33
|
+
region: "general",
|
|
34
|
+
severity: 0.6,
|
|
35
|
+
aliases: ["ds4h", "dsh"],
|
|
36
|
+
description: "Istilah untuk suara yang dibuat selama aktivitas seksual",
|
|
37
|
+
context: "Dapat menjadi vulgar tergantung konteks penggunaan",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
word: "seks",
|
|
41
|
+
category: "sexual",
|
|
42
|
+
region: "general",
|
|
43
|
+
severity: 0.5,
|
|
44
|
+
aliases: ["sex", "ML"],
|
|
45
|
+
description: "Istilah untuk aktivitas seksual",
|
|
46
|
+
context: "Dapat menjadi vulgar tergantung konteks penggunaan",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
word: "itil",
|
|
50
|
+
category: "sexual",
|
|
51
|
+
region: "general",
|
|
52
|
+
severity: 0.9,
|
|
53
|
+
aliases: ["itl", "itul"],
|
|
54
|
+
description:
|
|
55
|
+
"Kata vulgar yang mengacu pada bagian dari alat kelamin perempuan",
|
|
56
|
+
context: "Kata vulgar yang merujuk pada anatomi seksual",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
word: "kondom",
|
|
60
|
+
category: "sexual",
|
|
61
|
+
region: "general",
|
|
62
|
+
severity: 0.5,
|
|
63
|
+
aliases: ["kndm", "kondom", "cd"],
|
|
64
|
+
description: "Alat kontrasepsi",
|
|
65
|
+
context: "Dapat menjadi vulgar tergantung konteks penggunaan",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
word: "ngewe",
|
|
69
|
+
category: "sexual",
|
|
70
|
+
region: "general",
|
|
71
|
+
severity: 0.9,
|
|
72
|
+
aliases: ["ngew", "we"],
|
|
73
|
+
description: "Istilah kasar untuk aktivitas seksual",
|
|
74
|
+
context: "Kata vulgar yang merujuk pada aktivitas seksual",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
word: "puki",
|
|
78
|
+
category: "sexual",
|
|
79
|
+
region: "general",
|
|
80
|
+
severity: 0.9,
|
|
81
|
+
aliases: ["puk", "pukih"],
|
|
82
|
+
description: "Kata vulgar yang mengacu pada alat kelamin perempuan",
|
|
83
|
+
context: "Kata vulgar yang merujuk pada anatomi seksual",
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
word: "xxx",
|
|
87
|
+
category: "sexual",
|
|
88
|
+
region: "general",
|
|
89
|
+
severity: 0.6,
|
|
90
|
+
aliases: ["xXx", "triplex"],
|
|
91
|
+
description:
|
|
92
|
+
"Simbol yang sering digunakan untuk menandai konten pornografi",
|
|
93
|
+
context: "Digunakan untuk menandai konten seksual eksplisit",
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
export const sexualWords = sexual.map((item) => item.word);
|
|
98
|
+
|
|
99
|
+
export default sexual;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { ProfanityWord } from
|
|
2
|
-
|
|
3
|
-
export const batak: ProfanityWord[] = [
|
|
4
|
-
{
|
|
5
|
-
word:
|
|
6
|
-
category:
|
|
7
|
-
region:
|
|
8
|
-
severity: 0.8,
|
|
9
|
-
aliases: [
|
|
10
|
-
description:
|
|
11
|
-
context:
|
|
12
|
-
},
|
|
13
|
-
];
|
|
14
|
-
|
|
15
|
-
export const batakWords = batak.map((item) => item.word);
|
|
16
|
-
|
|
17
|
-
export default batak;
|
|
1
|
+
import { ProfanityWord } from "../../types";
|
|
2
|
+
|
|
3
|
+
export const batak: ProfanityWord[] = [
|
|
4
|
+
{
|
|
5
|
+
word: "sundel",
|
|
6
|
+
category: "sexual",
|
|
7
|
+
region: "batak",
|
|
8
|
+
severity: 0.8,
|
|
9
|
+
aliases: ["sundal"],
|
|
10
|
+
description: "Kata kasar untuk menyebut pekerja seks komersial",
|
|
11
|
+
context: "Hinaan kasar untuk wanita",
|
|
12
|
+
},
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
export const batakWords = batak.map((item) => item.word);
|
|
16
|
+
|
|
17
|
+
export default batak;
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { ProfanityWord } from
|
|
2
|
-
|
|
3
|
-
export const betawi: ProfanityWord[] = [
|
|
4
|
-
{
|
|
5
|
-
word:
|
|
6
|
-
category:
|
|
7
|
-
region:
|
|
8
|
-
severity: 0.7,
|
|
9
|
-
aliases: [
|
|
10
|
-
description:
|
|
11
|
-
'Singkatan dari "jarang dibelai", istilah untuk perempuan yang mudah didekati',
|
|
12
|
-
context:
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
word:
|
|
16
|
-
category:
|
|
17
|
-
region:
|
|
18
|
-
severity: 0.5,
|
|
19
|
-
aliases: [
|
|
20
|
-
description:
|
|
21
|
-
|
|
22
|
-
context:
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
word:
|
|
27
|
-
category:
|
|
28
|
-
region:
|
|
29
|
-
severity: 0.7,
|
|
30
|
-
aliases: [
|
|
31
|
-
description:
|
|
32
|
-
|
|
33
|
-
context:
|
|
34
|
-
},
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
export const betawiWords = betawi.map((item) => item.word);
|
|
38
|
-
|
|
39
|
-
export default betawi;
|
|
1
|
+
import { ProfanityWord } from "../../types";
|
|
2
|
+
|
|
3
|
+
export const betawi: ProfanityWord[] = [
|
|
4
|
+
{
|
|
5
|
+
word: "jablay",
|
|
6
|
+
category: "sexual",
|
|
7
|
+
region: "betawi",
|
|
8
|
+
severity: 0.7,
|
|
9
|
+
aliases: ["jabl4y", "jalay"],
|
|
10
|
+
description:
|
|
11
|
+
'Singkatan dari "jarang dibelai", istilah untuk perempuan yang mudah didekati',
|
|
12
|
+
context: "Hinaan yang merendahkan untuk wanita",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
word: "udik",
|
|
16
|
+
category: "insult",
|
|
17
|
+
region: "betawi",
|
|
18
|
+
severity: 0.5,
|
|
19
|
+
aliases: ["kampungan", "ndeso"],
|
|
20
|
+
description:
|
|
21
|
+
"Kata yang mengacu pada seseorang yang dianggap ketinggalan zaman atau tidak modern",
|
|
22
|
+
context:
|
|
23
|
+
"Hinaan untuk menyebut orang yang dianggap tidak modern atau kampungan",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
word: "perek",
|
|
27
|
+
category: "sexual",
|
|
28
|
+
region: "betawi",
|
|
29
|
+
severity: 0.7,
|
|
30
|
+
aliases: ["perempuan eksperimen", "prk"],
|
|
31
|
+
description:
|
|
32
|
+
"Istilah untuk perempuan yang dianggap memiliki moral yang rendah",
|
|
33
|
+
context: "Hinaan yang merendahkan untuk wanita",
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
export const betawiWords = betawi.map((item) => item.word);
|
|
38
|
+
|
|
39
|
+
export default betawi;
|
|
@@ -1,111 +1,111 @@
|
|
|
1
|
-
import { ProfanityWord } from
|
|
2
|
-
|
|
3
|
-
export const general: ProfanityWord[] = [
|
|
4
|
-
{
|
|
5
|
-
word:
|
|
6
|
-
category:
|
|
7
|
-
region:
|
|
8
|
-
severity: 0.7,
|
|
9
|
-
aliases: [
|
|
10
|
-
description:
|
|
11
|
-
context:
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
word:
|
|
15
|
-
category:
|
|
16
|
-
region:
|
|
17
|
-
severity: 0.6,
|
|
18
|
-
aliases: [
|
|
19
|
-
description:
|
|
20
|
-
context:
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
word:
|
|
24
|
-
category:
|
|
25
|
-
region:
|
|
26
|
-
severity: 0.8,
|
|
27
|
-
aliases: [
|
|
28
|
-
description:
|
|
29
|
-
|
|
30
|
-
context:
|
|
31
|
-
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
word:
|
|
35
|
-
category:
|
|
36
|
-
region:
|
|
37
|
-
severity: 0.9,
|
|
38
|
-
aliases: [
|
|
39
|
-
description:
|
|
40
|
-
context:
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
word:
|
|
44
|
-
category:
|
|
45
|
-
region:
|
|
46
|
-
severity: 0.9,
|
|
47
|
-
aliases: [
|
|
48
|
-
description:
|
|
49
|
-
context:
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
word:
|
|
53
|
-
category:
|
|
54
|
-
region:
|
|
55
|
-
severity: 0.5,
|
|
56
|
-
aliases: [
|
|
57
|
-
description:
|
|
58
|
-
context:
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
word:
|
|
62
|
-
category:
|
|
63
|
-
region:
|
|
64
|
-
severity: 0.6,
|
|
65
|
-
aliases: [
|
|
66
|
-
description:
|
|
67
|
-
context:
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
word:
|
|
71
|
-
category:
|
|
72
|
-
region:
|
|
73
|
-
severity: 0.7,
|
|
74
|
-
aliases: [
|
|
75
|
-
description:
|
|
76
|
-
context:
|
|
77
|
-
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
word:
|
|
81
|
-
category:
|
|
82
|
-
region:
|
|
83
|
-
severity: 0.6,
|
|
84
|
-
aliases: [
|
|
85
|
-
description:
|
|
86
|
-
context:
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
word:
|
|
90
|
-
category:
|
|
91
|
-
region:
|
|
92
|
-
severity: 0.7,
|
|
93
|
-
aliases: [
|
|
94
|
-
description:
|
|
95
|
-
context:
|
|
96
|
-
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
word:
|
|
100
|
-
category:
|
|
101
|
-
region:
|
|
102
|
-
severity: 0.5,
|
|
103
|
-
aliases: [
|
|
104
|
-
description:
|
|
105
|
-
context:
|
|
106
|
-
},
|
|
107
|
-
];
|
|
108
|
-
|
|
109
|
-
export const generalWords = general.map((item) => item.word);
|
|
110
|
-
|
|
111
|
-
export default general;
|
|
1
|
+
import { ProfanityWord } from "../../types";
|
|
2
|
+
|
|
3
|
+
export const general: ProfanityWord[] = [
|
|
4
|
+
{
|
|
5
|
+
word: "anjing",
|
|
6
|
+
category: "profanity",
|
|
7
|
+
region: "general",
|
|
8
|
+
severity: 0.7,
|
|
9
|
+
aliases: ["anjay", "anjir", "anying", "njing", "anj"],
|
|
10
|
+
description: "Mengacu pada hewan anjing, digunakan sebagai umpatan",
|
|
11
|
+
context: "Umpatan umum untuk menunjukkan kemarahan atau ketidaksetujuan",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
word: "babi",
|
|
15
|
+
category: "profanity",
|
|
16
|
+
region: "general",
|
|
17
|
+
severity: 0.6,
|
|
18
|
+
aliases: ["bab1", "b4b1"],
|
|
19
|
+
description: "Mengacu pada hewan babi, digunakan sebagai umpatan",
|
|
20
|
+
context: "Umpatan umum untuk menunjukkan kemarahan atau ketidaksetujuan",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
word: "bangsat",
|
|
24
|
+
category: "insult",
|
|
25
|
+
region: "general",
|
|
26
|
+
severity: 0.8,
|
|
27
|
+
aliases: ["bangst", "bngst", "bgst"],
|
|
28
|
+
description:
|
|
29
|
+
"Secara harfiah berarti kutu busuk, digunakan sebagai umpatan untuk menyebut seseorang yang tidak bermoral",
|
|
30
|
+
context:
|
|
31
|
+
"Umpatan kasar untuk menyebut orang yang dianggap jahat atau merugikan",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
word: "kontol",
|
|
35
|
+
category: "sexual",
|
|
36
|
+
region: "general",
|
|
37
|
+
severity: 0.9,
|
|
38
|
+
aliases: ["kntl", "k0ntol", "k0nt0l"],
|
|
39
|
+
description: "Kata vulgar yang mengacu pada alat kelamin laki-laki",
|
|
40
|
+
context: "Umpatan kasar atau istilah vulgar untuk alat kelamin",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
word: "memek",
|
|
44
|
+
category: "sexual",
|
|
45
|
+
region: "general",
|
|
46
|
+
severity: 0.9,
|
|
47
|
+
aliases: ["mmk", "memk"],
|
|
48
|
+
description: "Kata vulgar yang mengacu pada alat kelamin perempuan",
|
|
49
|
+
context: "Umpatan kasar atau istilah vulgar untuk alat kelamin",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
word: "bego",
|
|
53
|
+
category: "insult",
|
|
54
|
+
region: "general",
|
|
55
|
+
severity: 0.5,
|
|
56
|
+
aliases: ["bgo", "begok"],
|
|
57
|
+
description: "Kata yang mengacu pada kebodohan seseorang",
|
|
58
|
+
context: "Hinaan untuk menyebut orang yang dianggap tidak pintar",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
word: "tolol",
|
|
62
|
+
category: "insult",
|
|
63
|
+
region: "general",
|
|
64
|
+
severity: 0.6,
|
|
65
|
+
aliases: ["tll", "tlol"],
|
|
66
|
+
description: "Kata yang mengacu pada kebodohan seseorang",
|
|
67
|
+
context: "Hinaan untuk menyebut orang yang dianggap tidak pintar",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
word: "bajingan",
|
|
71
|
+
category: "insult",
|
|
72
|
+
region: "general",
|
|
73
|
+
severity: 0.7,
|
|
74
|
+
aliases: ["bajingn", "bjgn"],
|
|
75
|
+
description: "Kata yang mengacu pada orang jahat atau tidak bermoral",
|
|
76
|
+
context:
|
|
77
|
+
"Hinaan untuk menyebut orang yang dianggap jahat atau tidak bermoral",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
word: "goblok",
|
|
81
|
+
category: "insult",
|
|
82
|
+
region: "general",
|
|
83
|
+
severity: 0.6,
|
|
84
|
+
aliases: ["gblk", "goblk"],
|
|
85
|
+
description: "Kata yang mengacu pada kebodohan seseorang",
|
|
86
|
+
context: "Hinaan untuk menyebut orang yang dianggap tidak pintar",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
word: "keparat",
|
|
90
|
+
category: "insult",
|
|
91
|
+
region: "general",
|
|
92
|
+
severity: 0.7,
|
|
93
|
+
aliases: ["kprt", "keprat"],
|
|
94
|
+
description: "Kata yang mengacu pada orang jahat atau tidak bermoral",
|
|
95
|
+
context:
|
|
96
|
+
"Hinaan untuk menyebut orang yang dianggap jahat atau tidak bermoral",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
word: "bacot",
|
|
100
|
+
category: "insult",
|
|
101
|
+
region: "general",
|
|
102
|
+
severity: 0.5,
|
|
103
|
+
aliases: ["bcot", "bacot2"],
|
|
104
|
+
description: "Kata yang mengacu pada orang yang banyak bicara",
|
|
105
|
+
context: "Hinaan untuk menyebut orang yang banyak bicara atau cerewet",
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
export const generalWords = general.map((item) => item.word);
|
|
110
|
+
|
|
111
|
+
export default general;
|