크롬 확장 프로그램 '존댓말'
스터디에서 크롬 익스텐션을 하나 만들었다. 대략 이런 프로그램.
말에서부터 위아래가 있는 장유유서의 나라 한국에서 평문은 '반말'로 취급된다. 반말 자체는 죄가 없지만, 그 위엔 존댓말이 앉아있어서 문제다. 말의 위계는 사회적인 위계에도 영향을 준다. 내가 상대방을 낮잡아본다면 반말을 쓰게 되고, 그 반대의 경우에는 존댓말을 쓰게 된다. 종종 말의 형식이 생각의 위계를 정하는 일도 빈번하게 일어난다. 높은 사람의 생각은 높은 생각이 된다.
이처럼 존댓말을 좀 더 들어줄만한 말로 해석하는 사회이기 때문에 가급적이면 이야기는 존댓말로 하는 게 좋지 않을까 생각했다. 그게 상대방의 생각을 읽어볼 기본적인 자세를 마련해주지 않을까 하는 약간의 기대. 그게 아니더라도 피식 하면서 풀릴 수도 있는 상황을 생각해봤다. 말이 거창한데 ㅋㅋ 그냥 생각해보다가 이런 게 되지 않을까 해서 했다! 가 제일 가깝긴 하다.
- 네이버 댓글의 어미를 존댓말에 쓰이는 어미로 바꿉니다.(ex. 해라 > 하세요)
- ㅋ와 ㅉ를 안 보이게 합니다.
- '새끼'와 '놈'은 '님'으로 변환합니다.
- 특정 아이디의 사용자를 차단할 수 있습니다.
기본적으로는 '찾아 바꾸기' 수준의 기능이다. 자연어 분석이니 뭐 그런걸 시도하진 않았다. 어차피 학습하는 차원에서 심심풀이 삼아 만들어보는 거고, 가볍게 뭔가 하나 같이 만들어 본다는 데 의의를 뒀다. 일상생활에서 사람이 쓰는 말이 다양해봤자 유형을 정리하면 몇 가지 안 될 거라고 생각했고, 처음엔 정규표현식 수준에서 처리할 수 있지 않을까 싶어 시작했다.
완벽한 맞춤법은 ㄴㄴ
정작 만들면서는 생각과 다른 경우가 많아 굉장히 당황했다. 우선 댓글에선 완벽한 맞춤법을 기대할 수 없었다. 그럴 거라고 막연히 생각했지지만 막상 처리하자고 보니 더 심하게 느껴졌다. 처음에 틀을 만들기 위해서 신문에서 많이 쓰이는 종결어미 순위표를 참고했는데, 아무래도 일상생활에서 쓰는 문장과 괴리가 많아서 별 도움이 안 됐다.
'했다' 같이 가장 빈번하게 쓰이는 종결어미가 '햇다' 로 쓰이는 경우는 예사다. 키보드는 습관적으로 시프트를 손에 얹겠지만, 핸드폰의 가상 키보드를 두들기는 손에도 그런 습관이 들어있는 것 같진 않았다. 마찬가지의 이유로 종결어미를 알리는 문장부호인 마침표(.)도 쉽게 찾아보기 어려웠다. 마침표는 사실 그리 기능이 있는 부호라고 보긴 어려운 게, 내용상으로 이해했다면 띄어쓰기만 대충 해 줘도 어디서 문장이 끊어지고 아닌지 내용상으로 쉽게 알 수 있다. 요즘처럼 채팅 많이 하면 더 필요 없는 게, 이거 쓰면 약간 정색하는 것 같기도 하고...?
마침표가 왜 중요?
마침표가 있고 없고 가 굉장히 중요했는데, 존댓말은 대부분 문장의 끝을 바꾸는 작업이어서 문장의 끝을 명확하게 알아야 할 필요가 있었다. 그렇지 않으면 중간에서 이어지는 말로 쓰는 단어를 문장 종결 어미로 바꿔버릴 수 있다. 의미를 보면서 읽으면 끝이 어딘지 알기 쉽지만, 우리가 만드는 프로그램이 그렇게 하지는 못한다. 확장 프로그램에서 문장의 끝을 알아보는 기준을 마침표(.)와 동등하게 스페이스( )를 해 둔 것은 이와 같은 이유에서다.
{
"search": "해라 ",
"replace": "하세요",
"type": "normal"
},
문장의 끝을 스페이스와 마침표로 확인하다 보니 중간에 있는 단어를 바꾸는 경우가 빈번했다. 뒤에 말이 있냐 없냐고 구분하기도 어려운 게, 댓글이 한 문장이 아니고 ㅋㅋㅋㅋ < 같은 걸로 끝날 때도 있다. 그래서 주로(전부는 아니더라도) 문장의 끝에서 사용되는 것만 데이터 셋에 넣었다. 그래서 지금 우리 프로그램을 썼을 때 변환이 안 되는 어미는 물론 우리가 추가하지 않은 게 첫 번째 이유지만, 두 번째는 문장의 중간에서도 너무 빈번하게 쓰이는 말이라서다. 이런 경우 바꿔버리면 멀쩡한 한 문장을 둘로 쪼개는 일이 돼 버린다. 아마 다음번 업데이트를 만든다면 이 부분을 특히 개선해야 하지 않을까? 끝부분을 좀 더 확실하게 아는 방법을 생각해봐야겠다.
추후 업데이트 계획
없진 않은데 이거 뭐 각 잡고 만든건 아니라서 ㅎ_ㅎ 나-중에 하지 않을까 싶음.