@sideid/id-profanity-filter 1.10.5 → 1.11.0

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.
@@ -0,0 +1,139 @@
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 profanity: ProfanityWord[] = [
8
+ ...general.filter((word) => word.category === "profanity"),
9
+ ...jawa.filter((word) => word.category === "profanity"),
10
+ ...sunda.filter((word) => word.category === "profanity"),
11
+ ...betawi.filter((word) => word.category === "profanity"),
12
+
13
+ {
14
+ word: "anjing",
15
+ category: "profanity",
16
+ region: "general",
17
+ severity: 0.9,
18
+ aliases: ["anjir", "anying", "njing", "njir"],
19
+ description: "Kata umpatan yang mengacu pada hewan anjing",
20
+ context: "Digunakan sebagai ekspresi kemarahan atau frustasi",
21
+ },
22
+ {
23
+ word: "babi",
24
+ category: "profanity",
25
+ region: "general",
26
+ severity: 0.8,
27
+ aliases: ["babik", "khinzir"],
28
+ description: "Kata umpatan yang mengacu pada hewan babi",
29
+ context:
30
+ "Digunakan untuk mengekspresikan kemarahan atau menghina seseorang",
31
+ },
32
+ {
33
+ word: "bangsat",
34
+ category: "profanity",
35
+ region: "general",
36
+ severity: 0.8,
37
+ aliases: ["bgst", "bangst"],
38
+ description: "Kata umpatan kasar yang berarti kutu atau parasit",
39
+ context: "Digunakan untuk menunjukkan kemarahan atau menghina seseorang",
40
+ },
41
+ {
42
+ word: "kampret",
43
+ category: "profanity",
44
+ region: "general",
45
+ severity: 0.7,
46
+ aliases: ["kampret lu", "kampretot"],
47
+ description: "Kata umpatan yang mengacu pada jenis kelelawar kecil",
48
+ context: "Digunakan untuk mengungkapkan kekesalan atau menghina seseorang",
49
+ },
50
+ {
51
+ word: "sialan",
52
+ category: "profanity",
53
+ region: "general",
54
+ severity: 0.6,
55
+ aliases: ["sial", "siaal"],
56
+ description: "Kata umpatan yang menunjukkan nasib buruk",
57
+ context: "Digunakan untuk mengekspresikan kekesalan atau kemarahan",
58
+ },
59
+ {
60
+ word: "monyet",
61
+ category: "profanity",
62
+ region: "general",
63
+ severity: 0.7,
64
+ aliases: ["monyong", "munyuk"],
65
+ description: "Kata umpatan yang mengacu pada hewan primata",
66
+ context: "Digunakan untuk menghina atau mengekspresikan kemarahan",
67
+ },
68
+ {
69
+ word: "bajingan",
70
+ category: "profanity",
71
+ region: "general",
72
+ severity: 0.8,
73
+ aliases: ["bajinga", "bjngn"],
74
+ description: "Kata umpatan yang berarti penjahat atau orang jahat",
75
+ context:
76
+ "Digunakan untuk mengumpat seseorang yang dianggap buruk perilakunya",
77
+ },
78
+ {
79
+ word: "jancok",
80
+ category: "profanity",
81
+ region: "jawa",
82
+ severity: 0.9,
83
+ aliases: ["jancuk", "jancik", "dancok"],
84
+ description: "Kata umpatan kasar dalam bahasa Jawa",
85
+ context:
86
+ "Umpatan sangat kasar dalam budaya Jawa, menunjukkan kemarahan yang tinggi",
87
+ },
88
+ {
89
+ word: "cuk",
90
+ category: "profanity",
91
+ region: "jawa",
92
+ severity: 0.8,
93
+ aliases: ["cok", "cug"],
94
+ description: "Bentuk singkat dari jancok",
95
+ context:
96
+ "Versi pendek dari umpatan jancok, digunakan dalam percakapan sehari-hari",
97
+ },
98
+ {
99
+ word: "asu",
100
+ category: "profanity",
101
+ region: "jawa",
102
+ severity: 0.8,
103
+ aliases: ["asyu", "su"],
104
+ description: "Kata Jawa untuk anjing, digunakan sebagai umpatan",
105
+ context: "Ekspresi umpatan yang umum di masyarakat Jawa",
106
+ },
107
+ {
108
+ word: "sia",
109
+ category: "profanity",
110
+ region: "sunda",
111
+ severity: 0.6,
112
+ aliases: ["siah", "siaa"],
113
+ description: "Kata ganti orang kedua dalam bahasa Sunda yang kasar",
114
+ context:
115
+ "Menunjukkan ketidakhormatan pada lawan bicara dalam konteks Sunda",
116
+ },
117
+ {
118
+ word: "lu",
119
+ category: "profanity",
120
+ region: "betawi",
121
+ severity: 0.4,
122
+ aliases: ["elu", "lo"],
123
+ description: "Kata ganti orang kedua dalam dialek Betawi",
124
+ context:
125
+ "Dapat dianggap kasar dalam konteks formal atau saat berbicara dengan orang yang lebih tua",
126
+ },
127
+ {
128
+ word: "goblok",
129
+ category: "profanity",
130
+ region: "general",
131
+ severity: 0.7,
132
+ aliases: ["goblog", "goblokk", "bego", "bodoh"],
133
+ description: "Kata umpatan yang menunjukkan kebodohan",
134
+ context: "Digunakan untuk menghina kecerdasan seseorang",
135
+ },
136
+ ];
137
+
138
+ export const profanityWords = profanity.map((item) => item.word);
139
+ export default profanity;
@@ -0,0 +1,102 @@
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 slur: ProfanityWord[] = [
8
+ ...general.filter((word) => word.category === "slur"),
9
+ ...jawa.filter((word) => word.category === "slur"),
10
+ ...sunda.filter((word) => word.category === "slur"),
11
+ ...betawi.filter((word) => word.category === "slur"),
12
+
13
+ {
14
+ word: "cina",
15
+ category: "slur",
16
+ region: "general",
17
+ severity: 0.7,
18
+ aliases: ["cino", "china"],
19
+ description:
20
+ "Sebutan yang dianggap merendahkan untuk orang keturunan Tionghoa",
21
+ context: 'Dianggap tidak sopan dan sebaiknya diganti dengan "Tionghoa"',
22
+ },
23
+ {
24
+ word: "banci",
25
+ category: "slur",
26
+ region: "general",
27
+ severity: 0.7,
28
+ aliases: ["bencong", "waria", "bences"],
29
+ description:
30
+ "Istilah merendahkan untuk transgender atau pria yang dianggap feminin",
31
+ context:
32
+ "Digunakan sebagai hinaan terhadap identitas gender atau ekspresi gender seseorang",
33
+ },
34
+ {
35
+ word: "autis",
36
+ category: "slur",
37
+ region: "general",
38
+ severity: 0.6,
39
+ aliases: ["autis lu", "autisan"],
40
+ description: "Penyalahgunaan kondisi medis sebagai hinaan",
41
+ context:
42
+ "Menggunakan kondisi spektrum autisme sebagai hinaan untuk seseorang yang dianggap aneh",
43
+ },
44
+ {
45
+ word: "londo",
46
+ category: "slur",
47
+ region: "jawa",
48
+ severity: 0.5,
49
+ aliases: ["landa", "landi"],
50
+ description: "Sebutan untuk orang Belanda atau orang berkulit putih",
51
+ context: "Dapat bersifat merendahkan tergantung konteks dan nada bicara",
52
+ },
53
+ {
54
+ word: "keling",
55
+ category: "slur",
56
+ region: "general",
57
+ severity: 0.8,
58
+ aliases: ["kaling", "hitam legam"],
59
+ description: "Istilah merendahkan untuk orang India atau berkulit gelap",
60
+ context: "Dianggap sangat tidak sopan dan bernada rasis",
61
+ },
62
+ {
63
+ word: "cacat",
64
+ category: "slur",
65
+ region: "general",
66
+ severity: 0.7,
67
+ aliases: ["cacad", "difabel"],
68
+ description: "Istilah merendahkan untuk penyandang disabilitas",
69
+ context: "Digunakan sebagai hinaan untuk menunjukkan ketidaksempurnaan",
70
+ },
71
+ {
72
+ word: "gembel",
73
+ category: "slur",
74
+ region: "general",
75
+ severity: 0.6,
76
+ aliases: ["gembul", "gelandangan"],
77
+ description: "Istilah merendahkan untuk orang tidak mampu atau tunawisma",
78
+ context: "Mengandung stigma terhadap kemiskinan dan kelas sosial",
79
+ },
80
+ {
81
+ word: "kampungan",
82
+ category: "slur",
83
+ region: "general",
84
+ severity: 0.5,
85
+ aliases: ["ndeso", "katrok", "udik"],
86
+ description: "Istilah merendahkan untuk orang dari daerah pedesaan",
87
+ context:
88
+ "Menyiratkan seseorang tidak beradab, tidak berpendidikan, atau ketinggalan zaman",
89
+ },
90
+ {
91
+ word: "tolol",
92
+ category: "slur",
93
+ region: "general",
94
+ severity: 0.6,
95
+ aliases: ["tololnya", "tolo"],
96
+ description: "Hinaan terhadap kecerdasan seseorang",
97
+ context: "Digunakan untuk menghina kapasitas mental seseorang",
98
+ },
99
+ ];
100
+
101
+ export const slurWords = slur.map((item) => item.word);
102
+ export default slur;
@@ -14,7 +14,7 @@ export const jawa: ProfanityWord[] = [
14
14
  word: "jancok",
15
15
  category: "sexual",
16
16
  region: "jawa",
17
- severity: 0.8,
17
+ severity: 0.9,
18
18
  aliases: ["jancuk", "jncok", "jancuk", "jncuk", "dancok", "dancuk"],
19
19
  description: "Kata umpatan kasar dalam Bahasa Jawa",
20
20
  context: "Umpatan kasar yang umum digunakan di Jawa Timur",
@@ -52,7 +52,7 @@ export const jawa: ProfanityWord[] = [
52
52
  word: "mbokne ancok",
53
53
  category: "insult",
54
54
  region: "jawa",
55
- severity: 0.8,
55
+ severity: 0.9,
56
56
  aliases: ["mbokne", "mbokneancok"],
57
57
  description: "Umpatan yang menyinggung ibu seseorang",
58
58
  context: "Umpatan kasar yang menyinggung orangtua orang lain",
@@ -61,7 +61,7 @@ export const jawa: ProfanityWord[] = [
61
61
  word: "pekok",
62
62
  category: "insult",
63
63
  region: "jawa",
64
- severity: 0.6,
64
+ severity: 0.7,
65
65
  aliases: ["pekak", "pekilk"],
66
66
  description: "Kata hinaan yang menunjukkan kebodohan",
67
67
  context: "Hinaan untuk menyebut orang yang dianggap sangat bodoh",
@@ -95,6 +95,250 @@ export const jawa: ProfanityWord[] = [
95
95
  context:
96
96
  "Umpatan ringan untuk menanggapi sesuatu yang dianggap tidak benar",
97
97
  },
98
+ {
99
+ word: "kontol",
100
+ category: "sexual",
101
+ region: "jawa",
102
+ severity: 0.8,
103
+ aliases: ["kntl", "kontl"],
104
+ description: "Mengacu ke alat kelamin laki-laki",
105
+ context: "Kata vulgar yang sering digunakan sebagai umpatan kasar",
106
+ },
107
+ {
108
+ word: "tempek",
109
+ category: "sexual",
110
+ region: "jawa",
111
+ severity: 0.8,
112
+ aliases: ["mpek", "torok", "tempk"],
113
+ description: "Mengacu pada alat kelamin perempuan",
114
+ context: "Kata vulgar yang digunakan sebagai umpatan atau hinaan",
115
+ },
116
+ {
117
+ word: "silit",
118
+ category: "insult",
119
+ region: "jawa",
120
+ severity: 0.6,
121
+ aliases: ["selet", "tilis"],
122
+ description: "Mengacu pada bagian dubur atau anus",
123
+ context: "Kata kasar yang digunakan sebagai hinaan",
124
+ },
125
+ {
126
+ word: "mbahmu",
127
+ category: "insult",
128
+ region: "jawa",
129
+ severity: 0.6,
130
+ aliases: ["mbahmu kiper", "mbah mu"],
131
+ description: "Hinaan yang menyinggung nenek/kakek seseorang",
132
+ context: "Umpatan ringan untuk menanggapi sesuatu yang tidak masuk akal",
133
+ },
134
+ {
135
+ word: "makmu",
136
+ category: "insult",
137
+ region: "jawa",
138
+ severity: 0.7,
139
+ aliases: ["mak mu", "mamamu"],
140
+ description: "Hinaan yang menyinggung ibu seseorang",
141
+ context: "Umpatan yang dianggap kasar karena menyinggung orang tua",
142
+ },
143
+ {
144
+ word: "bajingan",
145
+ category: "insult",
146
+ region: "jawa",
147
+ severity: 0.7,
148
+ aliases: [
149
+ "bajilak",
150
+ "bajhingan",
151
+ "bajingak",
152
+ "bajingseng",
153
+ "bajindul",
154
+ "bajigur",
155
+ "jingan",
156
+ ],
157
+ description: "Sebutan untuk orang yang dianggap jahat atau tidak bermoral",
158
+ context: "Umpatan untuk mengekspresikan kemarahan atau kekesalan",
159
+ },
160
+ {
161
+ word: "cocote",
162
+ category: "insult",
163
+ region: "jawa",
164
+ severity: 0.6,
165
+ aliases: ["cocot", "bacot", "nyocot"],
166
+ description: "Mengacu pada mulut dengan konotasi negatif",
167
+ context: "Umpatan untuk menyuruh seseorang berhenti berbicara",
168
+ },
169
+ {
170
+ word: "ngentot",
171
+ category: "sexual",
172
+ region: "jawa",
173
+ severity: 0.9,
174
+ aliases: ["kentu", "kentot", "iclik", "ngtt", "iclk"],
175
+ description: "Mengacu pada aktivitas seksual",
176
+ context: "Kata vulgar yang digunakan sebagai umpatan kasar",
177
+ },
178
+ {
179
+ word: "edan",
180
+ category: "insult",
181
+ region: "jawa",
182
+ severity: 0.5,
183
+ aliases: ["gendeng", "gila", "gendheng", "sarap"],
184
+ description: "Secara harfiah berarti gila atau tidak waras",
185
+ context: "Umpatan untuk menyebut seseorang yang dianggap tidak masuk akal",
186
+ },
187
+ {
188
+ word: "dapuranmu",
189
+ category: "insult",
190
+ region: "jawa",
191
+ severity: 0.6,
192
+ aliases: ["raimu", "rai mu"],
193
+ description: "Secara harfiah mengacu pada wajah atau rupa seseorang",
194
+ context: "Umpatan untuk menghina penampilan atau wajah seseorang",
195
+ },
196
+ {
197
+ word: "damput",
198
+ category: "insult",
199
+ region: "jawa",
200
+ severity: 0.7,
201
+ aliases: ["diamput"],
202
+ description: "Variasi bentuk umpatan dengan makna serupa dengan jancok",
203
+ context: "Umpatan kasar untuk mengekspresikan kemarahan",
204
+ },
205
+ {
206
+ word: "mbathang",
207
+ category: "insult",
208
+ region: "jawa",
209
+ severity: 0.7,
210
+ aliases: ["mbatang"],
211
+ description: "Secara harfiah berarti bangkai",
212
+ context: "Umpatan kasar untuk menghina seseorang",
213
+ },
214
+ {
215
+ word: "ndlogok",
216
+ category: "insult",
217
+ region: "jawa",
218
+ severity: 0.6,
219
+ aliases: ["ndelodok", "ndlodok"],
220
+ description:
221
+ "Mengacu pada tindakan yang dianggap bodoh atau tidak masuk akal",
222
+ context: "Hinaan untuk mengkritik tindakan seseorang",
223
+ },
224
+ {
225
+ word: "nggateli",
226
+ category: "insult",
227
+ region: "jawa",
228
+ severity: 0.5,
229
+ aliases: ["gateli", "gathel"],
230
+ description: "Secara harfiah berarti gatal atau menyebalkan",
231
+ context: "Ungkapan untuk menunjukkan kekesalan terhadap perilaku seseorang",
232
+ },
233
+ {
234
+ word: "perek",
235
+ category: "sexual",
236
+ region: "jawa",
237
+ severity: 0.8,
238
+ aliases: ["lonthe", "pelacur"],
239
+ description: "Istilah merendahkan untuk pekerja seks komersial",
240
+ context: "Kata kasar untuk menghina wanita",
241
+ },
242
+ {
243
+ word: "picek",
244
+ category: "insult",
245
+ region: "jawa",
246
+ severity: 0.6,
247
+ aliases: ["pcek", "buta"],
248
+ description: "Secara harfiah berarti buta atau tidak bisa melihat",
249
+ context: "Hinaan untuk orang yang dianggap tidak bisa melihat kenyataan",
250
+ },
251
+ {
252
+ word: "untumu",
253
+ category: "insult",
254
+ region: "jawa",
255
+ severity: 0.5,
256
+ aliases: ["gigimu", "untu mu"],
257
+ description: "Secara harfiah berarti gigimu",
258
+ context: "Umpatan ringan untuk menanggapi sesuatu yang tidak disetujui",
259
+ },
260
+ {
261
+ word: "goblog",
262
+ category: "insult",
263
+ region: "jawa",
264
+ severity: 0.7,
265
+ aliases: ["ghoblog", "goblok", "gobhlok", "pekok"],
266
+ description: "Kata hinaan yang menunjukkan kebodohan ekstrem",
267
+ context: "Hinaan untuk menyebut seseorang yang dianggap sangat bodoh",
268
+ },
269
+ {
270
+ word: "tolol",
271
+ category: "insult",
272
+ region: "jawa",
273
+ severity: 0.7,
274
+ aliases: ["tholol", "tlol"],
275
+ description: "Kata hinaan yang menunjukkan kebodohan",
276
+ context: "Hinaan untuk menyebut seseorang yang dianggap bodoh",
277
+ },
278
+ {
279
+ word: "budheg",
280
+ category: "insult",
281
+ region: "jawa",
282
+ severity: 0.6,
283
+ aliases: ["budeg", "bdeg"],
284
+ description: "Secara harfiah berarti tuli atau tidak bisa mendengar",
285
+ context: "Hinaan untuk orang yang dianggap tidak mau mendengarkan",
286
+ },
287
+ {
288
+ word: "jiangkrik",
289
+ category: "insult",
290
+ region: "jawa",
291
+ severity: 0.4,
292
+ aliases: ["jiangkrek", "jangkrik"],
293
+ description: "Secara harfiah berarti jangkrik, digunakan sebagai eufemisme",
294
+ context: "Umpatan ringan sebagai pengganti kata kasar yang lebih vulgar",
295
+ },
296
+ {
297
+ word: "diamput",
298
+ category: "insult",
299
+ region: "jawa",
300
+ severity: 0.8,
301
+ aliases: ["damput", "djamput"],
302
+ description: "Bentuk umpatan kasar dengan makna serupa jancok",
303
+ context: "Kata kasar untuk mengekspresikan kemarahan",
304
+ },
305
+ {
306
+ word: "celeng",
307
+ category: "insult",
308
+ region: "jawa",
309
+ severity: 0.6,
310
+ aliases: ["cleng", "babi hutan"],
311
+ description: "Secara harfiah berarti babi hutan",
312
+ context: "Hinaan untuk orang yang dianggap jorok atau rakus",
313
+ },
314
+ {
315
+ word: "kampret",
316
+ category: "insult",
317
+ region: "jawa",
318
+ severity: 0.5,
319
+ aliases: ["kmpret", "kmprt"],
320
+ description: "Secara harfiah berarti kelelawar kecil",
321
+ context: "Umpatan ringan untuk mengekspresikan kekesalan",
322
+ },
323
+ {
324
+ word: "ndeso",
325
+ category: "insult",
326
+ region: "jawa",
327
+ severity: 0.4,
328
+ aliases: ["ndesa", "deso"],
329
+ description: "Secara harfiah berarti dari desa atau kampungan",
330
+ context:
331
+ "Hinaan untuk orang yang dianggap kurang modern atau berpendidikan",
332
+ },
333
+ {
334
+ word: "kere",
335
+ category: "insult",
336
+ region: "jawa",
337
+ severity: 0.5,
338
+ aliases: ["miskin", "mlarat"],
339
+ description: "Secara harfiah berarti miskin atau tidak punya uang",
340
+ context: "Hinaan untuk status ekonomi seseorang yang dianggap rendah",
341
+ },
98
342
  {
99
343
  word: "itil",
100
344
  category: "sexual",
@@ -12,7 +12,10 @@ import {
12
12
  calculateSeverity,
13
13
  } from "./matcher";
14
14
  import { splitIntoSentences } from "../utils/stringUtils";
15
- import { findPossibleProfanityBySimiliarity } from "../utils/similarityUtils";
15
+ import {
16
+ findPossibleProfanityBySimiliarity,
17
+ findProfanityByLevenshteinDistance,
18
+ } from "../utils/similarityUtils";
16
19
  import { createContextRegex } from "../utils/regexUtils";
17
20
  import { DEFAULT_OPTIONS } from "../config/options";
18
21
 
@@ -54,12 +57,30 @@ export function analyze(
54
57
  }> = [];
55
58
 
56
59
  if (mergedOptions.detectSimilarity) {
57
- const wordList = matchDetails.map((word) => word.word);
58
- similarWords = findPossibleProfanityBySimiliarity(
59
- text,
60
- wordList,
61
- mergedOptions.similarityThreshold || 0.8,
62
- );
60
+ if (matchDetails.length > 0) {
61
+ const wordList = matchDetails.map((word) => word.word);
62
+
63
+ if (mergedOptions.useLevenshtein) {
64
+ const levenshteinResults = findProfanityByLevenshteinDistance(
65
+ text,
66
+ wordList,
67
+ mergedOptions.similarityThreshold || 0.8,
68
+ mergedOptions.maxLevenshteinDistance || 2,
69
+ );
70
+
71
+ similarWords = levenshteinResults.map((item) => ({
72
+ word: item.word,
73
+ original: item.original,
74
+ similarity: item.similarity,
75
+ }));
76
+ } else {
77
+ similarWords = findPossibleProfanityBySimiliarity(
78
+ text,
79
+ wordList,
80
+ mergedOptions.similarityThreshold || 0.8,
81
+ );
82
+ }
83
+ }
63
84
  }
64
85
 
65
86
  return {
@@ -13,6 +13,21 @@ import {
13
13
  findProfanityByLevenshteinDistance,
14
14
  } from "../utils/similarityUtils";
15
15
  import { DEFAULT_OPTIONS } from "../config/options";
16
+ import { AhoCorasick } from "../utils/ahoCorasick";
17
+
18
+ const globalAhoCorasick = new AhoCorasick();
19
+ let ahoCorasickInitialized = false;
20
+
21
+ function initializeAhoCorasick(words: string[]) {
22
+ if (ahoCorasickInitialized) return;
23
+
24
+ for (const word of words) {
25
+ globalAhoCorasick.addPattern(word);
26
+ }
27
+
28
+ globalAhoCorasick.build();
29
+ ahoCorasickInitialized = true;
30
+ }
16
31
 
17
32
  interface FindProfanityFunction {
18
33
  (text: string, options?: FilterOptions): string[];
@@ -85,27 +100,19 @@ export function findProfanity(
85
100
  const matches = new Set<string>();
86
101
  const actualMatches = new Map<string, string[]>();
87
102
 
88
- wordsToCheck.forEach((word) => {
89
- const regex = createWordRegex(word, {
90
- wholeWord: !checkSubstring,
91
- caseSensitive: false,
92
- leetSpeak: false,
93
- detectSplit: false,
94
- indonesianVariation: false,
95
- });
103
+ initializeAhoCorasick(wordsToCheck);
96
104
 
97
- let match;
98
- while ((match = regex.exec(normalizedText)) !== null) {
99
- const originalWord =
100
- aliasMap.get(word.toLowerCase()) || word.toLowerCase();
101
- matches.add(originalWord);
105
+ const basicMatches = globalAhoCorasick.searchUnique(normalizedText);
106
+ for (const match of basicMatches) {
107
+ const originalWord =
108
+ aliasMap.get(match.toLowerCase()) || match.toLowerCase();
109
+ matches.add(originalWord);
102
110
 
103
- if (!actualMatches.has(originalWord)) {
104
- actualMatches.set(originalWord, []);
105
- }
106
- actualMatches.get(originalWord)?.push(match[0]);
111
+ if (!actualMatches.has(originalWord)) {
112
+ actualMatches.set(originalWord, []);
107
113
  }
108
- });
114
+ actualMatches.get(originalWord)?.push(match);
115
+ }
109
116
 
110
117
  if (detectLeetSpeak) {
111
118
  wordsToCheck.forEach((word) => {