808. PDF 파싱과 문서 자동화
이미지 PDF에서 제품 데이터 뽑아내기
- PDF의 두 종류를 구분하고, 어느 쪽인지에 따라 접근이 완전히 달라짐을 안다.
- 문서의 해부도(어떤 요소가 어떤 규칙으로 배치되는가)를 말로 정의해 AI에게 전달한다.
- 목표·규칙·기록 규약·합격 기준을 담은 통합 프롬프트를 한 번에 지시한다.
- AI가 스스로 채점하고 고치며 반복하도록 정지 조건을 설계한다.
- 시도마다 코드와 결과를 같은 이름으로 남겨, 회차별로 비교한다.
PDF는 한 종류가 아니다
학습 안내읽기. 이 장은 실제 제품 브로슈어를 파싱한 프로젝트를 따라갑니다. 사내에 쌓인 카탈로그·사양서·검사성적서를 다루는 데 그대로 쓰이는 방식입니다.
"PDF에서 텍스트 뽑아줘"라는 요청이 어떤 날은 5분 만에 끝나고 어떤 날은 며칠이 걸리는 이유는, PDF라는 이름 아래 성격이 전혀 다른 두 가지가 섞여 있기 때문입니다.
| 텍스트 레이어 PDF | 이미지(스캔) PDF | |
|---|---|---|
| 정체 | 글자가 문자 데이터로 들어 있음 | 페이지 전체가 한 장의 사진 |
| 확인법 | 뷰어에서 글자를 드래그해 복사하면 됨 | 드래그해도 잡히지 않음 |
| 추출 방법 | 라이브러리로 텍스트·좌표를 바로 읽음 | 렌더링 → OCR 후 좌표로 구조를 재구성 |
| 난이도 | 낮음 — 대부분 하루 안에 끝남 | 높음 — 오인식·레이아웃 판단이 과제 |
| 주 실패 | 표·다단 조판에서 읽는 순서가 뒤섞임 | 글자 오인식, 공백 소실, 사진과 텍스트 혼동 |
가장 먼저 할 일은 어느 쪽인지 확인하는 것
이 판별을 건너뛰고 시작하면, 텍스트 PDF에 OCR을 돌려 멀쩡한 글자를 망가뜨리거나, 이미지 PDF에서 아무것도 못 뽑고 헤매게 됩니다. AI에게도 "이 PDF가 어느 쪽인지 먼저 확인해줘"를 첫 지시로 주는 편이 안전합니다.
문서의 해부도를 말로 정의한다
이 절과 이후 실습에서 쓰는 원본 PDF입니다. 텍스트 레이어가 전혀 없는 펼침면 이미지 PDF라, 열어서 글자를 복사해 보면 한 자도 잡히지 않는 것을 바로 확인할 수 있습니다. 01-input/에 넣고 시작하십시오.
OCR이 주는 것은 글자 조각과 좌표의 목록일 뿐입니다. "이 줄은 제품명이고 저 줄은 사양"이라는 판단은 아무도 해 주지 않습니다. 그 판단 규칙을 사람이 말로 정의해서 AI에게 넘겨야 합니다.
위 지면을 한참 들여다보면 규칙이 보입니다. 카테고리는 언제나 맨 위 가장 큰 검은 글자이고, 제품명은 언제나 파란색이며, 항목은 언제나 ■로 시작합니다. 디자이너가 지킨 규칙이 곧 파싱 규칙입니다.
| 요소 | 지면에서 보이는 모습 (사람의 눈) | 기계에게 줄 판별 규칙 |
|---|---|---|
| 카테고리 | 페이지 최상단의 가장 큰 검은 글자. 12쪽 Semiconductor Production Equipment, 13쪽 Industrial Vacuum Equipment |
머리말 구분선 위쪽에 있고, 줄 높이가 300 DPI 기준 46px 이상이며 잉크가 검정인 줄. 없는 쪽은 앞 쪽에서 물려받고 물려받았다는 표시를 남긴다 |
| 부제 | 카테고리 바로 아래 한 줄. Cutting-edge Products to Meet State-of-the-art… 그 아래에 가는 가로줄이 있어 머리말이 끝난다 |
구분선 위쪽 줄 중 카테고리를 뺀 나머지. 구분선은 가로 폭의 55% 이상이 이어지는 어두운 픽셀 행으로 찾는다 |
| 제품명 | 브랜드 블루로 인쇄된 중간 크기 글자. 이 줄에서 새 제품이 시작된다 | 줄의 잉크 색이 파랑(B≥110, B−R≥35)이고 줄 높이 30px 이상 → 새 제품의 시작점. 다음 파란 줄 직전까지가 한 제품 |
| 모델 | Model : ENTRON-EX W300 · Model : DFB 형태. 뒤나 다음 줄에 Multi-chamber Sputtering Systems 같은 설명이 붙는다 |
Model : 뒤 토큰이 모델명, 같은 줄의 나머지 또는 다음 줄이 설명. 제품군 제목 아래 개별 모델이 다시 나오는 경우도 잡는다 |
| 섹션 제목 | Features · Applications — 브로슈어 전체에서 이 두 낱말뿐 |
검은 글자 줄의 내용이 두 낱말 중 하나와 일치하면 섹션 경계. 다음 섹션 제목이나 다음 제품까지가 그 섹션 |
| 항목 | ■ 로 시작하면 1단계. - · : · ▶ 로 시작하면 그 아래 2단계. 긴 항목은 다음 줄로 넘어가되 들여쓰기가 유지된다 |
■ 는 글자로 읽지 말고 도형으로 찾는다 — 정사각형(허용오차 25%), 채움 비율 90% 이상, 300 DPI에서 13~34px. 불릿 없이 이어지는 줄은 앞 항목에 이어 붙인다 |
| 제품 사진 | 흰 바탕에 놓인 사진 1~2장. 바로 위 줄이 캡션. 12쪽 아래 클린룸 띠는 제품 사진이 아니다 | 흰색이 아닌 픽셀 덩어리에서 OCR이 글자라고 한 영역을 지운 나머지. 사각형을 86% 이상 꽉 채우고 가로로 긴 덩어리는 장식 띠로 보아 버린다 |
해부도를 그대로 프롬프트로 옮긴다
표의 오른쪽 열이 사실상 명세서입니다. 여기에 "이 이미지를 어떻게 다뤄라"를 덧붙이면 그대로 프롬프트가 됩니다. 아래는 위 펼침면 이미지를 첨부하고 규칙이 실제 지면과 맞는지 검증받는 단계입니다 — 본격적으로 시키기 전에 해부도의 오류를 먼저 걸러내는 짧은 확인 절차입니다.
한 번에 시킨다 — 통합 프롬프트
학습 안내직접 실행. 파싱할 PDF를 하나 준비합니다. 사내 카탈로그·사양서 무엇이든 좋습니다. 빈 폴더에 01-input/ 을 만들어 넣고 Codex로 엽니다.
여기서 흔한 오해를 하나 정리하고 갑니다. 파싱을 배울 때 사람들은 대개 "먼저 렌더링을 시키고, 되면 OCR을 시키고, 그 다음 구조를 조립시키고…" 처럼 프롬프트를 잘게 쪼개 순서대로 넣습니다. 사람이 매 단계 결과를 확인하고 다음 지시를 만드는 방식입니다.
바이브코딩은 그렇게 하지 않습니다. 전체 목표와 판정 기준을 한 번에 주고, 반복은 AI가 돕니다. 사람이 매 단계 개입하면 AI는 사람의 속도로만 일합니다.
사람은 기준을 정하고, 반복은 AI가 돈다
사람이 하는 일은 무엇을 만들지 · 무엇이 정답인지 · 언제 멈출지를 정의하는 것뿐입니다. 코드를 쓰고, 돌려 보고, 틀린 곳을 찾고, 값을 바꾸고, 다시 돌리는 지루한 반복은 전부 AI 몫입니다. 그러려면 프롬프트에 채점 방법과 정지 조건이 반드시 들어가야 합니다. 그것이 없으면 AI는 한 번 돌려 보고 "됐습니다"라고 말할 뿐입니다.
① 산출물무엇을 만드는가
JSON · 잘라낸 사진 · 단일 HTML 뷰어까지. "데이터만 뽑아줘"로 끝내면 결과를 눈으로 확인할 방법이 없다.
② 해부도무엇이 정답 구조인가
앞 절에서 관찰한 요소별 판별 규칙. 이것이 명세서다.
③ 기록 규약어떤 코드가 어떤 결과를 냈나
실행마다 날짜·시각 ID를 만들고, 결과와 코드 사본에 같은 ID를 붙인다. 되짚을 수 없는 개선은 개선이 아니다.
④ 채점누가 정답을 정하나
파싱이 끝나면 AI가 직접 PDF 지면을 읽어 자기 결과와 대조한다. 코드의 눈이 아니라 모델의 눈으로 본다.
⑤ 정지 조건언제 멈추나
텍스트 95% 이상 + 구조 완전 일치. 숫자가 없으면 AI는 첫 실행에서 멈춘다.
⑥ 조정값어디를 고치나
"몇 픽셀부터" 같은 값은 설정 파일 한 곳에. 코드 본문에 숫자를 박지 못하게 한다.
pdf-parser-Case-UK-brochure/
├─ 01-input/ # 원본 PDF (건드리지 않음)
├─ 02-processing/ # 파서 코드 — 현재 버전
│ ├─ config.py # 임계값·경로 — 튜닝은 여기서만
│ ├─ page_source.py # PDF → 인쇄 페이지 이미지
│ ├─ ocr_engine.py # OCR + 공백 복원 + 잉크 색 판정
│ ├─ layout.py # 줄 목록 → 제품 구조로 조립
│ ├─ image_extract.py # 제품 사진 검출 · 캡션 연결
│ ├─ parse.py # 전체 실행 진입점
│ ├─ evaluate.py # 정답지 대비 점수
│ └─ ground_truth.json # AI가 지면을 직접 읽어 만든 정답
└─ 09-output/ # 산출물 — 회차가 쌓인다
├─ {파일명}-{실행ID}.json # 파싱 결과
├─ images/{실행ID}/ # 그 회차가 잘라낸 제품 사진
├─ code/{실행ID}/ # 그 결과를 만든 코드 사본 ★
├─ manifest.json # 회차 목록 · 점수 · 바꾼 것
└─ viewer.html # 회차 드롭다운이 달린 뷰어
실행ID = ulvac_Brochure_2026-20260808-015521 (파일명 + 날짜 + 시각)
아래가 실제로 한 번에 넣는 프롬프트 전문입니다. 길어 보이지만, 앞에서 정리한 여섯 가지를 순서대로 적었을 뿐입니다. 이걸 붙여 넣고 나면 사람은 결과를 기다립니다.
AI가 스스로 도는 루프를 옆에서 본다
프롬프트를 넣은 뒤 화면에서 벌어지는 일입니다. 코드를 만들고 → 돌리고 → 자기 결과를 지면과 대조해 채점하고 → 원인을 짚고 → 고쳐서 다시 돌립니다. 사람은 아무것도 하지 않습니다.
이 다섯 회차 동안 사람이 한 일은 없습니다
프롬프트를 한 번 넣고 기다렸을 뿐입니다. 이게 가능한 이유는 세 가지가 프롬프트에 들어 있었기 때문입니다 — 정답을 만드는 방법(지면을 직접 읽어라), 합격 기준(95% + 구조 일치), 되돌아갈 지점(회차별 코드 사본). 이 셋이 없으면 AI는 첫 실행에서 "완료했습니다"라고 말하고 멈춥니다.
사람이 개입해야 하는 순간
그렇다고 완전 방목은 아닙니다. 사람이 봐야 하는 지점은 두 곳입니다.
| 개입 지점 | 무엇을 확인하나 | 이 사례에서는 |
|---|---|---|
| 정답지가 진짜 정답인가 | AI가 만든 ground_truth.json을 지면과 눈으로 대조. 정답지가 틀리면 점수 전체가 거짓이다 | 4쪽 분량 정답지를 15분 검토 — 2건 수정(하위 항목 계층 오류) |
| 목표를 채운 방식이 정당한가 | 점수를 올리려고 규칙이 아니라 예외를 하드코딩하지 않았는지. 다른 브로슈어에 그대로 쓸 수 있는가 | config.py 상수로만 조정 — 특정 제품명을 코드에 박은 곳 없음 |
AI가 만들어 낸 조정판 — config.py
"조정값은 한 곳에 모으고 왜 그 값인지 주석을 달아"라는 한 줄이 만들어 낸 결과물입니다. 주석에 근거가 남아 있어, 다음 브로슈어에서는 이 파일만 고쳐 재사용합니다.
# ── 페이지 선택 ─────────────────────────────
PRINTED_PAGE_FIRST = 12 # 하단에 인쇄된 쪽번호 기준
PRINTED_PAGE_LAST = 21
SPREAD_ASPECT_MIN = 1.15 # 이보다 넓으면 2쪽 펼침으로 본다
# ── 렌더링 ─────────────────────────────────
RENDER_DPI = 300
# ── OCR ────────────────────────────────────
SPACE_MIN_GAP_FRAC = 0.18 # 줄 높이 대비 이만큼 비면 공백
SPACE_BOUNDARY_ALPHA = 0.70 # 공백이 글자 i와 i+1 사이 어디에 놓이는지
# 3회차에서 0.00~1.00 을 0.05 간격으로 훑어 찾은 최적값
MIN_TEXT_SCORE = 0.55 # 이보다 흐린 줄은 버린다
# ── 글자 크기로 역할 판정(300 DPI 기준 픽셀) ──
FONT_CATEGORY_MIN = 46 # 페이지 최상단 대제목
FONT_MODEL_MIN = 30 # "Model : ○○○"
FONT_SUBCATEGORY_MIN = 32
# ── 잉크 색: 브랜드 블루 판정 ────────────────
BLUE_MIN_B = 110
BLUE_B_OVER_R = 35
BLUE_G_OVER_R = 15
# ── 불릿 ■ (300 DPI에서 실측 21~25px) ────────
BULLET_MIN_PX = 13 # DPI를 바꿔도 놓치지 않게 범위를 넓게 잡았다
BULLET_MAX_PX = 34
BULLET_SOLIDITY = 0.90 # 채워진 픽셀 / 사각형 넓이
# ── 제품 사진 ───────────────────────────────
IMG_MERGE_GAP = 30 # 이보다 가까운 덩어리는 한 장의 사진 (3회차)
IMG_MAX_PER_PRODUCT = 2 # 이 브로슈어는 제품당 최대 2장
IMG_DECOR_FILL = 0.86 # 이보다 꽉 차고 넓으면 장식 띠 → 제외 (3회차)
# ── 머리말 구분선 ───────────────────────────
RULE_MIN_COVERAGE = 0.55 # 가로 폭의 이만큼 이어지면 구분선 (4회차)
사례 · 제품 브로슈어를 카탈로그 데이터로
실제 프로젝트의 결과입니다. 텍스트 레이어가 전혀 없는 펼침면 이미지 PDF에서 인쇄 12~21쪽을 골라, 제품 34종을 구조화 데이터로 뽑았습니다.
뽑아낸 제품 구성
| 인쇄 쪽 | 카테고리 | 제품 수 |
|---|---|---|
| 12 | Semiconductor Production Equipment | 2 |
| 13 | Industrial Vacuum Equipment | 4 |
| 14 | Electronic Device Production Equipment | 4 |
| 15 | SiC Power Device | 4 |
| 16–17 | VMS Production Equipment | 6 |
| 18–20 | Vacuum Components | 10 |
| 21 | Charging System for Electric Vehicle | 4 |
16~17쪽과 18~20쪽처럼 한 카테고리가 여러 쪽에 걸치는 경우가 있습니다. 이어지는 쪽에는 카테고리 제목이 인쇄되어 있지 않아, 앞 쪽에서 물려받는 규칙이 없으면 이 제품들의 분류가 통째로 비게 됩니다.
개선 궤적 — 실행 이력이 말해 주는 것
manifest.json에 쌓인 실행 기록입니다. 초반에는 숫자가 줄어드는 것이 개선이고, 구조가 잡힌 뒤부터는 개수가 아니라 점수가 오릅니다.
| 회차 | 제품 | 사진 | 텍스트 | AI가 짚은 원인과 고친 것 |
|---|---|---|---|---|
| 1회차 | 46 | 47 | 88.1% | 제품 과다 검출 — 사진 위 라벨과 제품군 제목이 각각 제품으로 잡힘 → 사진 영역 우선 확정, 카테고리 상속 |
| 2회차 | 34 | 46 | 91.5% | 단어가 붙어 나옴 → 이미지 기반 공백 복원 도입 |
| 3회차 | 34 | 46 | 94.3% | 보정계수 21가지 자동 탐색 → 0.70 채택 / 사진 장수 불일치 발견 |
| 4회차 | 34 | 37 | 94.6% | 장식 띠 제외·분할 사진 병합 / 부제가 카테고리에 붙는 문제 발견 |
| 5회차 | 34 | 37 | 99.0% | 머리말 구분선·21쪽 모델명·숫자 공백까지 반영 → 21쪽 88%→100% · 헤더 19/19 · 첫 합격 |
최종 점수
page 12: text 99.0% products 2 gt / 2 parsed page 13: text 99.5% products 4 gt / 4 parsed page 14: text 99.5% products 4 gt / 4 parsed page 15: text 96.7% products 4 gt / 4 parsed page 16: text 99.4% products 3 gt / 3 parsed page 17: text 96.6% products 3 gt / 3 parsed page 18: text 99.4% products 3 gt / 3 parsed page 19: text 99.2% products 3 gt / 3 parsed page 20: text 99.9% products 4 gt / 4 parsed page 21: text 100.0% products 4 gt / 4 parsed ================================================================== TEXT ACCURACY : 99.03% (target >= 95%) products matched : 34/34 page headers : 19/19 image counts exact : 34/34 ================================================================== 3 issue lines: p15 'uGmni' text 90.5% p17 'EWE (for Film Capacitor)' text 96.1% p17 'EWK (for LiB/LiC)' text 95.4%
남은 문제도 정확히 보입니다. 3건뿐이고, 어느 쪽 어느 제품인지까지 나옵니다. 15쪽 uGmni는 Applications가 2열 표라 열 순서가 섞였고, 17쪽 두 제품은 :로 시작하는 하위 항목의 표기 차이입니다. 다음에 무엇을 고칠지가 이 목록에 그대로 적혀 있습니다.
이 사례의 산출물 받기
위 합격 회차(5회차)의 결과 일습입니다. 제품 34종이 담긴 파싱 JSON, 실행 이력 manifest.json, 그리고 PDF에서 잘라낸 제품 사진 37장이 들어 있습니다. 압축을 풀면 09-output/ 폴더가 나오며, 아래 실습의 뷰어를 그 옆에 두면 그대로 열립니다.
이력 뷰어 — 회차를 골라 눈으로 비교한다
점수는 "어디가 몇 %"까지만 알려 줍니다. 왜 틀렸는지는 눈으로 봐야 압니다. 그래서 통합 프롬프트에 뷰어를 넣었습니다 — 상단 드롭다운에서 실행 회차를 고르면 그 회차의 결과로 화면이 통째로 바뀝니다.
4회차까지는 합격선에 닿지 못해 루프가 계속됐습니다. 정지 조건은 텍스트 95% 이상 그리고 구조 완전 일치 둘 다였고, 5회차에서 처음으로 둘을 동시에 만족하면서 AI가 스스로 멈췄습니다. 점수 하나만 조건으로 걸면, 글자는 맞는데 제품 수나 사진이 틀린 결과에서 루프가 멈춥니다.
학습 안내직접 조작. 아래는 그 뷰어의 모습입니다. 왼쪽 드롭다운에서 회차를 바꿔 보십시오. 파서가 무엇을 잘못 보고 있었는지가 화면에 그대로 드러납니다.
카테고리
- Semiconductor Production Equipment (5)
- Industrial Vacuum Equipment (6)
- Electronic Device Production Equip. (7)
- SiC Power Device (4)
- (카테고리 없음) 9 ⚠
- Charging System for EV (4)
- ENTRON-EX W300 is the newest line-up developed based on existing.
- Line up with detailed model (TiNK, CuRK) respond to various material.
p12-01-1.jpg카테고리
- Semiconductor Production Equipment (2)
- Industrial Vacuum Equipment (4)
- Electronic Device Production Equip. (4)
- SiC Power Device (4)
- VMS Production Equipment (6)
- Vacuum Components (10)
- Charging System for EV (4)
- ENTRON-EX W300 is the newest line-up developed based on existing.
- Line up with detailed model (TiNK, CuRK) respond to various material.
p12-01-1.jpg
p12-02-2.jpg ⚠카테고리
- Semiconductor Production Equipment (2)
- Industrial Vacuum Equipment (4)
- Electronic Device Production Equip. (4)
- SiC Power Device (4)
- VMS Production Equipment (6)
- Vacuum Components (10)
- Charging System for EV (4)
- Up to 8 process chambers (PVD, ALD, CVD, etc.) and 2 chambers (Degas, cool)
- Mechanical throughput is 100wph or more using by ULVAC original new transfer robot.
p12-01-1.jpg- Damage-free (remote plasma and low-temperature process).
- 50% lower self-aligned contact resistance compared to current wet process.
p12-02-1.jpg1회차에서는 사진 위 로고가 제품으로 둔갑했고 카테고리가 빈 제품이 9건이었습니다. 3회차에서는 제품 수는 맞았지만 페이지 하단 장식 띠가 제품 사진으로 들어와 있습니다. 5회차에서 둘 다 사라졌습니다. 점수 표에서는 "사진 46 vs 37"이라는 숫자였던 것이, 뷰어에서는 잘못 잡힌 그 이미지 자체로 보입니다.
실제 산출물
통합 프롬프트로 만들어진 실제 뷰어입니다. 왼쪽은 카테고리별 전체 목록, 오른쪽은 사양으로 검색한 결과입니다.
그 뷰어 두 가지 버전입니다. 같은 09-output/*.json을 읽지만 보여주는 방식이 다릅니다 — 문서형은 카테고리·제품을 목록으로 훑는 데, 갤러리형은 추출된 사진을 한눈에 놓고 잘못 잡힌 이미지를 찾는 데 낫습니다.
09-output/ 옆에 뷰어 파일을 두고, 그 폴더에서 간단한 로컬 서버를 띄운 뒤 접속하십시오. 파일을 더블클릭해 file://로 열면 브라우저가 09-output/*.json 읽기를 막아 회차 목록이 자동으로 뜨지 않습니다(이때는 뷰어가 파일 선택창으로 대신 물어봅니다). 또 배포된 결과에는 합격 회차 하나만 들어 있어, 위 목업처럼 회차를 바꿔 가며 비교하려면 실습에서 회차를 직접 쌓아야 합니다.뽑아낸 데이터를 쓰는 법
JSON은 목적이 아니라 재료입니다. 종이 카탈로그였다면 불가능했던 일들이 여기서 열립니다.
검색제품 찾기
"챔버가 8개 이상인 장비", "SiC 관련 제품"처럼 사양으로 검색. 종이 카탈로그에서는 눈으로 훑어야 했던 일.
비교사양 비교표
여러 제품의 Features를 나란히 놓은 비교표를 자동 생성. 제안서·견적서에 그대로 붙인다.
번역다국어 카탈로그
구조가 유지된 채로 항목별 번역 → 레이아웃이 같은 국문판. 원문 대조가 쉽다.
챗봇제품 문의 응대
제품 단위로 쪼개진 데이터는 RAG 챗봇의 좋은 재료. 근거 제품·쪽번호를 함께 답하게 한다.
완료 기준
- 대상 PDF가 텍스트 레이어형인지 이미지형인지 확인하고 그에 맞는 방법을 골랐다
- 문서의 해부도(요소별 판별 규칙)를 표로 적어 두었다
- 산출물·해부도·기록 규약·채점·정지 조건·조정값을 담은 통합 프롬프트를 한 번에 넣었다
- AI가 스스로 채점하고 고치며 두 회차 이상 반복하는 것을 확인했다
- 실행 결과와 그 결과를 만든 코드가 같은 실행 ID로 남아 있다
- 뷰어에서 회차를 바꿔 가며 무엇이 달라졌는지 눈으로 확인했다
부록 · 더 해보기
MISSION 1표가 들어간 사양서 다루기
제품 사양서는 대부분 표가 핵심입니다. 통합 프롬프트의 해부도 항목에 "표의 괘선을 찾아 행·열을 복원하고, 셀을 좌표로 맞춰 표 데이터로 뽑는다"를 추가해 보십시오. 병합된 셀과 여러 쪽에 걸친 표가 난관입니다 — 그 예외를 해부도에 미리 적고 시작하십시오.
MISSION 2검사성적서 일괄 처리
양식이 같은 문서 수십 개라면 훨씬 쉽습니다. "폴더 안 PDF를 전부 처리해 한 장의 엑셀로 합쳐줘 — 파일명·측정 항목·값·판정"이라고 지시하고, 값이 규격을 벗어난 행을 표시하게 하십시오. 합격 기준은 "무작위 5개 문서를 직접 읽어 대조했을 때 전 항목 일치"로 잡습니다.
MISSION 3제품 카탈로그 챗봇
뽑아낸 JSON을 지식으로 삼아 제품 문의에 답하는 챗봇을 만들어 보십시오. "근거가 된 제품명과 인쇄 쪽번호를 반드시 함께" 답하게 하면, 답변을 원본에서 확인할 수 있습니다.
MISSION 4파싱 결과로 브로슈어 되돌리기
JSON에서 다시 문서를 만들어 보십시오 — 806에서 쓴 방식으로 제품별 소개 슬라이드를, 또는 국문 번역판 카탈로그를. 구조화가 제대로 되었는지 검증하는 가장 확실한 방법이기도 합니다.