그래서 존댓말을 반말로 바꿔주고 반말을 존댓말로 바꿔주는 모델이 있으면 좋겠지만 (실제로 연구가 많이 진행되었지만 정확도가 높은 편은 아님)
존댓말과 반말을 구분하는 방법을 공유하고자 한다.
형태소 분석기를 통해 나온 토큰들 중 존댓말에 사용되는 토큰들의 갯 수를 구해서 판단하면 된다.
형태소 분석기는 한나눔 , 코모란 , okt 등이 있지만 코모란 형태소 분석기를 사용했다.
이유는 코모란은 존댓말 토큰을 normalize하게 잡아주기 떄문이다.
okt 의 경우는 습니다, 됩니다 , 합니다 로 토크나이즈 하는 반면
코모란은 ㅂ니다. 로 통일해주기 때문에 적은 토큰들을 가지고 많은 존댓말을 판단할 수 있게된다.
('저', 'NP')
('전', 'MM')
('절', 'NNG')
('제가', 'NNP')
('고마워요', 'NNP')
('해주시', 'NNP')
('분', 'NNB')
('어딨어요?', 'NA')
('님', 'XSN')
('께', 'JKB')
('에요', 'EF')
('에요', 'EC')
('아요', 'EC')
('아요', 'EF')
('예요', 'EF')
('예요', 'EC')
('어서요', 'EF')
('어서요', 'EC')
('요', 'JX')
('요', 'EC')
('요', 'EF')
('군요', 'EC')
('군요', 'EF')
('ㄴ데요', 'EC')
('어요', 'EF')
('어요', 'EC')
('구요', 'EF')
('구요', 'EC')
('ㄹ게요', 'EC')
('게요', 'EC')
('ㄹ께요', 'EF')
('지요', 'EF')
('지요', 'EC')
('네요', 'EC')
('네요', 'EF')
('죠', 'EF')
('죠', 'EC')
('니까요', 'EF')
('니까요', 'EC')
('ㅂ니까', 'EF')
('나요', 'EF')
('ㅂ니다', 'EF')
('ㅂ니다', 'EC')
('ㅂ시다', 'EF')
('ㅂ시다', 'EC')
('습니다', 'EF')
('습니다', 'EC')
('답니다', 'EF')
('답니다', 'EC')
('시', 'EP')
('드리', 'VV')
('으시', 'EP')
('ㄴ데요', 'EC')
('ㄴ걸요', 'EC')
('ㄹ까요', 'EC')
('ㄹ까요', 'EF')
('던가요', 'EF')
('거든요', 'EC')
('거든요', 'EF')
('ㄴ가요', 'EC')
('더라구요', 'EF')
('더라구요', 'EC')
('더라고요', 'EC')
('더라고요', 'EF')
('려고요', 'EF')
('을까요', 'EF')
('을까요', 'EC')
('면서요', 'EF')
('래요', 'EC')
('그래요', 'IC')
('으면', 'EC')
import re
from konlpy.tag import Komoran
komoran = Komoran()
#txt파일을 list로 불러오기
hon_tokens = [word.rstrip('\n') for word in open(data_path + 'komoran_honorific_token.txt', 'r',encoding='utf-8')]
def honorific_token_counter(text):
cnt = 0
for i in komoran.pos(text):
if str(i) in hon_tokens:
cnt += 1
return cnt
이렇게 해주면 문장에 존댓말 토큰이 얼마나 들어있는 지 확인할 수 있습니다. 데이터를 확인하고 문장의 길이에 따른 존댓말 토큰 수를 비율로 지정하여 존댓말과 반말을 분류 할 수 있습니다.
**이유는 문장이 짧을 경우 존댓말 토큰은 1개 밖에 존재하지 않고
문장이 긴 경우 존댓말 토큰이 1개라면 이것은 반말일 가능성이 높기 때문입니다.