feat(study): 보기 동그라미 숫자 (①②③④) 형식 지원 + 10회분 추가

운영 중 발견 — 2023년 이후 회차 md 가 보기를 ①②③④ 으로 표기.
파서가 "1번:" / "1." / "1)" 만 매칭해서 100문항 보기 1~4번 비어있음 → import abort.
CIRCLED 매핑 활용해서 동그라미 숫자도 처리 추가.

운영 결과 (10회분 추가, 누락 png 제외):
- 2022년 3회 / 2023년 1회: 100건 (이미지 0)
- 2023년 2회: 98건 / 2023년 3회: 96건 (png 일부 누락)
- 2024년 1·2·3회: 각 98건 (png 누락)
- 2025년 1·2·3회: 97/99/97건 (png 누락)
- audit: HC 0 / LC-5 1건 자동 fix (q2183 표 구분자)
- 누락 png 19건은 사용자 추후 보충 예정

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-30 06:47:06 +09:00
parent 1d73986fd6
commit 87b6c38d99
11 changed files with 265 additions and 1 deletions
+7 -1
View File
@@ -208,12 +208,18 @@ def _extract_meta(md: str) -> dict[str, str]:
def _parse_choices(raw: str) -> tuple[str, str, str, str]:
"""보기 fenced block → 4개 텍스트.
한 줄당 "{N}번:", "{N}.", "{N})" 형태. 멀티라인 보기는 다음 항목 직전까지 합침.
한 줄당 "{N}번:", "{N}.", "{N})", "①②③④" 모두 인정. 멀티라인 보기는 다음 항목 직전까지 합침.
"""
lines = raw.splitlines()
buckets: dict[int, list[str]] = {1: [], 2: [], 3: [], 4: []}
current: Optional[int] = None
for line in lines:
# 동그라미 숫자 ①②③④ 우선 시도
m_circ = re.match(r"^\s*([①②③④])\s*(.*)$", line)
if m_circ:
current = CIRCLED[m_circ.group(1)]
buckets[current].append(m_circ.group(2).rstrip())
continue
# "1번:" / "1." / "1)" 모두 인정. 점/괄호 다음 공백 허용.
m = re.match(r"^\s*(\d)\s*[번.):]\s*(.*)$", line)
if m: