This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
"""Step 4 스모크 테스트: Kiwi user_dict 로 compound 토큰 보존 실측.
|
||||
|
||||
목적:
|
||||
1) S/W, H/W, 2D, 3D 가 user_word 로 단일 토큰으로 잡히는가
|
||||
2) 실제 corpus 문장에서 분절 없이 유지되는가
|
||||
3) phrase canonical (결과혁신, 과정혁신, 디지털전환, 3D모델, 2D도면) 도
|
||||
user_dict 에 넣으면 단일 NNG 로 유지되는가
|
||||
|
||||
본 Step 4 진행 여부를 결정하는 관찰용 테스트. 어떤 파일도 수정하지 않음.
|
||||
"""
|
||||
from kiwipiepy import Kiwi
|
||||
|
||||
print("=" * 70)
|
||||
print("[Baseline] user_dict 없는 Kiwi")
|
||||
print("=" * 70)
|
||||
kiwi_base = Kiwi()
|
||||
|
||||
BASELINE_TESTS = [
|
||||
'S/W 개발',
|
||||
'(S/W,H/W)와',
|
||||
'2D 도면',
|
||||
'3D 모델',
|
||||
'결과 혁신',
|
||||
'결과혁신',
|
||||
'디지털 전환',
|
||||
'디지털전환',
|
||||
]
|
||||
for s in BASELINE_TESTS:
|
||||
toks = [(t.form, t.tag) for t in kiwi_base.tokenize(s)]
|
||||
print(f" {s:25s} → {toks}")
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("[A-1 user_dict] S/W, H/W, 2D, 3D + phrase canonical 등록")
|
||||
print("=" * 70)
|
||||
kiwi = Kiwi()
|
||||
|
||||
# compound (영문/기호 포함)
|
||||
kiwi.add_user_word('S/W', 'SL', 9.0)
|
||||
kiwi.add_user_word('H/W', 'SL', 9.0)
|
||||
kiwi.add_user_word('2D', 'SL', 9.0)
|
||||
kiwi.add_user_word('3D', 'SL', 9.0)
|
||||
|
||||
# phrase canonical (한글)
|
||||
kiwi.add_user_word('결과혁신', 'NNG', 9.0)
|
||||
kiwi.add_user_word('과정혁신', 'NNG', 9.0)
|
||||
kiwi.add_user_word('디지털전환', 'NNG', 9.0)
|
||||
kiwi.add_user_word('필수조건', 'NNG', 9.0)
|
||||
kiwi.add_user_word('의사소통', 'NNG', 9.0)
|
||||
kiwi.add_user_word('시행착오', 'NNG', 9.0)
|
||||
|
||||
# 혼합 token
|
||||
kiwi.add_user_word('3D모델', 'NNG', 9.0)
|
||||
kiwi.add_user_word('2D도면', 'NNG', 9.0)
|
||||
|
||||
# AS-IS/TO-BE (실제 표기형 As-is / To-Be 등록)
|
||||
kiwi.add_user_word('As-is', 'SL', 9.0)
|
||||
kiwi.add_user_word('To-Be', 'SL', 9.0)
|
||||
|
||||
# 실제 corpus 문장 (actual_text_nodes.yaml 에서 뽑은 진짜 예시)
|
||||
CORPUS_TESTS = [
|
||||
# S/W
|
||||
'다양한 기술적도구(S/W,H/W)와 Process의 효과적인 통합',
|
||||
'다양한 형태의 Solution S/W 개발 역량 Programmer',
|
||||
'Engn. S/W의 구성 과 특징',
|
||||
'디지털 전환(DX)은 S/W가 필수다.',
|
||||
# H/W
|
||||
'H/W 적 요소',
|
||||
# 2D / 3D
|
||||
'평면적 2D 설계방식',
|
||||
'개념, 도서, 행정 절차 중심 2D 도면, 전문가, 규정',
|
||||
'3D 형상 기반 다양한 형태의 정보물로 공사관계자간 소통 강화',
|
||||
'3D 모델 중심 기존 성과품 유지',
|
||||
'2D 도면',
|
||||
'3D 모델',
|
||||
# phrase canonical (치환 후 형태)
|
||||
'결과혁신을 추구',
|
||||
'과정혁신과 결과혁신',
|
||||
'디지털전환의 기반',
|
||||
'3D모델 기반 설계',
|
||||
'2D도면 중심',
|
||||
# phrase variants (치환 전 형태 - user_dict 만으로 잡힐지)
|
||||
'결과 혁신',
|
||||
'결과의 혁신',
|
||||
'Product의 변화',
|
||||
'과정 혁신',
|
||||
'Process 혁신',
|
||||
'디지털 전환',
|
||||
'필수 요건',
|
||||
'의사 소통',
|
||||
'시행 착오',
|
||||
# AS-IS / TO-BE
|
||||
'As-is [Analogue]',
|
||||
'To-Be',
|
||||
'To-be [Digital]',
|
||||
]
|
||||
|
||||
for s in CORPUS_TESTS:
|
||||
toks = [(t.form, t.tag) for t in kiwi.tokenize(s)]
|
||||
print(f" {s[:40]:40s} → {toks}")
|
||||
|
||||
print()
|
||||
print("=" * 70)
|
||||
print("관전 포인트")
|
||||
print("=" * 70)
|
||||
print("1. 'S/W', 'H/W' 가 단일 SL 토큰으로 나오는가 (baseline 에서는 쪼개짐)")
|
||||
print("2. '2D', '3D' 가 단일 SL 토큰으로 나오는가")
|
||||
print("3. '결과혁신', '과정혁신' 붙여쓴 형태가 NNG 단일인가")
|
||||
print("4. '결과 혁신' (띄어쓴 형태) 는 여전히 [결과, 혁신] 분절인가")
|
||||
print(" → 그렇다면 pre-Kiwi phrase substitution 필수")
|
||||
print("5. '3D모델' (붙여쓴) vs '3D 모델' (띄어쓴) 분절 차이")
|
||||
print("6. 'As-is', 'To-Be' 가 단일 SL 로 유지되는가")
|
||||
Reference in New Issue
Block a user