사용자 사전 충돌 검사
사용자 사전 충돌 검사 — 충돌 시나리오와 해결 가이드
사용자 사전이 커지고 도메인이 늘어나면, 같은 단어가 서로 다른 사전에 중복으로 들어가
의도와 다른 분석 결과가 나오기 쉽습니다. 바른은 이를 미리 잡아내는 충돌 검사
(CheckConflict)를 제공합니다.
이 문서는 충돌의 두 종류(중복 duplicated, 충돌 conflict)와 대표 시나리오, 그리고 해결
방법을 정리합니다.
충돌 검사가 잡아내는 두 가지
CheckConflict는 등록할 사전을 검사해 두 종류의 문제를 보고합니다.
| 구분 | 의미 | 예시 |
|---|---|---|
duplicated(중복) |
같은 사전 안에 같은 표제어가 두 번 이상 | np_set에 민식이법이 두 번 |
conflict(충돌) |
서로 다른 사전에 같은 표제어가 동시에 | 세종이 np_set과 cp_set에 모두 |
검사 결과는 Conflict 정보로 돌아오며, 어느 쪽(left/right)의 어떤 단어
(left_word/right_word)가 부딪혔는지, 충돌인지 중복인지(conflict/duplicated),
그리고 사람이 읽을 설명(conflict_msg)이 담깁니다.
왜 충돌이 문제인가요?
같은 표제어가 NP/CP/CP^/VV/VA 여러 사전에 동시에 있으면, 바른은 그 단어를 어느 품사로
인식해야 할지 모호해집니다. 예컨대 세종을 고유명사이자 복합명사로 등록하면 분석 결과가
일관되지 않을 수 있습니다. 충돌 검사는 등록 전에 이런 모호성을 드러내 줍니다.
대표 충돌 시나리오
graph TD
A[표제어 검사] --> B{같은 사전에<br>두 번 있나?};
B -- 예 --> DUP[duplicated 중복];
B -- 아니오 --> C{다른 종류 사전에<br>같은 단어 있나?};
C -- 예 --> CON[conflict 충돌];
C -- 아니오 --> OK[정상];
- 시나리오 1 — 명사 사전 간 충돌:
세종을 고유명사(np_set)와 복합명사(cp_set)에 모두 등록.NNP로 볼지NNG로 볼지 모호 → conflict. - 시나리오 2 — 명사와 용언 충돌:
빛나다를 형용사(va_set)에,빛나를 고유명사로 또 등록. 같은 표제어로 인식되며 품사 의도가 충돌. - 시나리오 3 — 같은 사전 내 중복: 한 명사 사전에
압수수색이 두 번. duplicated로 보고. - 시나리오 4 — 도메인 간 중복: 서로 다른 도메인에 같은 단어가 있어도, 함께 사용할 때 의도와 다른 우선순위가 적용될 수 있으니 사전에 점검하는 것이 안전합니다.
등록 전 점검 흐름
충돌 검사는 등록(UpdateCustomDictionary) 전에 돌리는 것이 좋습니다.
from bareunpy import Tagger
my_tagger = Tagger('YOUR-API-KEY', 'localhost', port=5656)
cust_dic = my_tagger.custom_dict("law_terms")
cust_dic.copy_np_set({'민식이법', '세종'})
cust_dic.copy_cp_set({'압수수색', '세종'}) # '세종'이 두 사전에 → 충돌 예상
# 등록 전 충돌 검사
conflicts = cust_dic.check_conflict()
if conflicts:
print("충돌 발견:", conflicts) # left/right, conflict_msg 확인
else:
cust_dic.update()
충돌 해결 가이드
충돌을 풀어가는 순서
- 품사를 하나로 결정하세요.
세종이 인물·지역 이름이면 고유명사 한쪽에만 남깁니다. - 중복(
duplicated)은 하나만 남기고 제거하세요. 같은 사전에 같은 단어를 두 번 등록할 필요는 없습니다. - 용법이 둘 다 필요하면 도메인을 분리하세요. 예를 들어 한 도메인에서는 고유명사로,
다른 도메인에서는 복합명사로 두고 호출 시
custom_dict_names로 골라 씁니다. - 정리 후 다시
CheckConflict를 돌려 깨끗한지 확인합니다.
충돌을 무시하면
충돌을 남긴 채 등록하면 분석 결과가 입력·문맥에 따라 흔들릴 수 있습니다. 운영 사전은 항상 충돌 0 상태를 유지하는 것을 권장합니다.
자주 묻는 질문
Q. duplicated와 conflict는 무엇이 다른가요?
duplicated는 같은 사전 안에 같은 표제어가 중복된 경우이고, conflict는 서로 다른
종류의 사전(NP/CP/CP^/VV/VA)에 같은 표제어가 동시에 있는 경우입니다.
Q. 충돌 검사는 언제 돌려야 하나요?
사전을 등록(UpdateCustomDictionary)하기 직전에 돌리는 것이 가장 좋습니다.
CI 파이프라인에 넣어 사전 변경마다 자동 검사하면 운영 사전을 항상 깨끗하게 유지할 수 있습니다.
Q. 같은 단어를 꼭 두 품사로 써야 한다면요?
도메인을 분리하세요. 한 도메인에는 고유명사로, 다른 도메인에는 복합명사로 등록하고, 분석할 때
custom_dict_names로 필요한 도메인을 선택하면 충돌 없이 둘 다 활용할 수 있습니다.
도움이 되었나요?