다국어에서 한국어 추출
다국어 환경에서 한국어 문장만 추출·분석하기
글로벌 서비스의 로그·리뷰·고객 문의에는 여러 언어가 섞여 있습니다.
한국어 분석 파이프라인에 영어·중국어·일본어 문장이 그대로 들어오면 결과가 오염됩니다.
바른은 한국어(ko_KR) 전용 분석기이며, 형태소 태그를 활용해 외국어 토큰을 걸러낼 수 있습니다.
문제 상황
- 다국어가 섞인 텍스트에서 한국어 문장만 골라 분석하고 싶습니다.
- 한 문장 안에 영어 단어가 섞여 있을 때(코드 스위칭) 외국어 부분을 구분해야 합니다.
- 한국어가 아닌 문장에 형태소 분석을 돌리면 무의미한 결과가 나옵니다.
바른을 어떻게 적용하나
바른은 외국어를 SL(외국어) 태그로 분류합니다(각 태그의 의미는 품사 태그표 참고).
문장을 형태소 분석한 뒤 SL·SH(한자) 비중을 보면 한국어 문장인지, 외국어가 섞였는지 판별할 수 있습니다.
바른이 지원하는 분석 언어는 ko_KR 하나입니다. 형태소 단위만 빠르게 끊고 싶다면
토큰화와 형태소 분석의 차이도 참고하세요.
graph TD
MIX[다국어 텍스트] --> SPLIT[문장 분할];
SPLIT --> TAG[바른 형태소 분석];
TAG --> RATIO[외국어 SL 비중 계산];
RATIO -->|한국어 위주| KO[한국어 분석 결과];
RATIO -->|외국어 위주| SKIP[제외 또는 다른 파이프라인];
from bareunpy import Tagger
tagger = Tagger("koba-XXXX-...", "localhost")
def is_korean(text: str, threshold=0.5) -> bool:
"""한국어 형태소 비중으로 한국어 문장인지 판별합니다."""
res = tagger.tags([text])
pos = res.pos()
if not pos:
return False
# SL(외국어)·SH(한자)·SN(숫자)·기호를 제외한 비율
non_ko = sum(1 for _, t in pos if t in ("SL", "SH", "SN", "SW"))
return (len(pos) - non_ko) / len(pos) >= threshold
print(is_korean("오늘 회의는 3시에 시작합니다."))
print(is_korean("Please join the meeting at 3."))
한국어 문장만 골라 후속 분석에 넘길 수 있습니다.
결과와 이점
| 입력 | 외국어 토큰 비중 | 판정 |
|---|---|---|
| 오늘 회의는 3시에 시작합니다. | 낮음 | 한국어 |
| Please join the meeting at 3. | 높음(SL 위주) | 외국어 |
SL 태그란
SL은 외국어(주로 로마자) 토큰에 붙는 품사 태그입니다. 한자는 SH, 숫자는 SN으로 따로 분류되어, 텍스트 구성 비중을 세분해 판단할 수 있습니다.
자주 묻는 질문
Q. 한국어 안에 섞인 영어 단어는 어떻게 처리되나요?
API, OK 같은 영어 단어는 SL 태그로 분류됩니다.
문장 전체가 한국어면 SL 토큰만 따로 모아 영어 용어 목록으로 활용할 수 있습니다.
Q. 바른이 영어·일본어도 분석하나요?
아니요. 바른의 분석 언어는 ko_KR 하나입니다.
다른 언어는 해당 언어 전용 분석기로 보내고, 바른은 한국어 문장에만 적용하세요.
Q. 문장 단위로 언어를 가르려면요?
먼저 문장 단위로 나눈 뒤 각 문장의 외국어 토큰 비중을 계산해 한국어 문장만 추립니다. 임계값은 데이터 특성에 맞게 조정하세요. 대량 문장을 한 번에 처리할 때는 여러 문장 한 번에 분석하기를 참고하세요.
Q. 다국어 로그·리뷰에서 한국어만 분석하는 파이프라인을 어떻게 짜나요?
여러 언어가 섞인 텍스트를 문장 단위로 나눈 뒤 각 문장을 바른 형태소 분석에 넘기고, SL(외국어)·SH(한자)
등 비한국어 토큰의 비중을 계산합니다. 비중이 임계값보다 낮으면 한국어 문장으로 보고 후속 분석에 넘기고,
높으면 제외하거나 해당 언어 전용 분석기로 보냅니다. 바른의 분석 언어는 ko_KR 하나입니다.
관련 문서
- 품사 태그표 — SL(외국어)·SH(한자)·SN(숫자) 태그 의미
- 토큰화와 형태소 분석의 차이 — 어떤 API를 쓸지 판단
- 여러 문장 한 번에 분석하기 — 다국어 로그 대량 처리
도움이 되었나요?