Files
C.E.L_Slide_test2/tests/matching/keyword_inventory_1.html
T
KyeongminandClaude Opus 4.8 b836e79ee1 wip: phase_z2 evidence 파이프라인 + matching 실험(phase2~26) + 프론트 trace 패널 진행분 스냅샷
- 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>
2026-07-02 17:03:42 +09:00

310 lines
11 KiB
HTML

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>KEYWORD_INVENTORY_1</title>
<style>
@page { size: A4 portrait; margin: 14mm; }
* { box-sizing: border-box; }
body {
margin: 0;
font-family: -apple-system, "Segoe UI", Pretendard, "Malgun Gothic", sans-serif;
color: #16324f;
background: #ffffff;
}
@media screen {
body {
width: 210mm;
min-height: 297mm;
margin: 10mm auto;
padding: 14mm;
box-shadow: 0 10px 32px rgba(15, 23, 42, 0.14);
}
}
h1 {
margin: 0 0 4mm 0;
font-size: 22pt;
line-height: 1.08;
color: #0f2d52;
}
.subtitle {
margin: 0 0 7mm 0;
font-size: 9.4pt;
line-height: 1.45;
color: #52667d;
}
.top-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 4mm;
margin-bottom: 7mm;
}
.top-card {
border: 1px solid #d8e2ec;
border-radius: 12px;
padding: 4mm 4.5mm;
background: linear-gradient(180deg, #f8fbff 0%, #f2f7fb 100%);
min-height: 42mm;
}
.top-card .label {
font-size: 8.3pt;
font-weight: 800;
color: #2f6fed;
margin-bottom: 2mm;
}
.top-card .value {
font-size: 18pt;
font-weight: 800;
color: #0f172a;
margin-bottom: 1.2mm;
}
.top-card .desc {
font-size: 8.15pt;
line-height: 1.45;
color: #4b5563;
}
.section-title {
margin: 0 0 4mm 0;
font-size: 12.4pt;
font-weight: 800;
color: #12355b;
padding-left: 3mm;
border-left: 4px solid #2f6fed;
}
.process-box {
border: 1px solid #d9e4ef;
border-radius: 14px;
background: linear-gradient(180deg, #ffffff 0%, #f8fbff 100%);
padding: 4.5mm 5mm;
margin-bottom: 7mm;
}
.process-grid {
display: grid;
grid-template-columns: 1.25fr 1fr 1fr;
gap: 4mm;
}
.process-col {
background: #fbfdff;
border: 1px solid #e3ebf3;
border-radius: 12px;
padding: 3.5mm 4mm;
}
.process-col h3 {
margin: 0 0 2mm 0;
font-size: 9.3pt;
color: #1d4ed8;
}
.process-col p {
margin: 0 0 1.5mm 0;
font-size: 8.1pt;
line-height: 1.52;
color: #4b5563;
}
.hint {
margin-top: 2mm;
font-size: 7.7pt;
color: #64748b;
}
.bottom-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 5mm;
}
.keyword-card {
border: 1px solid #d9e4ef;
border-radius: 14px;
background: #fbfdff;
padding: 4.5mm 5mm;
min-height: 124mm;
}
.keyword-card.core {
background: linear-gradient(180deg, #f8fff8 0%, #f1fbf3 100%);
}
.keyword-card.set {
background: linear-gradient(180deg, #fff9fc 0%, #fff3f8 100%);
}
.keyword-card.related {
background: linear-gradient(180deg, #f8fbff 0%, #f2f6ff 100%);
}
.keyword-card h2 {
margin: 0 0 2mm 0;
font-size: 12pt;
color: #102a43;
}
.keyword-card .count {
font-size: 21pt;
font-weight: 800;
color: #0f172a;
margin-bottom: 2mm;
}
.keyword-card .def {
font-size: 8.2pt;
line-height: 1.52;
color: #52667d;
margin-bottom: 3mm;
}
.mini-title {
font-size: 8.5pt;
font-weight: 800;
color: #1d4ed8;
margin: 3mm 0 1.5mm 0;
}
ul {
margin: 0;
padding-left: 4.8mm;
}
li {
font-size: 8.2pt;
line-height: 1.55;
margin: 0 0 1.2mm 0;
color: #334155;
}
code {
font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
font-size: 8pt;
background: rgba(47, 111, 237, 0.08);
color: #153e75;
padding: 1px 5px;
border-radius: 6px;
}
.frame-example {
margin-top: 2.4mm;
border-top: 1px dashed #d6e0ea;
padding-top: 2mm;
font-size: 7.95pt;
line-height: 1.5;
color: #5b6b7d;
}
.note {
margin-top: 5mm;
border-top: 1px dashed #cbd5e1;
padding-top: 3mm;
font-size: 7.55pt;
line-height: 1.45;
color: #64748b;
}
</style>
</head>
<body>
<h1>KEYWORD INVENTORY 요약</h1>
<div class="subtitle">
Figma 프레임, BEPS 마스터, MDX 구간에서 문장을 수집하고, 단어 추출·전처리·표기 통합을 거쳐 최종 키워드집을 만든 과정을 한 장으로 정리한 요약본입니다.
</div>
<div class="top-grid">
<div class="top-card">
<div class="label">수집 대상</div>
<div class="value">37개</div>
<div class="desc">
Figma 텍스트 <strong>32개 프레임</strong>, BEPS 마스터 <strong>1개</strong>, MDX 검증 구간 <strong>4개</strong>를 대상으로 수집했습니다.
</div>
</div>
<div class="top-card">
<div class="label">수집된 문장</div>
<div class="value">2,125</div>
<div class="desc">
Figma <strong>586</strong>, BEPS <strong>1,410</strong>, MDX <strong>129</strong> 문장을 모아 키워드 원천 데이터로 사용했습니다.
</div>
</div>
<div class="top-card">
<div class="label">단어 추출 및 전처리</div>
<div class="value">13,913 → 14,161</div>
<div class="desc">
형태소 분석 결과 전체 등장 수는 <strong>13,913</strong>회였고, 약어 보존·표기 통합·공백/기호 정리 후 전체 등장 수는 <strong>14,161</strong>회가 되었습니다.
</div>
</div>
<div class="top-card">
<div class="label">전처리 후 최종 키워드</div>
<div class="value">1,713개</div>
<div class="desc">
최종 고유 키워드는 <strong>1,713개</strong>이며, 이 중 중요 표기(<code>DX</code>, <code>BIM</code>, <code>S/W</code> 등)는 별도 보존 규칙으로 관리했습니다.
</div>
</div>
</div>
<div class="section-title">중간 정리: 어떻게 정리했나</div>
<div class="process-box">
<div class="process-grid">
<div class="process-col">
<h3>1. 표기 보존 및 통합</h3>
<p><code>DX</code>, <code>BIM</code>, <code>S/W</code>, <code>H/W</code>, <code>2D</code>, <code>3D</code>, <code>As-is</code>, <code>To-Be</code>처럼 깨지면 안 되는 표기는 중요 표기로 보존했습니다.</p>
<p>같은 뜻의 표기 차이는 대표 표기로 합쳤습니다. 예: <code>디지털 전환</code>, <code>디지털전환</code>, 일부 DX 계열 표현은 대표 표기 <code>DX</code>로 통합했습니다.</p>
</div>
<div class="process-col">
<h3>2. 전처리 규칙</h3>
<p>1글자 단어와 순수 숫자는 제외했습니다.</p>
<p>공백 차이, 슬래시 차이, 영문/국문 혼용 표기는 가능한 범위에서 하나의 대표 표기로 정리했습니다.</p>
<p>예: 원문 <code>디지털전환 직관지 역할</code> → 정규화 후 <code>DX 직관지 역할</code></p>
</div>
<div class="process-col">
<h3>3. 1713개와 최종 분류의 관계</h3>
<p>최종 고유 키워드 <strong>1,713개</strong>를 등장 범위 기준으로 다시 나눴습니다.</p>
<p><strong>451</strong> 특정 프레임 전용 + <strong>1,238</strong> 2~9개 프레임 공통 + <strong>24</strong> 10개 이상 프레임 공통 = <strong>1,713</strong></p>
<div class="hint">즉 아래 분류는 1,713개와 별도 표가 아니라, 1,713개를 다시 구분한 결과입니다.</div>
</div>
</div>
</div>
<div class="section-title">최종 키워드 분류</div>
<div class="bottom-grid">
<div class="keyword-card core">
<h2>핵심 키워드</h2>
<div class="count">451개</div>
<div class="def">
<strong>특정 프레임에만 등장하는 단일 키워드</strong>입니다. 프레임 식별력이 가장 강한 신호로, 다른 프레임에 복제되지 않는 단어를 중심으로 정리합니다.
</div>
<div class="mini-title">키워드 예시</div>
<ul>
<li><code>실시간</code>, <code>CCTV</code>, <code>위험</code>, <code>사전</code></li>
<li><code>역량</code>, <code>여건</code>, <code>패러다임</code>, <code>현존</code></li>
<li><code>지형도</code>, <code>곡물</code>, <code>차량</code>, <code>Platform</code></li>
</ul>
<div class="frame-example">
프레임 예시: Frame 7은 <code>실시간</code>/<code>CCTV</code> 계열, Frame 13은 <code>역량</code>/<code>여건</code> 계열처럼 해당 프레임만의 식별 단어가 뚜렷하게 나타납니다.
</div>
</div>
<div class="keyword-card set">
<h2>세트 키워드</h2>
<div class="count">524개</div>
<div class="def">
<strong>특정 프레임 내부의 여러 source text를 공통 토큰으로 병합한 frame-level 세트 후보</strong>입니다. 단일 단어보다 프레임의 문맥과 메시지 묶음을 더 잘 보여주는 시그니처 단위로 사용합니다.
</div>
<div class="mini-title">키워드 세트 예시</div>
<ul>
<li>Frame 2: <code>AI · 비약 · 발전 · 추론 · 기반</code></li>
<li>Frame 13: <code>여건 · 사회 · 기업 · 제도</code></li>
<li>Frame 12: <code>안전 · 제고 · 건설 · 운영 · 확보</code></li>
</ul>
<div class="frame-example">
프레임 예시: Frame 2는 AI·추론 계열, Frame 13은 필수 여건 계열, Frame 12는 안전·운영·확보 계열처럼 한 프레임 안에서 함께 읽히는 시그니처 묶음으로 정리됩니다.
</div>
</div>
<div class="keyword-card related">
<h2>연관 키워드</h2>
<div class="count">1,238개</div>
<div class="def">
<strong>2~9개 프레임에 걸쳐 반복 등장하는 키워드</strong>입니다. 특정 프레임 하나를 바로 식별하지는 않지만, 핵심·세트 키워드 주변에서 맥락을 보강하는 신호로 사용합니다.
</div>
<div class="mini-title">키워드 예시</div>
<ul>
<li><code>국외</code>, <code>제도</code>, <code>공간</code>, <code>분석</code>, <code>솔루션</code></li>
<li><code>고객</code>, <code>정부</code>, <code>토지</code>, <code>공유</code></li>
<li><code>Engineering</code>, <code>Smart</code>, <code>공장</code>, <code>외장</code></li>
</ul>
<div class="frame-example">
프레임 예시: <code>국외</code>, <code>솔루션</code>, <code>정부</code> 같은 단어는 2개 이상 프레임에 반복 등장하므로 특정 프레임 단독 식별보다는 주변 맥락을 보강하는 용도로 사용됩니다.
</div>
</div>
</div>
<div class="note">
주: 핵심 키워드와 연관 키워드의 개수(<strong>451 / 1,238 / 24</strong>)는 <code>KEYWORD_INVENTORY.html</code>의 최종 정리 기준을 따랐습니다.
세트 키워드 <strong>524개</strong>는 현재 파이프라인의 <code>auto_anchor_candidates.yaml</code><code>merge_candidates</code> 기준으로 집계한 frame-level 세트 후보 수입니다.
즉, 핵심·연관은 최종 고유 키워드 <strong>1,713개</strong>의 등장 범위 분류이고, 세트 키워드는 그와 별도로 프레임 시그니처 후보를 묶어 보여주는 보조 층입니다.
</div>
</body>
</html>