교과서 소단원 PDF에서 25개 빈칸 채우기 빙고 문제를 생성하고 HWPX 학습지를 만든다. 사용법 - /bingo-questions [PDF경로]
교과서 소단원 PDF에서 25개 빈칸 채우기 문제를 생성하고 HWPX 빙고 학습지를 만든다.
인자로 받은 PDF 경로를 사용하여 아래 Python 코드를 실행한다.
import sys
sys.path.insert(0, "bingomaker/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와 metadata를 기억해둔다.
Step 1에서 추출한 페이지별 태그 텍스트를 바탕으로, 아래 규칙에 따라 정확히 25개 문제를 JSON으로 생성한다.
( N쪽 )이 정답 단어를 대신한다. 별도의 빈칸 ( )은 사용하지 않는다.( N쪽 )에 들어갈 단어를 교과서에서 찾아 답을 적는다.( 35쪽 )을 보면 우리 지역의 위치를 파악할 수 있습니다. → 정답: 지도[N쪽] 태그와 일치해야 한다. 추측하지 말 것.( N쪽 )으로 바꾸는 것 외에 원문을 수정하지 말 것. 어미 변경("있어요"→"있습니다"), 단어 추가/삭제, 어순 변경 등 어떤 변형도 하지 않는다. 원문이 길면 앞뒤를 잘라도 되지만, 남긴 부분은 원문과 글자 하나 다르지 않아야 한다.[{"question": "( N쪽 ) ...문장...", "answer": "정답"}, ...]25개 문제를 JSON 코드블록으로 출력한다.
생성한 JSON을 아래 Python 코드로 검증한다. page_texts, page_start, page_end는 Step 1에서 얻은 값을 사용한다.
import sys, json
sys.path.insert(0, "bingomaker/src")
from question_generator import validate_questions
questions = <Step 2에서 생성한 JSON 리스트를 Python 리스트로 직접 대입>
errors = validate_questions(questions, page_texts, page_start, page_end)
if errors:
print("검증 실패:")
for e in errors:
print(f" - {e}")