korcen 0.3.17__py3-none-any.whl → 1.0.0__py3-none-any.whl

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.
korcen/korcen.py CHANGED
@@ -1,1542 +1,765 @@
1
1
  import re
2
- from better_profanity import profanity
3
2
  from collections import OrderedDict
3
+ import os
4
+ import colorama
4
5
 
5
- profanity.load_censor_words()
6
+ try:
7
+ from better_profanity import profanity
8
+ profanity.load_censor_words()
9
+ BETTER_PROFANITY_LOADED = True
10
+ except ImportError:
11
+ print(f"{colorama.Fore.YELLOW}korcen: 'better_profanity' library not found. English filtering will be skipped.{colorama.Style.RESET_ALL}")
12
+ BETTER_PROFANITY_LOADED = False
13
+ except Exception as e:
14
+ print(f"{colorama.Fore.RED}korcen: Could not load better_profanity censor words. English filtering might be affected. Error: {e}{colorama.Style.RESET_ALL}")
15
+ BETTER_PROFANITY_LOADED = False
6
16
 
7
- cache_size = 0
8
- cache = OrderedDict()
9
-
10
- def save_text(id, text):
11
- global cache_size
12
- if check(text):
13
- return text
14
- if id in cache:
15
- cache.move_to_end(id)
16
- content = cache[id] + text
17
- cache[id] = text
18
- if len(cache) >= cache_size:
19
- cache.popitem(last=False)
20
- return content
21
-
22
-
23
- if len(cache) >= cache_size:
24
- cache.popitem(last=False)
25
-
26
- cache[id] = text
27
- return cache[id]
28
-
29
- def general(text:str, id: int=None):
30
- global cache_size
31
- if id != None:
32
- if cache_size < 2:
33
- print("korcen: Cache size must be at least 2")
34
- return False
35
- text = save_text(id=id, text=text)
36
-
37
- text = re.sub('𝗌', 's', text)
38
- text = re.sub('𝘴', 's', text)
39
- text = re.sub('𝙨', 's', text)
40
- text = re.sub('𝚜', 's', text)
41
- text = re.sub('𝐬', 's', text)
42
- text = re.sub('𝑠', 's', text)
43
- text = re.sub('𝒔', 's', text)
44
- text = re.sub('𝓈', 's', text)
45
- text = re.sub('𝓼', 's', text)
46
- text = re.sub('𝔰', 's', text)
47
- text = re.sub('𝖘', 's', text)
48
- text = re.sub('𝕤', 's', text)
49
- text = re.sub('s', 's', text)
50
- text = re.sub('ş', 's', text)
51
- text = re.sub('ⓢ', 's', text)
52
- text = re.sub('⒮', 's', text)
53
- text = re.sub('🅢', 's', text)
54
- text = re.sub('🆂', 's', text)
55
- text = re.sub('🅂', 's', text)
56
- text = re.sub('𝑺', 's', text)
57
- text = re.sub('𝖾', 'e', text)
58
- text = re.sub('𝘦', 'e', text)
59
- text = re.sub('𝙚', 'e', text)
60
- text = re.sub('𝚎', 'e', text)
61
- text = re.sub('𝐞', 'e', text)
62
- text = re.sub('𝑒', 'e', text)
63
- text = re.sub('𝒆', 'e', text)
64
- text = re.sub('ℯ', 'e', text)
65
- text = re.sub('𝓮', 'e', text)
66
- text = re.sub('𝔢', 'e', text)
67
- text = re.sub('𝖊', 'e', text)
68
- text = re.sub('𝕖', 'e', text)
69
- text = re.sub('e', 'e', text)
70
- text = re.sub('ė', 'e', text)
71
- text = re.sub('ⓔ', 'e', text)
72
- text = re.sub('⒠', 'e', text)
73
- text = re.sub('🅔', 'e', text)
74
- text = re.sub('🅴', 'e', text)
75
- text = re.sub('🄴', 'e', text)
76
- text = re.sub('є', 'e', text)
77
- text = re.sub('𝗑', 'x', text)
78
- text = re.sub('𝘹', 'x', text)
79
- text = re.sub('𝙭', 'x', text)
80
- text = re.sub('𝚡', 'x', text)
81
- text = re.sub('𝐱', 'x', text)
82
- text = re.sub('𝑥', 'x', text)
83
- text = re.sub('𝒙', 'x', text)
84
- text = re.sub('𝓍', 'x', text)
85
- text = re.sub('𝔁', 'x', text)
86
- text = re.sub('𝔵', 'x', text)
87
- text = re.sub('𝖝', 'x', text)
88
- text = re.sub('𝕩', 'x', text)
89
- text = re.sub('x', 'x', text)
90
- text = re.sub('ⓧ', 'x', text)
91
- text = re.sub('⒳', 'x', text)
92
- text = re.sub('🅧', 'x', text)
93
- text = re.sub('🆇', 'x', text)
94
- text = re.sub('🅇', 'x', text)
95
- text = re.sub('₨', 'rs', text)
96
- text = re.sub('ų', 'u', text)
97
- text = re.sub('ç', 'c', text)
98
- text = re.sub('F', 'F', text)
99
- text = re.sub('K', 'K', text)
100
- text = re.sub('C', 'C', text)
101
- text = re.sub('U', 'U', text)
102
- newtext = text.lower()
103
-
104
- text = re.sub('ㅗ먹어', 'ㅗ', newtext)
105
- text = re.sub('오ㅗㅗ', '', text)
106
- text = re.sub('오ㅗ', '', text)
107
- text = re.sub('해ㅗㅗ', '', text)
108
- text = re.sub('해ㅗ', '', text)
109
- text = re.sub('호ㅗㅗ', '', text)
110
- text = re.sub('호ㅗ', '', text)
111
- text = re.sub('로ㅗㅗ', '', text)
112
- text = re.sub('로ㅗ', '', text)
113
- text = re.sub('옹ㅗㅗ', '', text)
114
- text = re.sub('옹ㅗ', '', text)
115
- text = re.sub('롤ㅗㅗ', '', text)
116
- text = re.sub('롤ㅗ', '', text)
117
- text = re.sub('요ㅗ', '', text)
118
- text = re.sub('우ㅗ', '', text)
119
- text = re.sub('하ㅗ', '', text)
120
- text = re.sub('ㅗㅗ오', '', text)
121
- text = re.sub('ㅗ오', '', text)
122
- text = re.sub('ㅗㅗ호', '', text)
123
- text = re.sub('ㅗ호', '', text)
124
- text = re.sub('ㅗㅗ로', '', text)
125
- text = re.sub('ㅗ로', '', text)
126
- text = re.sub('ㅗㅗ옹', '', text)
127
- text = re.sub('ㅗ옹', '', text)
128
- text = re.sub('ㅗㅗ롤', '', text)
129
- text = re.sub('ㅗ롤', '', text)
130
- text = re.sub('ㅗ요', '', text)
131
- text = re.sub('ㅗ우', '', text)
132
- text = re.sub('ㅗ하', '', text)
133
- text = re.sub('오ㅗㅗㅗㅗ', '', text)
134
- text = re.sub('오ㅗㅗㅗ', '', text)
135
- text = re.sub('호ㅗㅗㅗㅗ', '', text)
136
- text = re.sub('호ㅗㅗㅗ', '', text)
137
- text = re.sub('로ㅗㅗㅗㅗ', '', text)
138
- text = re.sub('로ㅗㅗㅗ', '', text)
139
- text = re.sub('옹ㅗㅗㅗㅗ', '', text)
140
- text = re.sub('옹ㅗㅗㅗ', '', text)
141
- text = re.sub('롤ㅗㅗㅗㅗ', '', text)
142
- text = re.sub('롤ㅗㅗㅗ', '', text)
143
- text = re.sub('요ㅗㅗㅗ', '', text)
144
- text = re.sub('우ㅗㅗㅗ', '', text)
145
- text = re.sub('하ㅗㅗㅗ', '', text)
146
- text = re.sub('ㅇㅗ', '', text)
147
- text = re.sub('ㅗㄷ', '', text)
148
- text = re.sub('ㅗㅜ', '', text)
149
- text = re.sub('rㅗ', '', text)
150
- text = re.sub('ㅗr', '', text)
151
- text = re.sub('sㅗ', '', text)
152
- text = re.sub('ㅗs', '', text)
153
- text = re.sub('eㅗ', '', text)
154
- text = re.sub('ㅗe', '', text)
155
- text = re.sub('fㅗ', '', text)
156
- text = re.sub('ㅗf', '', text)
157
- text = re.sub('aㅗ', '', text)
158
- text = re.sub('ㅗa', '', text)
159
- text = re.sub('qㅗ', '', text)
160
- text = re.sub('ㅗq', '', text)
161
- text = re.sub('ㅗw', '', text)
162
- text = re.sub('wㅗ', '', text)
163
- text = re.sub('ㅗd', '', text)
164
- text = re.sub('dㅗ', '', text)
165
- text = re.sub('ㅗg', '', text)
166
- text = re.sub('gㅗ', '', text)
167
- text = re.sub('dㅗ', '', text)
168
- text = re.sub(' ', '', text)
169
- fuckyou = ["ㅗ", "┻", "┴", "┹", "_ㅣ_",
170
- "_/_", "⊥", "_ |\_", "_|\_", "_ㅣ\_", "_I_", "丄"]
171
- for i in fuckyou:
172
- if i in text:
173
- return True
174
-
175
- fuck = ["tq", "qt"]
176
- for i in fuck:
177
- if i == newtext:
178
- return True
179
- text = re.sub('118', '', newtext)
180
- text = re.sub('218', '', text)
181
- text = re.sub('318', '', text)
182
- text = re.sub('418', '', text)
183
- text = re.sub('518', '', text)
184
- text = re.sub('618', '', text)
185
- text = re.sub('718', '', text)
186
- text = re.sub('818', '', text)
187
- text = re.sub('918', '', text)
188
- text = re.sub('018', '', text)
189
- text = re.sub('련', '놈', newtext)
190
- text = re.sub('뇬', '놈', text)
191
- text = re.sub('놈', '놈', text)
192
- text = re.sub('넘', '놈', text)
193
- text = re.sub('8분', '', text)
194
- text = re.sub(' ', '', text)
195
- fuck = ["씨8", "18아", "18놈", "tㅂ", "t발", "ㅆㅍ",
196
- "sibal", "sival", "sibar", "sibak", "sipal", "siqk", "tlbal", "tlval", "tlbar", "tlbak", "tlpal", "tlqk",
197
- "시bal", "시val", "시bar", "시bak", "시pal", "시qk", "시bal", "시val", "시bar", "시bak", "시pal", "시qk",
198
- "si바", "si발", "si불", "si빨", "si팔", "tl바", "tl발", "tl불", "tl빨", "tl팔",
199
- "siba", "tlba", "siva", "tlva", "tlqkf", "10발놈", "10발년", "tlqkd", "si8", "10R놈", "시8", "십8", "s1bal", "sib알", "씨x","siㅂ"]
200
- for i in fuck:
201
- if i in text:
202
- return True
203
- text = re.sub(r'\^', 'ㅅ', newtext)
204
- text = re.sub('人', 'ㅅ', text)
205
- text = re.sub('∧', 'ㅅ', text)
206
- text = re.sub('/\', 'ㅅ', text)
207
- text = re.sub('/\', 'ㅅ', text)
208
- text = re.sub('㉦', 'ㅅ', text)
209
- text = re.sub('丨발', '시발', text)
210
- text = re.sub('丨벌', '시발', text)
211
- text = re.sub('丨바', '시발', text)
212
- text = re.sub('甘', 'ㅂ', text)
213
- text = re.sub('廿', 'ㅂ', text)
214
- text = re.sub('己', 'ㄹ', text)
215
- text = re.sub('卜', 'ㅏ', text)
216
- text = re.sub('l', 'ㅣ', text)
217
- text = re.sub('r', 'ㅏ', text)
218
- text = re.sub('ᐲ', 'ㅅ', text)
219
- text = re.sub('ᗨ', 'ㅂ', text)
220
- text = re.sub('시ㅣ', '시', text)
221
- text = re.sub('씨ㅣ', '씨', text)
222
- text = re.sub('ㅅ1', '시', text)
223
- text = re.sub('ㅍㅅㅍ', '', text)
224
- text = re.sub('발 닦', '', text)
225
- text = re.sub('동시 8', '', text)
226
- text = re.sub('8시발', '시발', text)
227
- text = re.sub('8시 ', '', text)
228
- text = re.sub('!wt ㅂㅇ', '', text)
229
- text = re.sub('!ㅈㅅ ㅂㅇ', '', text)
230
- text = re.sub('다시 방', '', text)
231
- text = re.sub('시 불이익', '', text)
232
- text = re.sub('다시 바꿀', '', text)
233
- text = re.sub('다시 바꿔', '', text)
234
- text = re.sub('다시 불러', '', text)
235
- text = re.sub('다시 불안', '', text)
236
- text = re.sub('하시바라 이노스케', '', text)
237
- text = re.sub('할 시', '', text)
238
- text = re.sub('다시 불러', '', text)
239
- text = re.sub("[^ㄱ-힣]", "", text)
240
- fuck = ["시ㅂ", "시ㅏㄹ", "씨ㅂ", "씨ㅏㄹ", "ㅣ발", "ㅆ발", "ㅅ발", "ㅅㅂ", "ㅆㅂ", "ㅆ바", "ㅅ바",
241
- "시ㅂㅏ", "ㅅㅂㅏ", "시ㅏㄹ", "씨ㅏㄹ", "ㅅ불", "ㅆ불", "ㅅ쁠", "ㅆ뿔", "ㅆㅣ발", "ㅅㅟ발", "ㅅㅣㅂㅏ",
242
- "ㅣ바알", "ㅅ벌", "^^ㅣ벌", "ㅆ삐라", "씨ㅃ", "^^/발"]
243
- for i in fuck:
244
- if i in text:
245
- return True
246
-
247
- text = re.sub('불러드', '', text)
248
- text = re.sub('시발음', '', text)
249
- text = re.sub('시발택시', '', text)
250
- text = re.sub('시발자동차', '', text)
251
- text = re.sub('정치발', '', text)
252
- text = re.sub('시발점', '', text)
253
- text = re.sub('시발유', '', text)
254
- text = re.sub('시발역', '', text)
255
- text = re.sub('시발수뢰', '', text)
256
- text = re.sub('아저씨바', '', text)
257
- text = re.sub('아저씨발', '', text)
258
- text = re.sub('시바견', '', text)
259
- text = re.sub('벌어', '', text)
260
- text = re.sub('시바이누', '', text)
261
- text = re.sub('시바스리갈', '', text)
262
- text = re.sub('시바산', '', text)
263
- text = re.sub('시바신', '', text)
264
- text = re.sub('오리발', '', text)
265
- text = re.sub('발끝', '', text)
266
- text = re.sub('다시바', '', text)
267
- text = re.sub('다시팔', '', text)
268
- text = re.sub('비슈누시바', '', text)
269
- text = re.sub('시바핫카이', '', text)
270
- text = re.sub('시바타이쥬', '', text)
271
- text = re.sub('데스티니시바', '', text)
272
- text = re.sub('시바루', '', text)
273
- text = re.sub('시바료타로', '', text)
274
- text = re.sub('시바라스시', '', text)
275
- text = re.sub('임시방편', '', text)
276
- text = re.sub('젤리', '', text)
277
- text = re.sub('발사', '', text)
278
- text = re.sub('크시야', '', text)
279
- text = re.sub('크시', '', text)
280
- text = re.sub('어찌', '', text)
281
- text = re.sub('가시방석', '', text)
282
- text = re.sub('발로란트방', '', text)
283
- text = re.sub('발로란트', '', text)
284
- text = re.sub('발로', '', text)
285
- text = re.sub('씨발라', '', text)
286
- text = re.sub('무시발언', '', text)
287
- text = re.sub('일시불', '', text)
288
- text = re.sub('우리', '', text)
289
- text = re.sub('혹시', '', text)
290
- text = re.sub('아조씨', '', text)
291
- text = re.sub('아저씨', '', text)
292
- text = re.sub('바로', '', text)
293
- text = re.sub('저거시', '', text)
294
- text = re.sub('우리발', '', text)
295
- text = re.sub('피시방', '', text)
296
- text = re.sub('피씨방', '', text)
297
- text = re.sub('방장', '', text)
298
- text = re.sub('시바사키', '', text)
299
- text = re.sub('시발차', '', text)
300
- text = re.sub('구로역 시발', '', text)
301
- text = re.sub('로벅스', '', text)
302
- text = re.sub('쉬바나', '', text)
303
- text = re.sub('애쉬바루스', '', text)
304
- text = re.sub('애쉬바이올렛', '', text)
305
- text = re.sub('벌었는데', '', text)
306
- text = re.sub('엠씨방', '', text)
307
- text = re.sub('빨리', '', text)
308
- text = re.sub('파엠', '', text)
309
- text = re.sub('벌금', '', text)
310
- text = re.sub('시방향', '', text)
311
- text = re.sub('불법', '', text)
312
- text = re.sub('발릴', '', text)
313
- text = re.sub('발표', '', text)
314
- text = re.sub('방송', '', text)
315
- text = re.sub('역시', '', text)
316
- text = re.sub('바보', '', text)
317
- text = re.sub('쿨리발리', '', text)
318
- text = re.sub('슈발리에', '', text)
319
- text = re.sub('방탄', '', text)
320
- text = re.sub('방어', '', text)
321
- text = re.sub('발표', '', text)
322
- text = re.sub('상시', '', text)
323
- text = re.sub('슈발리에', '', text)
324
- text = re.sub('아', '', text)
325
- text = re.sub('이', '', text)
326
- text = re.sub('일', '', text)
327
- text = re.sub('의', '', text)
328
- text = re.sub("[^가-힣]", "", text)
329
- text = re.sub('즉시발급', '', text)
330
- text = re.sub('련', '놈', text)
331
- text = re.sub('뇬', '놈', text)
332
- text = re.sub('놈', '놈', text)
333
- text = re.sub('넘', '놈', text)
334
- fuck = ["시발", "씨발", "시봘", "씨봘", "씨바", "시바", "샤발", "씌발", "씹발", "시벌", "시팔", "싯팔",
335
- "씨빨", "씨랼", "씨파", "띠발", "띡발", "띸발", "싸발", "십발", "슈발", "야발", "씨불", "씨랄",
336
- "쉬발", "쓰발", "쓔발", "쌰발", "쉬발", "쒸발", "씨팔", "씨밝", "씨밯", "쑤발", "치발", "샤발",
337
- "발씨", "리발", "씨볼", "찌발", "씨비바라랄", "시바랄", "씨바라", "쒸팔", "쉬팔", "씨밮", "쒸밮", "시밮",
338
- "씨삐라", "씨벌", "슈벌", "시불", "시부렝", "씨부렝", "시부랭", "씨부랭", "시부랭", "발놈시", "뛰발",
339
- "뛰봘", "뜨발", "뜨벌", "띄발", "씨바알", "샤빨", "샤발", "스벌", "쓰벌", "신발련", "신발년", "신발놈", "띠발",
340
- "띠바랄", "시방", "씨방", "씨부련", "시부련", "씨잇발", "씨잇파알", "씨잇바알", "시잇발", "시잇바알", "쒸이발",
341
- "쉬이빨", "씹팔", "쉬바", "시병발신", "씱빩", "쉬바난", "쉬바놈", "쉬바녀", "쉬바년", "쉬바노마", "쉬바새", "쉬불", "쉬이바",
342
- "시벨놈", "시뱅놈", "시봉새", "씻뻘", "씌벌"]
343
- for i in fuck:
344
- if i in text:
345
- return True
346
-
347
- text = re.sub('련', '놈', newtext)
348
- text = re.sub('뇬', '놈', text)
349
- text = re.sub('놈', '놈', text)
350
- text = re.sub('넘', '놈', text)
351
- fuck = ["18것", "18놈", "18럼", "18롬", "18새끼",
352
- "18세끼", "18세리", "18섹", "18쉑", "10쉑"]
353
- for i in fuck:
354
- if i in text:
355
- return True
356
-
357
- text = re.sub(' ', '', newtext)
358
- text = re.sub("opgg", "", text)
359
- text = re.sub("op.gg", "", text)
360
- bullshit1 = ["wlfkf", "g랄", "g럴", "g롤", "g뢀", "giral", "zi랄", "ji랄"]
361
- for i in bullshit1:
362
- if i in text:
363
- return True
364
- text = re.sub("g랄", "지랄", newtext)
365
- text = re.sub('ji랄', '지랄', text)
366
- text = re.sub('己', 'ㄹ', text)
367
- text = re.sub("[^ㄱ-힣]", "", text)
368
- text = re.sub("있지", "", text)
369
- text = re.sub("없지", "", text)
370
- text = re.sub("하지", "", text)
371
- text = re.sub('알았지', '', text)
372
- text = re.sub('몰랐지', '', text)
373
- text = re.sub('근데', '', text)
374
- text = re.sub('지근거', '', text)
375
- text = re.sub('지근하', '', text)
376
- text = re.sub('지근지근', '', text)
377
- text = re.sub('지근속근', '', text)
378
- text = re.sub('속든지근', '', text)
379
- text = re.sub('미지근', '', text)
380
- text = re.sub("근", "ㄹ", text)
381
- text = re.sub("ㄹㅇ", "", text)
382
- bullshit1 = ["ㅈㄹ", "지ㄹ", "ㅈ랄", "ㅈ라"]
383
- for i in bullshit1:
384
- if i in text:
385
- return True
386
-
387
- text = re.sub("[^가-힣]", "", newtext)
388
- text = re.sub("있지", "", text)
389
- text = re.sub("없지", "", text)
390
- text = re.sub("하지", "", text)
391
- text = re.sub('지랄탄', '', text)
392
- text = re.sub('지랄버릇', '', text)
393
- text = re.sub('이', '', text)
394
- text = re.sub('알았지', '', text)
395
- text = re.sub('몰랐지', '', text)
396
- text = re.sub('근데', '', text)
397
- bullshit2 = ["지랄", "찌랄", "지럴", "지롤", "랄지", "쥐랄", "쮜랄", "지뢀", "띄랄"]
398
- for i in bullshit2:
399
- if i in text:
400
- return True
401
-
402
- text = re.sub('0등신', '', newtext)
403
- text = re.sub('1등신', '', text)
404
- text = re.sub('2등신', '', text)
405
- text = re.sub('3등신', '', text)
406
- text = re.sub('4등신', '', text)
407
- text = re.sub('5등신', '', text)
408
- text = re.sub('6등신', '', text)
409
- text = re.sub('7등신', '', text)
410
- text = re.sub('8등신', '', text)
411
- text = re.sub('9등신', '', text)
412
- text = re.sub('붕우유신', '', text)
413
- text = re.sub("[^ㄱ-힣]", "", text)
414
- text = re.sub('빙', '병', text)
415
- text = re.sub('븅', '병', text)
416
- text = re.sub('등', '병', text)
417
- text = re.sub('붱', '병', text)
418
- text = re.sub('뵝', '병', text)
419
- text = re.sub('뼝', '병', text)
420
- text = re.sub('싄', '신', text)
421
- text = re.sub('씬', '신', text)
422
- text = re.sub('우', '', text)
423
- text = re.sub('웅', '', text)
424
- text = re.sub('융', '', text)
425
- text = re.sub('유', '', text)
426
- asshole = ["ㅄ", "ㅂㅅ", "병ㅅ", "ㅂ신", "ㅕㅇ신", "ㅂㅇ신", "뷰신"]
427
- for i in asshole:
428
- if i in text:
429
- return True
430
- text = re.sub("[^가-힣]", "", text)
431
- text = re.sub('영', '', text)
432
- text = re.sub('엉', '', text)
433
- asshole = ["병신", "병딱", "벼신", "붱신", "뼝신", "뿽신", "삥신", "병시니", "병형신", "뵹신", "병긴", "비응신"]
434
- for i in asshole:
435
- if i in text:
436
- return True
437
-
438
- text = re.sub('전염병', '', newtext)
439
- text = re.sub('감염병', '', text)
440
- text = re.sub('화염병', '', text)
441
- text = re.sub("[^가-힣]", "", text)
442
- motherfucker = ["염병", "엠병", "옘병", "염병", "얨병", "옘뼝"]
443
- for i in motherfucker:
444
- if i in text:
445
- return True
446
-
447
- text = re.sub("[^가-힣]", "", newtext)
448
- text = re.sub('왜꺼져', '', text)
449
- text = re.sub('꺼져요', '', text)
450
- text = re.sub('이꺼져', '', text)
451
- text = re.sub('꺼져서', '', text)
452
- text = re.sub('내꺼져', '', text)
453
- text = re.sub('제꺼져', '', text)
454
- text = re.sub('꺼져있', '', text)
455
- text = re.sub('꺼져잇', '', text)
456
- text = re.sub('꺼져도', '', text)
457
- text = re.sub('계속꺼져', '', text)
458
- text = re.sub('꺼져가', '', text)
459
- if "꺼져" in text:
460
- return True
461
-
462
- text = re.sub("[^가-힣]", "", newtext)
463
- shit = ["엿같", "엿가튼", "엿먹어", "뭣같은"]
464
- for i in shit:
465
- if i in text:
466
- return True
467
-
468
- sonofbitch = ["rotorl", "rotprl", "sib새", "AH끼", "sㅐ끼", "x끼"]
469
- for i in sonofbitch:
470
- if i in text:
471
- return True
472
-
473
- text = re.sub(r'\^', 'ㅅ', newtext)
474
- text = re.sub('H', 'ㅐ', text)
475
- text = re.sub('새로', '', text)
476
- text = re.sub('77', 'ㄲ', text)
477
- text = re.sub('l', 'ㅣ', text)
478
- text = re.sub(' ', '', text)
479
- text = re.sub('10새', '새끼', text)
480
- text = re.sub('10섹', '새끼', text)
481
- text = re.sub('10쌔', '새끼', text)
482
- text = re.sub('10쎄', '새끼', text)
483
- text = re.sub('10새', '새끼', text)
484
- text = re.sub('10쉑', '새끼', text)
485
- text = re.sub('🐦', '새', text)
486
- text = re.sub("[^ㄱ-힣]", "", text)
487
- sonofbitch = ["ㅅㄲ", "ㅅ끼", "ㅆ끼", "색ㄲㅣ", "ㅆㅐㄲㅑ", "ㅆㅐㄲㅣ"]
488
- for i in sonofbitch:
489
- if i in text:
490
- return True
491
-
492
- text = re.sub("[^가-힣]", "", text)
493
- text = re.sub('의새끼', '', text)
494
- text = re.sub('애', '', text)
495
- text = re.sub('에', '', text)
496
- text = re.sub('루세끼', '', text)
497
- text = re.sub('시세끼', '', text)
498
- text = re.sub('세끼먹', '', text)
499
- text = re.sub('고양이새끼', '', text)
500
- text = re.sub('호랑이새끼', '', text)
501
- text = re.sub('용새끼', '', text)
502
- text = re.sub('말새끼', '', text)
503
- text = re.sub('사자새끼', '', text)
504
- text = re.sub('범새끼', '', text)
505
- text = re.sub('삵새끼', '', text)
506
- text = re.sub('키보드', '', text)
507
- text = re.sub('새끼손', '', text)
508
- text = re.sub('셰리프', '', text)
509
- text = re.sub('로쉐리', '', text)
510
- sonofbitch = ["새끼", "쉐리", "쌔끼", "썌끼", "쎼끼", "쌬끼", "샠끼", "세끼", "샊", "쌖", "섺", "쎆", "십새", "새키", "씹색", "새까", "새꺄", "샛끼",
511
- "새뀌", "새끠", "새캬", "색꺄", "색끼", "섹히", "셁기", "셁끼", "셐기", "셰끼", "셰리", "쉐꺄", "십색꺄", "십떼끼", "십데꺄", "십때끼",
512
- "십새꺄", "십새캬", "쉑히", "씹새기", "고아새기", "샠기", "애새기", "이새기", "느그새기", "장애새기"]
513
- for i in sonofbitch:
514
- if i in text:
515
- return True
516
-
517
- dick = ["w같은", "w도 없"]
518
- for i in dick:
519
- if i in newtext:
520
- return True
521
- text = re.sub('丕', '조', newtext)
522
- text = re.sub('刀卜', '까', text)
523
- text = re.sub(r'조 \d+까지', '', text)
524
- text = re.sub("[^ㄱ-힣]", "", text)
525
- text = re.sub('줫습니다', '', text)
526
- text = re.sub('줫음', '', text)
527
- text = re.sub('줫잖아', '', text)
528
- text = re.sub('줫겠지', '', text)
529
- text = re.sub('쫒아', '', text)
530
- text = re.sub('쫒는', '', text)
531
- text = re.sub('쫒기다', '', text)
532
- text = re.sub('쫒기라', '', text)
533
- text = re.sub('쫒기로', '', text)
534
- text = re.sub('쫒기를', '', text)
535
- text = re.sub('쫒기며', '', text)
536
- text = re.sub('쫒기는', '', text)
537
- text = re.sub('쫒기나', '', text)
538
- text = re.sub('쫒겨', '', text)
539
- text = re.sub('쫒겻', '', text)
540
- text = re.sub('쫒겼', '', text)
541
- text = re.sub('쫒았', '', text)
542
- text = re.sub('쫒다', '', text)
543
- text = re.sub('쫒고', '', text)
544
- text = re.sub('줫는', '', text)
545
- text = re.sub('줫어', '', text)
546
- text = re.sub('줬는', '', text)
547
- text = re.sub('줫군', '', text)
548
- text = re.sub('줬다', '', text)
549
- text = re.sub('줬어', '', text)
550
- text = re.sub('천조', '', text)
551
- text = re.sub('쫒기', '', text)
552
- dick = ["ㅈ같", "ㅈ망", "ㅈ까", "ㅈ경", "ㅈ가튼"]
553
- for i in dick:
554
- if i in text:
555
- return True
556
- text = re.sub("[^가-힣]", "", text)
557
- text = re.sub('해줫더니', '', text)
558
- text = re.sub('줫다', '', text)
559
- text = re.sub('내쫒은', '', text)
560
- text = re.sub('내쫒다', '', text)
561
- text = re.sub('좇아', '', text)
562
- dick = ["좆", "촟", "조까", "좈", "쫒", "졷", "좃", "줮",
563
- "좋같", "좃같", "좃물", "좃밥", "줫", "좋밥", "좋물", "좇", "조옷까"]
564
- for i in dick:
565
- if i in text:
566
- return True
567
-
568
- damn = ["썅", "씨앙", "씨양", "샤앙", "쌰앙"]
569
- for i in damn:
570
- if i in text:
571
- return True
572
-
573
- swear = ["tq", "qt"]
574
- for i in swear:
575
- if text == i:
576
- return True
577
-
578
- whatthefuck = ["뻑유", "뻐킹", "뻐큐", "빡큐", "뿩큐", "뻑큐", "빡유", "뻒큐"]
579
- for i in whatthefuck:
580
- if i in text:
581
- return True
582
-
583
- shutup = ["닥쳐", "닭쳐", "닥치라", "아가리해"]
584
- for i in shutup:
585
- if i in text:
586
- return True
587
-
588
- text = re.sub(r'[0-9]+', '', newtext)
589
- sonofagun = ["dog새"]
590
- for i in sonofagun:
591
- if i in text:
592
- return True
593
- text = re.sub("[^ㄱ-힣]", "", newtext)
594
- sonofagun = ["개ㅐ색"]
595
- for i in sonofagun:
596
- if i in text:
597
- return True
598
- text = re.sub('0개', '', newtext)
599
- text = re.sub('1개', '', text)
600
- text = re.sub('2개', '', text)
601
- text = re.sub('3개', '', text)
602
- text = re.sub('4개', '', text)
603
- text = re.sub('5개', '', text)
604
- text = re.sub('6개', '', text)
605
- text = re.sub('7개', '', text)
606
- text = re.sub('8개', '', text)
607
- text = re.sub('9개', '', text)
608
- text = re.sub('0개', '', text)
609
- text = re.sub('1년', '', text)
610
- text = re.sub('2년', '', text)
611
- text = re.sub('3년', '', text)
612
- text = re.sub('4년', '', text)
613
- text = re.sub('5년', '', text)
614
- text = re.sub('6년', '', text)
615
- text = re.sub('7년', '', text)
616
- text = re.sub('8년', '', text)
617
- text = re.sub('9년', '', text)
618
- text = re.sub('🐕', '개', text)
619
- text = re.sub('🐦', '새', text)
620
- text = re.sub('재밌게 놈', '', text)
621
- text = re.sub("[^가-힣]", "", text)
622
- text = re.sub('있게', '', text)
623
- text = re.sub('년생', '', text)
624
- text = re.sub('무지개색', '', text)
625
- text = re.sub('떠돌이개', '', text)
626
- text = re.sub('에게', '', text)
627
- text = re.sub('넘는', '', text)
628
- text = re.sub('소개', '', text)
629
- text = re.sub('생긴게', '', text)
630
- text = re.sub('날개같다', '', text)
631
- sonofagun = ["개같", "개가튼", "개쉑", "개스키", "개세끼", "개색히", "개가뇬", "개새기", "개쌔기", "개쌔끼", "쌖", "쎆", "새긔", "개소리", "개년", "개소리",
632
- "개드립", "개돼지", "개씹창", "개간나", "개스끼", "개섹기", "개자식", "개때꺄", "개때끼", "개발남아", "개샛끼", "개가든", "개가뜬", "개가턴", "개가툰", "개가튼",
633
- "개갇은", "개갈보", "개걸레", "개너마", "개너므", "개넌", "개넘", "개녀나", "개년", "개노마", "개노무새끼", "개논", "개놈", "개뇨나", "개뇬", "개뇸", "개뇽", "개눔",
634
- "개느마", "개늠", "개때꺄", "개때끼", "개떼끼", "개랙기", "개련", "개발남아", "개발뇬", "개색", "개색끼", "개샊", "개샛끼", "개샛키", "개샛킹", "개샛히", "개샜끼",
635
- "개생키", "개샠", "개샤끼", "개샤킥", "개샥", "개샹늠", "개세끼", "개세리", "개세키", "개섹히", "개섺", "개셃", "개셋키", "개셐", "개셰리", "개솩", "개쇄끼", "개쇅",
636
- "개쇅끼", "개쇅키", "개쇗", "개쇠리", "개쉐끼", "개쉐리", "개쉐키", "개쉑", "개쉑갸", "개쉑기", "개쉑꺄", "개쉑끼", "개쉑캬", "개쉑키", "개쉑히", "개쉢", "개쉨",
637
- "개쉬끼", "개쉬리", "개쉽", "개스끼", "개스키", "개습", "개습세", "개습쌔", "개싀기", "개싀끼", "개싀밸", "개싀킈", "개싀키", "개싏", "개싑창", "개싘",
638
- "개시끼", "개시퀴", "개시키", "개식기", "개식끼", "개식히", "개십새", "개십팔", "개싯기", "개싯끼", "개싯키", "개싴", "개쌍넘", "개쌍년", "개쌍놈", "개쌍눔",
639
- "개쌍늠", "개쌍연", "개쌍영", "개쌔꺄", "개쌔끼", "개쌕", "개쌕끼", "개쌰깨", "개썅", "개쎄", "개쎅", "개쎼키", "개쐐리", "개쒜", "개쒝", "개쒯", "개쒸", "개쒸빨놈",
640
- "개쒹기", "개쓉", "개쒹기", "개쓉", "개씀", "개씁", "개씌끼", "개씨끼", "개씨팕", "개씨팔", "개잡것", "개잡년", "개잡놈", "개잡뇬", "개젓", "개젖", "개젗", "개졋",
641
- "개졎", "개조또", "개조옷", "개족", "개좃", "개좆", "개좇", "개지랄", "개지럴", "개창년", "개허러", "개허벌년", "개호러", "개호로", "개후랄", "개후레", "개후로",
642
- "개후장", "걔섀끼", "걔잡넘", "걔잡년", "걔잡뇬", "게가튼", "게같은", "게너마", "게년", "게노마", "게놈", "게뇨나", "게뇬", "게뇸", "게뇽", "게눔", "게늠",
643
- "게띠발넘", "게부랄", "게부알", "게새끼", "게새리", "게새키", "게색", "게색기", "게색끼", "게샛키", "게세꺄", "게자지", "게잡넘", "게잡년", "게잡뇬", "게젓",
644
- "게좆", "계같은뇬", "계뇬", "계뇽", "쉬댕", "쉬뎅", "개생끼"]
645
- for i in sonofagun:
646
- if i in text:
647
- return True
648
-
649
- return False
650
-
651
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
652
- def minor(text:str, id: int=None):
653
- global cache_size
654
- if id != None:
655
- if cache_size < 2:
656
- print("korcen: Cache size must be at least 2")
657
- return False
658
- text = save_text(id=id, text=text)
659
-
660
- newtext = text.lower()
661
-
662
- text = re.sub("[^ㄱ-힣]", "", newtext)
663
- text = re.sub(' ', '', text)
664
- text = re.sub('년', '놈', text)
665
- text = re.sub('련', '놈', text)
666
- damnit = ["ㅁㅊ", "ㅁ친", "ㅁ쳤", "aㅣ친", "me친", "미ㅊ", "DI친"]
667
- for i in damnit:
668
- if i+"놈" in text:
669
- return True
670
- text = re.sub("[^가-힣]", "", text)
671
- text = re.sub('거미', '', text)
672
- text = re.sub('친구', '', text)
673
- text = re.sub('개미', '', text)
674
- text = re.sub('이미친', '', text)
675
- text = re.sub('미친증', '', text)
676
- text = re.sub('동그라미', '', text)
677
- text = re.sub('미틴', '미친', text)
678
- text = re.sub('년', '놈', text)
679
- text = re.sub('련', '놈', text)
680
- damnit = ["미친놈", "미친새끼"]
681
- for i in damnit:
682
- if i in text:
683
- return True
684
-
685
- text = re.sub("[^가-힣]", "", text)
686
- picking = ["꼽냐", "꼽니", "꼽나"]
687
- for i in picking:
688
- if i in text:
689
- return True
690
-
691
- text = re.sub("[^가-힣]", "", newtext)
692
- text = re.sub("뒤져봐야", "", text)
693
- text = re.sub("뒤질뻔", "", text)
694
- text = re.sub("뒤져보다", "", text)
695
- text = re.sub("뒤져보는", "", text)
696
- text = re.sub("뒤져보고", "", text)
697
- text = re.sub("뒤져간다", "", text)
698
- text = re.sub("뒤져서", "", text)
699
- text = re.sub("뒤져본", "", text)
700
- text = re.sub("뒤져봄", "", text)
701
- text = re.sub("뒤져볼", "", text)
702
- picking = ["뒤져", "뒈져", "뒈진", "뒈질", "디져라", "디진다", "디질래", "뒤질"]
703
- for i in picking:
704
-
705
- if i in text:
706
- return True
707
-
708
- return False
709
-
710
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
711
- def sexual(text:str, id: int=None):
712
- global cache_size
713
- if id != None:
714
- if cache_size < 2:
715
- print("korcen: Cache size must be at least 2")
716
- return False
717
- text = save_text(id=id, text=text)
718
-
719
- text = re.sub('𝗌', 's', text)
720
- text = re.sub('𝘴', 's', text)
721
- text = re.sub('𝙨', 's', text)
722
- text = re.sub('𝚜', 's', text)
723
- text = re.sub('𝐬', 's', text)
724
- text = re.sub('𝑠', 's', text)
725
- text = re.sub('𝒔', 's', text)
726
- text = re.sub('𝓈', 's', text)
727
- text = re.sub('𝓼', 's', text)
728
- text = re.sub('𝔰', 's', text)
729
- text = re.sub('𝖘', 's', text)
730
- text = re.sub('𝕤', 's', text)
731
- text = re.sub('s', 's', text)
732
- text = re.sub('ş', 's', text)
733
- text = re.sub('ⓢ', 's', text)
734
- text = re.sub('⒮', 's', text)
735
- text = re.sub('🅢', 's', text)
736
- text = re.sub('🆂', 's', text)
737
- text = re.sub('🅂', 's', text)
738
- text = re.sub('𝑺', 's', text)
739
- text = re.sub('𝖾', 'e', text)
740
- text = re.sub('𝘦', 'e', text)
741
- text = re.sub('𝙚', 'e', text)
742
- text = re.sub('𝚎', 'e', text)
743
- text = re.sub('𝐞', 'e', text)
744
- text = re.sub('𝑒', 'e', text)
745
- text = re.sub('𝒆', 'e', text)
746
- text = re.sub('ℯ', 'e', text)
747
- text = re.sub('𝓮', 'e', text)
748
- text = re.sub('𝔢', 'e', text)
749
- text = re.sub('𝖊', 'e', text)
750
- text = re.sub('𝕖', 'e', text)
751
- text = re.sub('e', 'e', text)
752
- text = re.sub('ė', 'e', text)
753
- text = re.sub('ⓔ', 'e', text)
754
- text = re.sub('⒠', 'e', text)
755
- text = re.sub('🅔', 'e', text)
756
- text = re.sub('🅴', 'e', text)
757
- text = re.sub('🄴', 'e', text)
758
- text = re.sub('є', 'e', text)
759
- text = re.sub('𝗑', 'x', text)
760
- text = re.sub('𝘹', 'x', text)
761
- text = re.sub('𝙭', 'x', text)
762
- text = re.sub('𝚡', 'x', text)
763
- text = re.sub('𝐱', 'x', text)
764
- text = re.sub('𝑥', 'x', text)
765
- text = re.sub('𝒙', 'x', text)
766
- text = re.sub('𝓍', 'x', text)
767
- text = re.sub('𝔁', 'x', text)
768
- text = re.sub('𝔵', 'x', text)
769
- text = re.sub('𝖝', 'x', text)
770
- text = re.sub('𝕩', 'x', text)
771
- text = re.sub('x', 'x', text)
772
- text = re.sub('ⓧ', 'x', text)
773
- text = re.sub('⒳', 'x', text)
774
- text = re.sub('🅧', 'x', text)
775
- text = re.sub('🆇', 'x', text)
776
- text = re.sub('🅇', 'x', text)
777
- text = re.sub('₨', 'rs', text)
778
- text = re.sub('ų', 'u', text)
779
- text = re.sub('ç', 'c', text)
780
- text = re.sub('F', 'F', text)
781
- text = re.sub('K', 'K', text)
782
- text = re.sub('C', 'C', text)
783
- text = re.sub('U', 'U', text)
784
- newtext = text.lower()
785
-
786
- text = re.sub(' ', '', text)
787
- pussy = ["ⓑⓞⓩⓘ", "bozi", "보ㅈㅣ"]
788
- for i in pussy:
789
- if i in text:
790
- return True
791
- text = re.sub('보지도 못', '', newtext)
792
- text = re.sub('보지도 않', '', text)
793
- text = re.sub('인가 보지', '', text)
794
- text = re.sub('면접 보지', '', text)
795
- text = re.sub('영화 보지', '', text)
796
- text = re.sub('애니 보지', '', text)
797
- text = re.sub('만화 보지', '', text)
798
- text = re.sub('사진 보지', '', text)
799
- text = re.sub('그림 보지', '', text)
800
- text = re.sub('면접보지', '', text)
801
- text = re.sub('영화보지', '', text)
802
- text = re.sub('애니보지', '', text)
803
- text = re.sub('만화보지', '', text)
804
- text = re.sub('사진보지', '', text)
805
- text = re.sub('그림보지', '', text)
806
- text = re.sub('을 보지', '', text)
807
- text = re.sub('나 보지', '', text)
808
- text = re.sub('못 보지', '', text)
809
- text = re.sub('안 보지', '', text)
810
- text = re.sub('왜 보지', '', text)
811
- text = re.sub('뭐 보지', '', text)
812
- text = re.sub('다 보지', '', text)
813
- text = re.sub('빨리 보지', '', text)
814
- text = re.sub('보지도 마', '', text)
815
- text = re.sub('보지는 않', '', text)
816
- text = re.sub('보지안으', '', text)
817
- text = re.sub('보지안아', '', text)
818
- text = re.sub('게 보지', '', text)
819
- text = re.sub('어케 보지', '', text)
820
- text = re.sub("[^ㄱ-힣]", "", text)
821
- text = re.sub('보g', '보지', text)
822
- text = re.sub('하나보지', '', text)
823
- text = re.sub('켜보지', '', text)
824
- text = re.sub('보지맙', '', text)
825
- text = re.sub('초보지', '', text)
826
- text = re.sub('로보지', '', text)
827
- text = re.sub('가보지', '', text)
828
- text = re.sub('홍보지', '', text)
829
- text = re.sub('서보지', '', text)
830
- text = re.sub('보지금', '', text)
831
- text = re.sub('보지못', '', text)
832
- text = re.sub('정지금', '', text)
833
- text = re.sub('걸보지', '', text)
834
- text = re.sub('보지는', '', text)
835
- text = re.sub('보지지', '', text)
836
- text = re.sub('보지않', '', text)
837
- text = re.sub('해보지', '', text)
838
- text = re.sub('보지마', '', text)
839
- text = re.sub('보지말', '', text)
840
- text = re.sub('맛보지를', '', text)
841
- text = re.sub('후보지를', '', text)
842
- text = re.sub('힘내보지', '', text)
843
- text = re.sub('안보지만', '', text)
844
- text = re.sub('정보', '', text)
845
- text = re.sub('지팡이', '', text)
846
- text = re.sub('행보', '', text)
847
- text = re.sub('바보지', '', text)
848
- text = re.sub('바보짓', '', text)
849
- text = re.sub('물어보지', '', text)
850
- text = re.sub('하시나보지', '', text)
851
- text = re.sub('오', '', text)
852
- pussy = ["보지", "버지물", "버짓물", "보짓", "ⓑⓞⓩⓘ",
853
- "bozi", "개보즤", "개보지", "버지벌렁벌렁", "보짖", "뵤즤", "봊이"]
854
- for i in pussy:
855
- if i in text:
856
- return True
857
-
858
- dicks = ["ja지"]
859
- for i in dicks:
860
- if i in newtext:
861
- return True
862
- text = re.sub("[^ㄱ-힣]", "", newtext)
863
- onahole = ["ㅈㅈ빨", "자ㅈ", "ㅈ지빨"]
864
- for i in onahole:
865
- if i in text:
866
- return True
867
- text = re.sub('언제 자지', '', newtext)
868
- text = re.sub('언제자지', '', text)
869
- text = re.sub('잠 자지', '', text)
870
- text = re.sub('자지 말자고', '', text)
871
- text = re.sub(' 지급', '', text)
872
- text = re.sub('남자지', '', text)
873
- text = re.sub('여자지', '', text)
874
- text = re.sub('감자지', '', text)
875
- text = re.sub('왁자지', '', text)
876
- text = re.sub('자지러', '', text)
877
- text = re.sub('개발자', '', text)
878
- text = re.sub('관리자', '', text)
879
- text = re.sub('약탈자', '', text)
880
- text = re.sub('타자지', '', text)
881
- text = re.sub('혼자', '', text)
882
- text = re.sub('자지원', '', text)
883
- text = re.sub('사용자', '', text)
884
- text = re.sub('경력자', '', text)
885
- text = re.sub('지식', '', text)
886
- text = re.sub('자지마', '', text)
887
- text = re.sub('자지말', '', text)
888
- text = re.sub('지원자', '', text)
889
- text = re.sub('부자지', '', text)
890
- text = re.sub('혜자지', '', text)
891
- text = re.sub('잘 자지', '', text)
892
- text = re.sub('일자지', '', text)
893
- text = re.sub('일찍 자지', '', text)
894
- text = re.sub('지원', '', text)
895
- text = re.sub('자지금', '', text)
896
- text = re.sub("[^ㄱ-힣]", "", text)
897
- text = re.sub('늦게자지만', '', text)
898
- text = re.sub('자지않', '', text)
899
- text = re.sub('어케자지', '', text)
900
- text = re.sub('자지도마', '', text)
901
- text = re.sub('자지는않', '', text)
902
- text = re.sub('자지좀마', '', text)
903
- text = re.sub('안자지', '', text)
904
- text = re.sub('못자지', '', text)
905
- text = re.sub('자지금', '', text)
906
- text = re.sub('남자지만', '', text)
907
- text = re.sub('여자지만', '', text)
908
- text = re.sub('지지자지만', '', text)
909
- text = re.sub('흡연자지만', '', text)
910
- text = re.sub('유권자지만', '', text)
911
- text = re.sub('기자지만', '', text)
912
- text = re.sub('감염자지만', '', text)
913
- text = re.sub('최강자지만', '', text)
914
- text = re.sub('수배자지만', '', text)
915
- text = re.sub('놀랠노자지만', '', text)
916
- text = re.sub('제자지만', '', text)
917
- text = re.sub('설립자지만', '', text)
918
- text = re.sub('지건', '', text)
919
- text = re.sub('감자', '', text)
920
- text = re.sub('아', '', text)
921
- dicks = ["자지", "자짓", "잦이", "쟈지"]
922
- for i in dicks:
923
- if i in text:
924
- return True
925
-
926
- text = re.sub('cess', '', newtext)
927
- text = re.sub("```css", "", text)
928
- text = re.sub("ex\)", "", text)
929
- text = re.sub('exit', '', text)
930
- text = re.sub('ext', '', text)
931
- text = re.sub('images', '', text)
932
- text = re.sub('https', '', text)
933
- text = re.sub("\(ex", "", text)
934
- text = re.sub(".ex", "", text)
935
- text = re.sub('physics', '', text)
936
- text = re.sub('features', '', text)
937
- text = re.sub('exam', '', text)
938
- text = re.sub('phase', '', text)
939
- text = re.sub('except', '', text)
940
- text = re.sub('sexual', '', text)
941
- text = re.sub('sexy', '', text)
942
- text = re.sub('[^a-z]', '', text)
943
- sex = ["sex", "s스", "x스", "se스", "se스", "s스",
944
- "ㅅㅅ", "s하고e싶다x", "ㅅㅔㅅㄱ", "이=스", "ㅇl=스"]
945
- for i in sex:
946
- if i in text:
947
- return True
948
- text = re.sub(r'\^', 'ㅅ', newtext)
949
- text = re.sub('엑섹스', '', text)
950
- text = re.sub('엑', '', text)
951
- text = re.sub('0ㅑ', '야', text)
952
- text = re.sub("[^ㄱ-힣]", "", text)
953
- sex = ["ㅅㅔㄱ스", "섹ㅅ", "ㅅ스", "세ㄱㅅ", "ㅅㅔㄱㅅ"]
954
- for i in sex:
955
- if i in text:
956
- return True
957
-
958
- text = re.sub("야스오", "", text)
959
- text = re.sub("크시야", "", text)
960
- text = re.sub("카구야", "", text)
961
- text = re.sub("스파이", "", text)
962
- text = re.sub("말이야", "", text)
963
- text = re.sub("스티브", "", text)
964
- text = re.sub("스쿼드", "", text)
965
- text = re.sub("파랑색", "", text)
966
- text = re.sub("오야스미", "", text)
967
- text = re.sub("노란색", "", text)
968
- text = re.sub("빨간색", "", text)
969
- text = re.sub("초록색", "", text)
970
- text = re.sub("보라색", "", text)
971
- text = re.sub("청색", "", text)
972
- text = re.sub("보라색", "", text)
973
- text = re.sub("핑크색", "", text)
974
- text = re.sub("남색", "", text)
975
- text = re.sub("검은색", "", text)
976
- text = re.sub("하양색", "", text)
977
- text = re.sub("주황색", "", text)
978
- text = re.sub("연두색", "", text)
979
- text = re.sub("스공", "", text)
980
- text = re.sub("스시", "", text)
981
- text = re.sub("스키장", "", text)
982
- text = re.sub("스킨", "", text)
983
- text = re.sub('스킬', '', text)
984
- text = re.sub('스틸', '', text)
985
- text = re.sub('스탑', '', text)
986
- text = re.sub('스트레스', '', text)
987
- text = re.sub('해야', '', text)
988
- text = re.sub('카시야스', '', text)
989
- text = re.sub('야스톤', '', text)
990
- text = re.sub('유니섹스', '', text)
991
- text = re.sub("스튜디오", "", text)
992
- text = re.sub("[^가-힣]", "", text)
993
- sex = ["섹스", "섻", "쉑스", "섿스", "섹그", "야스", "색스", "셱스", "섁스", "세엑스", "썩스", "섹수", "섹파", "섹하자", "쉐스", "쉑스", "쉐엑스", "색수", "세엑수우", "섹하고",
994
- "섹하구", "섹하자", "섹하장", "섹하쟈", "섹한번", "쌕스"]
995
- for i in sex:
996
- if i in text:
997
- return True
998
-
999
- dick = ["꼬3", "꼬툭튀", "꼬톡튀"]
1000
- for i in dick:
1001
- if i in text:
1002
- return True
1003
-
1004
- text = re.sub("[^가-힣]", "", newtext)
1005
- fireegg = ["불알", "부랄", "뽕알", "뿅알", "뿌랄", "뿔알", "개부달",
1006
- "개부랄", "개부러럴", "개부럴", "개부뢀", "개부알", "개불알", "똘추", "똥구멍", "부라랄"]
1007
- for i in fireegg:
1008
- if i in text:
1009
- return True
1010
-
1011
- text = re.sub("[^ㄱ-힣]", "", newtext)
1012
- onahole = ["오나홍", "오나홀", "ㅇㄴ홀", "텐가", "바이브레이터", "오ㄴ홀", "ㅇ나홀"]
1013
- for i in onahole:
1014
- if i in text:
1015
- return True
1016
-
1017
- text = re.sub("[^가-힣]", "", newtext)
1018
- sex = ["씹하다"]
1019
- for i in sex:
1020
- if i in text:
1021
- return True
1022
-
1023
- text = re.sub("[^가-힣]", "", newtext)
1024
- onahole = ["매춘부", "성노예"]
1025
- for i in onahole:
1026
- if i in text:
1027
- return True
1028
-
1029
- text = re.sub("[^가-힣]", "", newtext)
1030
- onahole = ["자궁문신"]
1031
- for i in onahole:
1032
- if i in text:
1033
- return True
1034
-
1035
- text = re.sub("[^가-힣]", "", newtext)
1036
- onahole = ["모유물", "로리물", "근친상간", "룸섹스", "원조교재", "속박플레이", "야외플레이"]
1037
- for i in onahole:
1038
- if i in text:
1039
- return True
1040
-
1041
- text = re.sub("[^가-힣]", "", newtext)
1042
- text = re.sub("위대한", "", text)
1043
- text = re.sub("소유자", "", text)
1044
- text = re.sub("작업자", "", text)
1045
- text = re.sub("자기위로", "자위", text)
1046
- text = re.sub("위대하지", "", text)
1047
- text = re.sub("암살자", "", text)
1048
- text = re.sub("학자", "", text)
1049
- onahole = ["딸딸이", "질싸", "안에사정", "자위남", "자위녀", "폰섹", "포르노", "폰세엑", "폰쉑", "폰쎅", "질내사정", "그룹섹", "남창", "男色", "누워라이년아",
1050
- "누웠냐씨방새", "다리벌려", "대줄년", "뒤로너어줘", "딸따뤼", "딸쳐", "떡쳐라", "막대쑤셔줘", "막대핥아줘", "먹고보니내딸", "먹고보니누나", "먹고보니딸",
1051
- "먹고보니똥개", "먹고보니엄마", "먹고보니응아", "먹고보니재수", "먹고보니처제", "먹고보니형수", "몸뚱이줄께", "몸안에사정", "밖에다쌀께", "박고빼고",
1052
- "배위에싸죠", "몸의대화", "섹할", "섹해"]
1053
- for i in onahole:
1054
- if i in text:
1055
- return True
1056
-
1057
- onahole = ["g스팟", "지스팟"]
1058
- for i in onahole:
1059
- if i in newtext:
1060
- return True
1061
-
1062
- text = re.sub("[^가-힣]", "", newtext)
1063
- onahole = ["크리토리스", "클리토리스", "페니스", "애널"]
1064
- for i in onahole:
1065
- if i in text:
1066
- return True
1067
-
1068
- text = re.sub("[^가-힣]", "", newtext)
1069
- onahole = ["젖까", "젖가튼", "젖나", "젖만"]
1070
- for i in onahole:
1071
- if i in text:
1072
- return True
1073
-
1074
- onahole = ["ja위"]
1075
- for i in onahole:
1076
- if i in text:
1077
- return True
1078
- text = re.sub("[^가-힣]", "", newtext)
1079
- text = re.sub('개발자', '', text)
1080
- text = re.sub('관리자', '', text)
1081
- text = re.sub('약탈자', '', text)
1082
- text = re.sub('사용자', '', text)
1083
- text = re.sub('지원자', '', text)
1084
- text = re.sub("위대한", "", text)
1085
- text = re.sub("소유자", "", text)
1086
- text = re.sub("작업자", "", text)
1087
- text = re.sub("자기위로", "자위", text)
1088
- onahole = ["자위", "고자새끼", "고츄", "꺼추", "꼬추"]
1089
- for i in onahole:
1090
- if i in text:
1091
- return True
1092
-
1093
- if "freenude" in text:
1094
- return True
1095
-
1096
- return False
1097
-
1098
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1099
- def belittle(text:str, id: int=None):
1100
- global cache_size
1101
- if id != None:
1102
- if cache_size < 2:
1103
- print("korcen: Cache size must be at least 2")
1104
- return False
1105
- text = save_text(id=id, text=text)
1106
-
1107
- text = text.lower()
1108
- newtext = re.sub(' ', '', text)
1109
-
1110
- text = re.sub('뇬', '련', newtext)
1111
- text = re.sub('놈', '련', text)
1112
- text = re.sub('넘', '련', text)
1113
- belittling = ["10련"]
1114
- for i in belittling:
1115
- if i in text:
1116
- return True
1117
- text = re.sub('련', '년', newtext)
1118
- text = re.sub('뇬', '년', text)
1119
- text = re.sub('놈', '년', text)
1120
- text = re.sub('넘', '년', text)
1121
- text = re.sub('나같은년', '', text)
1122
- text = re.sub('러운지', '', text)
1123
- text = re.sub('지킬 앤 하이드', '', text)
1124
- text = re.sub('지킬앤하이드', '', text)
1125
- text = re.sub('지킬 엔 하이드', '', text)
1126
- text = re.sub('지킬엔하이드', '', text)
1127
- text = re.sub('려운지', '', text)
1128
- text = re.sub('무서운지', '', text)
1129
- text = re.sub('라운지', '', text)
1130
- text = re.sub('운지법', '', text)
1131
- text = re.sub('싸운지', '', text)
1132
- text = re.sub('운지버섯', '', text)
1133
- text = re.sub('운 지린다', '', text)
1134
- text = re.sub('깔보다', '', text)
1135
- text = re.sub('깔보시', '', text)
1136
- text = re.sub('1년', '', text)
1137
- text = re.sub('2년', '', text)
1138
- text = re.sub('3년', '', text)
1139
- text = re.sub('4년', '', text)
1140
- text = re.sub('5년', '', text)
1141
- text = re.sub('6년', '', text)
1142
- text = re.sub('7년', '', text)
1143
- text = re.sub('8년', '', text)
1144
- text = re.sub('9년', '', text)
1145
- text = re.sub('0년', '', text)
1146
- text = re.sub('싸가지고', '', text)
1147
- text = re.sub("[^가-힣]", "", text)
1148
- text = re.sub('더운지역', '', text)
1149
- text = re.sub('나따까리', '', text)
1150
- belittling = ["따까리", "장애년", "찐따년", "싸가지", "창년", "썅년", "버러지", "고아년", "고아년", "개간년", "종간나", "도구년", "걸래년", "썅년", "씹년", "개걸레",
1151
- "창녀", "머저리", "씹쓰래기", "씹쓰레기", "씹장생", "씹자식", "운지", "급식충", "틀딱충", "조센징", "매국노", "똥꼬충", "진지충", "듣보잡", "개찐따",
1152
- "한남충", "정신병자", "중생아", "돌팔이", "김치녀", "폰팔이", "틀딱년", "같은년", "개돼중", "쓰글년", "썩을년", "썩글년", "씹할", "거지새끼", "거지쉐뀌",
1153
- "거지쉑이", "거지쎄끼", "거지쒜리", "걸래가튼", "걸래넘", "걸래년", "걸래놈", "걸레가튼", "걸레년", "그지새끼", "그지새키", "그지색", "기집년", "까진년",
1154
- "깔보", "난잡년", "빡대가리", "더러운년", "돌아이", "또라이", "장애려", "샹놈", "김치남", "김치녀", "혜지련", "한유남충", "페미나치", "페미년", "꼴페미",
1155
- "개장애"]
1156
- for i in belittling:
1157
- if i in text:
1158
- return True
1159
-
1160
- return False
1161
-
1162
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1163
- def race(text:str, id: int=None):
1164
- global cache_size
1165
- if id != None:
1166
- if cache_size < 2:
1167
- print("korcen: Cache size must be at least 2")
1168
- return False
1169
- text = save_text(id=id, text=text)
1170
-
1171
- text = text.lower()
1172
- newtext = re.sub(' ', '', text)
1173
-
1174
- text = re.sub("[^가-힣]", "", newtext)
1175
- text = re.sub('흑형님', '', text)
1176
- nigger = ["깜둥이", "흑형", "조센진", "짱개", "짱깨",
1177
- "짱께", "짱게", "쪽바리", "쪽파리", "빨갱이", "쪽바리", "니그로", "코쟁이", "칭총", "칭챙총", "섬숭이", "왜놈", "짱꼴라", "짱깨", "섬짱깨"]
1178
- for i in nigger:
1179
- if i in text:
1180
- return True
1181
-
1182
- return False
1183
-
1184
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1185
- def parent(text:str, id: int=None):
1186
- global cache_size
1187
- if id != None:
1188
- if cache_size < 2:
1189
- print("korcen: Cache size must be at least 2")
1190
- return False
1191
- text = save_text(id=id, text=text)
1192
-
1193
- text = text.lower()
1194
- newtext = re.sub(' ', '', text)
1195
-
1196
- your = ["ㄴ1ㄱ", "ㄴ1ㅁ", "느금ㅁ", "ㄴㄱ마", "ㄴㄱ빠", "ㄴ금빠", "ㅇH미", "ㄴ1에미", "늬애미", "@ㅐ미", "@ㅐ비"]
1197
- for i in your:
1198
- if i in newtext:
1199
- return True
1200
- text = re.sub("[^ㄱ-힣]", "", newtext)
1201
- text = re.sub('ㄴㄴ', '', text)
1202
- text = re.sub('미국', '', text)
1203
- your = ["ㄴㄱㅁ", "ㄴ금마", "느금ㅁ", "ㄴㄱ마", "ㄴㄱ빠", "ㄴ금빠", "ㄴ미", "늬금마"]
1204
- for i in your:
1205
- if i in text:
1206
- return True
1207
- text = re.sub("[^가-힣]", "", newtext)
1208
- text = re.sub('엄창못', '', text)
1209
- text = re.sub('l', 'ㅣ', text)
1210
- text = re.sub('1', 'ㅣ', text)
1211
- text = re.sub('ㄴㅣ', '니', text)
1212
- text = re.sub('ㅇㅣ-ㅣ', '애', text)
1213
- text = re.sub('ㅁㅣ', '미', text)
1214
- your = ["느금마", "느그엄마", "늑엄마", "늑금마", "느그애미", "넉엄마", "느그부모", "느그애비", "느금빠", "느그메", "느그빠", "니미씨", "니미씹",
1215
- "느그마", "니엄마", "엄창", "엠창", "니미럴", "누굼마", "느금", "내미랄", "내미럴", "엄마없는", "아빠없는", "노에미"]
1216
- for i in your:
1217
- if i in text:
1218
- return True
1219
-
1220
- text = re.sub("[^가-힣]", "", newtext)
1221
- text = re.sub("도", "", text)
1222
- motherfuck = ["니애미", "노애미", "노앰", "앰뒤련", "애믿쥐",
1223
- "아버지없는게", "애미없는게", "애비없는게", "어머니없는게", "엄마없네", "니애비", "노애비", "애미없", "애비없", "애미뒤", "애비뒤",
1224
- "니아빠", "너에미", "눼기미", "뉘귀미", "뉘기미", "뉘김이", "뉘뮈", "뉘미랄", "뉘미럴", "뉘미롤", "뉘밀얼", "뉘밀할", "뉘어미", "뉘에미",
1225
- "느검마", "늬긔미", "늬기미", "니기미", "니믜창", "니미랄", "니미럴", "니미쒸블", "니미씨펄넘", "니미좃", "니밀할", "니부랑", "니뽕좃",
1226
- "애미죽", "애미디진"]
1227
- for i in motherfuck:
1228
- if i in text:
1229
- return True
17
+ colorama.init(autoreset=True)
1230
18
 
1231
- return False
1232
19
 
1233
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1234
- def english(text:str, id: int=None):
1235
- global cache_size
1236
- if id != None:
1237
- if cache_size < 2:
1238
- print("korcen: Cache size must be at least 2")
1239
- return False
1240
- text = save_text(id=id, text=text)
1241
-
1242
- text = re.sub('𝗌', 's', text)
1243
- text = re.sub('𝘴', 's', text)
1244
- text = re.sub('𝙨', 's', text)
1245
- text = re.sub('𝚜', 's', text)
1246
- text = re.sub('𝐬', 's', text)
1247
- text = re.sub('𝑠', 's', text)
1248
- text = re.sub('𝒔', 's', text)
1249
- text = re.sub('𝓈', 's', text)
1250
- text = re.sub('𝓼', 's', text)
1251
- text = re.sub('𝔰', 's', text)
1252
- text = re.sub('𝖘', 's', text)
1253
- text = re.sub('𝕤', 's', text)
1254
- text = re.sub('s', 's', text)
1255
- text = re.sub('ş', 's', text)
1256
- text = re.sub('ⓢ', 's', text)
1257
- text = re.sub('⒮', 's', text)
1258
- text = re.sub('🅢', 's', text)
1259
- text = re.sub('🆂', 's', text)
1260
- text = re.sub('🅂', 's', text)
1261
- text = re.sub('𝑺', 's', text)
1262
- text = re.sub('𝖾', 'e', text)
1263
- text = re.sub('𝘦', 'e', text)
1264
- text = re.sub('𝙚', 'e', text)
1265
- text = re.sub('𝚎', 'e', text)
1266
- text = re.sub('𝐞', 'e', text)
1267
- text = re.sub('𝑒', 'e', text)
1268
- text = re.sub('𝒆', 'e', text)
1269
- text = re.sub('ℯ', 'e', text)
1270
- text = re.sub('𝓮', 'e', text)
1271
- text = re.sub('𝔢', 'e', text)
1272
- text = re.sub('𝖊', 'e', text)
1273
- text = re.sub('𝕖', 'e', text)
1274
- text = re.sub('e', 'e', text)
1275
- text = re.sub('ė', 'e', text)
1276
- text = re.sub('ⓔ', 'e', text)
1277
- text = re.sub('⒠', 'e', text)
1278
- text = re.sub('🅔', 'e', text)
1279
- text = re.sub('🅴', 'e', text)
1280
- text = re.sub('🄴', 'e', text)
1281
- text = re.sub('є', 'e', text)
1282
- text = re.sub('𝗑', 'x', text)
1283
- text = re.sub('𝘹', 'x', text)
1284
- text = re.sub('𝙭', 'x', text)
1285
- text = re.sub('𝚡', 'x', text)
1286
- text = re.sub('𝐱', 'x', text)
1287
- text = re.sub('𝑥', 'x', text)
1288
- text = re.sub('𝒙', 'x', text)
1289
- text = re.sub('𝓍', 'x', text)
1290
- text = re.sub('𝔁', 'x', text)
1291
- text = re.sub('𝔵', 'x', text)
1292
- text = re.sub('𝖝', 'x', text)
1293
- text = re.sub('𝕩', 'x', text)
1294
- text = re.sub('x', 'x', text)
1295
- text = re.sub('ⓧ', 'x', text)
1296
- text = re.sub('⒳', 'x', text)
1297
- text = re.sub('🅧', 'x', text)
1298
- text = re.sub('🆇', 'x', text)
1299
- text = re.sub('🅇', 'x', text)
1300
- text = re.sub('₨', 'rs', text)
1301
- text = re.sub('ų', 'u', text)
1302
- text = re.sub('ç', 'c', text)
1303
- text = re.sub('F', 'F', text)
1304
- text = re.sub('K', 'K', text)
1305
- text = re.sub('C', 'C', text)
1306
- text = re.sub('U', 'U', text)
1307
- newtext = text.lower()
1308
-
1309
-
1310
- text = re.sub("```css", "", newtext)
1311
- text = re.sub("ex\)", "", text)
1312
- text = re.sub("\*", "", text)
1313
- text = re.sub("omg", "", text)
1314
- censored_text = profanity.censor(text, '▩')
1315
- if '▩' in censored_text:
1316
- return True
20
+ cache_size = 0
21
+ cache = OrderedDict()
1317
22
 
1318
- return False
1319
23
 
1320
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1321
- def japanese(text:str, id: int=None):
1322
- global cache_size
1323
- if id != None:
24
+ SINGLE_CHAR_NORMALIZATION_MAP = {
25
+ '𝗌': 's', '𝘴': 's', '𝙨': 's', '𝚜': 's', '𝐬': 's', '𝑠': 's', '𝒔': 's', '𝓈': 's', '𝓼': 's', '𝔰': 's', '𝖘': 's', '𝕤': 's',
26
+ 's': 's', 'ş': 's', 'ⓢ': 's', '⒮': 's', '🅢': 's', '🆂': 's', '🅂': 's', '𝑺': 's', 'ſ': 's', 'š': 's', 'ś': 's', 'ŝ': 's',
27
+ 'ṣ': 's', 'ṡ': 's', 'ș': 's', 'ṥ': 's', 'ṧ': 's', 'ṩ': 's', '$': 's', '5': 's',
28
+
29
+ '𝖾': 'e', '𝘦': 'e', '𝙚': 'e', '𝚎': 'e', '𝐞': 'e', '𝑒': 'e', '𝒆': 'e', 'ℯ': 'e', '𝓮': 'e', '𝔢': 'e', '𝖊': 'e', '𝕖': 'e',
30
+ 'e': 'e', 'ė': 'e', 'ⓔ': 'e', '⒠': 'e', '🅔': 'e', '🅴': 'e', '🄴': 'e', 'є': 'e', 'ê': 'e', 'ë': 'e', 'é': 'e', 'è': 'e',
31
+ 'ē': 'e', 'ĕ': 'e', 'ě': 'e', 'ę': 'e', 'ẹ': 'e', 'ẻ': 'e', 'ẽ': 'e', 'ế': 'e', 'ề': 'e', 'ệ': 'e', 'ễ': 'e', 'ể': 'e',
32
+ '3': 'e', '€': 'e',
33
+
34
+ '𝗑': 'x', '𝘹': 'x', '𝙭': 'x', '𝚡': 'x', '𝐱': 'x', '𝑥': 'x', '𝒙': 'x', '𝓍': 'x', '𝔁': 'x', '𝔵': 'x', '𝖝': 'x', '𝕩': 'x',
35
+ 'x': 'x', 'ⓧ': 'x', '⒳': 'x', '🅧': 'x', '🆇': 'x', '🅇': 'x', '×': 'x', '✕': 'x', '✖': 'x', '❌': 'x', '⨯': 'x',
36
+ '⚔': 'x', '*': 'x', '✗': 'x', '✘': 'x',
37
+
38
+ 'ų': 'u', 'ü': 'u', 'ú': 'u', 'ù': 'u', 'û': 'u', 'ũ': 'u', 'ū': 'u', 'ŭ': 'u', 'ů': 'u', 'ű': 'u', 'ụ': 'u', 'ư': 'u',
39
+ 'ç': 'c', 'ć': 'c', 'ĉ': 'c', 'č': 'c', 'ċ': 'c', '¢': 'c', '©': 'c', 'ḉ': 'c', '(': 'c', '<': 'c',
40
+ 'F': 'F', 'Ḟ': 'F', 'Ƒ': 'F', 'ℱ': 'F', 'Ꞙ': 'F', 'Ꝼ': 'F',
41
+ 'K': 'K', 'Ḱ': 'K', 'Ǩ': 'K', 'Ḳ': 'K', 'Ḵ': 'K', 'Ⱪ': 'K', 'Ꝁ': 'K',
42
+ 'C': 'C', 'Ć': 'C', 'Ĉ': 'C', 'Č': 'C', 'Ċ': 'C', 'Ç': 'C', 'Ḉ': 'C',
43
+ 'U': 'U', 'Ú': 'U', 'Ù': 'U', 'Û': 'U', 'Ũ': 'U', 'Ū': 'U', 'Ŭ': 'U', 'Ů': 'U', 'Ű': 'U', 'Ụ': 'U',
44
+
45
+ 'ㅗ': 'ㅗ', '┻': 'ㅗ', '┴': 'ㅗ', '┹': 'ㅗ', '⊥': 'ㅗ', '†': 'ㅗ', '⟂': 'ㅗ', '╨': 'ㅗ', '╧': 'ㅗ', '╥': 'ㅗ',
46
+ '^': 'ㅅ', '人': 'ㅅ', '∧': 'ㅅ', '㉦': 'ㅅ', 'ᐲ': 'ㅅ', 'Λ': 'ㅅ', '⩘': 'ㅅ', '⋀': 'ㅅ', '⩚': 'ㅅ',
47
+ '甘': 'ㅂ', '廿': 'ㅂ', 'ᗨ': 'ㅂ', 'ᗐ': 'ㅂ', 'ᗕ': 'ㅂ', '田': 'ㅂ', '口': 'ㅂ', '日': 'ㅂ', '目': 'ㅂ', '囗': 'ㅂ',
48
+ '己': 'ㄹ', '乙': 'ㄹ', '己': 'ㄹ', '已': 'ㄹ', '巳': 'ㄹ', '匚': 'ㄷ',
49
+ '卜': 'ㅏ', 'r': 'ㅏ', 'F': 'ㅏ', '丨': 'ㅏ', '|': 'ㅏ', 'ㅣ': 'ㅏ', '/': 'ㅏ', '⼃': 'ㅏ', '⼁': 'ㅏ', '⼂': 'ㅏ',
50
+ 'l': 'ㅣ', '1': 'ㅣ', '|': 'ㅣ', 'I': 'ㅣ', '!': 'ㅣ', '¦': 'ㅣ', '|': 'ㅣ', '¦': 'ㅣ', 'І': 'ㅣ', 'Ӏ': 'ㅣ',
51
+ 'H': 'ㅐ', 'ㅖ': 'ㅐ', 'ㅒ': 'ㅐ', 'H': 'ㅐ', 'Н': 'ㅐ', 'Ⲏ': 'ㅐ', 'ℍ': 'ㅐ',
52
+ '🐦': '새', '🐔': '새', '🦅': '새', '🦉': '새', '🦆': '새', '🦜': '새', '🦤': '새', '🦢': '새', '🕊': '새',
53
+ '🐕': '개', '🐶': '개', '🐺': '개',
54
+ '丕': '조', '朝': '조', '則': '조', '兆': '조', '組': '조', '早': '조', '鳥': '조', '潮': '조', '照': '조',
55
+ '0': 'ㅇ', 'O': 'ㅇ', 'o': 'ㅇ', '◯': 'ㅇ', '⭕': 'ㅇ', '○': 'ㅇ', '●': 'ㅇ', '◎': 'ㅇ', '◉': 'ㅇ', '◌': 'ㅇ',
56
+
57
+ 'a': 'a', '@': 'a', '4': 'a', 'α': 'a', 'ä': 'a', 'å': 'a', 'ã': 'a', 'ā': 'a', 'ȧ': 'a', 'ǎ': 'a',
58
+ 'b': 'b', '8': 'b', '6': 'b', 'ƃ': 'b', 'ɓ': 'b', 'Ƅ': 'b', 'ℬ': 'b', 'ᖯ': 'b', 'ᑲ': 'b',
59
+ 'd': 'd', 'ḋ': 'd', 'ḍ': 'd', 'ᑯ': 'd', 'ᗞ': 'd', 'ᗪ': 'd', 'ᖙ': 'd', 'ⅆ': 'd', 'ɗ': 'd',
60
+ 'f': 'f', 'ƒ': 'f', 'ḟ': 'f', 'ſ': 'f', 'ⅎ': 'f', 'ᶂ': 'f', 'ꜰ': 'f', 'ꟻ': 'f',
61
+ 'g': 'g', '9': 'g', 'ǥ': 'g', 'ɡ': 'g', 'ġ': 'g', 'ģ': 'g', 'ĝ': 'g', 'ǧ': 'g',
62
+ 'h': 'h', 'ĥ': 'h', 'ħ': 'h', 'ƕ': 'h', 'ḥ': 'h', 'ḫ': 'h', 'ⱨ': 'h', 'ꜧ': 'h',
63
+ 'i': 'i', '1': 'i', '!': 'i', '|': 'i', 'ī': 'i', 'ĭ': 'i', 'ǐ': 'i', 'į': 'i',
64
+ 'j': 'j', 'ĵ': 'j', 'ǰ': 'j', 'ȷ': 'j', 'ɉ': 'j', 'ⱼ': 'j', 'ʝ': 'j', 'ɟ': 'j',
65
+ 'k': 'k', 'ķ': 'k', 'ƙ': 'k', 'ǩ': 'k', 'ḱ': 'k', 'ḳ': 'k', 'ḵ': 'k', 'ⱪ': 'k',
66
+ 'l': 'l', '1': 'l', '|': 'l', 'ĺ': 'l', 'ļ': 'l', 'ľ': 'l', 'ŀ': 'l', 'ł': 'l',
67
+ 'm': 'm', 'ɱ': 'm', 'ḿ': 'm', 'ṁ': 'm', 'ṃ': 'm', 'ⱥ': 'm', 'ᵯ': 'm', 'ᴍ': 'm',
68
+ 'n': 'n', 'ń': 'n', 'ň': 'n', 'ñ': 'n', 'ņ': 'n', 'ṅ': 'n', 'ṇ': 'n', 'ṉ': 'n',
69
+ 'p': 'p', 'ṕ': 'p', 'ṗ': 'p', 'ƥ': 'p', 'ᵽ': 'p', 'ᵱ': 'p', 'ᴘ': 'p', 'ᑭ': 'p',
70
+ 'q': 'q', '9': 'q', 'ʠ': 'q', 'ɋ': 'q', 'ȹ': 'q', 'ⱊ': 'q', 'ⱍ': 'q', 'ꝗ': 'q',
71
+ 'r': 'r', 'ŕ': 'r', 'ř': 'r', 'ŗ': 'r', 'ṙ': 'r', 'ṛ': 'r', 'ṝ': 'r', 'ṟ': 'r',
72
+ 't': 't', '7': 't', '+': 't', 'ť': 't', 'ţ': 't', 'ŧ': 't', 'ț': 't', 'ṫ': 't',
73
+ 'v': 'v', 'ṿ': 'v', 'ⱴ': 'v', 'ᵥ': 'v', 'ᵛ': 'v', '√': 'v', 'ᐱ': 'v', '∨': 'v',
74
+ 'w': 'w', 'ẁ': 'w', 'ẃ': 'w', 'ẅ': 'w', 'ŵ': 'w', 'ẇ': 'w', 'ẉ': 'w', 'ⱳ': 'w',
75
+ 'y': 'y', 'ý': 'y', 'ỳ': 'y', 'ŷ': 'y', 'ÿ': 'y', 'ȳ': 'y', 'ẏ': 'y', 'ỵ': 'y',
76
+ 'z': 'z', '2': 'z', 'ź': 'z', 'ẑ': 'z', 'ž': 'z', 'ż': 'z', 'ẓ': 'z', 'ẕ': 'z',
77
+ }
78
+
79
+ MULTI_CHAR_REPLACEMENTS = {
80
+ '_ㅣ_': 'ㅗ', '_/_': 'ㅗ', '_ |\_': 'ㅗ', '_|\_': 'ㅗ', '_ㅣ\_': 'ㅗ', '_I_': 'ㅗ',
81
+ '/\': 'ㅅ', '/\': 'ㅅ',
82
+ '77': 'ㄲ',
83
+ '刀卜': '까',
84
+ '₨': 'rs',
85
+ 'ㅇl=스': '섹스',
86
+ 'ㅇㅣ-ㅣ': '애',
87
+ 'lㅣ': '니',
88
+ 'ㅁㅣ': '미',
89
+
90
+ }
91
+
92
+ CUSTOM_INCLUDE_FILE = 'custom_profanity_include.txt'
93
+ CUSTOM_EXCLUDE_FILE = 'custom_profanity_exclude.txt'
94
+
95
+ CUSTOM_INCLUDE_REGEXES = []
96
+ CUSTOM_EXCLUDE_REGEXES = []
97
+
98
+ NORMALIZATION_TABLE = str.maketrans(SINGLE_CHAR_NORMALIZATION_MAP)
99
+ URL_REGEX = re.compile(r'https?:\/\/\S+|www\.\S+')
100
+ MULTI_CHAR_REPLACEMENT_REGEX = re.compile(
101
+ '|'.join(map(re.escape, sorted(MULTI_CHAR_REPLACEMENTS.keys(), key=len, reverse=True)))
102
+ )
103
+
104
+ FALSE_POSITIVE_PATTERNS_GENERAL = [
105
+ 'ㅗ먹어', '오ㅗ', '해ㅗ', '호ㅗ', '로ㅗ', '옹ㅗ', '롤ㅗ', '요ㅗ', '우ㅗ', '하ㅗ',
106
+ 'ㅗ오', 'ㅗ호', 'ㅗ로', 'ㅗ옹', 'ㅗ롤', 'ㅗ요', 'ㅗ우', 'ㅗ하',
107
+ 'ㅗㅗ오', 'ㅗㅗ호', 'ㅗㅗ로', 'ㅗㅗ옹', 'ㅗㅗ롤', 'ㅗㅗ요', 'ㅗㅗ우', 'ㅗㅗ하',
108
+ '오ㅗㅗㅗ', '호ㅗㅗㅗ', '로ㅗㅗㅗ', '옹ㅗㅗㅗ', '롤ㅗㅗㅗ', '요ㅗㅗㅗ', '우ㅗㅗㅗ', '하ㅗㅗㅗ',
109
+ '오ㅗㅗㅗㅗ', '호ㅗㅗㅗㅗ', '로ㅗㅗㅗㅗ', '옹ㅗㅗㅗㅗ', '롤ㅗㅗㅗㅗ', '요ㅗㅗㅗㅗ', '우ㅗㅗㅗㅗ', '하ㅗㅗㅗㅗ',
110
+ 'ㅇㅗ', 'ㅗㄷ', 'ㅗㅜ', 'rㅗ', 'ㅗr', 'sㅗ', 'ㅗs', 'eㅗ', 'ㅗe', 'fㅗ', 'ㅗf', 'aㅗ', 'ㅗa',
111
+ 'qㅗ', 'ㅗq', 'ㅗw', 'wㅗ', 'ㅗd', 'dㅗ', 'ㅗg', 'gㅗ',
112
+ '118', '218', '318', '418', '518', '618', '718', '818', '918', '018',
113
+ '8분', '8시', '8시발',
114
+ '발닦', '동시8', '다시방', '시불이익', '다시바꿀', '다시바꿔', '다시불러', '다시불안',
115
+ '하시바라이노스케', '할시', '시발음', '시발택시', '시발자동차', '정치발', '시발점', '시발유',
116
+ '시발역', '시발수뢰', '아저씨바', '아저씨발', '시바견', '벌어', '시바이누', '시바스리갈',
117
+ '시바산', '시바신', '오리발', '발끝', '다시바', '다시팔', '비슈누시바', '시바핫카이',
118
+ '시바타이쥬', '데스티니시바', '시바루', '시바료타로', '시바라스시', '임시방편', '젤리',
119
+ '발사', '크시야', '크시', '어찌', '가시방석', '발로란트방', '발로란트', '발로', '씨발라',
120
+ '무시발언', '일시불', '우리', '혹시', '아조씨', '아저씨', '바로', '저거시', '우리발',
121
+ '피시방', '피씨방', '방장', '시바사키', '시발차', '구로역시발', '로벅스', '쉬바나', '벌었는데',
122
+ '엠씨방', '빨리', '파엠', '벌금', '시방향', '불법', '발릴', '발표', '방송', '역시', '바보',
123
+ '쿨리발리', '슈발리에', '방탄', '방어', '발표', '상시',
124
+ 'opgg', 'opgg',
125
+ '있지', '없지', '하지', '알았지', '몰랐지', '근데', '지근거', '지근하', '지근지근', '지근속근',
126
+ '속든지근', '미지근', '지랄탄', '지랄버릇',
127
+ '0등신', '1등신', '2등신', '3등신', '4등신', '5등신', '6등신', '7등신', '8등신', '9등신',
128
+ '붕우유신',
129
+ '전염병', '감염병', '화염병',
130
+ '왜꺼져', '꺼져요', '이꺼져', '꺼져서', '내꺼져', '제꺼져', '꺼져있', '꺼져잇', '꺼져도',
131
+ '계속꺼져', '꺼져가',
132
+ '새로', '의새끼', '루세끼', '시세끼', '세끼먹', '고양이새끼', '호랑이새끼', '용새끼', '말새끼',
133
+ '사자새끼', '범새끼', '삵새끼', '키보드', '새끼손', '셰리프', '로쉐리',
134
+ '0개', '1개', '2개', '3개', '4개', '5개', '6개', '7개', '8개', '9개',
135
+ '1년', '2년', '3년', '4년', '5년', '6년', '7년', '8년', '9년',
136
+ '재밌게놈', '있게', '년생', '무지개색', '떠돌이개', '에게', '넘는', '소개', '생긴게', '날개같다',
137
+ '줫습니다', '줫음', '줫잖아', '줫겠지', '쫒아', '쫒는', '쫒기다', '쫒기라', '쫒기로',
138
+ '쫒기를', '쫒기며', '쫒기는', '쫒기나', '쫒겨', '쫒겻', '쫒겼', '쫒았', '쫒다', '쫒고',
139
+ '줫는', '줫어', '줬는', '줫군', '줬다', '줬어', '천조', '쫒기', '해줫더니', '줫다', '내쫒은',
140
+ '내쫒다', '좇아',
141
+ 'ㅡ'
142
+ ]
143
+ FALSE_POSITIVE_PATTERNS_MINOR = [
144
+ '거미', '친구', '개미', '이미친', '미친증', '동그라미',
145
+ '뒤져봐야', '뒤질뻔', '뒤져보다', '뒤져보는', '뒤져보고', '뒤져간다', '뒤져서',
146
+ '뒤져본', '뒤져봄', '뒤져볼',
147
+ ]
148
+ FALSE_POSITIVE_PATTERNS_SEXUAL = [
149
+ '보지도못', '보지도않', '인가보지', '면접보지', '영화보지', '애니보지', '만화보지', '사진보지',
150
+ '그림보지', '을보지', '나보지', '못보지', '안보지', '왜보지', '뭐보지', '다보지', '빨리보지',
151
+ '보지도마', '보지는않', '보지안으', '보지안아', '게보지', '어케보지', '하나보지', '켜보지',
152
+ '보지맙', '초보지', '로보지', '가보지', '홍보지', '서보지', '보지금', '보지못', '정지금',
153
+ '걸보지', '보지는', '보지지', '보지않', '해보지', '보지마', '보지말', '안보지만', '정보',
154
+ '지팡이', '행보', '바보지', '바보짓', '물어보지', '하시나보지',
155
+ '언제자지', '잠자지', '자지말자고', '지급', '남자지', '여자지', '감자지', '왁자지', '자지러',
156
+ '개발자', '관리자', '약탈자', '타자지', '혼자', '자지원', '사용자', '경력자', '지식', '자지마',
157
+ '자지말', '지원자', '부자지', '혜자지', '잘자지', '일자지', '일찍자지', '지원', '자지금', '자지않',
158
+ '어케자지', '자지도마', '자지는않', '자지좀마', '안자지', '못자지', '지건', '감자',
159
+ 'cess', '```css', 'ex)', 'exit', 'ext', 'images', 'https', '(ex', '.ex', 'physics', 'features', 'exam',
160
+ 'phase', 'except', 'sexual', 'sexy', '엑섹스', '엑',
161
+ '야스오', '크시야', '카구야', '스파이', '말이야', '스티브', '스쿼드', '파랑색', '오야스미', '노란색',
162
+ '빨간색', '초록색', '보라색', '청색', '핑크색', '남색', '검은색', '하양색', '주황색', '연두색',
163
+ '스공', '스시', '스키장', '스킨', '스킬', '스틸', '스탑', '스트레스', '해야', '카시야스', '야스톤', '유니섹스', '스튜디오',
164
+ '위대한', '소유자', '작업자', '자기위로', '위대하지', '암살자', '학자',
165
+ 'freenude',
166
+ ]
167
+ FALSE_POSITIVE_PATTERNS_BELITTLE = [
168
+ '려운지', '무서운지', '라운지', '운지법', '싸운지', '운지버섯', '운지린다', '깔보다', '깔보시',
169
+ '1년', '2년', '3년', '4년', '5년', '6년', '7년', '8년', '9년', '0년',
170
+ '더운지역', '나따까리', '지킬앤하이드', '지킬엔하이드', '지킬앤하이드', '지킬엔하이드',
171
+ ]
172
+ FALSE_POSITIVE_PATTERNS_RACE = ['흑형님']
173
+ FALSE_POSITIVE_PATTERNS_PARENT = ['ㄴㄴ', '미국', '엄창못']
174
+ FALSE_POSITIVE_PATTERNS_POLITICS = [
175
+ '카카오톡', '카톡', '카페', '하다가', '먹다가', '카와이', '카츠', '카레', '니가', '내가', '너가',
176
+ '우리가', '너희가', '카카오', '카세트', '카플레이어', '카운터', '카정', '카드',
177
+ ]
178
+ FALSE_POSITIVE_PATTERNS_ENGLISH = ['```css', 'ex)', '*', 'omg']
179
+
180
+ FP_REGEX_GENERAL = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_GENERAL)))
181
+ FP_REGEX_MINOR = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_MINOR)))
182
+ FP_REGEX_SEXUAL = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_SEXUAL)))
183
+ FP_REGEX_BELITTLE = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_BELITTLE)))
184
+ FP_REGEX_RACE = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_RACE)))
185
+ FP_REGEX_PARENT = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_PARENT)))
186
+ FP_REGEX_POLITICS = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_POLITICS)))
187
+ FP_REGEX_ENGLISH = re.compile('|'.join(map(re.escape, FALSE_POSITIVE_PATTERNS_ENGLISH)))
188
+
189
+
190
+ GENERAL_PROFANITY_PATTERNS = [
191
+ 'ㅗ', '씨8', '18아', '18놈', 'tㅂ', 't발', 'ㅆㅍ', 'sibal', 'sival', 'sibar', 'sibak', 'sipal',
192
+ 'siqk', 'tlbal', 'tlval', 'tlbar', 'tlbak', 'tlpal', 'tlqk', '시발', '시val', '시bar',
193
+ '시bak', '시pal', '시qk', 'si바', 'si발', 'si불', 'si빨', 'si팔', 'tl바', 'tl발', 'tl불', 'tl빨', 'tl팔',
194
+ 'siba', 'tlba', 'siva', 'tlva', 'tlqkf', '10발놈', '10발년', 'tlqkd', 'si8', '10r놈', '시8', '십8',
195
+ 's1bal', 'sib알', '씨x', 'siㅂ', '丨발', '丨벌', '丨바', 'ㅅ1', '시ㅣ', '씨ㅣ', '8시발',
196
+ 'ㅆ발', 'ㅅ발', 'ㅅㅂ', 'ㅆㅂ', 'ㅆ바', 'ㅅ바', '시ㅂㅏ', 'ㅅㅂㅏ', '시ㅏㄹ', '씨ㅏㄹ',
197
+ 'ㅅ불', 'ㅆ불', 'ㅅ쁠', 'ㅆ뿔', 'ㅆㅣ발', 'ㅅㅟ발', 'ㅅㅣㅂㅏ', 'ㅣ바알', 'ㅅ벌', '^^ㅣ벌',
198
+ 'ㅆ삐라', '씨ㅃ', '^^/발', '시봘', '씨봘', '씨바', '시바', '샤발', '씌발', '씹발', '시벌',
199
+ '시팔', '싯팔', '씨빨', '씨랼', '씨파', '띠발', '띡발', '띸발', '싸발', '십발', '슈발',
200
+ '야발', '씨불', '씨랄', '쉬발', '쓰발', '쓔발', '쌰발', '쒸발', '씨팔', '씨밝',
201
+ '씨밯', '쑤발', '치발', '발씨', '리발', '씨볼', '찌발', '씨비바라랄', '시바랄',
202
+ '씨바라', '쒸팔', '쉬팔', '씨밮', '쒸밮', '시밮', '씨삐라', '씨벌', '슈벌', '시불',
203
+ '시부렝', '씨부렝', '시부랭', '씨부랭', '발놈시', '뛰발', '뛰봘', '뜨발', '뜨벌',
204
+ '띄발', '씨바알', '샤빨', '스벌', '쓰벌', '신발련', '신발년', '신발놈', '띠바랄', '시방',
205
+ '씨방', '씨부련', '시부련', '씨잇발', '씨잇파알', '씨잇바알', '시잇발', '시잇바알', '쒸이발',
206
+ '쉬이빨', '씹팔', '쉬바', '시병발신', '씱빩', '쉬바난', '쉬바놈', '쉬바녀', '쉬바년', '쉬바노마', '쉬바새', '쉬불', '쉬이바',
207
+ '시벨놈', '시뱅놈', '시봉새', '씻뻘', '씌벌',
208
+ 'wlfkf', 'g랄', 'g럴', 'g롤', 'g뢀', 'giral', 'zi랄', 'ji랄', 'ㅈㄹ', '지ㄹ', 'ㅈ랄', 'ㅈ라',
209
+ '지랄', '찌랄', '지럴', '지롤', '랄지', '쥐랄', '쮜랄', '지뢀', '띄랄',
210
+ 'ㅄ', 'ㅂㅅ', '병ㅅ', 'ㅂ신', 'ㅕㅇ신', 'ㅂㅇ신', '뷰신', '병신', '병딱', '벼신', '붱신',
211
+ '뼝신', '뿽신', '삥신', '병시니', '병형신', '뵹신', '병긴', '비응신',
212
+ '염병', '엠병', '옘병', '얨병', '옘뼝',
213
+ '꺼져',
214
+ '엿같', '엿가튼', '엿먹어', '뭣같은',
215
+ 'rotorl', 'rotprl', 'sib새', 'ah끼', 'sㅐ끼', 'x끼',
216
+ 'ㅅㄲ', 'ㅅ끼', 'ㅆ끼', '색ㄲㅣ', 'ㅆㅐㄲㅑ', 'ㅆㅐㄲㅣ', '새끼', '쉐리', '쌔끼', '썌끼',
217
+ '쎼끼', '쌬끼', '샠끼', '세끼', '샊', '쌖', '섺', '쎆', '십새', '새키', '씹색', '새까',
218
+ '새꺄', '샛끼', '새뀌', '새끠', '새캬', '색꺄', '색끼', '섹히', '셁기', '셁끼', '셐기',
219
+ '셰끼', '셰리', '쉐꺄', '십색꺄', '십떼끼', '십데꺄', '십때끼', '십새꺄', '십새캬', '쉑히',
220
+ '씹새기', '고아새기', '샠기', '애새기', '이새기', '느그새기', '장애새기',
221
+ 'w같은', 'ㅈ같', 'ㅈ망', 'ㅈ까', 'ㅈ경', 'ㅈ가튼', '좆', '촟', '조까', '좈', '쫒', '졷',
222
+ '좃', '줮', '좋같', '좃같', '좃물', '좃밥', '줫', '좋밥', '좋물', '좇',
223
+ '썅', '씨앙', '씨양', '샤앙', '쌰앙',
224
+ '뻑유', '뻐킹', '뻐큐', '빡큐', '뿩큐', '뻑큐', '빡유', '뻒큐',
225
+ '닥쳐', '닭쳐', '닥치라', '아가리해',
226
+ 'dog새', '개ㅐ색',
227
+ '개같', '개가튼', '개쉑', '개스키', '개세끼', '개색히', '개가뇬', '개새기', '개쌔기', '개쌔끼',
228
+ '쌖', '쎆', '새긔', '개소리', '개년', '개드립', '개돼지', '개씹창', '개간나', '개스끼', '개섹기',
229
+ '개자식', '개때꺄', '개때끼', '개발남아', '개샛끼', '개가든', '개가뜬', '개가턴', '개가툰',
230
+ '개갇은', '개갈보', '개걸레', '개너마', '개너므', '개넌', '개넘', '개녀나',
231
+ '개노마', '개노무새끼', '개논', '개놈', '개뇨나', '개뇬', '개뇸', '개뇽', '개눔', '개느마',
232
+ '개늠', '개랙기', '개련', '개발남아', '개발뇬', '개색', '개색기',
233
+ '개색끼', '개샛키', '개샛킹', '개샛히', '개샜끼', '개생키', '개샠', '개샤끼', '개샤킥',
234
+ '개샥', '개샹늠', '개세리', '개세키', '개섹히', '개섺', '개셃', '개셋키', '개셐',
235
+ '개셰리', '개솩', '개쇄끼', '개쇅', '개쇅끼', '개쇅키', '개쇗', '개쇠리', '개쉐끼', '개쉐리',
236
+ '개쉐키', '개쉑갸', '개쉑기', '개쉑꺄', '개쉑끼', '개쉑캬', '개쉑키', '개쉑히',
237
+ '개쉢', '개쉨', '개쉬끼', '개쉬리', '개쉽', '개습', '개습세', '개습쌔',
238
+ '개싀기', '개싀끼', '개싀밸', '개싀킈', '개싀키', '개싏', '개싑창', '개싘', '개시끼',
239
+ '개시퀴', '개시키', '개식기', '개식끼', '개식히', '개십새', '개십팔', '개싯기', '개싯끼',
240
+ '개싯키', '개싴', '개쌍넘', '개쌍년', '개쌍놈', '개쌍눔', '개쌍늠', '개쌍연', '개쌍영',
241
+ '개쌔꺄', '개쌕', '개쌕끼', '개쌰깨', '개썅', '개쎄', '개쎅', '개쎼키',
242
+ '개쐐리', '개쒜', '개쒝', '개쒯', '개쒸', '개쒸빨놈', '개쒹기', '개쓉', '개씀', '개씁',
243
+ '개씌끼', '개씨끼', '개씨팕', '개씨팔', '개잡것', '개잡년', '개잡놈', '개잡뇬', '개젓',
244
+ '개젖', '개젗', '개졋', '개조또', '개조옷', '개족', '개좃', '개좆', '개좇',
245
+ '개지랄', '개지럴', '개창년', '개허러', '개허벌년', '개호러', '개호로', '개후랄', '개후레',
246
+ '개후로', '개후장', '걔섀끼', '걔잡넘', '걔잡년', '걔잡뇬', '게가튼', '게같은', '게너마',
247
+ '게년', '게노마', '게놈', '게뇨나', '게뇬', '게뇸', '게뇽', '게눔', '게늠', '게띠발넘',
248
+ '게부랄', '게부알', '게새끼', '게새리', '게새키', '게색', '게색기', '게색끼', '게샛키',
249
+ '게세꺄', '게자지', '게잡넘', '게잡년', '게잡뇬', '게젓', '게좆', '계같은뇬', '계뇬',
250
+ '계뇽', '쉬댕', '쉬뎅', '개생끼'
251
+ ]
252
+ MINOR_PROFANITY_PATTERNS = [
253
+ 'ㅁㅊ', 'ㅁ친', 'ㅁ쳤', 'aㅣ친', 'me친', '미ㅊ', 'di친',
254
+ '미친놈', '미친새끼',
255
+ '꼽냐', '꼽니', '꼽나',
256
+ '뒤져', '뒈져', '뒈진', '뒈질', '디져라', '디진다', '디질래', '뒤질',
257
+ ]
258
+ SEXUAL_PROFANITY_PATTERNS = [
259
+ 'ⓑⓞⓩⓘ', 'bozi', '보ㅈㅣ', '보지', '버지물', '버짓물', '보짓', '개보즤', '개보지', '버지벌렁벌렁', '보짖', '뵤즤', '봊이', '보g',
260
+ 'ja지', 'ㅈㅈ빨', '자ㅈ', 'ㅈ지빨', '자지', '자짓', '잦이', '쟈지',
261
+ 'sex', 's스', 'x스', 'se스', 'ㅅㅅ', 's하고e싶다x', 'ㅅㅔㅅㄱ', '이=스', '섹ㅅ', '세ㄱㅅ', '섹스', '섻', '쉑스', '섿스', '섹그', '야스', '색스', '셱스', '섁스', '세엑스', '썩스', '섹수', '섹파', '섹하자', '쉐스', '쉐엑스', '색수', '세엑수우', '섹하고', '섹하구', '섹하장', '섹하쟈', '섹한번', '쌕스',
262
+ '꼬3', '꼬툭튀', '꼬톡튀', '불알', '부랄', '뽕알', '뿅알', '뿌랄', '뿔알', '개부달', '개부랄', '개부러럴', '개부럴', '개부뢀', '개부알', '개불알', '똘추', '똥구멍', '부라랄',
263
+ '오나홍', '오나홀', 'ㅇㄴ홀', '텐가', '바이브레이터', '오ㄴ홀', 'ㅇ나홀', '씹하다', '매춘부', '성노예', '자궁문신',
264
+ '모유물', '로리물', '근친상간', '룸섹스', '원조교재', '속박플레이', '야외플레이',
265
+ '딸딸이', '질싸', '안에사정', '자위남', '자위녀', '폰섹', '포르노', '폰세엑', '폰쉑', '폰쎅', '질내사정', '그룹섹', '남창', '男色', '누워라이년아', '누웠냐씨방새', '다리벌려', '대줄년', '뒤로너어줘', '딸따뤼', '딸쳐', '떡쳐라', '막대쑤셔줘', '막대핥아줘', '먹고보니내딸', '먹고보니누나', '먹고보니딸', '먹고보니똥개', '먹고보니엄마', '먹고보니응아', '먹고보니재수', '먹고보니처제', '먹고보니형수', '몸뚱이줄께', '몸안에사정', '밖에다쌀께', '박고빼고', '배위에싸죠', '몸의대화', '섹할', '섹해',
266
+ 'g스팟', '지스팟', '크리토리스', '클리토리스', '페니스', '애널', '젖까', '젖가튼', '젖나', '젖만',
267
+ 'ja위', '자위', '고자새끼', '고츄', '꺼추', '꼬추',
268
+ ]
269
+ BELITTLE_PROFANITY_PATTERNS = [
270
+ '10련', '따까리', '장애년', '찐따년', '싸가지', '창년', '썅년', '버러지', '고아년', '개간년', '종간나', '도구년', '걸래년', '씹년', '개걸레',
271
+ '창녀', '머저리', '씹쓰래기', '씹쓰레기', '씹장생', '씹자식', '운지', '급식충', '틀딱충', '조센징', '매국노', '똥꼬충', '진지충', '듣보잡', '개찐따',
272
+ '한남충', '정신병자', '중생아', '돌팔이', '김치녀', '폰팔이', '틀딱년', '같은년', '개돼중', '쓰글년', '썩을년', '썩글년', '씹할', '거지새끼', '거지쉐뀌',
273
+ '거지쉑이', '거지쎄끼', '거지쒜리', '걸래가튼', '걸래넘', '걸래년', '걸래놈', '걸레가튼', '걸레년', '그지새끼', '그지새키', '그지색', '기집년', '까진년',
274
+ '깔보', '난잡년', '빡대가리', '더러운년', '돌아이', '또라이', '장애려', '샹놈', '김치남', '김치녀', '혜지련', '한유남충', '페미나치', '페미년', '꼴페미',
275
+ ]
276
+ RACE_PROFANITY_PATTERNS = [
277
+ '깜둥이', '흑형', '조센진', '짱개', '짱깨', '짱께', '짱게', '쪽바리', '쪽파리', '빨갱이', '니그로', '코쟁이', '칭총', '칭챙총', '섬숭이', '왜놈', '짱꼴라', '섬짱깨',
278
+ ]
279
+ PARENT_PROFANITY_PATTERNS = [
280
+ 'ㄴ1ㄱ', 'ㄴ1ㅁ', '느금ㅁ', 'ㄴㄱ마', 'ㄴㄱ빠', 'ㄴ금빠', 'ㅇH미', 'ㄴ1에미', '늬애미', '@ㅐ미', '@ㅐ비',
281
+ 'ㄴㄱㅁ', 'ㄴ금마', '늬금마',
282
+ '느금마', '느그엄마', '늑엄마', '늑금마', '느그애미', '넉엄마', '느그부모', '느그애비', '느금빠', '느그메', '느그빠', '니미씨', '니미씹',
283
+ '느그마', '니엄마', '엄창', '엠창', '니미럴', '누굼마', '느금', '내미랄', '내미럴', '엄마없는', '아빠없는', '노에미',
284
+ '니애미', '노애미', '노앰', '앰뒤련', '애믿쥐', '아버지없는게', '애미없는게', '애비없는게', '어머니없는게', '엄마없네', '니애비', '노애비', '애미없', '애비없', '애미뒤', '애비뒤',
285
+ '니아빠', '너에미', '눼기미', '뉘귀미', '뉘기미', '뉘김이', '뉘뮈', '뉘미랄', '뉘미럴', '뉘미롤', '뉘밀얼', '뉘밀할', '뉘어미', '뉘에미',
286
+ '느검마', '늬긔미', '늬기미', '니기미', '니믜창', '니미쒸블', '니미씨펄넘', '니미좃', '니밀할', '니부랑', '니뽕좃',
287
+ '애미죽', '애미디진',
288
+ ]
289
+ JAPANESE_PROFANITY_PATTERNS = [
290
+ "肉便器", "糞野郎", "バカ野郎", "腐れ外道", "部落民", "中出し", "強姦",
291
+ "特定アジア", "人非人", "鬼畜", "負け犬", "支那", "トルコ風呂", "淫売", "未開人",
292
+ ]
293
+ CHINESE_PROFANITY_PATTERNS = ['G巴', 'G巴', 'G叭', 'G叭', 'G芭', 'G芭', 'G掰', 'G掰', 'g點', 'MM屄', 'mm美圖', 'qvod成人', 'sex聊天室', 'SM後庭器具', 'SM援交', 'SM舔穴', 'sm調教', 'XIAAV論壇''ㄊㄇㄉ', '一本道電影', '一夜性網', '一夜情論壇', '一夜情激情成人聊天室', '九九情色帝國', '九城情色', '二B', '二穴中出', '人人有色論壇', '人妻交換', '人妻色誘', '人妻做愛', '人妻榨乳', '人性本色', '入穴一遊', '三唑侖', '三級激情片', '三陪', '上你幹妳', '上門按摩', '下賤', '口內爆射', '口交', '口含雞巴', '口活', '口射', '口淫', '口爆', '大b', '大力抽送', '大奶美逼', '大奶騷女', '大母牛娛樂論壇', '大乳頭', '大波粉B', '大波騷婦', '大花逼', '大眾色情成人網', '大麻', '大雞巴', '大鶏巴', '女尻', '女屄', '女馬ㄉ', '女馬白勺', '女馬的', '女幹', '小b', '小穴', '小姐上門全套', '小姐打飛機', '小姐裸聊', '小逼', '小嫩雞', '小騷BB', '阝月', '中文搜性網', '互淫', '互舔淫穴', '內射', '公媳亂', '勾魂少婦', '午夜天堂成人', '天天干貼圖', '天天情色', '夫妻3p', '夫妻多p', '夫妻俱樂部', '夫妻亂交', '少女小姐上門', '少女被插', '手淫', '日本鬼子', '日死你', '日你', '日屄', '日逼', '欠日', '欠幹', '毛鮑', '王八', '他ㄇㄉ', '他ㄇ的', '他嗎的', '他媽的', '凸他', '凸她', '凸肉優', '凸你', '凸我', '凸妳', '出售冰毒', '出售曲馬多', '出售苯基丙酮', '出售海豹M9', '出售迷幻藥', '出售迷情藥', '出售氫化可的松', '出售麥角醇', '出售麻古', '出售麻果配方', '出售麻黃素', '出售氯胺酮', '出售腎', '出售間苯三酚', '出售黃牙籤', '出售黃白牙籤', '出售黃麻素', '出售黃體酮', '出售羥基環戊基', '出售槍支', '出售監聽王', '出售蒙汗藥', '出售鄰氯苯晴', '出售磚石冰毒', '出售鎂粉', '出售鹽酸曲馬多', '出售鹽酸曲馬多片', '出售鹽酸羥亞胺', '出售鑽石冰毒', '包二奶', '去你媽的', '去氧麻黃堿製作方法', '可卡因', '叼你媽', '失身粉', '奴隷調教', '奶大屄肥', '尻', '左旋黃麻素', '巨騷', '幼交', '幼妓', '幼逼', '扒穴', '扒屄', '打手槍', '打炮', '打飛機', '打野炮', '本土無碼', '母女雙飛', '母子交歡', '母子姦情', '母奸', '玉穴', '玉乳', '生小孩沒屁眼', '生徒胸觸', '甲基苯丙', '甲基苯胺', '白虎小穴', '白虎少婦', '白虎美女貼圖', '白虎陰穴', '白虎嫩B', '白粉', '白液四濺', '白嫩騷婦', '白漿四濺', '穴海', '穴淫', '穴爽', '穴圖', '交換夫妻', '先奸後殺', '全家死光光', '冰毒', '吃精', '吃雞巴', '合成氯胺酮', '合成鹽酸羥亞胺', '多人性愛', '多人輪', '奸幼', '她馬的', '她媽的', '好色cc', '安非他命', '成人A片', '成人bt', '成人下載', '成人五月天', '成人午夜場', '成人百強', '成人自拍', '成人社區', '成人書庫', '成人情色', '成人情色網站', '成人聊天室', '成人軟體', '成人黃色網站', '成人圖片', '成人圖片網站', '成人網站', '成人網站導航', '成人論壇', '成人導航', '成人激情小說', '成人激情電影', '成人激情圖片', '成人激情網站', '死GM', '死全家', '江山如此多嬌txt下載', '江豬媳', '百性閣', '百鳳宮', '老少亂倫', '老師的小穴', '肉穴', '肉具', '肉便器', '肉洞', '肉唇', '肉淫器吞精', '肉莖', '肉壺', '肉棍', '肉棍幹騷婦', '肉絲褲襪', '肉感炮友', '肉溝', '肉逼', '肉慾', '肉縫', '肉簫', '自拍美穴', '自拍寫真', '自插小穴', '自慰摳穴', '舌頭穴', '色97愛', '色BB吧', '色色成人', '色狐狸網址', '色界論��', '色書庫', '色狼小說', '色狼論壇', '色迷城', '色情工廠', '色情倚天屠龍記', '色情論壇', '色窩窩', '西班牙蒼蠅水', '你他馬的', '你他媽的', '你它馬的', '你它媽的', '你她馬的', '你老母', '你娘卡好', '你麻痹', '你媽比', '你媽的', '你媽逼', '吞精', '吞精騷妹', '含屌', '吸精', '吸精少女', '吹蕭', '妓女', '妓女', '妖媚熟母', '完蛋操', '屁眼', '快樂AV', '我日', '我奸', '我的性啟蒙老師', '我要官人', '我要性交', '我要性交網', '我草', '我做騷妻', '我就去色', '我幹', '我愛我色網址', '我操', '我操你', '杜冷丁', '狂乳激揺', '狂插', '狂插男根膠囊', '狂插性器具', '男女交歡', '男女蒲典', '男女激情淫亂', '肛交', '肛交吹喇叭', '肛屄', '肛門拳交', '肛門噴水', '走光偷拍', '足腳交', '迅雷三級影片', '那娘錯比', '那嗎B', '那嗎老比', '那嗎逼', '那嗎瘟比', '那嗎錯比', '乳尻', '乳交', '乳此絲襪', '乳射', '乳爆', '乳霸', '亞洲有碼', '亞洲性交電影', '亞洲性虐', '亞洲情色網', '亞洲淫娃', '亞洲插穴圖', '供應化學冰', '供應天然咖啡因', '供應可哥精', '供應四氫吡喃酮', '供應奶油冰', '供應甲基可哥堿', '供應甲基苯丙胺', '供應白冰', '供應冰糖', '供應咖啡鹼', '供應咖啡鹼', '供應青蒿素', '供應胡椒基甲基', '供應氫化可的松', '供應麥角醇', '供應麻果丸子', '供應麻黃素', '供應麻穀', '供應植物冰', '供應氯胺酮', '供應無水咖啡因', '供應黃冰', '供應黃體酮', '供應罌粟殼', '供應鹽酸氯', '供應鹽酸羥亞胺', '兩性淫亂地址', '制幻劑', '制服狩', '制服美婦', '制服誘惑', '叔嫂肉慾', '夜色王朝', '夜色貴族', '奇淫寶鑒', '妹妹陰毛', '妹妹騷圖', '屄', '屄毛', '屄屄特寫', '性之站', '性奴', '性奴會', '性用品', '性交', '性交自拍', '性交吞精', '性交易', '性交無碼', '性交圖', '性交課', '性免費電影', '性兩', '性具', '性服務', '性虎', '性虎色網', '性派對', '性虐', '性虐待', '性息', '性高潮', '性聊', '性無能', '性視頻', '性傭', '性愛', '性愛韋小寶之玩女大王', '性愛淫圖', '性愛插穴', '性愛視頻下載', '性愛圖', '性愛擂臺', '性感肉絲', '性感妖嬈', '性感沙灘2', '性感乳娘', '性感誘惑', '性感騷女', '性遊戲', '性夢', '性福', '性福源', '性戰擂臺', '性饑渴', '抽插', '拍肩迷藥', '拔屄', '拔屄自拍', '招妓', '招鶏', '放尿', '放蕩少婦', '放蕩少婦賓館', '放蕩熟女', '明星淫圖', '明星裸體照', '東北xx網', '東京丸井買賣', '東洋屄', '松島楓迅雷下載', '波霸乳交器具', '狗b', '狗日', '狗卵子', '狗娘', '狗娘養的', '狗狼養的', '狗養', '狗操', '玩穴', '玩逼', '肏', '肏屄', '肥逼', '花和尚導航', '花都逍遙鄉村春光', '花樣性交', '近親相奸', '近親相姦', '金毛穴', '金鱗豈是池中物全本', '亮穴', '亮屄', '俏臀攝魄', '俗人島', '前凸後翹', '咪咪圖片', '咬著龜頭', '品穴', '品色堂', '品色堂網址', '品香堂', '哇嘎成人三級', '姦染', '姦情', '姦淫', '姦淫', '姦淫電車', '姫辱', '屌人也', '屌女也', '屌他', '屌她', '屌你', '屌我', '屌妳', '帝國夜色', '挑情', '春光外瀉', '春藥', '柔陰術', '毒品出售', '毒龍舔腳', '洗腸射尿', '流淫', '流蜜汁', '炮友之家', '相奸', '紅蜘蛛迷奸藥', '美女b毛圖', '美女成人', '美女吞精', '美女性交真圖', '美女面對面激情裸聊', '美女高潮', '美女淫穴', '美女聊天室', '美女視頻聊天室', '美女祼聊', '美女激情視頻網', '美幼', '美穴', '美乳', '美乳美穴', '美乳鬥豔', '美臀夾陰', '美臀嫰穴', '美騷婦', '美體豔姿', '胡瘟', '虐奴', '虐戀花園', '要色色', '訂購大冰磚', '訂購苯基丙酮', '訂購氯胺酮', '訂購鹽酸羥亞胺', '迫奸', '風騷欲女', '風��淫蕩', '風豔閣', '食精', '香水型迷奸藥', '香煙迷藥催眠迷幻藥', '原味絲襪', '哭母', '哭爸', '唐僧和粉塵女子的性愛生活', '套弄花心', '射奶', '射爽', '射精', '射顏', '恥辱輪奸', '拳交', '捏你鶏巴', '捏弄', '桃園蜜洞', '浪女', '浪叫', '浪穴', '浪婦', '浴尿', '浴室亂倫', '浴室幹騷女系列', '海洛因', '狼友',
294
+ '神經病', '秘唇', '粉穴', '粉屄', '粉紅穴', '胯下呻吟', '胸濤乳浪', '草你娘', '草你媽', '草你媽', '草擬媽', '迷幻藥', '迷失禦花園', '迷奸', '迷奸系列', '迷奸香水', '迷奸藥', '迷情水', '迷情藥製作方法', '迷魂藥', '迷魂藥三唑侖', '迷藥', '迷藥迷情藥', '針孔偷拍', '馬白勺', '高效三唑侖', '高級逼', '高清性愛', '高潮白漿', '高潮集錦', '高麗棒子', '鬼畜輪奸', '鬼輪姦', '假陽具插穴', '做愛', '做愛自拍', '做愛電影', '做愛圖片', '偷拍美穴', '偷窺圖片', '偷歡照片', '動漫色圖', '娼', '婊子', '婬亂軍團', '寂寞自摸', '密穴', '密穴貼圖', '採花堂', '採花網', '梅花屄', '欲仙欲死', '欲仙欲浪', '欲海天龍傳', '殺你一家', '殺你全家', '淩辱', '淫B', '淫女', '淫水', '淫叫', '淫奴', '淫母', '淫汁', '淫穴', '淫穴裡騷水', '淫穴騷水', '淫奸電影', '淫肉誘惑', '淫色', '淫色貼圖', '淫告白', '淫妞', '淫妹', '淫妻', '淫妻交換', '淫姐', '淫店', '淫東方', '淫河', '淫娃', '淫流', '淫虐', '淫師蕩母', '淫書', '淫浪', '淫婦', '淫情', '淫液', '淫貨', '淫絲蕩襪', '淫腔', '淫亂工作', '淫亂診所', '淫亂潮吹', '淫亂熟女', '淫逼', '淫圖', '淫網', '淫蜜', '淫慾', '淫樣', '淫漿', '淫賤', '淫戰群P', '淫蕩迷情藥', '淫蕩貴婦', '淫糜', '淫聲浪語', '淫穢', '淫穢', '淫穢bt電影', '淫穢圖片', '淫獸學園', '淫癡', '淫魔', '淫驢屯', '爽穴', '猖妓', '猛插', '猛操狂射', '現代情色小說', '羞恥母', '聊色', '處女開包', '被幹', '被操', '販賣king粉', '販賣搖頭丸', '逍遙遊論壇', '速效迷奸藥', '造愛', '野外性交', '陰戶', '陰毛', '陰水', '陰穴新玩法', '陰屄', '陰門', '陰阜', '陰阜高聳', '陰莖插小穴', '陰道圖片', '雪腿玉胯', '麻古製作工藝', '婷婷激情聊天室', '媚藥少年', '就去日', '廁奴', '廁所偷拍', '廁所盜攝', '扉之陰', '掰穴', '掰穴打洞', '掰穴皮卡丘', '提供K粉', '提供冰毒', '提供氯胺酮', '提供鹽酸羥亞胺', '插b', '插比', '插穴', '插穴手淫', '插穴止癢', '插穴圖', '插老師穴', '插你媽', '插姐姐嫩穴', '插後庭', '插陰莖', '插進', '插逼', '插暴', '換妻', '朝天穴', '氯胺酮出貨', '氯胺酮技術轉讓', '氯胺酮到貨', '氯胺酮訂購', '氯胺酮電話', '無毛穴', '無毛美少女', '無套自拍', '無碼長片', '無碼炮圖', '無碼做愛', '無碼淫女', '無碼淫漫', '無碼無套', '無碼精選', '無碼體驗', '發浪', '發騷', '硝酸甘油炸藥製造', '童顏巨乳', '絲襪足交', '絲襪高跟', '絲襪淫婦', '腚', '菅野亞梨沙迅雷下載', '菊花洞', '街頭扒衣', '買胡椒基甲基酮', '買賣小冰磚', '買賣四氫吡喃酮', '買賣黃麻素', '買賣鹽酸羥亞胺', '超毛大鮑', '酥穴', '酥胸誘惑', '酥癢', '開苞', '陽具', '陽痿', '集體性愛', '集體淫', '黃牙籤出售', '黃色成人網站', '黃色妹妹a級大片', '黃色妹妹a級大片', '黑毛屄', '黑屄', '黑逼', '亂交', '亂倫', '亂輪', '傻比', '塞你公', '塞你母', '塞你老母', '塞你老師', '塞你爸', '塞你娘', '媽B', '媽比', '媽白勺', '媽批', '媽的', '媽媽色', '媽逼', '嫐屄', '幹78', '幹78', '幹GY', '幹GY', '幹一家', '幹七八', '幹人也', '幹入', '幹女也', '幹他', '幹他媽', '幹它', '幹尼', '幹穴', '幹全家', '幹她', '幹她媽', '幹死', '幹死你', '幹汝', '幹你', '幹你老比', '幹你老母', '幹你良', '幹你娘', '幹你媽', '幹你媽b', '幹你媽逼', '幹我', '幹牠', '幹妳', '幹妳老母', '幹妳娘', '幹妳馬', '幹妳媽', '幹拎娘', '幹林', '幹炮', '幹砲', '幹勒', '幹啦', '幹您', '幹您娘', '幹逼', '幹機', '幹機掰', '幹雞', '幹爆', '微型袖珍手狗', '想上你', '惹火自拍', '愛幼閣', '愛色cc', '愛妻淫穴', '愛液', '愛液橫流', '愛愛', '搖頭丸', '搖頭丸', '新金瓶梅', '極品奶妹', '極品白虎', '極品波神', '極品波霸', '極品金髮美女美穴圖', '歇逼', '經典炮圖', '群P', '群交', '群交亂舞', '群奸', '群奸亂交', '群奸輪射', '群陰會', '群魔色舞', '聖泉學淫', '萬淫堂', '裙下風光', '裙內偷拍', '跨下呻吟', '農夫電影', '逼毛', '逼奸', '逼樣', '逼癢', '嫖妓指南', '嫖娼', '嫩b', '嫩BB', '嫩女', '嫩奶', '嫩穴', '嫩屄', '嫩逼', '嫩鮑', '嫩鮑魚', '嫩縫', '對準桃源洞口', '摳穴', '摸你鶏巴', '摸陰蒂', '漏逼', '瑪雅網', '瘋狂抽送', '瘋狗', '監禁陵辱', '碧香亭', '精液', '精液浴', '精液榨取', '緄', '緊穴', '緊縛淩辱', '舔B', '舔奶', '舔穴', '舔屁眼', '舔弄大陰唇', '舔弄小雞雞', '舔屄', '舔腳', '舔逼', '舔雞巴', '蒙汗藥', '蜜穴', '蜜洞', '蜜桃成熟時', '裸聊網站', '裸陪', '裸照圖片', '裸露自拍', '裸體少婦', '裹本', '製作氯胺酮', '製作鹽酸羥亞胺', '製造緬古合成', '製造緬古合成', '誘色uu', '誘姦', '誘惑視頻', '豪乳', '銀民吧', '劌', '噴精', '噴霧蒙汗藥', '墮淫', '嫵媚挑逗', '慰春情', '撅起大白腚', '暴力虐待', '暴奸', '暴乳', '暴淫', '暴幹', '歐美大乳', '歐美無套', '潮噴', '熟女亂倫', '熟女顏射', '熟婦騷器', '窮逼', '線上激情電影', '蓮花逼', '蝴蝶逼', '調教性奴', '調教虐待', '豬操', '賣手槍', '賣比', '賣海洛因', '賣淫', '賣騷', '賤', '賤B', '賤bi', '賤人', '賤比', '賤貨', '賤逼', '賤種', '賫', '輪奸', '輪暴', '輪操', '銷售king粉', '銷售乙醚', '銷售天然咖啡因', '銷售水晶冰', '銷售北朝鮮冰', '銷售可哥精', '銷售左旋麻黃素', '銷售甲基苯丙', '銷售冰古', '銷售苯基丙酮', '銷售純古', '銷售麻古果子', '銷售麻黃素', '銷售間苯三酚', '銷售黃綠牙籤', '銷售羥基環戊基', '銷售趙氏弓弩', '銷售鄰氯苯晴', '銷售鹽酸氯胺酮', '銷售鹽酸羥亞胺', '銷魂洞', '鋝', '靠北', '靠母', '靠爸', '魅惑巨乳', '懆您娘', '懆您媽', '操b', '操B指南', '操人也', '操女也', '操比', '操他', '操母狗', '操穴', '操穴噴水', '操她', '操死', '操你', '操你媽', '操我', '操妳', '操妻', '操屄', '操射', '操爽', '操蛋', '操腫', '操逼', '操機掰', '操爛騷婦', '操爛騷貨', '機8', '機Y', '機Y', '機八', '機巴', '機叭', '機芭', '機掰', '激凸走光', '激情打炮', '激情交友', '激情聊天', '激情圖片', '激情裸體', '激情潮噴', '激插', '蕆', '蕩女', '蕩妹', '蕩婦', '閶', '龜公', '龜兒子', '龜孫子', '龜頭對準陰道', '濕穴', '濕身誘惑', '濫B', '濫比', '濫交', '濫貨', '濫逼', '縱情兵團', '賽你老母', '賽妳阿母', '闃', '鴻圖記', '點色論壇', '翹臀嫩穴', '翹臀嫩逼', '豐唇豔姬', '雙管獵槍買賣', '雙龍入洞', '雜交', '雜種', '雞8', '雞Y', '雞Y', '雞八', '雞巴', '雞巴暴脹', '雞叭', '雞奸', '雞吧', '雞芭', '雞掰', '顏射', '顏射自拍', '顏騎', '懶叫', '懶教', '爆乳人妻', '爆乳娘', '爆操', '獸交', '獸奸', '癟三', '癡乳', '鶏8', '鶏八', '鶏女', '鶏巴', '鶏奸', '鶏吧', '鶏院', '麗春苑', '罌粟', '騷B', '騷女', '騷女叫春', '騷水', '騷包', '騷母', '騷穴', '騷卵', '騷乳', '騷妹', '騷妻', '騷姐姐', '騷屄', '騷姨媽', '騷洞', '騷浪', '騷浪美女', '騷婦掰B', '騷婦露逼', '騷貨', '騷棍', '騷棒', '騷逼', '騷逼噴水', '騷鶏', '灌滿精液', '爛b', '爛比', '爛袋', '爛貨', '爛逼', '蘚鮑', '覽叫', '露B', '露穴', '露屄', '露陰照', '露逼', '鷄巴', '囅', '鹽酸氯胺酮', '鹽酸羥亞胺', '豔母淫臀', '豔乳', '豔婦淫女', '豔情小說', '豔舞淫業',
295
+ ]
296
+ SPECIAL_PROFANITY_PATTERNS = ["🖕🏻", "👌🏻👈🏻", "👉🏻👌🏻", "🤏🏻", "🖕", "🖕🏼", "🖕🏽", "🖕🏾", "🖕🏿", ":middle_finger:"]
297
+ POLITICS_PROFANITY_PATTERNS = [
298
+ "노시개", "노알라", "뇌사모", "뇌물현", "응디시티",
299
+ "귀걸이아빠", "달창", "대깨문", "문재앙", "문죄앙", "문죄인", "문크예거", "훠훠훠", "문빠",
300
+ "근혜어", "길라임", "나대블츠", "닭근혜", "댓통령", "레이디가카", "바쁜벌꿀", "수첩공주", "유신공주", "유체이탈화법", "칠푼이", "쿼터갓",
301
+ "반인반신", "데미갓", "박정희",
302
+ "간철수",
303
+ "가카", "이명박근혜", "다스는누구겁니까",
304
+ ]
305
+
306
+ P_REGEX_GENERAL = re.compile('|'.join(map(re.escape, GENERAL_PROFANITY_PATTERNS)))
307
+ P_REGEX_MINOR = re.compile('|'.join(map(re.escape, MINOR_PROFANITY_PATTERNS)))
308
+ P_REGEX_SEXUAL = re.compile('|'.join(map(re.escape, SEXUAL_PROFANITY_PATTERNS)))
309
+ P_REGEX_BELITTLE = re.compile('|'.join(map(re.escape, BELITTLE_PROFANITY_PATTERNS)))
310
+ P_REGEX_RACE = re.compile('|'.join(map(re.escape, RACE_PROFANITY_PATTERNS)))
311
+ P_REGEX_PARENT = re.compile('|'.join(map(re.escape, PARENT_PROFANITY_PATTERNS)))
312
+ P_REGEX_JAPANESE = re.compile('|'.join(map(re.escape, JAPANESE_PROFANITY_PATTERNS)))
313
+ P_REGEX_CHINESE = re.compile('|'.join(map(re.escape, CHINESE_PROFANITY_PATTERNS)))
314
+ P_REGEX_SPECIAL = re.compile('|'.join(map(re.escape, SPECIAL_PROFANITY_PATTERNS)))
315
+ P_REGEX_POLITICS = re.compile('|'.join(map(re.escape, POLITICS_PROFANITY_PATTERNS)))
316
+
317
+
318
+ EXACT_MATCH_PROFANITY = {'tq', 'qt'}
319
+
320
+
321
+ def apply_multi_char_replacements(text):
322
+ def replace_match(match):
323
+ return MULTI_CHAR_REPLACEMENTS[match.group(0)]
324
+ return MULTI_CHAR_REPLACEMENT_REGEX.sub(replace_match, text)
325
+
326
+ def preprocess_text(text: str, level: str):
327
+ processed_text = text.lower()
328
+
329
+ processed_text = processed_text.translate(NORMALIZATION_TABLE)
330
+ processed_text = apply_multi_char_replacements(processed_text)
331
+ processed_text = re.sub(r'\s+', '', processed_text)
332
+
333
+ if level == 'minor':
334
+ processed_text = re.sub('년', '놈', processed_text)
335
+ processed_text = re.sub('련', '놈', processed_text)
336
+ elif level == 'belittle':
337
+ processed_text = re.sub('뇬', '련', processed_text)
338
+ processed_text = re.sub('놈', '련', processed_text)
339
+ processed_text = re.sub('넘', '련', processed_text)
340
+
341
+ processed_text = re.sub('련', '년', processed_text)
342
+
343
+ elif level == 'sexual' and '보g' in processed_text:
344
+ processed_text = re.sub('보g', '보지', processed_text)
345
+ elif level == 'parent':
346
+ pass
347
+
348
+
349
+ return processed_text
350
+
351
+ def build_flexible_regex(pattern_in_processed_text: str):
352
+ flexible_parts = []
353
+ reverse_single_map = {}
354
+ for k, v in SINGLE_CHAR_NORMALIZATION_MAP.items():
355
+ reverse_single_map.setdefault(v.lower(), set()).add(k)
356
+
357
+ reverse_multi_map = {}
358
+ for k, v in MULTI_CHAR_REPLACEMENTS.items():
359
+ reverse_multi_map.setdefault(v.lower(), set()).add(k)
360
+
361
+ for char in pattern_in_processed_text:
362
+ char_lower = char.lower()
363
+ original_forms = set()
364
+ original_forms.add(re.escape(char))
365
+ original_forms.update(re.escape(k) for k in reverse_single_map.get(char_lower, set()))
366
+ original_forms.update(re.escape(k) for k in reverse_multi_map.get(char_lower, set()))
367
+ original_forms = {f for f in original_forms if f}
368
+
369
+ if not original_forms:
370
+ flexible_parts.append(re.escape(char))
371
+ elif len(original_forms) == 1:
372
+ flexible_parts.append(list(original_forms)[0])
373
+ else:
374
+ flexible_parts.append(f"({'|'.join(original_forms)})")
375
+ return r'\s*'.join(flexible_parts)
376
+
377
+
378
+ def get_false_positive_regex(level: str):
379
+ if level == 'general': return FP_REGEX_GENERAL
380
+ if level == 'minor': return FP_REGEX_MINOR
381
+ if level == 'sexual': return FP_REGEX_SEXUAL
382
+ if level == 'belittle': return FP_REGEX_BELITTLE
383
+ if level == 'race': return FP_REGEX_RACE
384
+ if level == 'parent': return FP_REGEX_PARENT
385
+ if level == 'politics': return FP_REGEX_POLITICS
386
+ if level == 'english': return FP_REGEX_ENGLISH
387
+ return None
388
+
389
+ def get_profanity_regex(level: str):
390
+ if level == 'general': return P_REGEX_GENERAL
391
+ if level == 'minor': return P_REGEX_MINOR
392
+ if level == 'sexual': return P_REGEX_SEXUAL
393
+ if level == 'belittle': return P_REGEX_BELITTLE
394
+ if level == 'race': return P_REGEX_RACE
395
+ if level == 'parent': return P_REGEX_PARENT
396
+ if level == 'japanese': return P_REGEX_JAPANESE
397
+ if level == 'chinese': return P_REGEX_CHINESE
398
+ if level == 'special': return P_REGEX_SPECIAL
399
+ if level == 'politics': return P_REGEX_POLITICS
400
+ return None
401
+
402
+ def normalize_for_custom_comparison(text: str) -> str:
403
+ """Applies basic normalization (lowercase, single/multi char, space removal) for custom pattern matching."""
404
+ processed_text = text.lower()
405
+ processed_text = processed_text.translate(NORMALIZATION_TABLE)
406
+ processed_text = apply_multi_char_replacements(processed_text)
407
+ processed_text = re.sub(r'\s+', '', processed_text)
408
+ return processed_text
409
+
410
+ def load_and_compile_custom_patterns(filepath: str) -> list:
411
+ """Loads patterns from a file, normalizes, escapes, and compiles them."""
412
+ compiled_regexes = []
413
+ if not os.path.exists(filepath):
414
+ return compiled_regexes
415
+
416
+ try:
417
+ with open(filepath, 'r', encoding='utf-8') as f:
418
+ for line in f:
419
+ pattern = line.strip()
420
+ if not pattern or pattern.startswith('#'):
421
+ continue
422
+
423
+ normalized_pattern = normalize_for_custom_comparison(pattern)
424
+
425
+ escaped_pattern = re.escape(normalized_pattern)
426
+
427
+ try:
428
+ compiled_regexes.append(re.compile(rf"{escaped_pattern}"))
429
+ except re.error as e:
430
+ print(f"{colorama.Fore.RED}korcen: Error compiling custom regex '{pattern}' from {filepath}: {e}{colorama.Style.RESET_ALL}")
431
+
432
+ except Exception as e:
433
+ print(f"{colorama.Fore.RED}korcen: Error loading custom filter file {filepath}: {e}{colorama.Style.RESET_ALL}")
434
+
435
+ return compiled_regexes
436
+
437
+ def get_final_filter_regex_str(level: str) -> str:
438
+ if level in ['general', 'sexual', 'parent', 'english', 'chinese', 'special', 'politics']:
439
+ return r'[^a-z0-9ㄱ-ㅎㅏ-ㅣ가-힣ㅗ@=\-_]+'
440
+ elif level in ['minor', 'belittle', 'race', 'japanese']:
441
+ return r'[^ㄱ-ㅎㅏ-ㅣ가-힣]+'
442
+ return r'[^a-zA-Z0-9ㄱ-ㅎㅏ-ㅣ가-힣\s]+'
443
+
444
+
445
+ def check_and_report_profanity_pattern(text: str, level: str = 'general'):
446
+ text_no_urls = URL_REGEX.sub('', text)
447
+
448
+ processed_text_for_includes = preprocess_text(text_no_urls, level)
449
+ for include_regex in CUSTOM_INCLUDE_REGEXES:
450
+ include_match = include_regex.search(processed_text_for_includes)
451
+ if include_match:
452
+ return include_match.group(0)
453
+
454
+ processed_text = preprocess_text(text_no_urls, level)
455
+
456
+ if level == 'english' and BETTER_PROFANITY_LOADED:
457
+ fp_regex_english = get_false_positive_regex('english')
458
+ if fp_regex_english:
459
+ text_for_better_profanity = fp_regex_english.sub('', text_for_better_profanity)
460
+
461
+ text_for_better_profanity = text_for_better_profanity.replace("*", "")
462
+
463
+ censored_text = profanity.censor(text_for_better_profanity, '▩')
464
+ if '▩' in censored_text:
465
+ detected_word_approx = None
466
+ words_in_segment = re.findall(r'\b\w+\b', text_for_better_profanity.lower())
467
+ censored_words_in_segment = re.findall(r'\b\w*▩+\w*\b', censored_text.lower())
468
+
469
+ if censored_words_in_segment:
470
+ original_words_split = text_for_better_profanity.split()
471
+ censored_words_split = censored_text.split()
472
+ for ow, cw in zip(original_words_split, censored_words_split):
473
+ if '▩' in cw:
474
+ detected_word_approx = ow
475
+ break
476
+
477
+ if detected_word_approx:
478
+ normalized_detected_word = normalize_for_custom_comparison(detected_word_approx)
479
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
480
+ if exclude_regex.search(normalized_detected_word):
481
+ return None
482
+ return detected_word_approx
483
+
484
+ fallback_pattern = "english_profanity_detected"
485
+ normalized_fallback = normalize_for_custom_comparison(fallback_pattern)
486
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
487
+ if exclude_regex.search(normalized_fallback):
488
+ return None
489
+ return fallback_pattern
490
+
491
+ if level != 'english' or not BETTER_PROFANITY_LOADED:
492
+ fp_regex = get_false_positive_regex(level)
493
+ text_after_fp = fp_regex.sub('', processed_text) if fp_regex else processed_text
494
+
495
+ if level == 'special':
496
+ final_processed_text = text_after_fp
497
+ else:
498
+ final_filter_regex_str = get_final_filter_regex_str(level)
499
+ final_processed_text = re.sub(final_filter_regex_str, '', text_after_fp)
500
+
501
+ profanity_regex = get_profanity_regex(level)
502
+ if profanity_regex:
503
+ match = profanity_regex.search(final_processed_text)
504
+ if match:
505
+ detected_profanity_string = match.group(0)
506
+
507
+ normalized_detected_profanity = normalize_for_custom_comparison(detected_profanity_string)
508
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
509
+ if exclude_regex.search(normalized_detected_profanity):
510
+ return None
511
+ return detected_profanity_string
512
+
513
+ if processed_text in EXACT_MATCH_PROFANITY and level == 'general':
514
+ normalized_processed_text = normalize_for_custom_comparison(processed_text)
515
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
516
+ if exclude_regex.search(normalized_processed_text):
517
+ return None
518
+ return processed_text
519
+
520
+
521
+ return None
522
+
523
+
524
+ def create_filter_function(level_name: str):
525
+ def filter_func(text: str, id: int = None) -> bool:
526
+ if id is not None:
527
+ if cache_size < 2:
528
+ print(f"{colorama.Fore.YELLOW}korcen: Cache size must be at least 2 for ID based filtering ({level_name}).{colorama.Style.RESET_ALL}")
529
+ return False
530
+ return check_and_report_profanity_pattern(text, level=level_name) is not None
531
+ return filter_func
532
+
533
+ general = create_filter_function('general')
534
+ minor = create_filter_function('minor')
535
+ sexual = create_filter_function('sexual')
536
+ belittle = create_filter_function('belittle')
537
+ race = create_filter_function('race')
538
+ parent = create_filter_function('parent')
539
+ english = create_filter_function('english')
540
+ japanese = create_filter_function('japanese')
541
+ chinese = create_filter_function('chinese')
542
+ special = create_filter_function('special')
543
+ politics = create_filter_function('politics')
544
+
545
+ def highlight_profanity(text: str, id: int = None, level: str = 'general', highlight_char: str = '!') -> str:
546
+ if id is not None:
1324
547
  if cache_size < 2:
1325
- print("Cache size must be at least 2")
1326
- return "error"
1327
- text = save_text(id=id, text=text)
548
+ print(f"{colorama.Fore.YELLOW}korcen: Cache size must be at least 2 for ID based filtering (highlighting {level}).{colorama.Style.RESET_ALL}")
549
+ return text
550
+
551
+ if level.lower() == 'all':
552
+ levels = ['general', 'minor', 'sexual', 'belittle', 'race', 'parent',
553
+ 'special', 'politics']
554
+
555
+ if BETTER_PROFANITY_LOADED:
556
+ levels.append('english')
557
+
558
+ levels.extend(['japanese', 'chinese'])
559
+
560
+ result = text
561
+ for current_level in levels:
562
+ result = highlight_profanity(result, id, current_level, highlight_char)
563
+ return result
564
+
565
+ matched_pattern = check_and_report_profanity_pattern(text, level=level)
566
+
567
+ if not matched_pattern:
568
+ return text
1328
569
 
1329
- newtext = text.lower()
570
+ text_to_highlight_on = text
571
+ flexible_regex_pattern = build_flexible_regex(matched_pattern)
572
+
573
+ try:
574
+ flexible_regex = re.compile(flexible_regex_pattern, re.IGNORECASE)
575
+ highlighted_text = flexible_regex.sub(
576
+ lambda m: f"{highlight_char}{m.group(0)}{highlight_char}",
577
+ text_to_highlight_on
578
+ )
579
+ except re.error as e:
580
+ print(f"{colorama.Fore.RED}korcen: Error compiling flexible regex for '{matched_pattern}' (level {level}): {e}{colorama.Style.RESET_ALL}")
581
+ return text
582
+ return highlighted_text
583
+
584
+ def set_custom_filter_paths(include_path: str = CUSTOM_INCLUDE_FILE, exclude_path: str = CUSTOM_EXCLUDE_FILE):
585
+ """
586
+ Loads and compiles custom profanity include/exclude patterns from specified files.
587
+ This function can be called by the user to change the paths after initial load.
588
+
589
+ Args:
590
+ include_path: Path to the custom include patterns file. Defaults to CUSTOM_INCLUDE_FILE.
591
+ exclude_path: Path to the custom exclude patterns file. Defaults to CUSTOM_EXCLUDE_FILE.
592
+ """
593
+ global CUSTOM_INCLUDE_REGEXES, CUSTOM_EXCLUDE_REGEXES
594
+ CUSTOM_INCLUDE_REGEXES = load_and_compile_custom_patterns(include_path)
595
+ if CUSTOM_INCLUDE_REGEXES:
596
+ print(f"{colorama.Fore.GREEN}korcen: Loaded {len(CUSTOM_INCLUDE_REGEXES)} custom include patterns from {include_path}{colorama.Style.RESET_ALL}")
597
+ CUSTOM_EXCLUDE_REGEXES = load_and_compile_custom_patterns(exclude_path)
598
+ if CUSTOM_EXCLUDE_REGEXES:
599
+ print(f"{colorama.Fore.GREEN}korcen: Loaded {len(CUSTOM_EXCLUDE_REGEXES)} custom exclude patterns from {exclude_path}{colorama.Style.RESET_ALL}")
600
+
601
+ set_custom_filter_paths()
1330
602
 
1331
- jap = ["肉便器", "糞野郎", "バカ野郎", "腐れ外道", "部落民", "中出し", "強姦",
1332
- "特定アジア", "人非人", "鬼畜", "負け犬", "支那", "トルコ風呂", "淫売", "未開人"]
1333
- for i in jap:
1334
- if i in newtext:
1335
- return True
603
+ def check(text: str, id: int=None):
604
+ if general(text, id): return True
605
+ if minor(text, id): return True
606
+ if sexual(text, id): return True
607
+ if belittle(text, id): return True
608
+ if race(text, id): return True
609
+ if parent(text, id): return True
610
+ if special(text, id): return True
611
+ if politics(text, id): return True
612
+ if BETTER_PROFANITY_LOADED and english(text, id): return True
613
+ if japanese(text, id): return True
614
+ if chinese(text, id): return True
1336
615
 
1337
616
  return False
1338
617
 
1339
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1340
- def chinese(text:str, id: int=None):
1341
- global cache_size
1342
- if id != None:
1343
- if cache_size < 2:
1344
- print("Cache size must be at least 2")
1345
- return "error"
1346
- text = save_text(id=id, text=text)
1347
-
1348
- text = re.sub('𝗌', 's', text)
1349
- text = re.sub('𝘴', 's', text)
1350
- text = re.sub('𝙨', 's', text)
1351
- text = re.sub('𝚜', 's', text)
1352
- text = re.sub('𝐬', 's', text)
1353
- text = re.sub('𝑠', 's', text)
1354
- text = re.sub('𝒔', 's', text)
1355
- text = re.sub('𝓈', 's', text)
1356
- text = re.sub('𝓼', 's', text)
1357
- text = re.sub('𝔰', 's', text)
1358
- text = re.sub('𝖘', 's', text)
1359
- text = re.sub('𝕤', 's', text)
1360
- text = re.sub('s', 's', text)
1361
- text = re.sub('ş', 's', text)
1362
- text = re.sub('ⓢ', 's', text)
1363
- text = re.sub('⒮', 's', text)
1364
- text = re.sub('🅢', 's', text)
1365
- text = re.sub('🆂', 's', text)
1366
- text = re.sub('🅂', 's', text)
1367
- text = re.sub('𝑺', 's', text)
1368
- text = re.sub('𝖾', 'e', text)
1369
- text = re.sub('𝘦', 'e', text)
1370
- text = re.sub('𝙚', 'e', text)
1371
- text = re.sub('𝚎', 'e', text)
1372
- text = re.sub('𝐞', 'e', text)
1373
- text = re.sub('𝑒', 'e', text)
1374
- text = re.sub('𝒆', 'e', text)
1375
- text = re.sub('ℯ', 'e', text)
1376
- text = re.sub('𝓮', 'e', text)
1377
- text = re.sub('𝔢', 'e', text)
1378
- text = re.sub('𝖊', 'e', text)
1379
- text = re.sub('𝕖', 'e', text)
1380
- text = re.sub('e', 'e', text)
1381
- text = re.sub('ė', 'e', text)
1382
- text = re.sub('ⓔ', 'e', text)
1383
- text = re.sub('⒠', 'e', text)
1384
- text = re.sub('🅔', 'e', text)
1385
- text = re.sub('🅴', 'e', text)
1386
- text = re.sub('🄴', 'e', text)
1387
- text = re.sub('є', 'e', text)
1388
- text = re.sub('𝗑', 'x', text)
1389
- text = re.sub('𝘹', 'x', text)
1390
- text = re.sub('𝙭', 'x', text)
1391
- text = re.sub('𝚡', 'x', text)
1392
- text = re.sub('𝐱', 'x', text)
1393
- text = re.sub('𝑥', 'x', text)
1394
- text = re.sub('𝒙', 'x', text)
1395
- text = re.sub('𝓍', 'x', text)
1396
- text = re.sub('𝔁', 'x', text)
1397
- text = re.sub('𝔵', 'x', text)
1398
- text = re.sub('𝖝', 'x', text)
1399
- text = re.sub('𝕩', 'x', text)
1400
- text = re.sub('x', 'x', text)
1401
- text = re.sub('ⓧ', 'x', text)
1402
- text = re.sub('⒳', 'x', text)
1403
- text = re.sub('🅧', 'x', text)
1404
- text = re.sub('🆇', 'x', text)
1405
- text = re.sub('🅇', 'x', text)
1406
- text = re.sub('₨', 'rs', text)
1407
- text = re.sub('ų', 'u', text)
1408
- text = re.sub('ç', 'c', text)
1409
- text = re.sub('F', 'F', text)
1410
- text = re.sub('K', 'K', text)
1411
- text = re.sub('C', 'C', text)
1412
- newtext = re.sub('U', 'U', text)
1413
-
1414
-
1415
- chi = ['G巴', 'G巴', 'G叭', 'G叭', 'G芭', 'G芭', 'G掰', 'G掰', 'g點', 'MM屄', 'mm美圖', 'qvod成人', 'sex聊天室', 'SM後庭器具', 'SM援交', 'SM舔穴', 'sm調教', 'XIAAV論壇''ㄊㄇㄉ', '一本道電影', '一夜性網', '一夜情論壇', '一夜情激情成人聊天室', '九九情色帝國', '九城情色', '二B', '二穴中出', '人人有色論壇', '人妻交換', '人妻色誘', '人妻做愛', '人妻榨乳', '人性本色', '入穴一遊', '三唑侖', '三級激情片', '三陪', '上你幹妳', '上門按摩', '下賤', '口內爆射', '口交', '口含雞巴', '口活', '口射', '口淫', '口爆', '大b', '大力抽送', '大奶美逼', '大奶騷女', '大母牛娛樂論壇', '大乳頭', '大波粉B', '大波騷婦', '大花逼', '大眾色情成人網', '大麻', '大雞巴', '大鶏巴', '女尻', '女屄', '女馬ㄉ', '女馬白勺', '女馬的', '女幹', '小b', '小穴', '小姐上門全套', '小姐打飛機', '小姐裸聊', '小逼', '小嫩雞', '小騷BB', '阝月', '中文搜性網', '互淫', '互舔淫穴', '內射', '公媳亂', '勾魂少婦', '午夜天堂成人', '天天干貼圖', '天天情色', '夫妻3p', '夫妻多p', '夫妻俱樂部', '夫妻亂交', '少女小姐上門', '少女被插', '手淫', '日本鬼子', '日死你', '日你', '日屄', '日逼', '欠日', '欠幹', '毛鮑', '王八', '他ㄇㄉ', '他ㄇ的', '他嗎的', '他媽的', '凸他', '凸她', '凸肉優', '凸你', '凸我', '凸妳', '出售冰毒', '出售曲馬多', '出售苯基丙酮', '出售海豹M9', '出售迷幻藥', '出售迷情藥', '出售氫化可的松', '出售麥角醇', '出售麻古', '出售麻果配方', '出售麻黃素', '出售氯胺酮', '出售腎', '出售間苯三酚', '出售黃牙籤', '出售黃白牙籤', '出售黃麻素', '出售黃體酮', '出售羥基環戊基', '出售槍支', '出售監聽王', '出售蒙汗藥', '出售鄰氯苯晴', '出售磚石冰毒', '出售鎂粉', '出售鹽酸曲馬多', '出售鹽酸曲馬多片', '出售鹽酸羥亞胺', '出售鑽石冰毒', '包二奶', '去你媽的', '去氧麻黃堿製作方法', '可卡因', '叼你媽', '失身粉', '奴隷調教', '奶大屄肥', '尻', '左旋黃麻素', '巨騷', '幼交', '幼妓', '幼逼', '扒穴', '扒屄', '打手槍', '打炮', '打飛機', '打野炮', '本土無碼', '母女雙飛', '母子交歡', '母子姦情', '母奸', '玉穴', '玉乳', '生小孩沒屁眼', '生徒胸觸', '甲基苯丙', '甲基苯胺', '白虎小穴', '白虎少婦', '白虎美女貼圖', '白虎陰穴', '白虎嫩B', '白粉', '白液四濺', '白嫩騷婦', '白漿四濺', '穴海', '穴淫', '穴爽', '穴圖', '交換夫妻', '先奸後殺', '全家死光光', '冰毒', '吃精', '吃雞巴', '合成氯胺酮', '合成鹽酸羥亞胺', '多人性愛', '多人輪', '奸幼', '她馬的', '她媽的', '好色cc', '安非他命', '成人A片', '成人bt', '成人下載', '成人五月天', '成人午夜場', '成人百強', '成人自拍', '成人社區', '成人書庫', '成人情色', '成人情色網站', '成人聊天室', '成人軟體', '成人黃色網站', '成人圖片', '成人圖片網站', '成人網站', '成人網站導航', '成人論壇', '成人導航', '成人激情小說', '成人激情電影', '成人激情圖片', '成人激情網站', '死GM', '死全家', '江山如此多嬌txt下載', '江豬媳', '百性閣', '百鳳宮', '老少亂倫', '老師的小穴', '肉穴', '肉具', '肉便器', '肉洞', '肉唇', '肉淫器吞精', '肉莖', '肉壺', '肉棍', '肉棍幹騷婦', '肉絲褲襪', '肉感炮友', '肉溝', '肉逼', '肉慾', '肉縫', '肉簫', '自拍美穴', '自拍寫真', '自插小穴', '自慰摳穴', '舌頭穴', '色97愛', '色BB吧', '色色成人', '色狐狸網址', '色界論��', '色書庫', '色狼小說', '色狼論壇', '色迷城', '色情工廠', '色情倚天屠龍記', '色情論壇', '色窩窩', '西班牙蒼蠅水', '你他馬的', '你他媽的', '你它馬的', '你它媽的', '你她馬的', '你老母', '你娘卡好', '你麻痹', '你媽比', '你媽的', '你媽逼', '吞精', '吞精騷妹', '含屌', '吸精', '吸精少女', '吹蕭', '妓女', '妓女', '妖媚熟母', '完蛋操', '屁眼', '快樂AV', '我日', '我奸', '我的性啟蒙老師', '我要官人', '我要性交', '我要性交網', '我草', '我做騷妻', '我就去色', '我幹', '我愛我色網址', '我操', '我操你', '杜冷丁', '狂乳激揺', '狂插', '狂插男根膠囊', '狂插性器具', '男女交歡', '男女蒲典', '男女激情淫亂', '肛交', '肛交吹喇叭', '肛屄', '肛門拳交', '肛門噴水', '走光偷拍', '足腳交', '迅雷三級影片', '那娘錯比', '那嗎B', '那嗎老比', '那嗎逼', '那嗎瘟比', '那嗎錯比', '乳尻', '乳交', '乳此絲襪', '乳射', '乳爆', '乳霸', '亞洲有碼', '亞洲性交電影', '亞洲性虐', '亞洲情色網', '亞洲淫娃', '亞洲插穴圖', '供應化學冰', '供應天然咖啡因', '供應可哥精', '供應四氫吡喃酮', '供應奶油冰', '供應甲基可哥堿', '供應甲基苯丙胺', '供應白冰', '供應冰糖', '供應咖啡鹼', '供應咖啡鹼', '供應青蒿素', '供應胡椒基甲基', '供應氫化可的松', '供應麥角醇', '供應麻果丸子', '供應麻黃素', '供應麻穀', '供應植物冰', '供應氯胺酮', '供應無水咖啡因', '供應黃冰', '供應黃體酮', '供應罌粟殼', '供應鹽酸氯', '供應鹽酸羥亞胺', '兩性淫亂地址', '制幻劑', '制服狩', '制服美婦', '制服誘惑', '叔嫂肉慾', '夜色王朝', '夜色貴族', '奇淫寶鑒', '妹妹陰毛', '妹妹騷圖', '屄', '屄毛', '屄屄特寫', '性之站', '性奴', '性奴會', '性用品', '性交', '性交自拍', '性交吞精', '性交易', '性交無碼', '性交圖', '性交課', '性免費電影', '性兩', '性具', '性服務', '性虎', '性虎色網', '性派對', '性虐', '性虐待', '性息', '性高潮', '性聊', '性無能', '性視頻', '性傭', '性愛', '性愛韋小寶之玩女大王', '性愛淫圖', '性愛插穴', '性愛視頻下載', '性愛圖', '性愛擂臺', '性感肉絲', '性感妖嬈', '性感沙灘2', '性感乳娘', '性感誘惑', '性感騷女', '性遊戲', '性夢', '性福', '性福源', '性戰擂臺', '性饑渴', '抽插', '拍肩迷藥', '拔屄', '拔屄自拍', '招妓', '招鶏', '放尿', '放蕩少婦', '放蕩少婦賓館', '放蕩熟女', '明星淫圖', '明星裸體照', '東北xx網', '東京丸井買賣', '東洋屄', '松島楓迅雷下載', '波霸乳交器具', '狗b', '狗日', '狗卵子', '狗娘', '狗娘養的', '狗狼養的', '狗養', '狗操', '玩穴', '玩逼', '肏', '肏屄', '肥逼', '花和尚導航', '花都逍遙鄉村春光', '花樣性交', '近親相奸', '近親相姦', '金毛穴', '金鱗豈是池中物全本', '亮穴', '亮屄', '俏臀攝魄', '俗人島', '前凸後翹', '咪咪圖片', '咬著龜頭', '品穴', '品色堂', '品色堂網址', '品香堂', '哇嘎成人三級', '姦染', '姦情', '姦淫', '姦淫', '姦淫電車', '姫辱', '屌人也', '屌女也', '屌他', '屌她', '屌你', '屌我', '屌妳', '帝國夜色', '挑情', '春光外瀉', '春藥', '柔陰術', '毒品出售', '毒龍舔腳', '洗腸射尿', '流淫', '流蜜汁', '炮友之家', '相奸', '紅蜘蛛迷奸藥', '美女b毛圖', '美女成人', '美女吞精', '美女性交真圖', '美女面對面激情裸聊', '美女高潮', '美女淫穴', '美女聊天室', '美女視頻聊天室', '美女祼聊', '美女激情視頻網', '美幼', '美穴', '美乳', '美乳美穴', '美乳鬥豔', '美臀夾陰', '美臀嫰穴', '美騷婦', '美體豔姿', '胡瘟', '虐奴', '虐戀花園', '要色色', '訂購大冰磚', '訂購苯基丙酮', '訂購氯胺酮', '訂購鹽酸羥亞胺', '迫奸', '風騷欲女', '風��淫蕩', '風豔閣', '食精', '香水型迷奸藥', '香煙迷藥催眠迷幻藥', '原味絲襪', '哭母', '哭爸', '唐僧和粉塵女子的性愛生活', '套弄花心', '射奶', '射爽', '射精', '射顏', '恥辱輪奸', '拳交', '捏你鶏巴', '捏弄', '桃園蜜洞', '浪女', '浪叫', '浪穴', '浪婦', '浴尿', '浴室亂倫', '浴室幹騷女系列', '海洛因', '狼友',
1416
- '神經病', '秘唇', '粉穴', '粉屄', '粉紅穴', '胯下呻吟', '胸濤乳浪', '草你娘', '草你媽', '草你媽', '草擬媽', '迷幻藥', '迷失禦花園', '迷奸', '迷奸系列', '迷奸香水', '迷奸藥', '迷情水', '迷情藥製作方法', '迷魂藥', '迷魂藥三唑侖', '迷藥', '迷藥迷情藥', '針孔偷拍', '馬白勺', '高效三唑侖', '高級逼', '高清性愛', '高潮白漿', '高潮集錦', '高麗棒子', '鬼畜輪奸', '鬼輪姦', '假陽具插穴', '做愛', '做愛自拍', '做愛電影', '做愛圖片', '偷拍美穴', '偷窺圖片', '偷歡照片', '動漫色圖', '娼', '婊子', '婬亂軍團', '寂寞自摸', '密穴', '密穴貼圖', '採花堂', '採花網', '梅花屄', '欲仙欲死', '欲仙欲浪', '欲海天龍傳', '殺你一家', '殺你全家', '淩辱', '淫B', '淫女', '淫水', '淫叫', '淫奴', '淫母', '淫汁', '淫穴', '淫穴裡騷水', '淫穴騷水', '淫奸電影', '淫肉誘惑', '淫色', '淫色貼圖', '淫告白', '淫妞', '淫妹', '淫妻', '淫妻交換', '淫姐', '淫店', '淫東方', '淫河', '淫娃', '淫流', '淫虐', '淫師蕩母', '淫書', '淫浪', '淫婦', '淫情', '淫液', '淫貨', '淫絲蕩襪', '淫腔', '淫亂工作', '淫亂診所', '淫亂潮吹', '淫亂熟女', '淫逼', '淫圖', '淫網', '淫蜜', '淫慾', '淫樣', '淫漿', '淫賤', '淫戰群P', '淫蕩迷情藥', '淫蕩貴婦', '淫糜', '淫聲浪語', '淫穢', '淫穢', '淫穢bt電影', '淫穢圖片', '淫獸學園', '淫癡', '淫魔', '淫驢屯', '爽穴', '猖妓', '猛插', '猛操狂射', '現代情色小說', '羞恥母', '聊色', '處女開包', '被幹', '被操', '販賣king粉', '販賣搖頭丸', '逍遙遊論壇', '速效迷奸藥', '造愛', '野外性交', '陰戶', '陰毛', '陰水', '陰穴新玩法', '陰屄', '陰門', '陰阜', '陰阜高聳', '陰莖插小穴', '陰道圖片', '雪腿玉胯', '麻古製作工藝', '婷婷激情聊天室', '媚藥少年', '就去日', '廁奴', '廁所偷拍', '廁所盜攝', '扉之陰', '掰穴', '掰穴打洞', '掰穴皮卡丘', '提供K粉', '提供冰毒', '提供氯胺酮', '提供鹽酸羥亞胺', '插b', '插比', '插穴', '插穴手淫', '插穴止癢', '插穴圖', '插老師穴', '插你媽', '插姐姐嫩穴', '插後庭', '插陰莖', '插進', '插逼', '插暴', '換妻', '朝天穴', '氯胺酮出貨', '氯胺酮技術轉讓', '氯胺酮到貨', '氯胺酮訂購', '氯胺酮電話', '無毛穴', '無毛美少女', '無套自拍', '無碼長片', '無碼炮圖', '無碼做愛', '無碼淫女', '無碼淫漫', '無碼無套', '無碼精選', '無碼體驗', '發浪', '發騷', '硝酸甘油炸藥製造', '童顏巨乳', '絲襪足交', '絲襪高跟', '絲襪淫婦', '腚', '菅野亞梨沙迅雷下載', '菊花洞', '街頭扒衣', '買胡椒基甲基酮', '買賣小冰磚', '買賣四氫吡喃酮', '買賣黃麻素', '買賣鹽酸羥亞胺', '超毛大鮑', '酥穴', '酥胸誘惑', '酥癢', '開苞', '陽具', '陽痿', '集體性愛', '集體淫', '黃牙籤出售', '黃色成人網站', '黃色妹妹a級大片', '黃色妹妹a級大片', '黑毛屄', '黑屄', '黑逼', '亂交', '亂倫', '亂輪', '傻比', '塞你公', '塞你母', '塞你老母', '塞你老師', '塞你爸', '塞你娘', '媽B', '媽比', '媽白勺', '媽批', '媽的', '媽媽色', '媽逼', '嫐屄', '幹78', '幹78', '幹GY', '幹GY', '幹一家', '幹七八', '幹人也', '幹入', '幹女也', '幹他', '幹他媽', '幹它', '幹尼', '幹穴', '幹全家', '幹她', '幹她媽', '幹死', '幹死你', '幹汝', '幹你', '幹你老比', '幹你老母', '幹你良', '幹你娘', '幹你媽', '幹你媽b', '幹你媽逼', '幹我', '幹牠', '幹妳', '幹妳老母', '幹妳娘', '幹妳馬', '幹妳媽', '幹拎娘', '幹林', '幹炮', '幹砲', '幹勒', '幹啦', '幹您', '幹您娘', '幹逼', '幹機', '幹機掰', '幹雞', '幹爆', '微型袖珍手狗', '想上你', '惹火自拍', '愛幼閣', '愛色cc', '愛妻淫穴', '愛液', '愛液橫流', '愛愛', '搖頭丸', '搖頭丸', '新金瓶梅', '極品奶妹', '極品白虎', '極品波神', '極品波霸', '極品金髮美女美穴圖', '歇逼', '經典炮圖', '群P', '群交', '群交亂舞', '群奸', '群奸亂交', '群奸輪射', '群陰會', '群魔色舞', '聖泉學淫', '萬淫堂', '裙下風光', '裙內偷拍', '跨下呻吟', '農夫電影', '逼毛', '逼奸', '逼樣', '逼癢', '嫖妓指南', '嫖娼', '嫩b', '嫩BB', '嫩女', '嫩奶', '嫩穴', '嫩屄', '嫩逼', '嫩鮑', '嫩鮑魚', '嫩縫', '對準桃源洞口', '摳穴', '摸你鶏巴', '摸陰蒂', '漏逼', '瑪雅網', '瘋狂抽送', '瘋狗', '監禁陵辱', '碧香亭', '精液', '精液浴', '精液榨取', '緄', '緊穴', '緊縛淩辱', '舔B', '舔奶', '舔穴', '舔屁眼', '舔弄大陰唇', '舔弄小雞雞', '舔屄', '舔腳', '舔逼', '舔雞巴', '蒙汗藥', '蜜穴', '蜜洞', '蜜桃成熟時', '裸聊網站', '裸陪', '裸照圖片', '裸露自拍', '裸體少婦', '裹本', '製作氯胺酮', '製作鹽酸羥亞胺', '製造緬古合成', '製造緬古合成', '誘色uu', '誘姦', '誘惑視頻', '豪乳', '銀民吧', '劌', '噴精', '噴霧蒙汗藥', '墮淫', '嫵媚挑逗', '慰春情', '撅起大白腚', '暴力虐待', '暴奸', '暴乳', '暴淫', '暴幹', '歐美大乳', '歐美無套', '潮噴', '熟女亂倫', '熟女顏射', '熟婦騷器', '窮逼', '線上激情電影', '蓮花逼', '蝴蝶逼', '調教性奴', '調教虐待', '豬操', '賣手槍', '賣比', '賣海洛因', '賣淫', '賣騷', '賤', '賤B', '賤bi', '賤人', '賤比', '賤貨', '賤逼', '賤種', '賫', '輪奸', '輪暴', '輪操', '銷售king粉', '銷售乙醚', '銷售天然咖啡因', '銷售水晶冰', '銷售北朝鮮冰', '銷售可哥精', '銷售左旋麻黃素', '銷售甲基苯丙', '銷售冰古', '銷售苯基丙酮', '銷售純古', '銷售麻古果子', '銷售麻黃素', '銷售間苯三酚', '銷售黃綠牙籤', '銷售羥基環戊基', '銷售趙氏弓弩', '銷售鄰氯苯晴', '銷售鹽酸氯胺酮', '銷售鹽酸羥亞胺', '銷魂洞', '鋝', '靠北', '靠母', '靠爸', '魅惑巨乳', '懆您娘', '懆您媽', '操b', '操B指南', '操人也', '操女也', '操比', '操他', '操母狗', '操穴', '操穴噴水', '操她', '操死', '操你', '操你媽', '操我', '操妳', '操妻', '操屄', '操射', '操爽', '操蛋', '操腫', '操逼', '操機掰', '操爛騷婦', '操爛騷貨', '機8', '機Y', '機Y', '機八', '機巴', '機叭', '機芭', '機掰', '激凸走光', '激情打炮', '激情交友', '激情聊天', '激情圖片', '激情裸體', '激情潮噴', '激插', '蕆', '蕩女', '蕩妹', '蕩婦', '閶', '龜公', '龜兒子', '龜孫子', '龜頭對準陰道', '濕穴', '濕身誘惑', '濫B', '濫比', '濫交', '濫貨', '濫逼', '縱情兵團', '賽你老母', '賽妳阿母', '闃', '鴻圖記', '點色論壇', '翹臀嫩穴', '翹臀嫩逼', '豐唇豔姬', '雙管獵槍買賣', '雙龍入洞', '雜交', '雜種', '雞8', '雞Y', '雞Y', '雞八', '雞巴', '雞巴暴脹', '雞叭', '雞奸', '雞吧', '雞芭', '雞掰', '顏射', '顏射自拍', '顏騎', '懶叫', '懶教', '爆乳人妻', '爆乳娘', '爆操', '獸交', '獸奸', '癟三', '癡乳', '鶏8', '鶏八', '鶏女', '鶏巴', '鶏奸', '鶏吧', '鶏院', '麗春苑', '罌粟', '騷B', '騷女', '騷女叫春', '騷水', '騷包', '騷母', '騷穴', '騷卵', '騷乳', '騷妹', '騷妻', '騷姐姐', '騷屄', '騷姨媽', '騷洞', '騷浪', '騷浪美女', '騷婦掰B', '騷婦露逼', '騷貨', '騷棍', '騷棒', '騷逼', '騷逼噴水', '騷鶏', '灌滿精液', '爛b', '爛比', '爛袋', '爛貨', '爛逼', '蘚鮑', '覽叫', '露B', '露穴', '露屄', '露陰照', '露逼', '鷄巴', '囅', '鹽酸氯胺酮', '鹽酸羥亞胺', '豔母淫臀', '豔乳', '豔婦淫女', '豔情小說', '豔舞淫業']
1417
- for i in chi:
1418
- if i in newtext:
1419
- return True
1420
-
1421
- return False
618
+ def check_and_report_profanity_pattern(text: str, level: str = 'general'):
619
+ text_no_urls = URL_REGEX.sub('', text)
620
+ processed_text = preprocess_text(text_no_urls, level)
621
+
622
+ for include_regex in CUSTOM_INCLUDE_REGEXES:
623
+ include_match = include_regex.search(processed_text)
624
+ if include_match:
625
+ return include_match.group(0)
626
+
627
+ if processed_text in EXACT_MATCH_PROFANITY and level == 'general':
628
+ pass
629
+
630
+ fp_regex = get_false_positive_regex(level)
631
+ text_without_false_positives = fp_regex.sub('', processed_text) if fp_regex else processed_text
632
+
633
+
634
+ if level == 'english':
635
+ if BETTER_PROFANITY_LOADED:
636
+ text_for_better_profanity = text_without_false_positives.replace("*", "")
637
+ censored_text = profanity.censor(text_for_better_profanity, '')
638
+ if '' in censored_text:
639
+ original_words = text_for_better_profanity.split()
640
+ censored_words = censored_text.split()
641
+ detected_word = None
642
+ for ow, cw in zip(original_words, censored_words):
643
+ if '' in cw:
644
+ detected_word = ow.lower()
645
+ break
646
+
647
+ if detected_word:
648
+ normalized_detected_word = normalize_for_custom_comparison(detected_word)
649
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
650
+ if exclude_regex.fullmatch(normalized_detected_word):
651
+ return None
652
+ return detected_word
653
+
654
+ fallback_pattern = "english_profanity_detected"
655
+ normalized_fallback = normalize_for_custom_comparison(fallback_pattern)
656
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
657
+ if exclude_regex.fullmatch(normalized_fallback):
658
+ return None
659
+ return fallback_pattern
660
+
661
+ else:
662
+ return None
663
+
664
+ profanity_regex = get_profanity_regex(level)
665
+ if not profanity_regex:
666
+ return None
667
+
668
+ if level == 'special':
669
+ final_processed_text = text_without_false_positives
670
+ else:
671
+ final_filter_regex_str = get_final_filter_regex_str(level)
672
+ final_processed_text = re.sub(final_filter_regex_str, '', text_without_false_positives)
1422
673
 
1423
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1424
- def special(text:str, id: int=None):
1425
- global cache_size
1426
- if id != None:
1427
- if cache_size < 2:
1428
- print("Cache size must be at least 2")
1429
- return "error"
1430
- text = save_text(id=id, text=text)
674
+ match = profanity_regex.search(final_processed_text)
675
+ if match:
676
+ detected_profanity_string = match.group(0)
1431
677
 
1432
- le = 0
678
+ normalized_detected_profanity = normalize_for_custom_comparison(detected_profanity_string)
679
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
680
+ if exclude_regex.fullmatch(normalized_detected_profanity):
681
+ return None
1433
682
 
1434
- text = text.lower()
1435
- newtext = re.sub(' ', '', text)
683
+ return detected_profanity_string
1436
684
 
1437
- emoji = ["🖕🏻", "👌🏻👈🏻", "👉🏻👌🏻", "🤏🏻", "🖕",
1438
- "🖕🏼", "🖕🏽", "🖕🏾", "🖕🏿", ":middle_finger:"]
1439
- for i in emoji:
1440
- if i in newtext:
1441
- le = 9
685
+ if processed_text in EXACT_MATCH_PROFANITY and level == 'general':
686
+ normalized_processed_text = normalize_for_custom_comparison(processed_text)
687
+ for exclude_regex in CUSTOM_EXCLUDE_REGEXES:
688
+ if exclude_regex.fullmatch(normalized_processed_text):
689
+ return None
690
+ return processed_text
1442
691
 
1443
- if le == 9:
1444
- return True
1445
- else:
1446
- return False
692
+ return None
1447
693
 
1448
- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1449
- def politics(text:str, id: int=None):
1450
- global cache_size
1451
- if id != None:
1452
- if cache_size < 2:
1453
- print("Cache size must be at least 2")
1454
- return "error"
1455
- text = save_text(id=id, text=text)
1456
-
1457
- text = text.lower()
1458
- newtext = re.sub(' ', '', text)
1459
-
1460
- mh = ["노시개", "노알라", "뇌사모", "뇌물현", "응디시티"]
1461
- for i in mh:
1462
- if i in newtext:
1463
- return True
1464
-
1465
- ji = ["귀걸이아빠", "달창", "대깨문", "문재앙", "문죄앙", "문죄인", "문크예거", "훠훠훠", "문빠"]
1466
- for i in ji:
1467
- if i in newtext:
1468
- return True
1469
-
1470
- gh = ["근혜어", "길라임", "나대블츠", "닭근혜", "댓통령", "레이디가카",
1471
- "바쁜벌꿀", "수첩공주", "유신공주", "유체이탈화법", "칠푼이", "쿼터갓"]
1472
- for i in gh:
1473
- if i in newtext:
1474
- return True
1475
-
1476
- jh = ["반인반신", "데미갓", "박정희"]
1477
- for i in jh:
1478
- if i in newtext:
1479
- return True
1480
-
1481
- cs = ["간철수"]
1482
- for i in cs:
1483
- if i in newtext:
1484
- return True
1485
-
1486
- text = re.sub("[^가-힣]", "", newtext)
1487
- text = re.sub('카카오톡', '', text)
1488
- text = re.sub('카톡', '', text)
1489
- text = re.sub('카페', '', text)
1490
- text = re.sub('하다가', '', text)
1491
- text = re.sub('먹다가', '', text)
1492
- text = re.sub('카와이', '', text)
1493
- text = re.sub('카츠', '', text)
1494
- text = re.sub('카레', '', text)
1495
- text = re.sub('니가', '', text)
1496
- text = re.sub('내가', '', text)
1497
- text = re.sub('너가', '', text)
1498
- text = re.sub('우리가', '', text)
1499
- text = re.sub('너희가', '', text)
1500
- text = re.sub('카카오', '', text)
1501
- text = re.sub('너희가', '', text)
1502
- text = re.sub('카세트', '', text)
1503
- text = re.sub('카플레이어', '', text)
1504
- text = re.sub('카운터', '', text)
1505
- text = re.sub('카정', '', text)
1506
- text = re.sub('카드', '', text)
1507
- mb = ["가카", "이명박근혜", "다스는누구겁니까"]
1508
- for i in mb:
1509
- if i in text:
1510
- return True
694
+ # Copyright© All rights reserved.
695
+ # _____ _
696
+ # |_ _|_ _ _ __ __ _| |_
697
+ # | |/ _` | '_ \ / _` | __|
698
+ # | | (_| | | | | (_| | |_
699
+ # |_|\__,_|_| |_|\__,_|\__|
1511
700
 
1512
- return False
1513
701
 
1514
- def check(text: str, id: int=None):
1515
- global cache_size
1516
- if id != None:
1517
- if cache_size < 2:
1518
- print("korcen: Cache size must be at least 2")
1519
- return False
1520
- text = save_text(id=id, text=text)
1521
-
1522
- if general(text):
1523
- return True
1524
- if minor(text):
1525
- return True
1526
- if sexual(text):
1527
- return True
1528
- if belittle(text):
1529
- return True
1530
- if race(text):
1531
- return True
1532
- if parent(text):
1533
- return True
1534
- if special(text):
1535
- return True
1536
- if politics(text):
1537
- return True
702
+ if __name__ == '__main__':
1538
703
 
1539
- return False
704
+ print("\n--- Custom Filter Tests ---")
705
+
706
+ custom_include_text_1 = "이 문장은 나만의 비속어를 포함합니다."
707
+ print(f"Custom Include Test 1 ('{custom_include_text_1}'): {check(custom_include_text_1)}")
708
+ print(f"Highlight Custom Include 1: {highlight_profanity(custom_include_text_1, level='all')}")
709
+
710
+ custom_include_text_2 = "이것은 절대 금지 구문입니다."
711
+ print(f"Custom Include Test 2 ('{custom_include_text_2}'): {check(custom_include_text_2)}")
712
+ print(f"Highlight Custom Include 2: {highlight_profanity(custom_include_text_2, level='all')}")
713
+
714
+ custom_exclude_text_sexual = "이 영화는 정말 보지도못 할 수준이다."
715
+ print(f"Custom Exclude Test (Sexual) ('{custom_exclude_text_sexual}'): {check(custom_exclude_text_sexual)}")
716
+
717
+ custom_exclude_text_general = "무슨 이런 지랄이야!"
718
+ print(f"Custom Exclude Test (General) ('{custom_exclude_text_general}'): {check(custom_exclude_text_general)}")
719
+ print(f"Highlight Custom Exclude (General): {highlight_profanity(custom_exclude_text_general, level='all')}")
720
+
721
+ include_vs_exclude_text = "나만의 비속어를 쓰면서 무슨 지랄이야!"
722
+ print(f"Include vs Exclude Test ('{include_vs_exclude_text}'): {check(include_vs_exclude_text)}")
723
+ print(f"Highlight Include vs Exclude: {highlight_profanity(include_vs_exclude_text, level='all')}")
724
+
725
+ print("\n--- Boolean Checks (all levels) ---")
726
+ print(f"'시발놈아' (general): {general('시발놈아')}")
727
+ print(f"'보지마' (sexual - false positive): {sexual('보지마')}")
728
+ print(f"'내 보ㅈㅣ 보여줄게' (sexual): {sexual('내 보ㅈㅣ 보여줄게')}")
729
+ print(f"'틀딱년 나가' (belittle): {belittle(' 틀딱년 나가')}")
730
+ print(f"'깜둥이 꺼져' (race): {race('깜둥이 꺼져')}")
731
+ print(f"'ㄴㄱㅁ' (parent): {parent('ㄴㄱㅁ')}")
732
+ if BETTER_PROFANITY_LOADED:
733
+ print(f"'you are a bitch' (english): {english('you are a bitch')}")
734
+ else:
735
+ print("'you are a bitch' (english): SKIPPED (better_profanity not loaded)")
736
+ print(f"'糞野郎め' (japanese): {japanese('糞野郎め')}")
737
+ print(f"'他媽的' (chinese): {chinese('他媽的')}")
738
+ print(f"'🖕🏻' (special): {special('🖕🏻')}")
739
+ print(f"'문죄앙 out' (politics): {politics('문죄앙 out')}")
740
+
741
+ print("\n--- Highlighting Profanity (all levels) ---")
742
+ print(f"'시발놈아' (general): {highlight_profanity('시발놈아', level='general')}")
743
+ print(f"'시발놈아 느그보지 찢어줄까?' (all): {highlight_profanity('시발놈아 느그보지 찢어줄까?', level='all')}")
744
+ print(f"'내 보ㅈㅣ 보여줄게' (sexual): {highlight_profanity('내 보ㅈㅣ 보여줄게', level='sexual')}")
745
+ print(f"'이런 틀딱년은 처음봐' (belittle): {highlight_profanity('이런 틀딱년은 처음봐', level='belittle')}")
746
+ print(f"'저기 깜둥이 지나간다' (race): {highlight_profanity('저기 깜둥이 지나간다', level='race')}")
747
+ print(f"'아 ㄴㄱㅁ 뭐하냐' (parent): {highlight_profanity('아 ㄴㄱㅁ 뭐하냐', level='parent')}")
748
+ if BETTER_PROFANITY_LOADED:
749
+ print(f"'you are a stupid bitch' (english): {highlight_profanity('you are a stupid bitch', level='english')}")
750
+ print(f"'이 糞野郎이!' (japanese): {highlight_profanity('이 糞野郎이!', level='japanese')}")
751
+ print(f"'他媽的뭐야' (chinese): {highlight_profanity('他媽的뭐야', level='chinese')}")
752
+ print(f"'손가락 🖕🏻 그만' (special): {highlight_profanity('손가락 🖕🏻 그만', level='special')}")
753
+ print(f"'우리 문죄앙 대통령님' (politics): {highlight_profanity('우리 문죄앙 대통령님', level='politics')}")
754
+ print(f"'http://example.com/sex 섹스하자' (sexual with URL): {highlight_profanity('http://example.com/sex 섹스하자', level='sexual')}")
755
+
756
+ print("\n--- Comprehensive Check Function ---")
757
+ print(f"'그냥 일반적인 문장입니다.' (check): {check('그냥 일반적인 문장입니다.')}")
758
+ print(f"'시발 이게 말이 되냐' (check): {check('시발 이게 말이 되냐')}")
759
+ print(f"'야스각인데?' (check): {check('야스각인데?')}")
760
+ if BETTER_PROFANITY_LOADED:
761
+ print(f"'This is absolute bullshit' (check): {check('This is absolute bullshit')}")
762
+ print(f"'꺼져, 이 糞野郎아' (check): {check('꺼져, 이 糞野郎아')}")
1540
763
 
1541
764
 
1542
765
  # Copyright© All rights reserved.
@@ -1544,10 +767,4 @@ def check(text: str, id: int=None):
1544
767
  # |_ _|_ _ _ __ __ _| |_
1545
768
  # | |/ _` | '_ \ / _` | __|
1546
769
  # | | (_| | | | | (_| | |_
1547
- # |_|\__,_|_| |_|\__,_|\__|
1548
-
1549
- if __name__ == "__main__":
1550
- cache_size = 2
1551
- while True:
1552
- text = input()
1553
- print(check(text, 1))
770
+ # |_|\__,_|_| |_|\__,_|\__|