Files
C.E.L_Slide_test2/tests/matching/test_mdx03_1_depth.py
T

103 lines
3.4 KiB
Python

"""MDX03-1을 얼마나 자세히 읽느냐에 따라 매칭 결과가 어떻게 바뀌는지 테스트"""
import sys
import json
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from common import load_figma_texts
from methods import method_tfidf, method_bm25, method_kiwi_bm25
ROOT = Path(r"d:\ad-hoc\kei\design_agent")
PREVIEW_DIR = ROOT / "data" / "figma_previews"
# 3가지 버전의 MDX03-1
# Level A: 라벨만 (기술/사람/자연 + 부제만)
MDX03_1_LABELS = """
기술(디지털)
사람(역량)
자연(여건)
"""
# Level B: 라벨 + 최상위 블릿 (서브제목까지만)
MDX03_1_MEDIUM = """
기술(디지털)
- Digital 기술(S/W, H/W)과 업무 Process의 통합
- 분야별 전문 지식(설계, 시공, 유지관리 등) 보유
사람(역량)
- 혁신적 사고방식과 창의적 문제 해결 능력
- 사용자 중심 사고와 DX 수행 경험
자연(여건)
- 지속적인 투자 및 실행 의지
"""
# Level C: 전체 (현재 사용하는 버전 - 블릿 깊이 전체 포함)
MDX03_1_FULL = """
* **기술(디지털)**
* **Digital 기술(S/W, H/W)과 업무 Process의 통합**
* 기존 업무 프로세스에 다양한 디지털 기술을 접목하여 업무 수행
* 프로젝트 전반에 걸친 업무 프로세스의 연결 및 조율
* **분야별 전문 지식(설계, 시공, 유지관리 등) 보유**
* 건설 전 단계에 대한 근본적인 이해와 지식 및 경험
* 최신 토목 기술 트랜드 및 표준 기준 등에 대한 높은 지식
* **사람(역량)**
* **혁신적 사고방식과 창의적 문제 해결 능력**
* 기존 수행 방식과 관습적 사고 등에 의한 접근 방식 탈피
* 디지털 기술을 활용한 창의적, 혁신적인 솔루션 제시
* **사용자 중심 사고와 DX 수행 경험**
* 사용자의 요구와 기대를 충족시키는 설계 및 구현
* 시행착오를 포함한 수행 경험과 사용자 경험(UX)을 반영한 해결 방안 제시
* **자연(여건)**
* **지속적인 투자 및 실행 의지**
* 기술 도입 초기 단계에 필요한 인력·기간·비용 등의 대규모 투자
* 기술 고도화를 위한 지속적인 개선 및 투자 체계 구축
* 변화와 혁신을 통해 부가가치를 창출하려는 실행 의지와 추진력
"""
def main():
figma = load_figma_texts()
with open(PREVIEW_DIR / "index.json", encoding="utf-8") as f:
idx_data = json.load(f)
frame_to_short = {info["frame_id"]: sid for sid, info in idx_data.items()}
versions = [
("A. 라벨만", MDX03_1_LABELS),
("B. 라벨+최상위블릿", MDX03_1_MEDIUM),
("C. 전체(현재)", MDX03_1_FULL),
]
methods = [
("TF-IDF", method_tfidf),
("BM25", method_bm25),
("Kiwi+BM25", method_kiwi_bm25),
]
print(f"{'버전':20s} | {'TF-IDF':20s} | {'BM25':20s} | {'Kiwi+BM25':20s}")
print("-" * 100)
for vname, text in versions:
row = f"{vname:20s}"
for mname, fn in methods:
ranked = fn(text, figma)[:3]
cells = []
for fid, sc in ranked:
short = frame_to_short.get(str(fid), "?")
mark = "✅" if short == "13" else " "
cells.append(f"{mark}{short}({sc:.1f})")
row += " | " + " ".join(cells)
print(row)
print()
print("정답: 13 (필수조건)")
if __name__ == "__main__":
main()