@sideid/id-profanity-filter 0.1.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.
Files changed (64) hide show
  1. package/.eslintrc.js +16 -0
  2. package/.github/workflows/ci.yml +0 -0
  3. package/CONTRIBUTING.md +151 -0
  4. package/LICENSE +21 -0
  5. package/README.md +285 -0
  6. package/dist/constants/categories/insult.d.ts +4 -0
  7. package/dist/constants/categories/sexual.d.ts +4 -0
  8. package/dist/constants/regions/batak.d.ts +4 -0
  9. package/dist/constants/regions/betawi.d.ts +4 -0
  10. package/dist/constants/regions/general.d.ts +4 -0
  11. package/dist/constants/regions/jawa.d.ts +4 -0
  12. package/dist/constants/regions/sunda.d.ts +4 -0
  13. package/dist/constants/wordList.d.ts +34 -0
  14. package/dist/core/analyzer.d.ts +54 -0
  15. package/dist/core/filter.d.ts +17 -0
  16. package/dist/core/matcher.d.ts +31 -0
  17. package/dist/index.d.ts +71 -0
  18. package/dist/index.esm.js +1014 -0
  19. package/dist/index.esm.js.map +1 -0
  20. package/dist/index.js +1031 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/types/index.d.ts +69 -0
  23. package/examples/basic.ts +52 -0
  24. package/jest.config.js +10 -0
  25. package/package.json +51 -0
  26. package/prettierrc +7 -0
  27. package/rollup.config.js +35 -0
  28. package/src/config/options.ts +0 -0
  29. package/src/constants/categories/blasphemy.ts +0 -0
  30. package/src/constants/categories/disgusting.ts +0 -0
  31. package/src/constants/categories/drugs.ts +0 -0
  32. package/src/constants/categories/index.ts +31 -0
  33. package/src/constants/categories/insult.ts +114 -0
  34. package/src/constants/categories/profanity.ts +0 -0
  35. package/src/constants/categories/sexual.ts +100 -0
  36. package/src/constants/categories/slur.ts +0 -0
  37. package/src/constants/regions/aceh.ts +0 -0
  38. package/src/constants/regions/ambon.ts +0 -0
  39. package/src/constants/regions/bali.ts +0 -0
  40. package/src/constants/regions/banjar.ts +0 -0
  41. package/src/constants/regions/batak.ts +17 -0
  42. package/src/constants/regions/betawi.ts +39 -0
  43. package/src/constants/regions/bugis.ts +0 -0
  44. package/src/constants/regions/general.ts +111 -0
  45. package/src/constants/regions/index.ts +62 -0
  46. package/src/constants/regions/jawa.ts +102 -0
  47. package/src/constants/regions/lampung.ts +0 -0
  48. package/src/constants/regions/madura.ts +0 -0
  49. package/src/constants/regions/manado.ts +0 -0
  50. package/src/constants/regions/minang.ts +0 -0
  51. package/src/constants/regions/ntb.ts +0 -0
  52. package/src/constants/regions/ntt.ts +0 -0
  53. package/src/constants/regions/palembang.ts +0 -0
  54. package/src/constants/regions/papua.ts +0 -0
  55. package/src/constants/regions/sunda.ts +35 -0
  56. package/src/constants/wordList.ts +125 -0
  57. package/src/core/analyzer.ts +204 -0
  58. package/src/core/filter.ts +129 -0
  59. package/src/core/matcher.ts +267 -0
  60. package/src/index.ts +133 -0
  61. package/src/types/index.ts +115 -0
  62. package/src/utils/regexUtils.ts +0 -0
  63. package/src/utils/stringUtils.ts +0 -0
  64. package/tsconfig.json +115 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ parser: '@typescript-eslint/parser',
3
+ extends: ['plugin:@typescript-eslint/recommended', 'prettier'],
4
+ parserOptions: {
5
+ ecmaVersion: 2020,
6
+ sourceType: 'module',
7
+ },
8
+ env: {
9
+ node: true,
10
+ jest: true,
11
+ },
12
+ rules: {
13
+ '@typescript-eslint/explicit-function-return-type': 'off',
14
+ '@typescript-eslint/no-explicit-any': 'off',
15
+ },
16
+ };
File without changes
@@ -0,0 +1,151 @@
1
+ # Panduan Kontribusi untuk ID-Profanity-Filter
2
+
3
+ Terima kasih telah mempertimbangkan untuk berkontribusi pada proyek ID-Profanity-Filter! Panduan ini akan menjelaskan proses kontribusi, terutama untuk menambahkan kata kotor baru ke dalam database.
4
+
5
+ ## Cara Berkontribusi
6
+
7
+ ### 1. Fork & Clone Repositori
8
+
9
+ - Fork repositori ini ke akun GitHub Anda
10
+ - Clone repositori fork Anda ke komputer lokal:
11
+ ```bash
12
+ git clone https://github.com/username/id-profanity-filter.git
13
+ cd id-profanity-filter
14
+ ```
15
+
16
+ ### 2. Install Dependensi
17
+
18
+ ```bash
19
+ npm install
20
+ ```
21
+
22
+ ### 3. Buat Branch Baru
23
+
24
+ ```bash
25
+ git switch -c add-kata-kotor-daerah
26
+ ```
27
+
28
+ ## Struktur Kata Kotor
29
+
30
+ Kata-kata kotor dalam proyek ini dikelompokkan berdasarkan dua dimensi:
31
+
32
+ ### Berdasarkan Daerah Asal
33
+
34
+ Lokasi file: `src/constants/regions/`
35
+
36
+ Kata-kata dikelompokkan berdasarkan daerah asalnya di Indonesia, seperti:
37
+ - `general.ts` - Kata-kata umum di Indonesia
38
+ - `jawa.ts` - Kata-kata dari Jawa
39
+ - `sunda.ts` - Kata-kata dari Sunda
40
+ - `betawi.ts` - Kata-kata dari Betawi
41
+ - `batak.ts` - Kata-kata dari Batak
42
+ - ... dan daerah lainnya
43
+
44
+ ### Berdasarkan Kategori
45
+
46
+ Lokasi file: `src/constants/categories/`
47
+
48
+ Kata-kata juga dikelompokkan berdasarkan jenisnya:
49
+ - `sexual.ts` - Kata-kata berbau seksual
50
+ - `insult.ts` - Kata-kata penghinaan
51
+ - `profanity.ts` - Umpatan umum
52
+ - `slur.ts` - Kata-kata merendahkan berdasarkan identitas
53
+ - `drugs.ts` - Kata-kata terkait narkoba
54
+ - `disgusting.ts` - Kata-kata menjijikkan
55
+ - `blasphemy.ts` - Kata-kata penistaan agama
56
+
57
+ ## Cara Menambahkan Kata Kotor Baru
58
+
59
+ ### 1. Menambahkan ke File Daerah
60
+
61
+ Pilih file daerah yang sesuai di `src/constants/regions/` atau buat file baru jika daerah tersebut belum ada. Format entri kata kotor harus mengikuti interface `ProfanityWord`:
62
+
63
+ ```typescript
64
+ {
65
+ word: 'kata_kotor', // Kata kotor dalam bentuk dasarnya
66
+ category: 'insult', // Kategori kata (sexual, insult, profanity, slur, drugs, disgusting, blasphemy)
67
+ region: 'nama_daerah', // Daerah asal kata
68
+ severity: 0.7, // Tingkat keparahan (0-1)
69
+ aliases: ['alias1', 'alias2'], // Variasi atau alias kata (opsional)
70
+ description: 'Deskripsi kata', // Penjelasan singkat tentang kata (opsional)
71
+ context: 'Konteks penggunaan' // Informasi konteks penggunaan (opsional)
72
+ }
73
+ ```
74
+
75
+ Contoh menambahkan kata ke file daerah (misalnya `bali.ts`):
76
+
77
+ ```typescript
78
+ import { ProfanityWord } from '../../types';
79
+
80
+ export const bali: ProfanityWord[] = [
81
+ // ... kata-kata yang sudah ada
82
+ {
83
+ word: 'cicing',
84
+ category: 'profanity',
85
+ region: 'bali',
86
+ severity: 0.6,
87
+ aliases: ['cicying'],
88
+ description: 'Secara harfiah berarti anjing dalam Bahasa Bali',
89
+ context: 'Umpatan umum dalam Bahasa Bali'
90
+ },
91
+ // ... tambahkan kata lainnya
92
+ ];
93
+
94
+ export const baliWords = bali.map(item => item.word);
95
+
96
+ export default bali;
97
+ ```
98
+
99
+ ### 2. Menambahkan ke File Kategori (Opsional)
100
+
101
+ Jika Anda menambahkan kata baru, perbarui juga file kategori yang sesuai (`src/constants/categories/`). Kata-kata tersebut akan otomatis terambil saat library dibuild, tetapi terkadang kategori perlu diperbarui.
102
+
103
+ ### 3. Update File indeks Daerah/Kategori (jika ada daerah baru)
104
+
105
+ Jika Anda menambahkan daerah baru, pastikan untuk memperbarui file indeks:
106
+ - `src/constants/regions/index.ts`
107
+ - `src/constants/wordList.ts`
108
+
109
+ ### 4. Jalankan Tes (jika ada)
110
+
111
+ ```bash
112
+ npm test
113
+ ```
114
+
115
+ ### 5. Build Library
116
+
117
+ ```bash
118
+ npm run build
119
+ ```
120
+
121
+ ### 6. Commit dan Push Perubahan Anda
122
+
123
+ ```bash
124
+ git add .
125
+ git commit -m "Menambahkan kata kotor daerah X"
126
+ git push origin add-kata-kotor-daerah
127
+ ```
128
+
129
+ ### 7. Buat Pull Request
130
+
131
+ Buat Pull Request dari branch Anda ke repositori utama.
132
+
133
+ ## Pedoman Penambahan Kata
134
+
135
+ 1. **Validasi Kata**: Pastikan kata tersebut benar-benar dianggap kasar di daerah yang dimaksud.
136
+ 2. **Metadata**: Tambahkan metadata yang cukup, terutama tingkat keparahan dan kategori.
137
+ 3. **Konteks**: Tambahkan komentar konteks jika diperlukan untuk menjelaskan kata tersebut.
138
+ 4. **Bentuk Dasar**: Tambahkan kata dalam bentuk dasarnya, variasi dapat ditambahkan dalam `aliases`.
139
+ 5. **Kategorisasi**: Kategorikan kata dengan benar (seksual, hinaan, umpatan, dll).
140
+ 6. **Hindari Duplikasi**: Periksa apakah kata tersebut sudah ada sebelum menambahkannya.
141
+
142
+ ## Format Commit
143
+
144
+ Gunakan format commit yang konsisten:
145
+ - `Add: Menambahkan kata X dari daerah Y`
146
+ - `Update: Memperbaiki metadata kata X`
147
+ - `Fix: Memperbaiki bug pada ...`
148
+
149
+ ## Informasi Tambahan
150
+
151
+ Untuk pertanyaan atau diskusi, silakan buat issue di GitHub atau hubungi maintainer proyek. Terima kasih atas kontribusi Anda!
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Side ID ~
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,285 @@
1
+ # ID-Profanity-Filter
2
+
3
+ ![License](https://img.shields.io/npm/l/@sideid/id-profanity-filter)
4
+ ![Version](https://img.shields.io/npm/v/@sideid/id-profanity-filter)
5
+ ![Downloads](https://img.shields.io/npm/dt/@sideid/id-profanity-filter)
6
+
7
+ Library JavaScript/TypeScript untuk mendeteksi, menyensor, dan menganalisis kata-kata kotor dalam Bahasa Indonesia dan bahasa daerah.
8
+
9
+ ## Fitur Utama
10
+
11
+ - 🔍 **Deteksi Kata Kotor** - Mendeteksi kata-kata kasar/kotor dalam teks Bahasa Indonesia
12
+ - ⚠️ **Analisis Konten** - Menganalisis tingkat keparahan dan kategori kata kotor
13
+ - 🔒 **Penyensoran** - Menyensor kata-kata kotor dengan berbagai opsi kustomisasi
14
+ - 🗺️ **Dukungan Bahasa Daerah** - Mencakup kata-kata dari berbagai daerah di Indonesia (Jawa, Sunda, Batak, dll)
15
+ - 🔧 **Kustomisasi** - Opsi untuk menambahkan whitelist dan daftar kata kustom
16
+
17
+ ## Instalasi
18
+
19
+ ```bash
20
+ npm install @sideid/id-profanity-filter
21
+ # atau
22
+ yarn add @sideid/id-profanity-filter
23
+ # atau
24
+ pnpm add @sideid/id-profanity-filter
25
+ ```
26
+
27
+ ## Penggunaan Dasar
28
+
29
+ ### JavaScript / TypeScript
30
+
31
+ ```typescript
32
+ import IDProfanityFilter from '@sideid/id-profanity-filter';
33
+
34
+ // Buat instance filter
35
+ const filter = new IDProfanityFilter();
36
+
37
+ // Cek apakah teks mengandung kata kotor
38
+ const teks = 'Dasar anjing kamu, jangan banyak bacot!';
39
+ const hasProfanity = filter.isProfane(teks);
40
+
41
+ console.log(hasProfanity); // Output: true
42
+
43
+ // Filter kata kotor (sensorisasi)
44
+ const hasil = filter.filter(teks);
45
+ console.log(hasil.filtered); // Output: "Dasar **** kamu, jangan banyak ****!"
46
+ console.log(hasil.censored); // Output: 2 (jumlah kata yang disensor)
47
+
48
+ // Analisis konten
49
+ const analisis = filter.analyze(teks);
50
+ console.log(analisis.severityScore); // Output: 0.65 (contoh skor keparahan)
51
+ console.log(analisis.categories); // Output: ["profanity", "insult"]
52
+ ```
53
+
54
+ ### Utilitas Langsung
55
+
56
+ Anda juga dapat menggunakan fungsi utilitas langsung tanpa membuat instance:
57
+
58
+ ```typescript
59
+ import { idFilter } from '@sideid/id-profanity-filter';
60
+
61
+ const teks = 'Dasar anjing kamu, jangan banyak bacot!';
62
+ const hasil = idFilter.filter(teks);
63
+ console.log(hasil.filtered); // Output: "Dasar **** kamu, jangan banyak ****!"
64
+ ```
65
+
66
+ ## Dokumentasi API
67
+
68
+ ### Kelas `IDProfanityFilter`
69
+
70
+ #### Konstruktor
71
+
72
+ ```typescript
73
+ constructor(options?: FilterOptions)
74
+ ```
75
+
76
+ - **options**: Opsi konfigurasi filter (opsional)
77
+
78
+ #### Metode
79
+
80
+ ##### `filter(text: string): FilterResult`
81
+
82
+ Menyensor kata kotor dalam teks.
83
+
84
+ - **Hasil**: Objek `FilterResult` dengan properti:
85
+ - `filtered`: String teks yang sudah disensor
86
+ - `censored`: Jumlah kata yang disensor
87
+ - `replacements`: Array berisi detail kata yang disensor
88
+
89
+ ##### `isProfane(text: string): boolean`
90
+
91
+ Memeriksa apakah teks mengandung kata kotor.
92
+
93
+ - **Hasil**: Boolean `true` jika teks mengandung kata kotor, `false` jika tidak
94
+
95
+ ##### `analyze(text: string): AnalysisResult`
96
+
97
+ Menganalisis teks untuk mendapatkan informasi detail tentang kata kotor yang ditemukan.
98
+
99
+ - **Hasil**: Objek `AnalysisResult` dengan properti:
100
+ - `hasProfanity`: Apakah teks mengandung kata kotor
101
+ - `matches`: Array kata kotor yang ditemukan
102
+ - `matchDetails`: Array objek kata kotor dengan metadata
103
+ - `categories`: Kategori kata kotor yang ditemukan
104
+ - `regions`: Daerah asal kata kotor yang ditemukan
105
+ - `severityScore`: Skor keparahan (0-1)
106
+
107
+ ##### `batchAnalyze(texts: string[])`
108
+
109
+ Menganalisis batch teks sekaligus dan memberikan ringkasan.
110
+
111
+ - **Hasil**: Objek yang berisi ringkasan analisis
112
+
113
+ ##### `analyzeBySentence(text: string)`
114
+
115
+ Menganalisis teks per-kalimat.
116
+
117
+ - **Hasil**: Array dari hasil analisis per-kalimat
118
+
119
+ ##### `analyzeWithContext(text: string, contextWindowSize?: number)`
120
+
121
+ Menganalisis teks dengan konteks di sekitar kata kotor.
122
+
123
+ - **Hasil**: Array dari kata kotor dengan konteks di sekitarnya
124
+
125
+ ##### `setOptions(options: Partial<FilterOptions>)`
126
+
127
+ Mengubah opsi filter.
128
+
129
+ ##### `setWordList(wordList: string[])`
130
+
131
+ Menetapkan daftar kata kustom.
132
+
133
+ ##### `addToWhitelist(word: string)`
134
+
135
+ Menambahkan kata ke whitelist (akan diabaikan dalam filter).
136
+
137
+ ##### `removeFromWhitelist(word: string)`
138
+
139
+ Menghapus kata dari whitelist.
140
+
141
+ ### Opsi Filter
142
+
143
+ ```typescript
144
+ interface FilterOptions {
145
+ wordList?: string[]; // List kata yang ingin difilter
146
+ replaceWith?: string; // Karakter pengganti untuk kata yang disensor
147
+ fullWordCensor?: boolean; // Apakah menyensor seluruh kata atau sebagian
148
+ detectLeetSpeak?: boolean; // Deteksi variasi penulisan (mis: a=4, e=3)
149
+ whitelist?: string[]; // Kata-kata yang dikecualikan dari filter
150
+ checkSubstring?: boolean; // Memeriksa substring (lebih ketat)
151
+ categories?: ProfanityCategory[]; // Kategori kata yang difilter
152
+ regions?: Region[]; // Daerah asal kata yang difilter
153
+ severityThreshold?: number; // Tingkat keparahan minimum (0-1)
154
+ }
155
+ ```
156
+
157
+ ## Contoh Penggunaan Lanjutan
158
+
159
+ ### Kustomisasi Opsi Filter
160
+
161
+ ```typescript
162
+ const filter = new IDProfanityFilter({
163
+ replaceWith: '#', // Menggunakan # sebagai karakter pengganti
164
+ fullWordCensor: false, // Hanya menyensor sebagian kata
165
+ detectLeetSpeak: true, // Mendeteksi variasi seperti "b4b1" untuk "babi"
166
+ categories: ['sexual', 'slur'], // Hanya filter kategori tertentu
167
+ regions: ['jawa', 'general'], // Hanya filter dari daerah tertentu
168
+ severityThreshold: 0.7, // Hanya filter kata dengan tingkat keparahan ≥ 0.7
169
+ });
170
+
171
+ // Atau mengubah opsi setelah inisialisasi
172
+ filter.setOptions({
173
+ replaceWith: '@',
174
+ fullWordCensor: true,
175
+ });
176
+ ```
177
+
178
+ ### Menggunakan Whitelist
179
+
180
+ ```typescript
181
+ const filter = new IDProfanityFilter();
182
+
183
+ // Menambahkan kata ke whitelist (akan diabaikan)
184
+ filter.addToWhitelist('anjing');
185
+
186
+ const teks =
187
+ 'Anjing itu hewan peliharaan yang setia, tidak seperti bajingan itu';
188
+ const hasil = filter.filter(teks);
189
+
190
+ console.log(hasil.filtered);
191
+ // Output: "Anjing itu hewan peliharaan yang setia, tidak seperti ******* itu"
192
+ ```
193
+
194
+ ### Analisis Konten Mendalam
195
+
196
+ ```typescript
197
+ const filter = new IDProfanityFilter();
198
+ const teks = 'Dasar anjing sialan! Kamu ini memang bego dan goblok.';
199
+
200
+ // Analisis teks
201
+ const analisis = filter.analyze(teks);
202
+ console.log(analisis);
203
+
204
+ /* Output:
205
+ {
206
+ hasProfanity: true,
207
+ matches: ['anjing', 'sialan', 'bego', 'goblok'],
208
+ matchDetails: [
209
+ { word: 'anjing', category: 'profanity', region: 'general', severity: 0.7, ... },
210
+ { word: 'bego', category: 'insult', region: 'general', severity: 0.5, ... },
211
+ ...
212
+ ],
213
+ categories: ['profanity', 'insult'],
214
+ regions: ['general'],
215
+ severityScore: 0.64
216
+ }
217
+ */
218
+ ```
219
+
220
+ ### Analisis Batch
221
+
222
+ ```typescript
223
+ const filter = new IDProfanityFilter();
224
+ const komentar = [
225
+ 'Film ini sangat bagus, ceritanya menarik sekali!',
226
+ 'Dasar goblok, sialan kamu!',
227
+ 'Anjing emang filmnya, sampah banget.',
228
+ ];
229
+
230
+ const hasil = filter.batchAnalyze(komentar);
231
+ console.log(hasil);
232
+
233
+ /* Output:
234
+ {
235
+ totalTexts: 3,
236
+ profaneTexts: 2,
237
+ cleanTexts: 1,
238
+ averageSeverity: 0.62,
239
+ topCategories: ['profanity', 'insult'],
240
+ topRegions: ['general'],
241
+ mostFrequentWords: [
242
+ { word: 'anjing', count: 1 },
243
+ { word: 'goblok', count: 1 },
244
+ { word: 'sialan', count: 1 },
245
+ { word: 'sampah', count: 1 }
246
+ ]
247
+ }
248
+ */
249
+ ```
250
+
251
+ ## Dukungan Regional
252
+
253
+ Library ini mendukung kata-kata kotor dari berbagai daerah di Indonesia:
254
+
255
+ - 🇮🇩 **General** - Kata-kata yang umum di seluruh Indonesia
256
+ - 🏝️ **Jawa** - Kata-kata dari bahasa Jawa
257
+ - 🏞️ **Sunda** - Kata-kata dari bahasa Sunda
258
+ - 🏙️ **Betawi** - Kata-kata dari bahasa Betawi
259
+ - 🌋 **Batak** - Kata-kata dari bahasa Batak
260
+
261
+ Dan daerah lainnya yang terus bertambah.
262
+
263
+ ## Kategori Kata
264
+
265
+ Kata-kata dikelompokkan berdasarkan kategori:
266
+
267
+ - `sexual`: Kata-kata berbau seksual
268
+ - `insult`: Kata-kata penghinaan
269
+ - `profanity`: Umpatan umum
270
+ - `slur`: Perkataan merendahkan berdasarkan identitas
271
+ - `drugs`: Terkait narkoba
272
+ - `disgusting`: Kata-kata menjijikkan
273
+ - `blasphemy`: Penistaan agama
274
+
275
+ ## Berkontribusi
276
+
277
+ Kami sangat menghargai kontribusi Anda! Untuk berkontribusi, silakan lihat [panduan kontribusi](CONTRIBUTING.md).
278
+
279
+ ## Lisensi
280
+
281
+ Proyek ini dilisensikan di bawah [MIT License](LICENSE).
282
+
283
+ ## Kontak & Dukungan
284
+
285
+ Jika Anda memiliki pertanyaan atau saran, silakan buka issue di repositori GitHub kami.
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const insult: ProfanityWord[];
3
+ export declare const insultWords: string[];
4
+ export default insult;
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const sexual: ProfanityWord[];
3
+ export declare const sexualWords: string[];
4
+ export default sexual;
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const batak: ProfanityWord[];
3
+ export declare const batakWords: string[];
4
+ export default batak;
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const betawi: ProfanityWord[];
3
+ export declare const betawiWords: string[];
4
+ export default betawi;
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const general: ProfanityWord[];
3
+ export declare const generalWords: string[];
4
+ export default general;
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const jawa: ProfanityWord[];
3
+ export declare const jawaWords: string[];
4
+ export default jawa;
@@ -0,0 +1,4 @@
1
+ import { ProfanityWord } from '../../types';
2
+ export declare const sunda: ProfanityWord[];
3
+ export declare const sundaWords: string[];
4
+ export default sunda;
@@ -0,0 +1,34 @@
1
+ import { ProfanityWord } from '../types';
2
+ export declare const wordCategories: {
3
+ sexual: string[];
4
+ insult: string[];
5
+ };
6
+ export declare const wordRegions: {
7
+ general: string[];
8
+ jawa: string[];
9
+ sunda: string[];
10
+ betawi: string[];
11
+ batak: string[];
12
+ };
13
+ export declare const wordObjects: ProfanityWord[];
14
+ export declare const allWords: string[];
15
+ /**
16
+ * Kata-kata dengan tingkat keparahan tinggi (subset dari semua kata)
17
+ */
18
+ export declare const severeWords: string[];
19
+ /**
20
+ * Mencari kata berdasarkan kategori dan region
21
+ *
22
+ * @param category Kategori kata kotor
23
+ * @param region Daerah asal kata kotor
24
+ * @returns Array dari kata kotor
25
+ */
26
+ export declare function getWordsByFilter(category?: string, region?: string): string[];
27
+ /**
28
+ * Mencari metadata lengkap untuk sebuah kata
29
+ *
30
+ * @param word Kata yang dicari
31
+ * @returns Objek ProfanityWord jika ditemukan, undefined jika tidak
32
+ */
33
+ export declare function getWordMetadata(word: string): ProfanityWord | undefined;
34
+ export default allWords;
@@ -0,0 +1,54 @@
1
+ import { FilterOptions, AnalysisResult, ProfanityCategory, Region } from '../types';
2
+ /**
3
+ * Menganalisis teks untuk kata kotor
4
+ *
5
+ * @param text Teks yang akan dianalisis
6
+ * @param options Opsi untuk analisis
7
+ * @return AnalysisResult dengan hasil analisis
8
+ */
9
+ export declare function analyze(text: string, options?: FilterOptions): AnalysisResult;
10
+ /**
11
+ * menganalisis daftar teks dan ringkasan
12
+ *
13
+ * @param texts Daftar teks yagn dianalisis
14
+ * @param options Opsi untuk analisis
15
+ * @return Objek dengan ringkasan analisis
16
+ */
17
+ export declare function batchAnalyze(texts: string[], options?: FilterOptions): {
18
+ totalTexts: number;
19
+ profaneTexts: number;
20
+ cleanTexts: number;
21
+ averageSeverity: number;
22
+ topCategories: ProfanityCategory[];
23
+ topRegions: Region[];
24
+ mostFrequentWords: Array<{
25
+ word: string;
26
+ count: number;
27
+ }>;
28
+ };
29
+ /**
30
+ * Menganalisis per-kalimat untuk melokalisasi kata kotor
31
+ *
32
+ * @param text Teks yang akan dianalisis per-kalimat
33
+ * @param options Opsi untuk analisis
34
+ * @returns Array hasil analisis per-kalimat
35
+ */
36
+ export declare function analyzeBySentence(text: string, options?: FilterOptions): Array<AnalysisResult & {
37
+ sentence: string;
38
+ }>;
39
+ /**
40
+ * Menganalisis teks untuk menemukan kata kotor pada konteks tertentu
41
+ *
42
+ * @param text Teks yang akan dianalisis
43
+ * @param context Kata konteks untuk dicari di dekat kata kotor
44
+ * @param options Opsi untuk analisis
45
+ * @returns Konteks di dekat kata kotor
46
+ */
47
+ export declare function analyzeWithContext(text: string, contextWindowSize?: number, options?: FilterOptions): Array<{
48
+ word: string;
49
+ context: string;
50
+ position: {
51
+ start: number;
52
+ end: number;
53
+ };
54
+ }>;
@@ -0,0 +1,17 @@
1
+ import { FilterOptions, FilterResult } from '../types';
2
+ /**
3
+ * Menyensor kata kotor dalam teks
4
+ *
5
+ * @param text Teks yang akan disensor
6
+ * @param options Opsi untuk filter
7
+ * @returns FilterResult dengan hasil filter
8
+ */
9
+ export declare function filter(text: string, options?: FilterOptions): FilterResult;
10
+ /**
11
+ * Memeriksa apakah teks mengandung kata kotor
12
+ *
13
+ * @param text Teks yang akan diperiksa
14
+ * @param options Opsi untuk pemeriksaan
15
+ * @returns Boolean apakah teks mengandung kata kotor
16
+ */
17
+ export declare function isProfane(text: string, options?: FilterOptions): boolean;
@@ -0,0 +1,31 @@
1
+ import { ProfanityWord, ProfanityCategory, Region, FilterOptions } from '../types';
2
+ export declare function findProfanity(text: string, options?: FilterOptions): string[];
3
+ /**
4
+ * Mencari kata kotor lengkap dengan metadata
5
+ *
6
+ * @param text Teks yang akan diperika
7
+ * @param options Opsi utnuk pencarian kata kotor
8
+ * @return Array dari objek kata kotor yang ditemukan
9
+ */
10
+ export declare function findProfanityWithMetadata(text: string, options?: FilterOptions): ProfanityWord[];
11
+ /**
12
+ * Mencari kategory kata kotor yang ada dalam teks
13
+ *
14
+ * @param text matchDetails Hasil pencarian dari fingProfanityWithMetadata()
15
+ * @param options Opsi untuk pencarian kategori
16
+ */
17
+ export declare function findCategories(matchDetails: ProfanityWord[]): ProfanityCategory[];
18
+ /**
19
+ * Mencari region kata kotor yang ada dalam teks
20
+ *
21
+ * @param text matchDetails Hasil pencarian dari fingProfanityWithMetadata()
22
+ * @param options Opsi untuk pencarian region
23
+ */
24
+ export declare function findRegions(matchDetails: ProfanityWord[]): Region[];
25
+ /**
26
+ * Menghitung tingkat keparahan kata kotor yang ditemukan
27
+ *
28
+ * @param matchDetails Hasil pencarian dari findProfanityWithMetadata()
29
+ * @return Skor keparahan dari 0-1
30
+ */
31
+ export declare function calculateSeverity(matchDetails: ProfanityWord[]): number;