왜 '텍스트를'과 '텍스트가'가 다른 단어로 집계될까 — 조사 없는 언어를 위해 설계된 도구의 한계
블로그 글을 붙여넣고 키워드 빈도를 확인했는데, 분명 같은 단어를 여러 번 썼는데도 목록에 비슷한 단어가 여러 개 흩어져 낮은 숫자로 찍혀 있다면 — 도구가 고장난 게 아니라 한국어 조사(助詞) 구조와 영어 기준으로 설계된 단어 분리 방식이 충돌하는 것입니다. 이 가이드는 그 원인과, 왜 가벼운 브라우저 도구가 이 문제를 근본적으로 풀지 않는지 설명합니다.
1. 영어와 한국어, 단어가 "끝나는" 방식이 다르다
영어에서 명사는 문장 안 역할이 바뀌어도 형태가 거의 그대로입니다. "text"는 주어로 쓰이든("The text is long") 목적어로 쓰이든("I read the text") 똑같이 "text"입니다. 반면 한국어는 명사 뒤에 조사가 공백 없이 바로 붙어서 문법적 역할을 표시합니다. "텍스트를"(목적격), "텍스트가"(주격), "텍스트는"(주제 표시), "텍스트와"(접속) — 전부 같은 명사 "텍스트"인데, 글자 그대로 보면 서로 다른 문자열입니다.
2. 이 도구가 실제로 하는 일
키워드 추출기의 실제 코드를 보면, 텍스트를 text.replace(/[^\p{L}\p{N}\s'-]/gu,' ').split(/\s+/)로 처리합니다. 즉 문자·숫자·아포스트로피·하이픈만 남기고 나머지는 공백으로 바꾼 뒤, 공백 기준으로 쪼개는 방식입니다. 이건 띄어쓰기가 단어 경계와 거의 일치하는 영어에는 잘 맞지만, 한국어에서는 "텍스트를"이라는 문자열 전체가 하나의 "단어"로 인식됩니다. 도구 입장에서는 "텍스트를"과 "텍스트가"가 같은 명사라는 걸 알 방법이 없습니다 — 단순 문자열 비교로는 완전히 다른 두 값이기 때문입니다.
3. 빈도 집계가 실제로 흩어지는 방식
결과적으로 원래 10번 등장한 단어 하나가, 조사가 붙는 형태에 따라 목록에 4~5개의 별도 항목으로 쪼개져 나타날 수 있습니다. 각 항목의 빈도는 실제보다 낮게 표시되고, 진짜 핵심 키워드인데도 상위 순위에서 밀려날 수 있습니다.
4. 제대로 풀려면 형태소 분석이 필요하다
이 문제를 정확히 해결하려면 형태소 분석(形態素 分析)이 필요합니다. 단어를 의미의 최소 단위(어간)와 문법 요소(조사, 어미)로 분리해, "텍스트를"에서 "텍스트"라는 어간만 뽑아내는 작업입니다. KoNLPy(Python) 같은 라이브러리가 Mecab, Komoran, Okt 같은 형태소 분석기를 감싸서 이 기능을 제공하는데, 이는 사전(辭典) 기반이든 학습 모델 기반이든 상당한 데이터와 연산이 필요한 정교한 자연어처리 작업입니다.
5. 이 도구가 형태소 분석을 안 하는 이유
브라우저에서 순수 JS로 동작하는 가벼운 유틸리티 도구가 한국어 형태소 분석기를 처음부터 직접 구현하거나 통째로 내려받아 실행하는 건 현실적인 트레이드오프가 맞지 않습니다. 형태소 분석 모델·사전은 대체로 용량이 크고, 클라이언트 사이드에서 실행하기엔 연산 비용도 무시할 수 없습니다. 대부분의 가벼운 텍스트 도구는 이런 부담을 감수하지 않고 정규식 기반 단순 분리 방식을 택하는데, 이는 영어처럼 조사가 없는 언어에서는 실제로 정확하게 동작합니다.
6. 실무에서 어떻게 활용할까
- 한국어 텍스트에 쓸 때: 목록에 나온 빈도 숫자를 절대값으로 믿지 말고, 조사만 다른 비슷한 단어들을 눈으로 훑어서 머릿속으로 합산하는 보정 과정을 거치세요.
- 영어·조사 없는 텍스트에 쓸 때: 이 도구가 원래 의도한 방식대로 정확하게 작동하므로 별도 보정 없이 신뢰할 수 있습니다.
- 정밀한 한국어 분석이 필요하다면: KoNLPy 같은 형태소 분석 라이브러리를 직접 코드로 돌리거나, 형태소 분석을 지원한다고 명시된 전용 한국어 텍스트 분석 도구를 찾는 편이 정확합니다.
자주 묻는 질문
Q. 이 문제는 버그인가요?
A. 아닙니다. 이 도구는 애초에 공백 기준 단어 분리로 설계되어 있고, 이 방식은 영어를 비롯한 조사 없는 언어에는 정확합니다. 한국어처럼 조사가 단어에 붙는 언어에서만 나타나는 구조적 한계입니다.
Q. '대소문자 무시' 옵션을 켜면 이 문제가 해결되나요?
A. 아닙니다. 그 옵션은 "Apple"과 "apple"처럼 영문 대소문자 차이만 통합할 뿐, "텍스트를"과 "텍스트가"처럼 조사가 붙어 아예 다른 문자열이 된 경우에는 아무 영향을 주지 않습니다.
Q. 최소 글자 수를 조절하면 도움이 되나요?
A. 짧은 조사·대명사를 걸러내는 데는 약간 도움이 될 수 있지만, "텍스트를"처럼 이미 최소 길이를 넘는 단어에 조사가 붙어 있는 경우는 걸러지지 않습니다. 근본적인 해결책은 아닙니다.
Q. 다른 언어(중국어·일본어)는 괜찮나요?
A. 중국어는 애초에 띄어쓰기를 하지 않아 이 도구의 공백 분리 방식 자체가 거의 작동하지 않습니다. 일본어는 한국어와 비슷하게 조사(助詞)가 단어에 붙는 구조라 같은 문제가 발생합니다.