-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathBadWordDetectionByRegularExpression.py
115 lines (101 loc) · 7.57 KB
/
BadWordDetectionByRegularExpression.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env python
# coding: utf-8
# # RegularExpression 사용하여 비속어 탐지
#
# - 1차적으로 문장에서 비속어가 있는 부분을 찾기 위함
#
# - 정규식표현을 사용하여 중간에 글자가 들어오는 부분도 고려
#
# - 크롤했던 키워드들 전부 추가함
#
# - 비속어가 있는 위치와 좌우 어절을 포함한 Trigram 반환
import re
# |는 OR 입니다. => (씨 or 시) AND (벌 or 빨 or 발 or 바)
# 예) 쌍1년, 씨12발, 꼬a추
# 중간에 2글자 까지 들어갈 수 있도록 허용하였습니다.
patternList = [
re.compile('((쌍|썅).{0,2}(놈|년))'),
re.compile('(씨|시).{0,2}(벌|빨|발|바)'),
re.compile('(병|븅).{0,2}(신|쉰|싄)'),
re.compile('(좆|존|좃).{0,2}(같|되|는|나|돼)'),
re.compile('(개|게).{0,2}(같|갓|새|세|쉐|끼)'),
re.compile('(걸|느).{0,2}(레|금)'),
re.compile('(꼬|꽂|고).{0,2}(추|츄)'),
re.compile('(니|너).{0,2}(엄|엠|애|m|M)'),
re.compile('(애|에).{0,2}(미)'),
re.compile('(노).{0,2}(애미|앰|엠)'),
re.compile('(섹|쎅).{0,2}(스|쓰)'),
re.compile('(ㅅㅂ|ㅄ|ㄷㅊ)'),
re.compile('(s|S)(e|E)(x|X)'),
re.compile('(미|뮈|믜).{0,2}(친|췬|칀)'),
# 마지막에 추가해서 넣은 키워드들
re.compile('자지|꼴깝|새끼들|애미|짜식|빠굴|씹년|미친넘|18년|폐녀자|미틴|이놈\
|조센징|미시촌|주접|붕가|패티쉬|쳐먹|뒤질래|쉐리|호로자식|개좌식|뭥미\
|별창|망나니|딸딸이|니에미|좃|십새|싸보이다|미췬|씨댕|새꺄|쎅스|10세|\
상넘|꼰대|개놈|꼴갑|시벌탱|씨방새|발기|새끼|10새끼|꼴리|옘병|아구창|\
개좆|아갈|창녀|염병|포르노|미친놈|음탕|또라이|좃나|한남충|조지다|호로|\
후빨|조또|지랄|오지구|세끼|슨상님|병쉰|싸가지|빠큐|엠생|시궁창|꼬라지|\
우라질|혼음|개빡|뒈진|멍청이|뒤진다|어미|듣보|꼴값|광녀|따먹기|양키|\
잡종|상놈|넌씨눈|떡치기|개년|꼬추|쎄엑|개지랄|18|시부랄|느개비|오짐|\
보지|부랄|고인물|찌질|정박아|뒤질|개쓰래기|좇같|후려|시키|육갑|씹새|\
씝창|미쳤나|호모|조온나|씨파|쉬발|십세|병자|게새끼|개새끼|시부럴|개시키|\
개민폐|언년|쓰발|sex|눈알|뽄세|씹새기|씨팔|앰창|놈|개수작|아가리|무뇌\
오진다|창놈|좆같|병맛|로리타|그년|씨부럴|저능아|쌔끈|주뎅이|토끼다|대가리|\
씹팔|디졌|대갈|엠창|트롤|개씹|썅넘|오졌|갈보|씨발|시발|개자식|극혐|개같은|\
개짱|미친색|기레기|남혐|야설|이새끼|10창|18놈|섹스|씨불|성인체위|십팔|\
벌레|빠가|운지|빙신|개돼지|장애인|씹창|썩을|꼬붕|매국노|18새끼|발놈|와꾸|\
느금|허접|고추|미쳤니|노답|오져|같은년|좆까|돌았나|씨빨|새키|븅|좆만|존싫|\
사이코|십새끼|섹수|조까|시끼|변태새끼|늬미|열폭|년|쥐랄|잡놈|존버|꼴리다|충|\
자슥|모가지|씨벌탱|빠구리|니앰|싸가지없|쌍|개간|틀니|냄비|씨발년|시부리|쪽바리|\
저년|씨부랄|씹탱|즤랄|골빈|샹년|젖탱|메갈|시팔|씨빠|쌍년|싸물|싸대기|스트립|\
좆|씨볼|이씨|이년|이자식|오바|니미랄|새기|후레자식|호구|패드립|에로물|쌍욕|\
호로놈|5지구|벼엉|찐따|간나|등신|애자|개같이|쓰레기|5지네|니미|뻑큐|좇|\
개존|관종|빡촌|뒤져|좃밥|엿|귀두|좆나|개짜증|노무|놈현|개쩔|디질|싸죠|\
씨부리|돌았네|개새|병신|씨바|양놈|쌍놈년|구라|머갈|불륜|성기|에로|년놈|\
창년|낯짝|자위|불알|썅년|멍텅|오지네|왜놈|아닥|짱깨|이새키|색끼|주뎅|딜도|\
대갈빡|정신병자|미친|한남|씨방|뻐큐|니미럴|사까시|존만한|꼴통|씨발놈|존나|\
|홍어|좆나게|후장|섹|놈들|개새키|븽신|개소리|미치|면상|시댕|갈레|돌아이\
|닥쳐|개같|쌉|정사|쒸벌|고자|좃또|조빠|씹|썅제기랄|버러지|십창|딴년|꺼져|\
|좇밥|뽄새|눈깔|쪼개|육봉|수간|틀딱|씹쉐|따까리|음란|씹덕|삥땅')]
def return_bad_words_index(content, mode=0):
# 정규식을 통하여 욕설있는 위치에 *표시 하여 리턴
if mode == 0:
for pattern in patternList:
content = re.sub(pattern, "**", content)
return content
# 비속어 위치와 trigram 리턴
else:
# 문장의 음절과 어절간의 리스트 생성: 어절의 위치를 뽑기 위함
token_position = []
token_index = 0
# 각 캐릭터 위치마다 어절 인덱스 저장
for char in content:
token_position.append(token_index)
if char == " ":
token_index += 1
# 정규식 표현을 통해 비속어 위치 찾기
badwords = []
for pattern in patternList:
matchObjs = re.finditer(pattern, content)
badwords += [token_position[obj.span()[0]] for obj in matchObjs] # 해당 단어가 속한 어절의 위치
content = [" "]+ content.split(" ") + [" "] # 어절을 반환하기 위한 스플릿 & 맨앞, 맨뒤 padding
badwords = list(set(badwords)) # 중복제거
return [(content[index], content[index+1], content[index+2], index) for index in badwords] # trigram(3어절 반환) & 단어 위치
# # ==== 예시 테스트 ====
content = """
애미 지난해 12월 시발 미국의 자지 꼴갑들하고 헤지펀드 빠구리가 이렇게
개새끼 엘리엇이 좃같네 시1발 한국 정부를 상대로 소송을 미친 제기했습니다
애미없네 삼성물산과 제일모직의 합병을 승인하는 과정에서 한국 정부가 부당하게 개입했고
이를 통해 자신들이 피해를 봤다는 건데요 법무부에 따르면 한국 정부는 증거와 증인이 없다며
조목조목 반박한 답변서를 엘리엇에게 보냈습니다 하지만 주진우 시사인 기자는 법무부의 답변서
내용이 수상하다고 지적합니다 향후 이재용 부회장의 대법원 판결에 영향을 줄 수 있는 내용이 담겨있다는 것인데요
tbs 라디오 김어준의 뉴스공장에 출연한 주진우 시사인 기자의 얘기를 들어보시죠 법무부 답변서 내용을 한마디로
정리하자면 삼성물산 합병과 관련해서는 모든 것이 합법적이다 이렇게 답변서가 말하고 있는 건가요 그러니까요
법무부가 주장하는 것은 삼성의 주장과 거의 동일하다 이렇게 볼 수 있습니다 아니 그런데 법무부가 삼성을 이렇게까지
대변할 이유가 없잖아요 물론 정부가 나서서 삼성을 도왔다 이렇게 하면 엘리엇 소송에서 불리하니까 이렇게 답변했다고 볼 수 있는데
이것은 굉장히 중요한 문제가 걸려 있습니다 그리고 이런 소송은 엘리엇이 8000억 원 넘는 피해를 봤다
이렇게 했을 때 너희가 어떻게 피해를 받았는지 구체적으로 입증해라 이렇게 소송을 대비하는 게 맞다고 합니다. 개새끼
"""
print("기존 내용 ", content)
print("필터 적용 후 내용",return_bad_words_index(content, mode=0))
print("욕설 위치 반환", return_bad_words_index(content, mode=1))