콘텐츠로 이동

사용자 사전 충돌 검사

사용자 사전 충돌 검사 — 충돌 시나리오와 해결 가이드

사용자 사전이 커지고 도메인이 늘어나면, 같은 단어가 서로 다른 사전에 중복으로 들어가 의도와 다른 분석 결과가 나오기 쉽습니다. 바른은 이를 미리 잡아내는 충돌 검사 (CheckConflict)를 제공합니다.

이 문서는 충돌의 두 종류(중복 duplicated, 충돌 conflict)와 대표 시나리오, 그리고 해결 방법을 정리합니다.

충돌 검사가 잡아내는 두 가지

CheckConflict는 등록할 사전을 검사해 두 종류의 문제를 보고합니다.

구분 의미 예시
duplicated(중복) 같은 사전 안에 같은 표제어가 두 번 이상 np_set민식이법이 두 번
conflict(충돌) 서로 다른 사전에 같은 표제어가 동시에 세종np_setcp_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()
충돌 발견: '세종'이 고유명사(np_set)와 복합명사(cp_set)에 동시에 있습니다 (conflict)

충돌 해결 가이드

충돌을 풀어가는 순서

  1. 품사를 하나로 결정하세요. 세종이 인물·지역 이름이면 고유명사 한쪽에만 남깁니다.
  2. 중복(duplicated)은 하나만 남기고 제거하세요. 같은 사전에 같은 단어를 두 번 등록할 필요는 없습니다.
  3. 용법이 둘 다 필요하면 도메인을 분리하세요. 예를 들어 한 도메인에서는 고유명사로, 다른 도메인에서는 복합명사로 두고 호출 시 custom_dict_names로 골라 씁니다.
  4. 정리 후 다시 CheckConflict를 돌려 깨끗한지 확인합니다.

충돌을 무시하면

충돌을 남긴 채 등록하면 분석 결과가 입력·문맥에 따라 흔들릴 수 있습니다. 운영 사전은 항상 충돌 0 상태를 유지하는 것을 권장합니다.

자주 묻는 질문

Q. duplicatedconflict는 무엇이 다른가요?

duplicated같은 사전 안에 같은 표제어가 중복된 경우이고, conflict서로 다른 종류의 사전(NP/CP/CP^/VV/VA)에 같은 표제어가 동시에 있는 경우입니다.

Q. 충돌 검사는 언제 돌려야 하나요?

사전을 등록(UpdateCustomDictionary)하기 직전에 돌리는 것이 가장 좋습니다. CI 파이프라인에 넣어 사전 변경마다 자동 검사하면 운영 사전을 항상 깨끗하게 유지할 수 있습니다.

Q. 같은 단어를 꼭 두 품사로 써야 한다면요?

도메인을 분리하세요. 한 도메인에는 고유명사로, 다른 도메인에는 복합명사로 등록하고, 분석할 때 custom_dict_names로 필요한 도메인을 선택하면 충돌 없이 둘 다 활용할 수 있습니다.

도움이 되었나요?