- src: phase_z2 composition/mapper/pipeline/placement_planner/retry, ai_fallback(prompts/schema/validate), mdx_text_atoms 신규 - Front: PipelineTracePanel 신규, FramePanel/SlideCanvas/Home/designAgentApi 등 갱신 + 테스트 4종 추가 - templates/phase_z2: catalog(component_expansion_registry, node_slot_mapping 신규), frames, families, slide_base 갱신 - tests/matching: phase2~26 매칭 실험 스크립트·리포트·온톨로지 전체 (미커밋 진행분) - tests: b4_v4 evidence, task5~28.5 시리즈, regression(imp95 baseline) 등 신규 테스트 대량 추가 - docs/reference: MDX 구조 인벤토리, MDX→Frame 구조 계약 문서 - scripts: mdx 계약/parity/coverage/viewport 체크, gitea comment, run sync 유틸 - .gitignore: tmp*.json, chromedriver, .orchestrator, *.pkl, Front_test* 등 임시/스냅샷 제외 미완성 작업의 보존용 스냅샷 커밋 (2026-07-02) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
113 lines
3.6 KiB
Python
113 lines
3.6 KiB
Python
"""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 로 유지되는가")
|