"""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()