diff --git a/DIW_2503A copy.json b/DIW_2503A copy.json
deleted file mode 100644
index 1fa0dc6..0000000
--- a/DIW_2503A copy.json
+++ /dev/null
@@ -1,855 +0,0 @@
-{
- "0-0": {
- "path": "",
- "path2": "",
- "points": 0,
- "category": "파일저장",
- "item": "파일명 (수검번호.hwp/hwpx)"
- },
- "0-1": {
- "path": "boolean(//PAGEMARGIN[(@Bottom='5668'or @Bottom='5669') and (@Footer='2834' or @Footer='2835') and @Gutter='0' and (@Header='2834' or @Header='2835') and (@Left='5668' or @Left='5669') and (@Right='5668' or @Right='5669') and (@Top='5668' or @Top='5669')])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 4,
- "category": "용지설정",
- "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)"
- },
- "0-2": {
- "path": "boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 4,
- "category": "기본설정",
- "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)"
- },
- "0-3": {
- "path": "",
- "path2": null,
- "searchValue": null,
- "value": null,
- "points": 40,
- "category": "오타감점",
- "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경"
- },
- "1-1": {
- "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": "견고딕",
- "points": 1,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/① 글씨체 (견고딕)"
- },
- "1-2": {
- "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": "9920305",
- "points": 2,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/② 채우기 : 색상(RGB:49,95,151)"
- },
- "1-3": {
- "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": 28346,
- "points": 2,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/③ 크기-너비 (100mm)"
- },
- "1-4": {
- "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": 5669,
- "points": 2,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/④ 크기-높이 (20mm)"
- },
- "1-5": {
- "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": "true",
- "points": 2,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/⑤ 위치 (글자처럼 취급)"
- },
- "1-6": {
- "path": "//PARASHAPE[@Id=//TEXTART[@Text='{searchValue}']/ancestor::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": "Center",
- "points": 2,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/⑥ 정렬 (가운데 정렬)"
- },
- "1-7": {
- "path": "boolean(//TEXTART[@Text='{searchValue}'])",
- "path2": null,
- "searchValue": "친환경이동수단컨퍼런스",
- "value": true,
- "points": 2,
- "category": "글맵시",
- "item": "문구 (친환경이동수단컨퍼런스)/⑦ 글맵시모양 (육안확인)"
- },
- "1-8": {
- "path": "boolean(//RECTANGLE[.//CHAR[text()='지']][.//SIZE[(@Height >= 2600 and @Height <= 2800)and(@Width >= 2600 and @Width <= 2800)]])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 1,
- "category": "문단첫글자장식",
- "item": "지/① 모양 (2줄)"
- },
- "1-9": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TEXT[CHAR[text()='지']]/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": null,
- "value": "궁서체",
- "points": 1,
- "category": "문단첫글자장식",
- "item": "지/② 글씨체 (궁서체)"
- },
- "1-10": {
- "path": "//RECTANGLE[.//CHAR[text()='지']]//WINDOWBRUSH/@FaceColor",
- "path2": null,
- "searchValue": null,
- "value": "3644265",
- "points": 2,
- "category": "문단첫글자장식",
- "item": "지/③ 면색 : 색상(RGB:105,155,55)"
- },
- "1-11": {
- "path": "//RECTANGLE[.//CHAR[text()='지']]//OUTSIDEMARGIN/@Right",
- "path2": null,
- "searchValue": null,
- "value": "850",
- "points": 2,
- "category": "문단첫글자장식",
- "item": "지/④ 본문과의 간격 : 3.0mm"
- },
- "1-12": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][ITALIC])",
- "path2": null,
- "searchValue": "전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대",
- "value": true,
- "points": 2,
- "category": "글꼴 속성",
- "item": "문구 (전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대)/① 기울임"
- },
- "1-13": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][UNDERLINE])",
- "path2": null,
- "searchValue": "전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대",
- "value": true,
- "points": 2,
- "category": "글꼴 속성",
- "item": "문구 (전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대)/② 밑줄"
- },
- "1-14": {
- "path": "count(//CHAR[contains(text(),'☆')]) + count(//CHAR[contains(text(),'※')])",
- "path2": "string-length(//CHAR[contains(text(),'☆')]) - string-length(translate(//CHAR[contains(text(),'☆')], '☆', '')) + string-length(//CHAR[contains(text(),'※')]) - string-length(translate(//CHAR[contains(text(),'※')], '※', ''))",
- "searchValue": null,
- "value": 3,
- "points": 3,
- "category": "특수문자",
- "item": "① ☆, ② ☆, ③ ※"
- },
- "1-15": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "☆ 행사안내 ☆",
- "value": "궁서",
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (☆ 행사안내 ☆)/① 글씨체 (궁서)"
- },
- "1-16": {
- "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "☆ 행사안내 ☆",
- "value": "Center",
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (☆ 행사안내 ☆)/② 정렬 (가운데 정렬)"
- },
- "1-17": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][BOLD])",
- "path2": null,
- "searchValue": "2025. 03. 27.(목) 24:00까지",
- "value": true,
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (2025. 03. 27.(목) 24:00까지)/① 진하게"
- },
- "1-18": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][UNDERLINE])",
- "path2": null,
- "searchValue": "2025. 03. 27.(목) 24:00까지",
- "value": true,
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (2025. 03. 27.(목) 24:00까지)/② 밑줄"
- },
- "1-19": {
- "path": "boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=3000 and //PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Indent=-2400)",
- "path2": null,
- "searchValue": "기타사항",
- "value": true,
- "points": 2,
- "category": "문단모양",
- "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)"
- },
- "1-20": {
- "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "2025. 03. 22.",
- "value": 1300,
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (2025. 03. 22.)/① 크기 (13pt)"
- },
- "1-21": {
- "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "2025. 03. 22.",
- "value": "Center",
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (2025. 03. 22.)/② 정렬 (가운데 정렬)"
- },
- "1-22": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "한국육상운송협회",
- "value": "굴림체",
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (한국육상운송협회)/① 글씨체 (굴림체)"
- },
- "1-23": {
- "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "한국육상운송협회",
- "value": 2400,
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (한국육상운송협회)/② 크기 (24pt)"
- },
- "1-24": {
- "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "한국육상운송협회",
- "value": "Center",
- "points": 1,
- "category": "글꼴 속성",
- "item": "문구 (한국육상운송협회)/③ 정렬 (가운데 정렬)"
- },
- "1-25": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "DIAT",
- "value": "돋움",
- "points": 1,
- "category": "머리말",
- "item": "문구 (DIAT)/① 글꼴 (돋움)"
- },
- "1-26": {
- "path": "//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "DIAT",
- "value": 900,
- "points": 1,
- "category": "머리말",
- "item": "문구 (DIAT)/② 크기 (9pt)"
- },
- "1-27": {
- "path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "DIAT",
- "value": "Right",
- "points": 1,
- "category": "머리말",
- "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
- },
- "1-28": {
- "path": "//PAGENUM/@FormatType",
- "path2": null,
- "searchValue": null,
- "value": "LatinCapital",
- "points": 2,
- "category": "쪽번호",
- "item": "① 쪽 번호 매기기 (A,B,C 순으로)"
- },
- "1-29": {
- "path": "//PAGENUM/@Pos",
- "path2": null,
- "searchValue": null,
- "value": "BottomCenter",
- "points": 2,
- "category": "쪽번호",
- "item": "② 가운데 아래"
- },
- "1-30": {
- "path": "not(//PARASHAPE[@Id=//SECTION[1]/P/@ParaShape]/PARAMARGIN[@LineSpacing!='180'])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 2,
- "category": "줄간격",
- "item": "문제 1 줄간격 180% 설정"
- },
- "2-01": {
- "path": "boolean(//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside='true' and //BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]/*[contains(local-name(), 'BORDER')]/@Type='DoubleSlim')",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 4,
- "category": "쪽 테두리",
- "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정"
- },
- "2-02": {
- "path": "count(//SECTION)>1",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 3,
- "category": "다단",
- "item": "① 구역나누기"
- },
- "2-03": {
- "path": "//COLDEF/@Count>1",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 3,
- "category": "다단",
- "item": "② 다단 2단"
- },
- "2-04": {
- "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": 19842,
- "points": 2,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/① 크기-너비 (70mm)"
- },
- "2-05": {
- "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": 3401,
- "points": 2,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/② 크기-높이 (12mm)"
- },
- "2-06": {
- "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::LINESHAPE/@Style",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": "DoubleSlim",
- "points": 2,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/③ 테두리 (이중실선(1.00mm))"
- },
- "2-07": {
- "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/@Ratio",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": 50,
- "points": 2,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/④ 글상자 모서리 (반원)"
- },
- "2-08": {
- "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": "9537333",
- "points": 2,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/⑤ 채우기 : 색상(RGB:53,135,145)"
- },
- "2-09": {
- "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": "true",
- "points": 1,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/⑥ 글상자 위치 (글자처럼 취급)"
- },
- "2-10": {
- "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": "Center",
- "points": 1,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/⑦ 글상자 정렬 (가운데 정렬)"
- },
- "2-11": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": "맑은 고딕",
- "points": 1,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/⑧ 글씨체 (맑은 고딕)"
- },
- "2-12": {
- "path": "boolean(//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height='2400')",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": true,
- "points": 1,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/⑨ 글씨크기 (24pt)"
- },
- "2-13": {
- "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[1]/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "친환경 이동수단",
- "value": "Center",
- "points": 1,
- "category": "글상자",
- "item": "문구 (친환경 이동수단)/⑩ 정렬 (가운데 정렬)"
- },
- "2-14": {
- "path": "boolean(//PICTURE/descendant::SHAPECOMMENT[contains(text(),'{searchValue}')])",
- "path2": null,
- "searchValue": "원본 그림의 이름: 그림",
- "value": true,
- "points": 2,
- "category": "그림삽입",
- "item": "① 파일명 \"그림A.jpg\" 삽입"
- },
- "2-15": {
- "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Width",
- "path2": null,
- "searchValue": null,
- "value": 24094,
- "points": 2,
- "category": "그림삽입",
- "item": "② 크기-너비 (85mm)"
- },
- "2-16": {
- "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Height",
- "path2": null,
- "searchValue": null,
- "value": 11338,
- "points": 2,
- "category": "그림삽입",
- "item": "③ 크기-높이 (40mm)"
- },
- "2-17": {
- "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@HorzOffset",
- "path2": null,
- "searchValue": null,
- "value": 0,
- "points": 2,
- "category": "그림삽입",
- "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
- },
- "2-18": {
- "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@VertOffset",
- "path2": null,
- "searchValue": null,
- "value": 6236,
- "points": 2,
- "category": "그림삽입",
- "item": "⑤ 위치 (어울림 : 세로-쪽의 위 22mm)"
- },
- "2-19": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "1. 친환경 자동차",
- "value": "궁서",
- "points": 1,
- "category": "속성",
- "item": "문구① (1. 친환경 자동차)/① 글씨체 (궁서)"
- },
- "2-20": {
- "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "1. 친환경 자동차",
- "value": 1200,
- "points": 1,
- "category": "속성",
- "item": "문구① (1. 친환경 자동차)/② 크기 (12pt)"
- },
- "2-21": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
- "path2": null,
- "searchValue": "1. 친환경 자동차",
- "value": true,
- "points": 1,
- "category": "속성",
- "item": "문구① (1. 친환경 자동차)/③ 진하게"
- },
- "2-22": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "2. 친환경 자동차 보급 추이",
- "value": "궁서",
- "points": 1,
- "category": "속성",
- "item": "문구② (2. 친환경 자동차 보급 추이)/① 글씨체 (궁서)"
- },
- "2-23": {
- "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "2. 친환경 자동차 보급 추이",
- "value": 1200,
- "points": 1,
- "category": "속성",
- "item": "문구② (2. 친환경 자동차 보급 추이)/② 크기 (12pt)"
- },
- "2-24": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
- "path2": null,
- "searchValue": "2. 친환경 자동차 보급 추이",
- "value": true,
- "points": 1,
- "category": "속성",
- "item": "문구② (2. 친환경 자동차 보급 추이)/③ 진하게"
- },
- "2-25": {
- "path":"boolean(//CHAR[contains(text(),'자동차 탄소발자국')]/ancestor::TEXT/FOOTNOTE/descendant::CHAR)",
- "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('자동차 탄소발자국') + 1) = '자동차 탄소발자국']/following-sibling::FOOTNOTE/descendant::CHAR)",
- "searchValue": null,
- "value": true,
- "points": 2,
- "category": "각주",
- "item": "문구 (자동차 탄소발자국)/① 각주 설정 및 문구 입력"
- },
- "2-26": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "자동차 생애에서 배출하는 이산화탄소의 총량",
- "value": "굴림",
- "points": 1,
- "category": "각주",
- "item": "문구 (자동차 탄소발자국)/② 글씨체 (굴림)"
- },
- "2-27": {
- "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "자동차 생애에서 배출하는 이산화탄소의 총량",
- "value": 900,
- "points": 1,
- "category": "각주",
- "item": "문구 (자동차 탄소발자국)/③ 크기 (9pt)"
- },
- "2-28": {
- "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
- "path2": null,
- "searchValue": "자동차 생애에서 배출하는 이산화탄소의 총량",
- "value": "CircledHangulSyllable",
- "points": 2,
- "category": "각주",
- "item": "문구 (자동차 탄소발자국)/④ 각주 번호모양"
- },
- "2-29": {
- "path": "boolean(//CHAR[contains(text(),'Hybrid')])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 3,
- "category": "영단어",
- "item": "Hybrid/영단어 미입력, 대소문자/오타 시 전체 감점"
- },
- "2-30": {
- "path": "(count(//CHAR[contains(text(),'전지')][contains(text(),'電池')])+count(//CHAR[contains(text(),'유해')][contains(text(),'有害')])+count(//CHAR[contains(text(),'내연')][contains(text(),'內燃')])+count(//CHAR[contains(text(),'이륜차')][contains(text(),'二輪車')])+count(//CHAR[contains(text(),'기타')][contains(text(),'其他')]))*2",
- "path2": null,
- "searchValue": null,
- "value": 10,
- "points": 10,
- "category": "한자",
- "item": "① 전지(電池), ② 유해(有害), ③내연(內燃), ④ 이륜차(二輪車), ⑤ 기타(其他)"
- },
- "2-31": {
- "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'터를독립')])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 3,
- "category": "편집",
- "item": "문구 (…내장된 전기모터이 독립적으로 또는 병행해서…)/\"이\" → \"를\" 글자바꿈"
- },
- "2-32": {
- "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'면서환경')])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 3,
- "category": "편집",
- "item": "문구 (…주행하는 방식으로 환경에 주행하면서 유해(有害)한 물질을…)/\"환경에\" / \"주행하면서\" 순서바꿈"
- },
- "2-33": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": "돋움",
- "points": 1,
- "category": "표",
- "item": "제목 문구 (자동차 증가 추이)/① 글씨체 (돋움)"
- },
- "2-34": {
- "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": 1200,
- "points": 1,
- "category": "표",
- "item": "제목 문구 (자동차 증가 추이)/② 크기 (12pt)"
- },
- "2-35": {
- "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/BOLD)",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": true,
- "points": 1,
- "category": "표",
- "item": "제목 문구 (자동차 증가 추이)/③ 진하게"
- },
- "2-36": {
- "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": "Center",
- "points": 1,
- "category": "표",
- "item": "제목 문구 (자동차 증가 추이)/④ 정렬 (가운데 정렬)"
- },
- "2-37": {
- "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
- "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
- "searchValue": null,
- "value": "7034570",
- "points": 2,
- "category": "표",
- "item": "위쪽 제목 셀/① 색상(RGB:202,86,107)"
- },
- "2-38": {
- "path": "boolean(//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]/BOLD)",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 1,
- "category": "표",
- "item": "위쪽 제목 셀/② 진하게"
- },
- "2-39": {
- "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type",
- "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Type",
- "searchValue": null,
- "value": "DoubleSlim",
- "points": 2,
- "category": "표",
- "item": "제목 셀 아래선/① 이중실선"
- },
- "2-40": {
- "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width",
- "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Width",
- "searchValue": null,
- "value": "0.5mm",
- "points": 2,
- "category": "표",
- "item": "제목 셀 아래선/② 0.5mm"
- },
- "2-41": {
- "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
- "path2": null,
- "searchValue": null,
- "value": "궁서체",
- "points": 1,
- "category": "표",
- "item": "글자모양/① 글씨체 (궁서체)"
- },
- "2-42": {
- "path": "//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/@Height",
- "path2": null,
- "searchValue": null,
- "value": 1000,
- "points": 1,
- "category": "표",
- "item": "글자모양/② 크기 (10pt)"
- },
- "2-43": {
- "path": "//PARASHAPE[@Id=//TABLE/ROW/descendant::P/@ParaShape]/@Align",
- "path2": null,
- "searchValue": null,
- "value": "Center",
- "points": 1,
- "category": "표",
- "item": "글자모양/③ 정렬 (가운데 정렬)"
- },
- "2-44": {
- "path": "boolean(//TABLE[1]/ROW[last()]/CELL[last()-1]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '290'] and //TABLE[1]/ROW[last()]/CELL[last()]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '190'])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 4,
- "category": "표",
- "item": "블록계산식/합계"
- },
- "2-45": {
- "path": "boolean(//c:barChart[c:barDir[@val='col'] and c:grouping[@val='clustered']])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 2,
- "category": "chart_xml",
- "item": "① 종류 (묶은세로막대형)"
- },
- "2-46": {
- "path": "//c:valAx/c:majorTickMark/@val",
- "path2": null,
- "searchValue": null,
- "value": "out",
- "points": 2,
- "category": "chart_xml",
- "item": "② 값 축 주 눈금선"
- },
- "2-47": {
- "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Width",
- "path2": null,
- "searchValue": null,
- "value": 22677,
- "points": 2,
- "category": "차트",
- "item": "③ 크기-너비 (80mm)"
- },
- "2-48": {
- "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Height",
- "path2": null,
- "searchValue": null,
- "value": 25511,
- "points": 2,
- "category": "차트",
- "item": "④ 크기-높이 (90mm)"
- },
- "2-49": {
- "path": "//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계'])",
- "path2": null,
- "searchValue": null,
- "value": true,
- "points": 2,
- "category": "chart_xml",
- "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)"
- },
- "2-50": {
- "path": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": "바탕체",
- "points": 1,
- "category": "chart_xml",
- "item": "제목 문구 (자동차 증가 추이) : 제목 문구 불일치는 오타감점에서 반영/① 글씨체 (바탕체)"
- },
- "2-51": {
- "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": 1300,
- "points": 1,
- "category": "chart_xml",
- "item": "제목 문구 (자동차 증가 추이) : 제목 문구 불일치는 오타감점에서 반영/② 크기 (13pt)"
- },
- "2-52": {
- "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@b",
- "path2": null,
- "searchValue": "자동차 증가 추이",
- "value": 1,
- "points": 1,
- "category": "chart_xml",
- "item": "제목 문구 (자동차 증가 추이) : 제목 문구 불일치는 오타감점에서 반영/③ 진하게"
- },
- "2-53": {
- "path": "//c:catAx//a:ea/@typeface",
- "path2": null,
- "searchValue": null,
- "value": "굴림",
- "points": 1,
- "category": "chart_xml",
- "item": "X축/① 글꼴 (굴림)"
- },
- "2-54": {
- "path": "//c:catAx//a:defRPr/@sz",
- "path2": null,
- "searchValue": null,
- "value": 900,
- "points": 1,
- "category": "chart_xml",
- "item": "X축/② 크기 (9pt)"
- },
- "2-55": {
- "path": "//c:catAx//a:defRPr/@i",
- "path2": null,
- "searchValue": null,
- "value": 1,
- "points": 1,
- "category": "chart_xml",
- "item": "X축/③ 기울임"
- },
- "2-56": {
- "path": "//c:valAx//a:ea/@typeface",
- "path2": null,
- "searchValue": null,
- "value": "굴림",
- "points": 1,
- "category": "chart_xml",
- "item": "Y축/① 글꼴 (굴림)"
- },
- "2-57": {
- "path": "//c:valAx//a:defRPr/@sz",
- "path2": null,
- "searchValue": null,
- "value": 900,
- "points": 1,
- "category": "chart_xml",
- "item": "Y축/② 크기 (9pt)"
- },
- "2-58": {
- "path": "//c:valAx//a:defRPr/@i",
- "path2": null,
- "searchValue": null,
- "value": 1,
- "points": 1,
- "category": "chart_xml",
- "item": "Y축/③ 기울임"
- },
- "2-59": {
- "path": "//c:legend//a:ea/@typeface",
- "path2": null,
- "searchValue": null,
- "value": "굴림",
- "points": 1,
- "category": "chart_xml",
- "item": "범례/① 글꼴 (굴림)"
- },
- "2-60": {
- "path": "//c:legend//a:defRPr/@sz",
- "path2": null,
- "searchValue": null,
- "value": 900,
- "points": 1,
- "category": "chart_xml",
- "item": "범례/② 크기 (9pt)"
- },
- "2-61": {
- "path": "//c:legend//a:defRPr/@i",
- "path2": null,
- "searchValue": null,
- "value": 1,
- "points": 1,
- "category": "chart_xml",
- "item": "범례/③ 기울임"
- }
-}
\ No newline at end of file
diff --git a/DIW_2503A_test.json b/DIW_2503A_test.json
new file mode 100644
index 0000000..82b6ab7
--- /dev/null
+++ b/DIW_2503A_test.json
@@ -0,0 +1,155 @@
+{
+ "0": {
+ "0": {
+ "path": "",
+ "path2": "",
+ "points": 0,
+ "category": "파일저장",
+ "item": "파일명 (수검번호.hwp/hwpx)"
+ },
+ "1": {
+ "path": "//PAGEMARGIN",
+ "value": {
+ "Bottom": 5669,
+ "Footer": 2834,
+ "Gutter": 0,
+ "Header": 2834,
+ "Left": 5669,
+ "Right": 5669,
+ "Top": 5669
+ },
+ "tolerance": 1,
+ "points": 4,
+ "category": "PageSetting",
+ "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)"
+ },
+ "2": {
+ "path": "//STYLE[@Name='바탕글']",
+ "value": {
+ "FontName": "바탕",
+ "FontSize": "1000",
+ "Alignment": "Justify",
+ "LineSpacing": "160"
+ },
+ "points": 4,
+ "category": "BasicSetting",
+ "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)"
+ },
+ "3": {
+ "path": "",
+ "searchValue": null,
+ "value": null,
+ "points": 40,
+ "category": "오타감점",
+ "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경"
+ }
+ },
+ "1": {
+ "1": {
+ "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "견고딕",
+ "points": 1,
+ "category": "SingleAnswer",
+ "item": "문구 (친환경이동수단컨퍼런스)/① 글씨체 (견고딕)"
+ },
+ "2": {
+ "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "49,95,151",
+ "points": 2,
+ "category": "Color",
+ "item": "문구 (친환경이동수단컨퍼런스)/② 채우기 : 색상(RGB:49,95,151)"
+ },
+ "3": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "28346",
+ "points": 2,
+ "category": "SingleAnswer",
+ "item": "문구 (친환경이동수단컨퍼런스)/③ 크기-너비 (100mm)"
+ },
+ "4": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "5669",
+ "points": 2,
+ "category": "SingleAnswer",
+ "item": "문구 (친환경이동수단컨퍼런스)/④ 크기-높이 (20mm)"
+ },
+ "5": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "true",
+ "points": 2,
+ "category": "SingleAnswer",
+ "item": "문구 (친환경이동수단컨퍼런스)/⑤ 위치 (글자처럼 취급)"
+ },
+ "6": {
+ "path": "//PARASHAPE[@Id=//TEXTART[@Text='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "Center",
+ "points": 2,
+ "category": "SingleAnswer",
+ "item": "문구 (친환경이동수단컨퍼런스)/⑥ 정렬 (가운데 정렬)"
+ },
+ "7": {
+ "path": "//TEXTART[@Text='{searchValue}']",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": true,
+ "points": 2,
+ "category": "Boolean",
+ "item": "문구 (친환경이동수단컨퍼런스)/⑦ 글맵시모양 (육안확인)"
+ },
+ "8": {
+ "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]/SHAPEOBJECT/SIZE",
+ "path2": null,
+ "searchValue": "지",
+ "value": {
+ "Height": 2800,
+ "Width": 2800
+ },
+ "tolerance": 200,
+ "points": 1,
+ "category": "TwoLineSize",
+ "item": "지/① 모양 (2줄)"
+ },
+ "9": {
+ "path": "//TEXT[CHAR[text()='{searchValue}']]/@CharShape",
+ "path2": null,
+ "searchValue": "지",
+ "value": "궁서체",
+ "points": 1,
+ "category": "FontName",
+ "item": "지/② 글씨체 (궁서체)"
+ },
+ "10": {
+ "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "지",
+ "value": "105,155,55",
+ "points": 2,
+ "category": "Color",
+ "item": "지/③ 면색 : 색상(RGB:105,155,55)"
+ },
+ "11": {
+ "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right",
+ "path2": null,
+ "searchValue": "지",
+ "value": "850",
+ "points": 2,
+ "category": "SingleAnswer",
+ "item": "지/④ 본문과의 간격 : 3.0mm"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][ITALIC])",
+ "path2": null,
+ "searchValue": "전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대)/① 기울임"
+ }
+ }
+}
\ No newline at end of file
diff --git a/diwScoring.py b/diwScoring.py
index c3b97e8..01de09a 100644
--- a/diwScoring.py
+++ b/diwScoring.py
@@ -160,10 +160,42 @@ class XMLScorer:
search_value = criterion['searchValue'] if 'searchValue' in criterion else None
right_answer = criterion['value'] if 'value' in criterion else None
points = criterion['points'] if 'points' in criterion else None
- category = criterion['category']
+ category = criterion['category'] if 'category' in criterion else None
item = criterion['item']
similar_text = None
-
+
+ # if "pageSetting" in (format or ""):
+ # results = root.xpath("//PAGEMARGIN")
+ # matched = False
+
+ # for i, user_answer in enumerate(results):
+ # bottom = int(user_answer.get("Bottom"), 0)
+ # footer = int(user_answer.get("Footer"), 0)
+ # gutter = int(user_answer.get("Gutter"), 0)
+ # header = int(user_answer.get("Header"), 0)
+ # left = int(user_answer.get("Left"), 0)
+ # right = int(user_answer.get("Right"), 0)
+ # top = int(user_answer.get("Top"), 0)
+ # error_range = 1
+
+ # if abs(right_answer['Bottom'] - bottom) <= error_range and \
+ # abs(right_answer['Footer'] - footer) <= error_range and \
+ # abs(right_answer['Gutter'] - gutter) <= error_range and \
+ # abs(right_answer['Header'] - header) <= error_range and \
+ # abs(right_answer['Left'] - left) <= error_range and \
+ # abs(right_answer['Right'] - right) <= error_range and \
+ # abs(right_answer['Top'] - top) <= error_range:
+ # matched = True
+
+ # total_score += points
+ # partial_score += points
+ # scoring['points'] = points
+ # break
+
+ # if not matched:
+ # scoring['points'] = 0
+
+
# chart xml 파일에서 채점하는 경우
if "chart_xml" in category:
if search_value is not None:
@@ -207,7 +239,7 @@ class XMLScorer:
if "오타감점" in category:
points = self.get_typo_score()
-
+
scoring = {
'section': section_id,
'id': id,
@@ -218,7 +250,7 @@ class XMLScorer:
'points': points,
'deductions': [] # 각 기준별 감점 내역
}
-
+
# 점수 차감 조건
# 1. 정답이 실수형으로 반환받은 경우는 채점항목의 부분점수 합산 결과이므로
# 반환받은 값 그대로를 점수로 사용
@@ -531,8 +563,8 @@ def main():
exam_round = '2503'
exam_types = [
'A',
- 'B',
- 'C',
+ # 'B',
+ # 'C',
]
# test_mode = False
test_mode = True
diff --git a/diwScoring2.py b/diwScoring2.py
new file mode 100644
index 0000000..0f8cccf
--- /dev/null
+++ b/diwScoring2.py
@@ -0,0 +1,650 @@
+import tkinter as tk
+from tkinter import filedialog, messagebox
+from datetime import datetime
+import difflib
+import json
+from pathlib import Path
+import os
+from lxml import etree as ET
+import re
+from difflib import SequenceMatcher
+import pandas as pd
+import base64
+# from xpathSearch import XMLPathHandler
+
+class XMLScorer:
+ # 채점 기준 경로 초기화
+ def __init__(self, scoring_criteria_path):
+ # 채점 기준 로드
+ self.scoring_criteria = self._load_scoring_criteria(scoring_criteria_path)
+ self.total_score = 0
+ self.partial_score = 0
+ self.typo_score = 0
+
+ def set_typo_score(self, score):
+ self.typo_score = score
+
+ def get_typo_score(self):
+ return self.typo_score
+
+ # 채점 기준파일 로드(JSON 파일)
+ def _load_scoring_criteria(self, file_path):
+ with open(file_path, 'r', encoding='utf-8') as f:
+ return json.load(f)
+
+ # XML 파일에서 element의 값을 찾아 반환
+ def query_xml(self, root, *args):
+ first_xpath = args[0]
+ second_xpath = args[1]
+ points = args[2]
+ category = args[3]
+
+ if ("특수문자" in category) and (second_xpath is not None):
+ try:
+ result = root.xpath(first_xpath)
+ # 결과값이 리스트형인데 내부에 정보가 없는경우
+ # 결과값이 없음
+ if type(result) is list and len(result) == 0:
+ return None
+ elif result < points:
+ result = root.xpath(second_xpath)
+ return result
+ else:
+ return result
+
+ except ET.XPathEvalError as e:
+ return None
+
+ elif second_xpath is not None:
+ try:
+ result1 = root.xpath(first_xpath)
+ result2 = root.xpath(second_xpath)
+ if (type(result1) is list and len(result1) == 0) and (type(result2) is list and len(result2) == 0):
+ return None
+ return result1 if result1 else result2
+
+ except ET.XPathEvalError as e:
+ return None
+
+ else:
+ try:
+ result = root.xpath(first_xpath)
+ if type(result) is list and len(result) == 0:
+ return None
+ return result
+ except ET.XPathEvalError as e:
+ return None
+
+ def chart_query_xml(self, tree, xpath, namespaces):
+ result = tree.xpath(xpath, namespaces=namespaces)
+ if type(result) is list and len(result) == 0:
+ return None
+
+ return result
+
+ # 유사한 텍스트 찾기
+ def find_similar_text(self, root, target_text, threshold=0.7):
+ """
+ 전체 문서에서 유사한 텍스트를 찾아 반환
+
+ Args:
+ root (_type_): xml root element 객체
+ target_text (_type_): 찾을 텍스트
+ threshold (float, optional): 유사도 설정 Defaults to 0.3.
+
+ Returns:
+ str: 유사도 기준을 만족하는 텍스트
+ """
+ # 전체 텍스트 추출
+ # all_text = root.xpath(f"//CHAR/text()")
+ # all_text.append(root.xpath(f"//TEXTART/@text"))
+
+ namespaces = {
+ 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
+ 'c': 'http://schemas.openxmlformats.org/drawingml/2006/chart'
+ }
+
+ all_text = root.xpath(f"//BODY//text() | //TEXTART/@Text | //c:chart//text()", namespaces=namespaces)
+
+ # 유사도 비교
+ max_score = 0
+ similar_text = ''
+
+ for text in all_text:
+ score = SequenceMatcher(None, target_text, text).ratio()
+
+ if score > max_score:
+ max_score = score
+ similar_text = text
+
+ if max_score >= threshold:
+ return similar_text
+ else:
+ return target_text
+
+ # 정답 비교 및 점수 계산
+ def evaluate_answer(self, scoring, user_answer, right_answer, points,
+ method="equal", tolerance=0):
+
+ scoring['user_answer'] = user_answer
+
+ is_correct = False
+
+ if method == "equal":
+ is_correct = (user_answer == right_answer)
+ elif method == "tolerance":
+ if isinstance(user_answer, dict) and isinstance(right_answer, dict):
+ is_correct = all(abs(user_answer[k] - right_answer[k]) <= tolerance for k in right_answer)
+ else:
+ is_correct = abs(user_answer - right_answer) <= tolerance
+ elif method == "in":
+ is_correct = user_answer in right_answer
+ else:
+ raise ValueError(f"Unknown comparison method: {method}")
+
+ if is_correct:
+ scoring['points'] = points
+ self.total_score += points
+ self.partial_score += points
+ else:
+ scoring['points'] = 0
+
+ # 하나의 XML 파일 채점
+ def _score_xml_file(self, xml_file, chart_xml):
+ try:
+ tree = ET.parse(xml_file)
+ root = tree.getroot()
+
+ # 네임스페이스 정의
+ namespaces = {
+ 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
+ 'c': 'http://schemas.openxmlformats.org/drawingml/2006/chart'
+ }
+
+ # 차트 XML 파일이 없는 경우 0점 채점을 위헤 빈 XML 생성
+ if chart_xml is None:
+ chart_tree = ET.fromstring('')
+ else:
+ chart_tree = ET.fromstring(chart_xml)
+
+ # 결과값을 Dictionary로 저장
+ # 하나의 xml파일 = 수험생 한명의 답안지
+ onePersonResult = {
+ 'filename': os.path.basename(xml_file),
+ 'score_results': [],
+ 'total_score': 0,
+ 'partial_scores': []
+ }
+ print(f"File name: {onePersonResult['filename']}")
+
+ self.total_score = 0
+ for section_id, section in self.scoring_criteria.items():
+ self.partial_score = 0
+ for criterion_id, criterion in section.items():
+ id = criterion_id
+ xpath = criterion.get('path', None)
+ xpath2 = criterion.get('path2', None)
+ search_value = criterion.get('searchValue', None)
+ right_answer = criterion.get('value', None)
+ points = criterion.get('points', 0)
+ category = criterion.get('category', None)
+ item = criterion.get('item', None)
+ similar_text = None
+
+ # search_value가 있는 경우
+ if search_value is not None:
+ # search_value를 포함하는 텍스트 찾기
+ similar_text = self.find_similar_text(root, search_value)
+ xpath = xpath.replace('{searchValue}', similar_text)
+
+ # 문항 별 채점 결과 저장
+ scoring = {
+ 'section': section_id,
+ 'id': id,
+ 'category': category, # 채점 분류
+ 'item': item, # 채점 항목
+ 'right_answer': right_answer, # 정답
+ 'user_answer': None, # 실제 작성 답안
+ 'points': 0, # 점수
+ 'deductions': [] # 각 기준별 감점 내역
+ }
+
+ if "PageSetting" in (category or ""):
+ items = root.xpath(xpath)
+ error_range = criterion.get('tolerance', 0)
+
+ for item in items:
+ user_answer = {
+ 'Bottom' : int(item.get("Bottom", 0)),
+ 'Footer' : int(item.get("Footer", 0)),
+ 'Gutter' : int(item.get("Gutter", 0)),
+ 'Header' : int(item.get("Header", 0)),
+ 'Left' : int(item.get("Left", 0)),
+ 'Right' : int(item.get("Right", 0)),
+ 'Top' : int(item.get("Top", 0)),
+ }
+
+ self.evaluate_answer(scoring, user_answer, right_answer, points, method="tolerance", tolerance=error_range)
+
+ if scoring['points'] > 0:
+ break
+
+ elif "BasicSetting" in (category or ""):
+ # 바탕글(기본설정) 요소
+ normal_style = root.xpath("//STYLE[@Name='바탕글']")
+
+ # CHARSHAPE, PARASHAPE, FONTID 속성값 추출
+ charshape_id = normal_style[0].get("CharShape")
+ parashape_id = normal_style[0].get("ParaShape")
+ font_id = root.xpath(f"//CHARSHAPE[@Id='{charshape_id}']/FONTID/@Hangul")
+
+ # 필요한 속성값을 이용하여 정답과 비교
+ font_name = root.xpath(f"//FONT[@Id='{font_id[0]}']/@Name")
+ font_size = root.xpath(f"//CHARSHAPE[@Id='{charshape_id}']/@Height")
+ alignment = root.xpath(f"//PARASHAPE[@Id='{parashape_id}']/@Align")
+ line_spacing = root.xpath(f"//PARASHAPE[@Id='{parashape_id}']/PARAMARGIN/@LineSpacing")
+
+ # 수험자 답안
+ user_answer = {
+ 'FontName': font_name[0],
+ 'FontSize': font_size[0],
+ 'Alignment': alignment[0],
+ 'LineSpacing': line_spacing[0]
+ }
+
+ self.evaluate_answer(scoring, user_answer, right_answer, points, method="equal")
+
+ # 오타 감점 부분은 미리 계산 하고, 이후 점수만 계산
+ elif "오타감점" in (category or ""):
+ points = self.get_typo_score()
+ self.total_score += points
+ self.partial_score += points
+ scoring['points'] = points
+
+ # 정답이 하나인 경우
+ elif "SingleAnswer" in (category or ""):
+ items = root.xpath(xpath)
+
+ for item in items:
+ user_answer = item
+
+ self.evaluate_answer(scoring, user_answer, right_answer, points)
+
+ if scoring['points'] > 0:
+ break
+
+ # Boolean 타입 정답인 경우
+ elif "Boolean" in (category or ""):
+ items = root.xpath(xpath)
+ user_answer = True if items else False
+
+ self.evaluate_answer(scoring, user_answer, right_answer, points)
+
+ # 채점기준표 파일에 작성된 rgb값을 그대로 읽어와 HML파일 요소의 int형 rgb값과 비교
+ elif "Color" in (category or ""):
+ items = root.xpath(xpath)
+
+ rgb_text = right_answer
+ r, g, b = map(int, rgb_text.split(','))
+ rgb_int = (b << 16) + (g << 8) + r
+
+ for item in items:
+ user_answer = int(item)
+
+ self.evaluate_answer(scoring, user_answer, rgb_int, points, method="equal")
+
+ if scoring['points'] > 0:
+ break
+
+ elif "TwoLineSize" in (category or ""):
+ items = root.xpath(xpath)
+ error_range = criterion.get('tolerance', 0)
+ for item in items:
+ user_answer = {
+ "Height": int(item.get('Height', 0)),
+ "Width": int(item.get('Width', 0))
+ }
+ self.evaluate_answer(scoring, user_answer, right_answer, points, method="tolerance", tolerance=error_range)
+
+ if scoring['points'] > 0:
+ break
+
+ elif "FontName" in (category or ""):
+ charshape_id = root.xpath(xpath)
+ if not charshape_id:
+ charshape_id = None
+ else:
+ font_id = root.xpath(f"//CHARSHAPE[@Id='{charshape_id[0]}']/FONTID/@Hangul")
+ font_name = root.xpath(f"//FONTFACE[@Lang='Hangul']/FONT[@Id='{font_id[0]}']/@Name")
+
+ user_answer = font_name[0]
+
+ self.evaluate_answer(scoring, user_answer, right_answer, points, method="equal")
+
+ onePersonResult['score_results'].append(scoring)
+ print(f'scoring: {scoring}')
+ onePersonResult['partial_scores'].append({
+ 'section': section_id,
+ 'score': self.partial_score
+ })
+ onePersonResult['total_score'] = self.total_score
+ return onePersonResult
+
+ except ET.ParseError as e:
+ return {
+ 'filename': os.path.basename(xml_file),
+ 'error': f"XML 파싱 오류: {str(e)}",
+ 'total_score': 0
+ }
+
+ def binary_to_chartxml(self, xml_path):
+ tree = ET.parse(xml_path)
+ root = tree.getroot()
+
+ binary_data = root.xpath('//BINDATA[@Id=//BINITEM[@Format="OLE"]/@BinData]/text()')
+ if not binary_data:
+ return None
+ binary_data = binary_data[0].encode('utf-8')
+
+ # 태그와 그 내부 내용을 삭제합니다.
+ encoded_data = re.sub(b'', b'', binary_data)
+ encoded_data = encoded_data.replace(b'', b'')
+ encoded_data = encoded_data.replace(b'\r\n', b'')
+
+ # base64 디코딩을 수행합니다.
+ decoded_data = base64.b64decode(encoded_data+b'==')
+
+ # 디코딩된 데이터 내용 중 xml 형식만 추출할 때 , 사이의 데이터만 추출.
+ start = decoded_data.find(b'')
+ print(end)
+ xml_data = decoded_data[start:end+len(b'')]
+
+ # xml 데이터가 없는 경우 None을 반환합니다.
+ if -1 in [start, end]:
+ return None
+
+ # 디코딩된 데이터를 파일로 저장합니다.
+ base_filename = os.path.splitext(xml_path)[0]
+ new_filename = f'{base_filename}.xml'
+ with open(new_filename, 'wb') as file:
+ file.write(xml_data)
+
+ return xml_data
+
+ def typo_check(self, correct_answer_file, user_answer_file):
+ user_answer_tree = ET.parse(user_answer_file)
+ user_answer_root = user_answer_tree.getroot()
+ correct_answer_tree = ET.parse(correct_answer_file)
+ correct_answer_root = correct_answer_tree.getroot()
+
+ # xpath로 바이너리 부분추출
+ user_input_text = user_answer_root.xpath('//CHAR//text()[not(ancestor::HEADER) and not(ancestor::TABLE)]')
+ user_table_text = user_answer_root.xpath('//TABLE//CHAR//text()')
+ user_input_text += user_table_text
+
+ correct_input_text = correct_answer_root.xpath('//CHAR//text()[not(ancestor::HEADER) and not(ancestor::TABLE)]')
+ correct_table_text = correct_answer_root.xpath('//TABLE//CHAR//text()')
+ correct_input_text += correct_table_text
+
+ # 각 요소에서 공백 제거
+ user_input_text = [text.replace(' ', '') for text in user_input_text]
+ correct_input_text = [text.replace(' ', '') for text in correct_input_text]
+
+
+ # 숫자와 특정 형식 제거 (예: 1., 2., 3., -)
+ user_input_text = [re.sub(r'\d+\.\s*|-', '', text) for text in user_input_text]
+ correct_input_text = [re.sub(r'\d+\.\s*|-', '', text) for text in correct_input_text]
+
+ try :
+ xpath = self.scoring_criteria["2-29"]['path'].split("'")[1]
+ ignore_word = xpath.split("'")[1]
+ # 특정 단어 제거
+ # 오타와 누락의 경우만 판단하면 정상작동하지만
+ # 추가 된 단어의 경우를 채점기준에 추가하면 정확하게 채점 되지 않을 수 있음
+ # [정답] Hybrid [실제작성]
+ user_input_text = [text.replace(ignore_word, '') for text in user_input_text]
+ correct_input_text = [text.replace(ignore_word, '') for text in correct_input_text]
+ except (KeyError, IndexError, AttributeError):
+ ignore_word = None
+
+ print(f"ignore_word: {ignore_word}")
+
+ # 리스트를 하나의 문자열로 변경
+ user_input_text_str = ''.join(user_input_text)
+ currect_input_text_str = ''.join(correct_input_text)
+
+ print("user_input_text as string:")
+ print(user_input_text_str)
+ print("\ncurrect_input_text_answer as string:")
+ print(currect_input_text_str)
+
+
+ # 문자열의 차이를 비교
+ diff = difflib.ndiff(currect_input_text_str, user_input_text_str)
+ diff_list = list(diff)
+
+ # 차이점을 정리하여 result_diff에 저장
+ result_diff = []
+
+ # 누락 된 단어만 따로 리스트로 저장
+ missing_list = []
+
+ # 오타와 누락된 단어 리스트 저장
+ error_missing_list = []
+
+ skip_next = False
+
+ for i, line in enumerate(diff_list):
+ if skip_next:
+ skip_next = False
+ continue
+ # diff_list의 line 시작이 '-'이면서 다음 line이 '+'이면 두 line을 붙여서 맞춤법이 틀린 단어로 판단
+ if line.startswith('- '):
+ # 오타
+ if i + 1 < len(diff_list) and diff_list[i + 1].startswith('+ '):
+ line = line.replace('- ', '-')
+ next = diff_list[i + 1].replace('+ ', '')
+ result_diff.append(line+'=>'+next)
+ error_missing_list.append(line+'=>'+next)
+ skip_next = True
+ # 누락
+ else:
+ line = line.replace('- ', '-')
+ result_diff.append(line)
+ missing_list.append(line)
+ error_missing_list.append(line)
+ # 없어도 되는 글자가 있는 경우 (추가)
+ elif line.startswith('+ '):
+ line = line.replace('+ ', '+')
+ result_diff.append(line)
+
+ # result_diff 출력
+ # print("\nResult Differences:")
+ # for diff in result_diff:
+ # print(diff)
+
+ # result_diff 배열의 길이를 맨 앞에 저장
+
+ # 모든 차이를 계산해 점수 차감
+ # temp = 40 - min(len(result_diff)*2, 40)
+
+ # 누락된 텍스트만 계산해 점수 차감
+ # temp = 40 - min(len(missing_list)*2, 40)
+
+ # 2503회 기준 오타 1개당 [2점]->[1점] 차감
+ temp = 40 - min(len(error_missing_list)*1, 40)
+
+ self.set_typo_score(temp)
+
+ result_diff.insert(0, temp)
+ return result_diff
+
+ # XML 파일 채점
+ def score_directory(self, xml_directory, correct_answer_file):
+ # xml 파일 불러오기
+ xml_files = Path(xml_directory).glob('*.hml')
+
+ # 채점결과 저장할 리스트
+ score_results = []
+
+ for user_answer_file in xml_files:
+ score_result = {}
+ chart_xml = self.binary_to_chartxml(user_answer_file)
+ score_result['typo'] = self.typo_check(correct_answer_file, user_answer_file)
+ score_result['score'] = self._score_xml_file(user_answer_file, chart_xml)
+ # score_result['score']['score_results'][2]['points'] = score_result['typo'][0]
+ score_results.append(score_result)
+ return score_results
+
+ def parse_filename(self, filename):
+ if isinstance(filename, dict):
+ filename = filename.get('파일명', '')
+ match = re.match(r'.*-(\d+)-(.+)\.hml', filename)
+ if match:
+ number = match.group(1)
+ name = match.group(2)
+ return number, name
+
+ return None, None
+
+ def export_to_excel(self, results, output_path=None):
+ if output_path is None:
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") #연월일_시분초
+ # timestamp = datetime.now().strftime("%Y%m%d") #연월일
+ output_path = f"scoring_results_{timestamp}.xlsx"
+
+ summary_data = []
+ detail_data = []
+ typo_data = []
+
+ for temp in results:
+ # 요약 정보
+ result = temp['score']
+ summary_row = {
+ '파일명': result['filename'],
+ '총점': result.get('total_score', 0)
+ }
+ if 'error' in result:
+ summary_row['오류'] = result['error']
+
+ summary_data.append(summary_row)
+
+ # 상세 정보
+ if 'score_results' in result:
+ filename = {'파일명': result['filename']}
+ number, name = self.parse_filename(filename)
+ if (number or name) is None:
+ detail_row = {'채점항목': result['filename'] }
+ else:
+ detail_row = {'채점항목':f"{number}-{name}"}
+
+ section_num = None
+ row_index = []
+ for i, score_result in enumerate(result['score_results']):
+ current_section = score_result['section']
+
+ if section_num is None:
+ section_num = current_section
+
+ # 다음 섹션(문제0 => 문제1)로 넘어갔을 경우 or 마지막 문제일 경우
+ if current_section != section_num:
+ # 이전 섹션의 부분합을 출력
+ detail_row[f'문제{section_num}'] = result['partial_scores'][int(section_num)]['score']
+ row_index.append(f'문제{section_num}')
+ section_num = current_section
+
+ detail_row[f'{i+1}'] = score_result['points']
+ row_index.append(score_result['id'])
+
+ # 마지막 섹션(문제2)부분합 점수를 출력
+ if i == len(result['score_results']) - 1:
+ detail_row[f'문제{current_section}'] = result['partial_scores'][int(current_section)]['score']
+ row_index.append(f'문제{current_section}')
+
+ detail_row['총점'] = result.get('total_score', 0)
+ row_index.append('총점')
+ detail_data.append(detail_row)
+
+ summary_df = pd.DataFrame(summary_data)
+ detail_df = pd.DataFrame(detail_data).transpose()
+ detail_df.columns = detail_df.iloc[0]
+ detail_df = detail_df[1:]
+
+ detail_df.index = row_index
+ # detail_df = pd.DataFrame(detail_data)
+
+ for temp in results:
+ result = temp['typo']
+ typo_data.append(result)
+
+ typo_df = pd.DataFrame(typo_data).transpose()
+ # detail_df = pd.DataFrame(detail_data)
+
+ # ExcelWriter 객체 생성
+ with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
+ summary_df.to_excel(writer, sheet_name='채점결과요약', index=False)
+ detail_df.to_excel(writer, sheet_name='채점상세내역', index=True)
+ typo_df.to_excel(writer, sheet_name='오타내역', index=False)
+
+ # 열 너비 자동 조정
+ # for sheet_name in writer.sheets:
+ # worksheet = writer.sheets[sheet_name]
+ # for column_cells in worksheet.columns:
+ # max_length = 0
+ # column = column_cells[0].column_letter # 열의 문자
+ # for cell in column_cells:
+ # try:
+ # if cell.value:
+ # max_length = max(max_length, len(str(cell.value)))
+ # except:
+ # pass
+ # adjusted_width = (max_length + 2)
+ # worksheet.column_dimensions[column].width = adjusted_width
+
+ return output_path
+
+
+def main():
+
+ # 시험회차 및 유형
+ exam_round = '2503'
+ exam_types = [
+ 'A',
+ # 'B',
+ # 'C',
+ ]
+ # test_mode = False
+ test_mode = True
+
+ output_excel_paths = []
+ for exam_type in exam_types:
+ scoring_criteria_path = f'./DIW_{exam_round}{exam_type}_test.json'
+ # scoring_criteria_path = f'./DIW_{exam_round}{exam_type}.json'
+ # xml(hml)파일 디렉토리 경로
+
+ xml_directory = f'./output/{exam_type}/{"TEST" if test_mode else "DIW"}'
+
+
+ # 오탈자 체크를 위한 정답 파일 경로 (형식:DIW_2503A.hml)
+ correct_answer_file = f'./output/{exam_type}/DIW/DIW_{exam_round}{exam_type}.hml'
+
+ # 엑셀 파일명 (비어있으면 자동생성)
+ timestamp = datetime.now().strftime("%y%m%d")
+ # output_path = f'{timestamp}_DIW_{exam_round}{exam_type}_{"TEST" if test_mode else "채점결과"}.xlsx'
+ output_path = f'{timestamp}_DIW_{exam_round}{exam_type}_{"TEST" if test_mode else "채점결과"}_2.xlsx'
+
+ # 채점 클래스 초기화
+ scorer = XMLScorer(scoring_criteria_path)
+
+ # 폴더 내 모든 xml 파일 채점
+ results = scorer.score_directory(xml_directory, correct_answer_file)
+
+ # 채점 결과 엑셀로 저장
+ output_excel_paths.append(scorer.export_to_excel(results, output_path))
+
+ print(f"채점 결과 엑셀 파일: {output_excel_paths}")
+
+if __name__ == '__main__':
+ main()
diff --git a/zzz.xbook b/zzz.xbook
index 772c308..2fea1a5 100644
--- a/zzz.xbook
+++ b/zzz.xbook
@@ -1 +1 @@
-[{"kind":2,"language":"xpath","value":"boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'기타')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=3000 and //PARASHAPE[@Id=//CHAR[contains(text(),'기타')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Indent=-2400)"},{"kind":2,"language":"xpath","value":"//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계'])"}]
\ No newline at end of file
+[{"kind":2,"language":"xpath","value":"boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'기타')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=3000 and //PARASHAPE[@Id=//CHAR[contains(text(),'기타')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Indent=-2400)"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul][@Name='바탕']"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Name='바탕']/@Id"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id='6']/FONTID/@Hangul"},{"kind":2,"language":"xpath","value":"//PARASHAPE[@Id='0']/@Align"},{"kind":2,"language":"xpath","value":"boolean(//RECTANGLE[.//CHAR[text()='지']][.//SIZE[(@Height >= 2600 and @Height <= 2800)and(@Width >= 2600 and @Width <= 2800)]])"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TEXT[CHAR[text()='지']]/@CharShape]/FONTID/@Hangul]/@Name"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id={charshape_id}]/FONTID/@Hangul]/@Name"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id={font_id}]/@Name"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text()[1],'전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대')]/parent::TEXT/@CharShape][ITALIC]"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text()[1],'전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대')]/parent::TEXT/@CharShape][ITALIC]"}]
\ No newline at end of file
diff --git a/회차별채점자료/2503/json_채점기준표/0418/DIW_2503A.json b/회차별채점자료/2503/json_채점기준표/0418/DIW_2503A.json
new file mode 100644
index 0000000..cc27db2
--- /dev/null
+++ b/회차별채점자료/2503/json_채점기준표/0418/DIW_2503A.json
@@ -0,0 +1,862 @@
+{
+ "0": {
+ "0": {
+ "path": "",
+ "path2": "",
+ "points": 0,
+ "category": "파일저장",
+ "item": "파일명 (수검번호.hwp/hwpx)"
+ },
+ "1": {
+ "path": "boolean(//PAGEMARGIN[(@Bottom='5668'or @Bottom='5669') and (@Footer='2834' or @Footer='2835') and @Gutter='0' and (@Header='2834' or @Header='2835') and (@Left='5668' or @Left='5669') and (@Right='5668' or @Right='5669') and (@Top='5668' or @Top='5669')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "format": "pageSetting",
+ "category": "용지설정",
+ "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)"
+ },
+ "2": {
+ "path": "boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "기본설정",
+ "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)"
+ },
+ "3": {
+ "path": "",
+ "path2": null,
+ "searchValue": null,
+ "value": null,
+ "points": 40,
+ "category": "오타감점",
+ "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경"
+ }
+ },
+ "1": {
+ "1": {
+ "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "견고딕",
+ "points": 1,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/① 글씨체 (견고딕)"
+ },
+ "2": {
+ "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "9920305",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/② 채우기 : 색상(RGB:49,95,151)"
+ },
+ "3": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": 28346,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/③ 크기-너비 (100mm)"
+ },
+ "4": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": 5669,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/④ 크기-높이 (20mm)"
+ },
+ "5": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "true",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/⑤ 위치 (글자처럼 취급)"
+ },
+ "6": {
+ "path": "//PARASHAPE[@Id=//TEXTART[@Text='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": "Center",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/⑥ 정렬 (가운데 정렬)"
+ },
+ "7": {
+ "path": "boolean(//TEXTART[@Text='{searchValue}'])",
+ "path2": null,
+ "searchValue": "친환경이동수단컨퍼런스",
+ "value": true,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (친환경이동수단컨퍼런스)/⑦ 글맵시모양 (육안확인)"
+ },
+ "8": {
+ "path": "boolean(//RECTANGLE[.//CHAR[text()='지']][.//SIZE[(@Height >= 2600 and @Height <= 2800)and(@Width >= 2600 and @Width <= 2800)]])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 1,
+ "category": "문단첫글자장식",
+ "item": "지/① 모양 (2줄)"
+ },
+ "9": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TEXT[CHAR[text()='지']]/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": null,
+ "value": "궁서체",
+ "points": 1,
+ "category": "문단첫글자장식",
+ "item": "지/② 글씨체 (궁서체)"
+ },
+ "10": {
+ "path": "//RECTANGLE[.//CHAR[text()='지']]//WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": null,
+ "value": "3644265",
+ "points": 2,
+ "category": "문단첫글자장식",
+ "item": "지/③ 면색 : 색상(RGB:105,155,55)"
+ },
+ "11": {
+ "path": "//RECTANGLE[.//CHAR[text()='지']]//OUTSIDEMARGIN/@Right",
+ "path2": null,
+ "searchValue": null,
+ "value": "850",
+ "points": 2,
+ "category": "문단첫글자장식",
+ "item": "지/④ 본문과의 간격 : 3.0mm"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][ITALIC])",
+ "path2": null,
+ "searchValue": "전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대)/① 기울임"
+ },
+ "13": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][UNDERLINE])",
+ "path2": null,
+ "searchValue": "전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대)/② 밑줄"
+ },
+ "14": {
+ "path": "count(//CHAR[contains(text(),'☆')]) + count(//CHAR[contains(text(),'※')])",
+ "path2": "string-length(//CHAR[contains(text(),'☆')]) - string-length(translate(//CHAR[contains(text(),'☆')], '☆', '')) + string-length(//CHAR[contains(text(),'※')]) - string-length(translate(//CHAR[contains(text(),'※')], '※', ''))",
+ "searchValue": null,
+ "value": 3,
+ "points": 3,
+ "category": "특수문자",
+ "item": "① ☆, ② ☆, ③ ※"
+ },
+ "15": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "☆ 행사안내 ☆",
+ "value": "궁서",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (☆ 행사안내 ☆)/① 글씨체 (궁서)"
+ },
+ "16": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "☆ 행사안내 ☆",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (☆ 행사안내 ☆)/② 정렬 (가운데 정렬)"
+ },
+ "17": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][BOLD])",
+ "path2": null,
+ "searchValue": "2025. 03. 27.(목) 24:00까지",
+ "value": true,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 27.(목) 24:00까지)/① 진하게"
+ },
+ "18": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][UNDERLINE])",
+ "path2": null,
+ "searchValue": "2025. 03. 27.(목) 24:00까지",
+ "value": true,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 27.(목) 24:00까지)/② 밑줄"
+ },
+ "19": {
+ "path": "boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=3000 and //PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Indent=-2400)",
+ "path2": null,
+ "searchValue": "기타사항",
+ "value": true,
+ "points": 2,
+ "category": "문단모양",
+ "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)"
+ },
+ "20": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "2025. 03. 22.",
+ "value": 1300,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 22.)/① 크기 (13pt)"
+ },
+ "21": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "2025. 03. 22.",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 22.)/② 정렬 (가운데 정렬)"
+ },
+ "22": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "한국육상운송협회",
+ "value": "굴림체",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국육상운송협회)/① 글씨체 (굴림체)"
+ },
+ "23": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "한국육상운송협회",
+ "value": 2400,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국육상운송협회)/② 크기 (24pt)"
+ },
+ "24": {
+ "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "한국육상운송협회",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국육상운송협회)/③ 정렬 (가운데 정렬)"
+ },
+ "25": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": "돋움",
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/① 글꼴 (돋움)"
+ },
+ "26": {
+ "path": "//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": 900,
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/② 크기 (9pt)"
+ },
+ "27": {
+ "path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": "Right",
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
+ },
+ "28": {
+ "path": "//PAGENUM/@FormatType",
+ "path2": null,
+ "searchValue": null,
+ "value": "LatinCapital",
+ "points": 2,
+ "category": "쪽번호",
+ "item": "① 쪽 번호 매기기 (A,B,C 순으로)"
+ },
+ "29": {
+ "path": "//PAGENUM/@Pos",
+ "path2": null,
+ "searchValue": null,
+ "value": "BottomCenter",
+ "points": 2,
+ "category": "쪽번호",
+ "item": "② 가운데 아래"
+ },
+ "30": {
+ "path": "not(//PARASHAPE[@Id=//SECTION[1]/P/@ParaShape]/PARAMARGIN[@LineSpacing!='180'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "줄간격",
+ "item": "문제 1 줄간격 180% 설정"
+ }
+ },
+ "2": {
+ "1": {
+ "path": "boolean(//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside='true' and //BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]/*[contains(local-name(), 'BORDER')]/@Type='DoubleSlim')",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "쪽 테두리",
+ "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정"
+ },
+ "2": {
+ "path": "count(//SECTION)>1",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "다단",
+ "item": "① 구역나누기"
+ },
+ "3": {
+ "path": "//COLDEF/@Count>1",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "다단",
+ "item": "② 다단 2단"
+ },
+ "4": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": 19842,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/① 크기-너비 (70mm)"
+ },
+ "5": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": 3401,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/② 크기-높이 (12mm)"
+ },
+ "6": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::LINESHAPE/@Style",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": "DoubleSlim",
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/③ 테두리 (이중실선(1.00mm))"
+ },
+ "7": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/@Ratio",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": 50,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/④ 글상자 모서리 (반원)"
+ },
+ "8": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": "9537333",
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/⑤ 채우기 : 색상(RGB:53,135,145)"
+ },
+ "9": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": "true",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/⑥ 글상자 위치 (글자처럼 취급)"
+ },
+ "10": {
+ "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": "Center",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/⑦ 글상자 정렬 (가운데 정렬)"
+ },
+ "11": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": "맑은 고딕",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/⑧ 글씨체 (맑은 고딕)"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height='2400')",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": true,
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/⑨ 글씨크기 (24pt)"
+ },
+ "13": {
+ "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[1]/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "친환경 이동수단",
+ "value": "Center",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (친환경 이동수단)/⑩ 정렬 (가운데 정렬)"
+ },
+ "14": {
+ "path": "boolean(//PICTURE/descendant::SHAPECOMMENT[contains(text(),'{searchValue}')])",
+ "path2": null,
+ "searchValue": "원본 그림의 이름: 그림",
+ "value": true,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "① 파일명 \"그림A.jpg\" 삽입"
+ },
+ "15": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": null,
+ "value": 24094,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "② 크기-너비 (85mm)"
+ },
+ "16": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 11338,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "③ 크기-높이 (40mm)"
+ },
+ "17": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@HorzOffset",
+ "path2": null,
+ "searchValue": null,
+ "value": 0,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
+ },
+ "18": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@VertOffset",
+ "path2": null,
+ "searchValue": null,
+ "value": 6236,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "⑤ 위치 (어울림 : 세로-쪽의 위 22mm)"
+ },
+ "19": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "1. 친환경 자동차",
+ "value": "궁서",
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 친환경 자동차)/① 글씨체 (궁서)"
+ },
+ "20": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "1. 친환경 자동차",
+ "value": 1200,
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 친환경 자동차)/② 크기 (12pt)"
+ },
+ "21": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "1. 친환경 자동차",
+ "value": true,
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 친환경 자동차)/③ 진하게"
+ },
+ "22": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "2. 친환경 자동차 보급 추이",
+ "value": "궁서",
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 친환경 자동차 보급 추이)/① 글씨체 (궁서)"
+ },
+ "23": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "2. 친환경 자동차 보급 추이",
+ "value": 1200,
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 친환경 자동차 보급 추이)/② 크기 (12pt)"
+ },
+ "24": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "2. 친환경 자동차 보급 추이",
+ "value": true,
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 친환경 자동차 보급 추이)/③ 진하게"
+ },
+ "25": {
+ "path": "boolean(//CHAR[contains(text(),'자동차 탄소발자국')]/ancestor::TEXT/FOOTNOTE/descendant::CHAR)",
+ "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('자동차 탄소발자국') + 1) = '자동차 탄소발자국']/following-sibling::FOOTNOTE/descendant::CHAR)",
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "각주",
+ "item": "문구 (자동차 탄소발자국)/① 각주 설정 및 문구 입력"
+ },
+ "26": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "자동차 생애에서 배출하는 이산화탄소의 총량",
+ "value": "굴림",
+ "points": 1,
+ "category": "각주",
+ "item": "문구 (자동차 탄소발자국)/② 글씨체 (굴림)"
+ },
+ "27": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "자동차 생애에서 배출하는 이산화탄소의 총량",
+ "value": 900,
+ "points": 1,
+ "category": "각주",
+ "item": "문구 (자동차 탄소발자국)/③ 크기 (9pt)"
+ },
+ "28": {
+ "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
+ "path2": null,
+ "searchValue": "자동차 생애에서 배출하는 이산화탄소의 총량",
+ "value": "CircledHangulSyllable",
+ "points": 2,
+ "category": "각주",
+ "item": "문구 (자동차 탄소발자국)/④ 각주 번호모양"
+ },
+ "29": {
+ "path": "boolean(//CHAR[contains(text(),'Hybrid')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "영단어",
+ "item": "Hybrid/영단어 미입력, 대소문자/오타 시 전체 감점"
+ },
+ "30": {
+ "path": "(count(//CHAR[contains(text(),'전지')][contains(text(),'電池')])+count(//CHAR[contains(text(),'유해')][contains(text(),'有害')])+count(//CHAR[contains(text(),'내연')][contains(text(),'內燃')])+count(//CHAR[contains(text(),'이륜차')][contains(text(),'二輪車')])+count(//CHAR[contains(text(),'기타')][contains(text(),'其他')]))*2",
+ "path2": null,
+ "searchValue": null,
+ "value": 10,
+ "points": 10,
+ "category": "한자",
+ "item": "① 전지(電池), ② 유해(有害), ③내연(內燃), ④ 이륜차(二輪車), ⑤ 기타(其他)"
+ },
+ "31": {
+ "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'터를독립')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "편집",
+ "item": "문구 (…내장된 전기모터이 독립적으로 또는 병행해서…)/\"이\" → \"를\" 글자바꿈"
+ },
+ "32": {
+ "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'면서환경')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "편집",
+ "item": "문구 (…주행하는 방식으로 환경에 주행하면서 유해(有害)한 물질을…)/\"환경에\" / \"주행하면서\" 순서바꿈"
+ },
+ "33": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": "돋움",
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (자동차 증가 추이)/① 글씨체 (돋움)"
+ },
+ "34": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": 1200,
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (자동차 증가 추이)/② 크기 (12pt)"
+ },
+ "35": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": true,
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (자동차 증가 추이)/③ 진하게"
+ },
+ "36": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": "Center",
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (자동차 증가 추이)/④ 정렬 (가운데 정렬)"
+ },
+ "37": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
+ "searchValue": null,
+ "value": "7034570",
+ "points": 2,
+ "category": "표",
+ "item": "위쪽 제목 셀/① 색상(RGB:202,86,107)"
+ },
+ "38": {
+ "path": "boolean(//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 1,
+ "category": "표",
+ "item": "위쪽 제목 셀/② 진하게"
+ },
+ "39": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Type",
+ "searchValue": null,
+ "value": "DoubleSlim",
+ "points": 2,
+ "category": "표",
+ "item": "제목 셀 아래선/① 이중실선"
+ },
+ "40": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Width",
+ "searchValue": null,
+ "value": "0.5mm",
+ "points": 2,
+ "category": "표",
+ "item": "제목 셀 아래선/② 0.5mm"
+ },
+ "41": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": null,
+ "value": "궁서체",
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/① 글씨체 (궁서체)"
+ },
+ "42": {
+ "path": "//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 1000,
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/② 크기 (10pt)"
+ },
+ "43": {
+ "path": "//PARASHAPE[@Id=//TABLE/ROW/descendant::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": null,
+ "value": "Center",
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/③ 정렬 (가운데 정렬)"
+ },
+ "44": {
+ "path": "boolean(//TABLE[1]/ROW[last()]/CELL[last()-1]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '290'] and //TABLE[1]/ROW[last()]/CELL[last()]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '190'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "표",
+ "item": "블록계산식/합계"
+ },
+ "45": {
+ "path": "boolean(//c:barChart[c:barDir[@val='col'] and c:grouping[@val='clustered']])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "chart_xml",
+ "item": "① 종류 (묶은세로막대형)"
+ },
+ "46": {
+ "path": "//c:valAx/c:majorTickMark/@val",
+ "path2": null,
+ "searchValue": null,
+ "value": "out",
+ "points": 2,
+ "category": "chart_xml",
+ "item": "② 값 축 주 눈금선"
+ },
+ "47": {
+ "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Width",
+ "path2": null,
+ "searchValue": null,
+ "value": 22677,
+ "points": 2,
+ "category": "차트",
+ "item": "③ 크기-너비 (80mm)"
+ },
+ "48": {
+ "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 25511,
+ "points": 2,
+ "category": "차트",
+ "item": "④ 크기-높이 (90mm)"
+ },
+ "49": {
+ "path": "//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "chart_xml",
+ "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)"
+ },
+ "50": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": "바탕체",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (자동차 증가 추이) : 제목 문구 불일치는 오타감점에서 반영/① 글씨체 (바탕체)"
+ },
+ "51": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": 1300,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (자동차 증가 추이) : 제목 문구 불일치는 오타감점에서 반영/② 크기 (13pt)"
+ },
+ "52": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@b",
+ "path2": null,
+ "searchValue": "자동차 증가 추이",
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (자동차 증가 추이) : 제목 문구 불일치는 오타감점에서 반영/③ 진하게"
+ },
+ "53": {
+ "path": "//c:catAx//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/① 글꼴 (굴림)"
+ },
+ "54": {
+ "path": "//c:catAx//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/② 크기 (9pt)"
+ },
+ "55": {
+ "path": "//c:catAx//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/③ 기울임"
+ },
+ "56": {
+ "path": "//c:valAx//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/① 글꼴 (굴림)"
+ },
+ "57": {
+ "path": "//c:valAx//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/② 크기 (9pt)"
+ },
+ "58": {
+ "path": "//c:valAx//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/③ 기울임"
+ },
+ "59": {
+ "path": "//c:legend//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/① 글꼴 (굴림)"
+ },
+ "60": {
+ "path": "//c:legend//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/② 크기 (9pt)"
+ },
+ "61": {
+ "path": "//c:legend//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/③ 기울임"
+ }
+ }
+}
\ No newline at end of file
diff --git a/회차별채점자료/2503/json_채점기준표/0418/DIW_2503B.json b/회차별채점자료/2503/json_채점기준표/0418/DIW_2503B.json
new file mode 100644
index 0000000..ec870c2
--- /dev/null
+++ b/회차별채점자료/2503/json_채점기준표/0418/DIW_2503B.json
@@ -0,0 +1,861 @@
+{
+ "0": {
+ "0": {
+ "path": "",
+ "path2": "",
+ "points": 0,
+ "category": "파일저장",
+ "item": "파일명 (수검번호.hwp/hwpx)"
+ },
+ "1": {
+ "path": "boolean(//PAGEMARGIN[(@Bottom='5668'or @Bottom='5669') and (@Footer='2834' or @Footer='2835') and @Gutter='0' and (@Header='2834' or @Header='2835') and (@Left='5668' or @Left='5669') and (@Right='5668' or @Right='5669') and (@Top='5668' or @Top='5669')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "용지설정",
+ "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)"
+ },
+ "2": {
+ "path": "boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "기본설정",
+ "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)"
+ },
+ "3": {
+ "path": "",
+ "path2": null,
+ "searchValue": null,
+ "value": null,
+ "points": 40,
+ "category": "오타감점",
+ "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경"
+ }
+ },
+ "1": {
+ "1": {
+ "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": "궁서",
+ "points": 1,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/① 글씨체 (궁서)"
+ },
+ "2": {
+ "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": "3644265",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/② 채우기 : 색상(RGB:105,155,55)"
+ },
+ "3": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": 34015,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/③ 크기-너비 (120mm)"
+ },
+ "4": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": 5669,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/④ 크기-높이 (20mm)"
+ },
+ "5": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": "true",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/⑤ 위치 (글자처럼 취급)"
+ },
+ "6": {
+ "path": "//PARASHAPE[@Id=//TEXTART[@Text='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": "Center",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/⑥ 정렬 (가운데 정렬)"
+ },
+ "7": {
+ "path": "boolean(//TEXTART[@Text='{searchValue}'])",
+ "path2": null,
+ "searchValue": "건강100세프로젝트행사",
+ "value": true,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (건강100세프로젝트행사)/⑦ 글맵시모양 (육안확인)"
+ },
+ "8": {
+ "path": "boolean(//RECTANGLE[.//CHAR[text()='인']][.//SIZE[(@Height >= 2600 and @Height <= 2800)and(@Width >= 2600 and @Width <= 2800)]])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 1,
+ "category": "문단첫글자장식",
+ "item": "인/① 모양 (2줄)"
+ },
+ "9": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TEXT[CHAR[text()='인']]/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": null,
+ "value": "돋움",
+ "points": 1,
+ "category": "문단첫글자장식",
+ "item": "인/② 글씨체 (돋움)"
+ },
+ "10": {
+ "path": "//RECTANGLE[.//CHAR[text()='인']]//WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": null,
+ "value": "10966730",
+ "points": 2,
+ "category": "문단첫글자장식",
+ "item": "인/③ 면색 : 색상(RGB:202,86,167)"
+ },
+ "11": {
+ "path": "//RECTANGLE[.//CHAR[text()='인']]//OUTSIDEMARGIN/@Right",
+ "path2": null,
+ "searchValue": null,
+ "value": "850",
+ "points": 2,
+ "category": "문단첫글자장식",
+ "item": "인/④ 본문과의 간격 : 3.0mm"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][BOLD])",
+ "path2": null,
+ "searchValue": "2023년 경제협력개발기구 보건통계 기준 한국의 기대수명은 83.6년",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (2023년 경제협력개발기구 보건통계 기준 한국의 기대수명은 83.6년)/① 진하게"
+ },
+ "13": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][UNDERLINE])",
+ "path2": null,
+ "searchValue": "2023년 경제협력개발기구 보건통계 기준 한국의 기대수명은 83.6년",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (2023년 경제협력개발기구 보건통계 기준 한국의 기대수명은 83.6년)/② 밑줄"
+ },
+ "14": {
+ "path": "count(//CHAR[contains(text(),'■')]) + count(//CHAR[contains(text(),'※')])",
+ "path2": "string-length(//CHAR[contains(text(),'■')]) - string-length(translate(//CHAR[contains(text(),'■')], '■', '')) + string-length(//CHAR[contains(text(),'※')]) - string-length(translate(//CHAR[contains(text(),'※')], '※', ''))",
+ "searchValue": null,
+ "value": 3,
+ "points": 3,
+ "category": "특수문자",
+ "item": "① ■, ② ■, ③ ※"
+ },
+ "15": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "■ 행사개요 ■",
+ "value": "굴림",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (■ 행사개요 ■)/① 글씨체 (굴림)"
+ },
+ "16": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "■ 행사개요 ■",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (■ 행사개요 ■)/② 정렬 (가운데 정렬)"
+ },
+ "17": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][BOLD])",
+ "path2": null,
+ "searchValue": "2025. 03. 30.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr)",
+ "value": true,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 30.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr))/① 진하게"
+ },
+ "18": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][ITALIC])",
+ "path2": null,
+ "searchValue": "2025. 03. 30.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr)",
+ "value": true,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 30.(일) 18:00까지 온라인으로 등록(http://www.ihd.or.kr))/② 기울임"
+ },
+ "19": {
+ "path": "boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=3000 and //PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Indent=-2400)",
+ "path2": null,
+ "searchValue": "기타사항",
+ "value": true,
+ "points": 2,
+ "category": "문단모양",
+ "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)"
+ },
+ "20": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "2025. 03. 22.",
+ "value": 1300,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 22.)/① 크기 (13pt)"
+ },
+ "21": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "2025. 03. 22.",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 22.)/② 정렬 (가운데 정렬)"
+ },
+ "22": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "한국질병관리협회",
+ "value": "굴림",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국질병관리협회)/① 글씨체 (굴림)"
+ },
+ "23": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "한국질병관리협회",
+ "value": 2400,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국질병관리협회)/② 크기 (24pt)"
+ },
+ "24": {
+ "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "한국질병관리협회",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국질병관리협회)/③ 정렬 (가운데 정렬)"
+ },
+ "25": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": "굴림",
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/① 글꼴 (굴림)"
+ },
+ "26": {
+ "path": "//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": 900,
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/② 크기 (9pt)"
+ },
+ "27": {
+ "path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": "Right",
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
+ },
+ "28": {
+ "path": "//PAGENUM/@FormatType",
+ "path2": null,
+ "searchValue": null,
+ "value": "LatinCapital",
+ "points": 2,
+ "category": "쪽번호",
+ "item": "① 쪽 번호 매기기 (A,B,C 순으로)"
+ },
+ "29": {
+ "path": "//PAGENUM/@Pos",
+ "path2": null,
+ "searchValue": null,
+ "value": "BottomCenter",
+ "points": 2,
+ "category": "쪽번호",
+ "item": "② 가운데 아래"
+ },
+ "30": {
+ "path": "not(//PARASHAPE[@Id=//SECTION[1]/P/@ParaShape]/PARAMARGIN[@LineSpacing!=180])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "줄간격",
+ "item": "문제 1 줄간격 180% 설정"
+ }
+ },
+ "2": {
+ "1": {
+ "path": "boolean(//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside='true' and //BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]/*[contains(local-name(), 'BORDER')]/@Type='DoubleSlim')",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "쪽 테두리",
+ "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정"
+ },
+ "2": {
+ "path": "count(//SECTION)>1",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "다단",
+ "item": "① 구역나누기"
+ },
+ "3": {
+ "path": "//COLDEF/@Count>1",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "다단",
+ "item": "② 다단 2단"
+ },
+ "4": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": 19842,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/① 크기-너비 (70mm)"
+ },
+ "5": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": 3402,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/② 크기-높이 (12mm)"
+ },
+ "6": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::LINESHAPE/@Style",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": "DoubleSlim",
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/③ 테두리 (이중실선(1.00mm))"
+ },
+ "7": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/@Ratio",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": 20,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/④ 글상자 모서리 (둥근 모양)"
+ },
+ "8": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": "2862825",
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/⑤ 채우기 : 색상(RGB:233,174,43)"
+ },
+ "9": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": "true",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/⑥ 글상자 위치 (글자처럼 취급)"
+ },
+ "10": {
+ "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": "Center",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/⑦ 글상자 정렬 (가운데 정렬)"
+ },
+ "11": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": "맑은 고딕",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/⑧ 글씨체 (맑은 고딕)"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height='2300')",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": true,
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/⑨ 글씨크기 (23pt)"
+ },
+ "13": {
+ "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[1]/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "비만과 비만치료",
+ "value": "Center",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (비만과 비만치료)/⑩ 정렬 (가운데 정렬)"
+ },
+ "14": {
+ "path": "boolean(//PICTURE/descendant::SHAPECOMMENT[contains(text(),'{searchValue}')])",
+ "path2": null,
+ "searchValue": "원본 그림의 이름: 그림",
+ "value": true,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "① 파일명 \"그림B.jpg\" 삽입"
+ },
+ "15": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": null,
+ "value": 24094,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "② 크기-너비 (85mm)"
+ },
+ "16": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 11338,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "③ 크기-높이 (40mm)"
+ },
+ "17": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@HorzOffset",
+ "path2": null,
+ "searchValue": null,
+ "value": 0,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
+ },
+ "18": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@VertOffset",
+ "path2": null,
+ "searchValue": null,
+ "value": 6520,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "⑤ 위치 (어울림 : 세로-쪽의 위 23mm)"
+ },
+ "19": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "1. 비만",
+ "value": "바탕체",
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 비만)/① 글씨체 (바탕체)"
+ },
+ "20": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "1. 비만",
+ "value": 1200,
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 비만)/② 크기 (12pt)"
+ },
+ "21": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "1. 비만",
+ "value": true,
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 비만)/③ 진하게"
+ },
+ "22": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "2. 비만치료",
+ "value": "바탕체",
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 비만치료)/① 글씨체 (바탕체)"
+ },
+ "23": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "2. 비만치료",
+ "value": 1200,
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 비만치료)/② 크기 (12pt)"
+ },
+ "24": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "2. 비만치료",
+ "value": true,
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 비만치료)/③ 진하게"
+ },
+ "25": {
+ "path": "boolean(//CHAR[contains(text(),'비만 약물치료')]/ancestor::TEXT/FOOTNOTE/descendant::CHAR)",
+ "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('비만 약물치료') + 1) = '비만 약물치료']/following-sibling::FOOTNOTE/descendant::CHAR)",
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "각주",
+ "item": "문구 (비만 약물치료)/① 각주 설정 및 문구 입력"
+ },
+ "26": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "비약물로 어려운 체질량지수 25 이상인 경우 시행",
+ "value": "돋움",
+ "points": 1,
+ "category": "각주",
+ "item": "문구 (비만 약물치료)/② 글씨체 (돋움)"
+ },
+ "27": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "비약물로 어려운 체질량지수 25 이상인 경우 시행",
+ "value": 900,
+ "points": 1,
+ "category": "각주",
+ "item": "문구 (비만 약물치료)/③ 크기 (9pt)"
+ },
+ "28": {
+ "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
+ "path2": null,
+ "searchValue": "비약물로 어려운 체질량지수 25 이상인 경우 시행",
+ "value": "LatinSmall",
+ "points": 2,
+ "category": "각주",
+ "item": "문구 (비만 약물치료)/④ 각주 번호모양"
+ },
+ "29": {
+ "path": "boolean(//CHAR[contains(text(),'Obesity')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "영단어",
+ "item": "Obesity/영단어 미입력, 대소문자/오타 시 전체 감점"
+ },
+ "30": {
+ "path": "(count(//CHAR[contains(text(),'비만')][contains(text(),'肥滿')])+count(//CHAR[contains(text(),'복부')][contains(text(),'腹部')])+count(//CHAR[contains(text(),'대사')][contains(text(),'代謝')])+count(//CHAR[contains(text(),'특정')][contains(text(),'特定')])+count(//CHAR[contains(text(),'축적')][contains(text(),'特定')]))*2",
+ "path2": null,
+ "searchValue": null,
+ "value": 10,
+ "points": 10,
+ "category": "한자",
+ "item": "① 비만(肥滿), ② 복부(腹部), ③대사(代謝), ④ 특정(特定), ⑤ 축적(特定)"
+ },
+ "31": {
+ "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'정의다른')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "편집",
+ "item": "문구 (…비만 측정을 다른 방법으로는…)/\"을\" → \"의\" 글자바꿈"
+ },
+ "32": {
+ "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'거나복부')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "편집",
+ "item": "문구 (…허리둘레를 복부(腹部)지방 측정하거나 전산화…)/\"복부지방\" / \"측정하거나\" 순서바꿈"
+ },
+ "33": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": "궁서체",
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (성별 비만 인구수)/① 글씨체 (궁서체)"
+ },
+ "34": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": 1200,
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (성별 비만 인구수)/② 크기 (12pt)"
+ },
+ "35": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": true,
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (성별 비만 인구수)/③ 진하게"
+ },
+ "36": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": "Center",
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (성별 비만 인구수)/④ 정렬 (가운데 정렬)"
+ },
+ "37": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
+ "searchValue": null,
+ "value": "5395143",
+ "points": 2,
+ "category": "표",
+ "item": "위쪽 제목 셀/① 색상(RGB:199,82,82)"
+ },
+ "38": {
+ "path": "boolean(//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 1,
+ "category": "표",
+ "item": "위쪽 제목 셀/② 진하게"
+ },
+ "39": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Type",
+ "searchValue": null,
+ "value": "DoubleSlim",
+ "points": 2,
+ "category": "표",
+ "item": "제목 셀 아래선/① 이중실선"
+ },
+ "40": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Width",
+ "searchValue": null,
+ "value": "0.5mm",
+ "points": 2,
+ "category": "표",
+ "item": "제목 셀 아래선/② 0.5mm"
+ },
+ "41": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": null,
+ "value": "한양중고딕",
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/① 글씨체 (한양중고딕)"
+ },
+ "42": {
+ "path": "//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 1000,
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/② 크기 (10pt)"
+ },
+ "43": {
+ "path": "//PARASHAPE[@Id=//TABLE/ROW/descendant::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": null,
+ "value": "Center",
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/③ 정렬 (가운데 정렬)"
+ },
+ "44": {
+ "path": "boolean(//TABLE[1]/ROW[last()]/CELL[last()-1]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '145'] and //TABLE[1]/ROW[last()]/CELL[last()]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '105'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "표",
+ "item": "블록계산식/합계"
+ },
+ "45": {
+ "path": "boolean(//c:barChart[c:barDir[@val='bar'] and c:grouping[@val='clustered']])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "chart_xml",
+ "item": "① 종류 (묶은가로막대형)"
+ },
+ "46": {
+ "path": "//c:valAx/c:majorTickMark/@val",
+ "path2": null,
+ "searchValue": null,
+ "value": "out",
+ "points": 2,
+ "category": "chart_xml",
+ "item": "② 값 축 주 눈금선"
+ },
+ "47": {
+ "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Width",
+ "path2": null,
+ "searchValue": null,
+ "value": 22677,
+ "points": 2,
+ "category": "차트",
+ "item": "③ 크기-너비 (80mm)"
+ },
+ "48": {
+ "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 25512,
+ "points": 2,
+ "category": "차트",
+ "item": "④ 크기-높이 (90mm)"
+ },
+ "49": {
+ "path": "//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "chart_xml",
+ "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)"
+ },
+ "50": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": "궁서",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (성별 비만 인구수)/① 글씨체 (궁서)"
+ },
+ "51": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": 1300,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (성별 비만 인구수)/② 크기 (13pt)"
+ },
+ "52": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@b",
+ "path2": null,
+ "searchValue": "성별 비만 인구수",
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (성별 비만 인구수)/③ 진하게"
+ },
+ "53": {
+ "path": "//c:catAx//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/① 글꼴 (굴림)"
+ },
+ "54": {
+ "path": "//c:catAx//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/② 크기 (9pt)"
+ },
+ "55": {
+ "path": "//c:catAx//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/③ 기울임"
+ },
+ "56": {
+ "path": "//c:valAx//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/① 글꼴 (굴림)"
+ },
+ "57": {
+ "path": "//c:valAx//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/② 크기 (9pt)"
+ },
+ "58": {
+ "path": "//c:valAx//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/③ 기울임"
+ },
+ "59": {
+ "path": "//c:legend//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/① 글꼴 (굴림)"
+ },
+ "60": {
+ "path": "//c:legend//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/② 크기 (9pt)"
+ },
+ "61": {
+ "path": "//c:legend//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/③ 기울임"
+ }
+ }
+}
diff --git a/회차별채점자료/2503/json_채점기준표/0418/DIW_2503C.json b/회차별채점자료/2503/json_채점기준표/0418/DIW_2503C.json
new file mode 100644
index 0000000..13d4114
--- /dev/null
+++ b/회차별채점자료/2503/json_채점기준표/0418/DIW_2503C.json
@@ -0,0 +1,861 @@
+{
+ "0": {
+ "0": {
+ "path": "",
+ "path2": "",
+ "points": 0,
+ "category": "파일저장",
+ "item": "파일명 (수검번호.hwp/hwpx)"
+ },
+ "1": {
+ "path": "boolean(//PAGEMARGIN[(@Bottom='5668'or @Bottom='5669') and (@Footer='2834' or @Footer='2835') and @Gutter='0' and (@Header='2834' or @Header='2835') and (@Left='5668' or @Left='5669') and (@Right='5668' or @Right='5669') and (@Top='5668' or @Top='5669')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "용지설정",
+ "item": "A4용지, 왼쪽/오른쪽/위쪽/아래쪽 (각20mm), 머리말/꼬리말 (10mm), 제본(0mm)"
+ },
+ "2": {
+ "path": "boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "기본설정",
+ "item": "글꼴 (바탕, 10pt), 양쪽정렬, 줄간격 (160%)"
+ },
+ "3": {
+ "path": "",
+ "path2": null,
+ "searchValue": null,
+ "value": null,
+ "points": 40,
+ "category": "오타감점",
+ "item": "오타 1개 -1점 / 2503회부터 오타 1개 -1점으로 변경"
+ }
+ },
+ "1": {
+ "1": {
+ "path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": "궁서",
+ "points": 1,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/① 글씨체 (궁서)"
+ },
+ "2": {
+ "path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": "6072932",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/② 채우기 : 색상(RGB:100,170,92)"
+ },
+ "3": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": 28346,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/③ 크기-너비 (100mm)"
+ },
+ "4": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": 5669,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/④ 크기-높이 (20mm)"
+ },
+ "5": {
+ "path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": "true",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/⑤ 위치 (글자처럼 취급)"
+ },
+ "6": {
+ "path": "//PARASHAPE[@Id=//TEXTART[@Text='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": "Center",
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/⑥ 정렬 (가운데 정렬)"
+ },
+ "7": {
+ "path": "boolean(//TEXTART[@Text='{searchValue}'])",
+ "path2": null,
+ "searchValue": "한옥마을사생대회안내",
+ "value": true,
+ "points": 2,
+ "category": "글맵시",
+ "item": "문구 (한옥마을사생대회안내)/⑦ 글맵시모양 (육안확인)"
+ },
+ "8": {
+ "path": "boolean(//RECTANGLE[.//CHAR[text()='자']][.//SIZE[(@Height >= 2600 and @Height <= 2800)and(@Width >= 2600 and @Width <= 2800)]])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 1,
+ "category": "문단첫글자장식",
+ "item": "자/① 모양 (2줄)"
+ },
+ "9": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TEXT[CHAR[text()='자']]/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": null,
+ "value": "맑은 고딕",
+ "points": 1,
+ "category": "문단첫글자장식",
+ "item": "자/② 글씨체 (맑은 고딕)"
+ },
+ "10": {
+ "path": "//RECTANGLE[.//CHAR[text()='자']]//WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": null,
+ "value": "9537333",
+ "points": 2,
+ "category": "문단첫글자장식",
+ "item": "자/③ 면색 : 색상(RGB:53,135,145)"
+ },
+ "11": {
+ "path": "//RECTANGLE[.//CHAR[text()='자']]//OUTSIDEMARGIN/@Right",
+ "path2": null,
+ "searchValue": null,
+ "value": "850",
+ "points": 2,
+ "category": "문단첫글자장식",
+ "item": "자/④ 본문과의 간격 : 3.0mm"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][BOLD])",
+ "path2": null,
+ "searchValue": "한옥에 대한 체험과 교육이 준비된 사생대회",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (한옥에 대한 체험과 교육이 준비된 사생대회)/① 진하게"
+ },
+ "13": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][UNDERLINE])",
+ "path2": null,
+ "searchValue": "한옥에 대한 체험과 교육이 준비된 사생대회",
+ "value": true,
+ "points": 2,
+ "category": "글꼴 속성",
+ "item": "문구 (한옥에 대한 체험과 교육이 준비된 사생대회)/② 밑줄"
+ },
+ "14": {
+ "path": "count(//CHAR[contains(text(),'■')]) + count(//CHAR[contains(text(),'※')])",
+ "path2": "string-length(//CHAR[contains(text(),'■')]) - string-length(translate(//CHAR[contains(text(),'■')], '■', '')) + string-length(//CHAR[contains(text(),'※')]) - string-length(translate(//CHAR[contains(text(),'※')], '※', ''))",
+ "searchValue": null,
+ "value": 3,
+ "points": 3,
+ "category": "특수문자",
+ "item": "① ■, ② ■, ③ ※"
+ },
+ "15": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "■ 행사안내 ■",
+ "value": "돋움",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (■ 행사안내 ■)/① 글씨체 (돋움)"
+ },
+ "16": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "■ 행사안내 ■",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (■ 행사안내 ■)/② 정렬 (가운데 정렬)"
+ },
+ "17": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][ITALIC])",
+ "path2": null,
+ "searchValue": "홈페이지(http://www.ihd.or.kr)에서 개별 신청, 선착순 접수",
+ "value": true,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (홈페이지(http://www.ihd.or.kr)에서 개별 신청, 선착순 접수)/① 기울임"
+ },
+ "18": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][UNDERLINE])",
+ "path2": null,
+ "searchValue": "홈페이지(http://www.ihd.or.kr)에서 개별 신청, 선착순 접수",
+ "value": true,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (홈페이지(http://www.ihd.or.kr)에서 개별 신청, 선착순 접수)/② 밑줄"
+ },
+ "19": {
+ "path": "boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=3000 and //PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Indent=-2400)",
+ "path2": null,
+ "searchValue": "기타사항",
+ "value": true,
+ "points": 2,
+ "category": "문단모양",
+ "item": "문구 (※ 기타… 이하 문단)/왼쪽여백 (15pt), 내어쓰기 (12pt)"
+ },
+ "20": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "2025. 03. 22.",
+ "value": 1300,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 22.)/① 크기 (13pt)"
+ },
+ "21": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "2025. 03. 22.",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (2025. 03. 22.)/② 정렬 (가운데 정렬)"
+ },
+ "22": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "한국고건축협회",
+ "value": "궁서",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국고건축협회)/① 글씨체 (궁서)"
+ },
+ "23": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "한국고건축협회",
+ "value": 2400,
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국고건축협회)/② 크기 (24pt)"
+ },
+ "24": {
+ "path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "한국고건축협회",
+ "value": "Center",
+ "points": 1,
+ "category": "글꼴 속성",
+ "item": "문구 (한국고건축협회)/③ 정렬 (가운데 정렬)"
+ },
+ "25": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": "굴림",
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/① 글꼴 (굴림)"
+ },
+ "26": {
+ "path": "//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": 900,
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/② 크기 (9pt)"
+ },
+ "27": {
+ "path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "DIAT",
+ "value": "Right",
+ "points": 1,
+ "category": "머리말",
+ "item": "문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
+ },
+ "28": {
+ "path": "//PAGENUM/@FormatType",
+ "path2": null,
+ "searchValue": null,
+ "value": "HangulSyllable",
+ "points": 2,
+ "category": "쪽번호",
+ "item": "① 쪽 번호 매기기 (가,나,다 순으로)"
+ },
+ "29": {
+ "path": "//PAGENUM/@Pos",
+ "path2": null,
+ "searchValue": null,
+ "value": "BottomCenter",
+ "points": 2,
+ "category": "쪽번호",
+ "item": "② 가운데 아래"
+ },
+ "30": {
+ "path": "not(//PARASHAPE[@Id=//SECTION[1]/P/@ParaShape]/PARAMARGIN[@LineSpacing!='180'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "줄간격",
+ "item": "문제 1 줄간격 180% 설정"
+ }
+ },
+ "2": {
+ "1": {
+ "path": "boolean(//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@HeaderInside='true' and //BORDERFILL[@Id=//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill]/*[contains(local-name(), 'BORDER')]/@Type='DoubleSlim')",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "쪽 테두리",
+ "item": "문제2 쪽테두리(이중 실선, 머리말 포함) 설정"
+ },
+ "2": {
+ "path": "count(//SECTION)>1",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "다단",
+ "item": "① 구역나누기"
+ },
+ "3": {
+ "path": "//COLDEF/@Count>1",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "다단",
+ "item": "② 다단 2단"
+ },
+ "4": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": 19842,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/① 크기-너비 (70mm)"
+ },
+ "5": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": 3401,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/② 크기-높이 (12mm)"
+ },
+ "6": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::LINESHAPE/@Style",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": "DoubleSlim",
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/③ 테두리 (이중실선(1.00mm))"
+ },
+ "7": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/@Ratio",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": 20,
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/④ 글상자 모서리 (둥근 모양)"
+ },
+ "8": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": "12704995",
+ "points": 2,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/⑤ 채우기 : 색상(RGB:227,220,193)"
+ },
+ "9": {
+ "path": "//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/POSITION/@TreatAsChar",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": "true",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/⑥ 글상자 위치 (글자처럼 취급)"
+ },
+ "10": {
+ "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[last()]/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": "Center",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/⑦ 글상자 정렬 (가운데 정렬)"
+ },
+ "11": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": "한양견고딕",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/⑧ 글씨체 (견고딕)"
+ },
+ "12": {
+ "path": "boolean(//CHARSHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height='2000')",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": true,
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/⑨ 글씨크기 (20pt)"
+ },
+ "13": {
+ "path": "//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::P[1]/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "한옥의 형태와 구조",
+ "value": "Center",
+ "points": 1,
+ "category": "글상자",
+ "item": "문구 (한옥의 형태와 구조)/⑩ 정렬 (가운데 정렬)"
+ },
+ "14": {
+ "path": "boolean(//PICTURE/descendant::SHAPECOMMENT[contains(text(),'{searchValue}')])",
+ "path2": null,
+ "searchValue": "원본 그림의 이름: 그림",
+ "value": true,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "① 파일명 \"그림C.jpg\" 삽입"
+ },
+ "15": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Width",
+ "path2": null,
+ "searchValue": null,
+ "value": 24094,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "② 크기-너비 (85mm)"
+ },
+ "16": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 11338,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "③ 크기-높이 (40mm)"
+ },
+ "17": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@HorzOffset",
+ "path2": null,
+ "searchValue": null,
+ "value": 0,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "④ 위치 (어울림 : 가로-쪽의 왼쪽 0.0mm)"
+ },
+ "18": {
+ "path": "//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/POSITION/@VertOffset",
+ "path2": null,
+ "searchValue": null,
+ "value": 6236,
+ "points": 2,
+ "category": "그림삽입",
+ "item": "⑤ 위치 (어울림 : 세로-쪽의 위 22mm)"
+ },
+ "19": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "1. 한옥",
+ "value": "돋움",
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 한옥)/① 글씨체 (돋움)"
+ },
+ "20": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "1. 한옥",
+ "value": 1200,
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 한옥)/② 크기 (12pt)"
+ },
+ "21": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "1. 한옥",
+ "value": true,
+ "points": 1,
+ "category": "속성",
+ "item": "문구① (1. 한옥)/③ 진하게"
+ },
+ "22": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "2. 한옥의 형태와 구조",
+ "value": "돋움",
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 한옥의 형태와 구조)/① 글씨체 (돋움)"
+ },
+ "23": {
+ "path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "2. 한옥의 형태와 구조",
+ "value": 1200,
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 한옥의 형태와 구조)/② 크기 (12pt)"
+ },
+ "24": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "2. 한옥의 형태와 구조",
+ "value": true,
+ "points": 1,
+ "category": "속성",
+ "item": "문구② (2. 한옥의 형태와 구조)/③ 진하게"
+ },
+ "25": {
+ "path": "boolean(//CHAR[contains(text(),'기초')]/ancestor::TEXT/FOOTNOTE/descendant::CHAR)",
+ "path2": "boolean(//CHAR[substring(., string-length(.) - string-length('기초') + 1) = '기초']/following-sibling::FOOTNOTE/descendant::CHAR)",
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "각주",
+ "item": "문구 (기초)/① 각주 설정 및 문구 입력"
+ },
+ "26": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "기둥의 침하를 방지하기 위한 지반의 보강 및 개량",
+ "value": "한양중고딕",
+ "points": 1,
+ "category": "각주",
+ "item": "문구 (기초)/② 글씨체 (중고딕)"
+ },
+ "27": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "기둥의 침하를 방지하기 위한 지반의 보강 및 개량",
+ "value": 900,
+ "points": 1,
+ "category": "각주",
+ "item": "문구 (기초)/③ 크기 (9pt)"
+ },
+ "28": {
+ "path": "//P[TEXT[CHAR[contains(text(), '{searchValue}')]]]//AUTONUMFORMAT/@Type",
+ "path2": null,
+ "searchValue": " 기둥의 침하를 방지하기 위한 지반의 보강 및 개량",
+ "value": "CircledDigit",
+ "points": 2,
+ "category": "각주",
+ "item": "문구 (기초)/④ 각주 번호모양"
+ },
+ "29": {
+ "path": "boolean(//CHAR[contains(text(),'cornerstone')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "",
+ "item": "cornerstone/영단어 미입력, 대소문자/오타 시 전체 감점"
+ },
+ "30": {
+ "path": "(count(//CHAR[contains(text(),'한옥')][contains(text(),'韓屋')])+count(//CHAR[contains(text(),'사계절')][contains(text(),'四季節')])+count(//CHAR[contains(text(),'거주')][contains(text(),'居住')])+count(//CHAR[contains(text(),'구조')][contains(text(),'構造')])+count(//CHAR[contains(text(),'골격')][contains(text(),'骨格')]))*2",
+ "path2": null,
+ "searchValue": null,
+ "value": 10,
+ "points": 10,
+ "category": "한자",
+ "item": "① 한옥(韓屋), ② 사계절(四季節), ③거주(居住), ④ 구조(構造), ⑤ 골격(骨格)"
+ },
+ "31": {
+ "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'철의추운')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "편집",
+ "item": "문구 (…더운 날씨와 겨울철이 추운…)/\"이\" → \"의\" 글자바꿈"
+ },
+ "32": {
+ "path": "boolean(//CHAR[contains(translate(text(), ' ', ''),'돌과마루')])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 3,
+ "category": "편집",
+ "item": "문구 (…대비해 마루를 온돌과 갖고…)/\"마루를\" / \"온돌과\" 순서바꿈"
+ },
+ "33": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": "궁서",
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (교육기관별 참가인원)/① 글씨체 (궁서)"
+ },
+ "34": {
+ "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": 1200,
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (교육기관별 참가인원)/② 크기 (12pt)"
+ },
+ "35": {
+ "path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": true,
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (교육기관별 참가인원)/③ 진하게"
+ },
+ "36": {
+ "path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": "Center",
+ "points": 1,
+ "category": "표",
+ "item": "제목 문구 (교육기관별 참가인원)/④ 정렬 (가운데 정렬)"
+ },
+ "37": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
+ "searchValue": null,
+ "value": "15616893",
+ "points": 2,
+ "category": "표",
+ "item": "위쪽 제목 셀/① 색상(RGB:125,75,238)"
+ },
+ "38": {
+ "path": "boolean(//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]/BOLD)",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 1,
+ "category": "표",
+ "item": "위쪽 제목 셀/② 진하게"
+ },
+ "39": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Type",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Type",
+ "searchValue": null,
+ "value": "DoubleSlim",
+ "points": 2,
+ "category": "표",
+ "item": "제목 셀 아래선/① 이중실선"
+ },
+ "40": {
+ "path": "//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER/@Width",
+ "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/BOTTOMBORDER/@Width",
+ "searchValue": null,
+ "value": "0.5mm",
+ "points": 2,
+ "category": "표",
+ "item": "제목 셀 아래선/② 0.5mm"
+ },
+ "41": {
+ "path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/① 글씨체 (굴림)"
+ },
+ "42": {
+ "path": "//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 1000,
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/② 크기 (10pt)"
+ },
+ "43": {
+ "path": "//PARASHAPE[@Id=//TABLE/ROW/descendant::P/@ParaShape]/@Align",
+ "path2": null,
+ "searchValue": null,
+ "value": "Center",
+ "points": 1,
+ "category": "표",
+ "item": "글자모양/③ 정렬 (가운데 정렬)"
+ },
+ "44": {
+ "path": "boolean(//TABLE[1]/ROW[last()]/CELL[last()-1]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '110'] and //TABLE[1]/ROW[last()]/CELL[last()]//FIELDBEGIN[starts-with(@Command, '=SUM') and substring(@Command, string-length(@Command) - 2) = '220'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 4,
+ "category": "표",
+ "item": "블록계산식/합계"
+ },
+ "45": {
+ "path": "//c:lineChart/c:grouping/@val='standard'",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "chart_xml",
+ "item": "① 종류 (꺾은선형)"
+ },
+ "46": {
+ "path": "//c:valAx/c:majorTickMark/@val",
+ "path2": null,
+ "searchValue": null,
+ "value": "out",
+ "points": 2,
+ "category": "chart_xml",
+ "item": "② 값 축 주 눈금선"
+ },
+ "47": {
+ "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Width",
+ "path2": null,
+ "searchValue": null,
+ "value": 22677,
+ "points": 2,
+ "category": "차트",
+ "item": "③ 크기-너비 (80mm)"
+ },
+ "48": {
+ "path": "//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Height",
+ "path2": null,
+ "searchValue": null,
+ "value": 25511,
+ "points": 2,
+ "category": "차트",
+ "item": "④ 크기-높이 (90mm)"
+ },
+ "49": {
+ "path": "//c:chart and not(//c:pt[not(ancestor::c:tx)]/c:v[text()='합계'])",
+ "path2": null,
+ "searchValue": null,
+ "value": true,
+ "points": 2,
+ "category": "chart_xml",
+ "item": "⑤ 차트 데이터(표에서 블록계산식을 제외한 나머지 값만 이용)"
+ },
+ "50": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": "굴림체",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (교육기관별 참가인원)/① 글씨체 (굴림체)"
+ },
+ "51": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": 1300,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (교육기관별 참가인원)/② 크기 (13pt)"
+ },
+ "52": {
+ "path": "//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@b",
+ "path2": null,
+ "searchValue": "교육기관별 참가인원",
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "제목 문구 (교육기관별 참가인원)/③ 진하게"
+ },
+ "53": {
+ "path": "//c:catAx//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/① 글꼴 (굴림)"
+ },
+ "54": {
+ "path": "//c:catAx//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/② 크기 (9pt)"
+ },
+ "55": {
+ "path": "//c:catAx//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "X축/③ 기울임"
+ },
+ "56": {
+ "path": "//c:valAx//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/① 글꼴 (굴림)"
+ },
+ "57": {
+ "path": "//c:valAx//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/② 크기 (9pt)"
+ },
+ "58": {
+ "path": "//c:valAx//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "Y축/③ 기울임"
+ },
+ "59": {
+ "path": "//c:legend//a:ea/@typeface",
+ "path2": null,
+ "searchValue": null,
+ "value": "굴림",
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/① 글꼴 (굴림)"
+ },
+ "60": {
+ "path": "//c:legend//a:defRPr/@sz",
+ "path2": null,
+ "searchValue": null,
+ "value": 900,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/② 크기 (9pt)"
+ },
+ "61": {
+ "path": "//c:legend//a:defRPr/@i",
+ "path2": null,
+ "searchValue": null,
+ "value": 1,
+ "points": 1,
+ "category": "chart_xml",
+ "item": "범례/③ 기울임"
+ }
+ }
+}