교과서 소단원 PDF에서 핵심 개념을 추출하여 빈칸 채우기 형태의 JSON을 생성한다. 사용법 - /key-concepts [PDF경로]
교과서 소단원 PDF에서 핵심 개념을 분석하여 ■ 섹션별 빈칸 채우기 JSON을 생성한다.
인자로 받은 PDF 경로를 사용하여 아래 Python 코드를 실행한다.
import sys
sys.path.insert(0, "testmaker/src")
from pdf_reader import extract_text_by_page, parse_subunit_filename
pdf_path = "<인자로 받은 PDF 경로>"
tagged_text, page_texts = extract_text_by_page(pdf_path)
metadata = parse_subunit_filename(pdf_path)
page_start = min(page_texts.keys())
page_end = max(page_texts.keys())
print(f"단원: {metadata['unit']}단원 {metadata['subunit']}소단원")
print(f"소단원명: {metadata['subunit_name']}")
print(f"페이지 범위: {page_start}~{page_end}쪽 ({len(page_texts)}페이지)")
print("---")
print(tagged_text)
출력된 tagged_text, page_texts, metadata를 기억해둔다.
Step 1에서 추출한 페이지별 태그 텍스트를 바탕으로, 아래 규칙에 따라 핵심 개념을 JSON으로 생성한다.
[
{
"section": "섹션명",
"items": [
{"question": "빈칸이 포함된 문장 ( )", "answer": "정답 단어"},
{"question": "빈칸이 두 개인 문장 ( ) ... ( )", "answer": ["첫 번째 정답", "두 번째 정답"]}
]
}
]
answer는 문자열 또는 문자열 리스트 둘 다 가능하다.( )로 대체한다. 한 문장에 빈칸은 1~3개.{"question": "고체인 ( ), 액체인 물, 기체인 수증기", "answer": "얼음"}
{"question": "고체인 얼음, 액체인 물, 기체인 ( )", "answer": "수증기"}
{"question": "고체인 ( ), 액체인 물, 기체인 ( )", "answer": ["얼음", "수증기"]}
핵심 개념 JSON을 코드블록으로 출력한다.
생성한 JSON을 아래 Python 코드로 검증한다. page_texts는 Step 1에서 얻은 값을 사용한다.
import sys
sys.path.insert(0, "testmaker/src")
from concept_validator import validate_concepts
concepts = <Step 2에서 생성한 JSON 리스트를 Python 리스트로 직접 대입>
errors = validate_concepts(concepts, page_texts)
if errors:
print("검증 실패:")
for e in errors:
print(f" - {e}")
Edit PDFs with natural-language instructions using the nano-pdf CLI.