diff --git a/DIW_2504A_test.json b/DIW_2504A_test.json new file mode 100644 index 0000000..c1247b8 --- /dev/null +++ b/DIW_2504A_test.json @@ -0,0 +1,164 @@ +{ + "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": "100,170,92", + "points": 2, + "category": "Color", + "item": "문구 (한옥마을사생대회안내)/② 채우기 : 색상(RGB:100,170,92)" + }, + "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": "53,135,145", + "points": 2, + "category": "Color", + "item": "자/③ 면색 : 색상(RGB:53,135,145)" + }, + "11": { + "path": "//RECTANGLE[.//CHAR[text()='{searchValue}']]//OUTSIDEMARGIN/@Right", + "path2": null, + "searchValue": "자", + "value": "850", + "points": 2, + "category": "SingleAnswer", + "item": "자/④ 본문과의 간격 : 3.0mm" + }, + "12": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "path2": null, + "searchValue": "한옥에 대한 체험과 교육이 준비된 사생대회", + "value": "BOLD", + "points": 2, + "category": "FontAttribute", + "item": "문구 (한옥에 대한 체험과 교육이 준비된 사생대회)/① 진하게" + }, + "13": { + "path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]", + "path2": null, + "searchValue": "한옥에 대한 체험과 교육이 준비된 사생대회", + "value": "UNDERLINE", + "points": 2, + "category": "FontAttribute", + "item": "문구 (한옥에 대한 체험과 교육이 준비된 사생대회)/② 밑줄" + } + } +} \ No newline at end of file diff --git a/diwScoring2.py b/diwScoring2.py index 0f8cccf..5d293f0 100644 --- a/diwScoring2.py +++ b/diwScoring2.py @@ -313,14 +313,26 @@ class XMLScorer: charshape_id = root.xpath(xpath) if not charshape_id: charshape_id = None + user_answer = 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] + user_answer = font_name[0] self.evaluate_answer(scoring, user_answer, right_answer, points, method="equal") + elif "FontAttribute" in (category or ""): + charshape = root.xpath(xpath) + if not charshape: + charshape = None + user_answer = None + else: + font_attribute = charshape[0].find(right_answer) + if font_attribute is not None: + user_answer = font_attribute.tag + + self.evaluate_answer(scoring, user_answer, right_answer, points, method="equal") + onePersonResult['score_results'].append(scoring) print(f'scoring: {scoring}') onePersonResult['partial_scores'].append({ @@ -609,7 +621,7 @@ class XMLScorer: def main(): # 시험회차 및 유형 - exam_round = '2503' + exam_round = '2504' exam_types = [ 'A', # 'B', diff --git a/zzz.xbook b/zzz.xbook index 3a2b033..764fac5 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":"//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":"//CHAR[contains(text(),'전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대')]/parent::TEXT/@CharShape"},{"kind":2,"language":"xpath","value":"//TABLE[1]/ROW[last()]/CELL[last()-1]//FIELDBEGIN[starts-with(@Command, '=AVG') and //TABLE[1]/ROW[last()]/CELL[last()]//FIELDBEGIN[starts-with(@Command, '=AVG')]]"}] \ 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":"//CHAR[contains(text(),'전 세계적으로 차량의 수는 약 13억 대가 있고 국내는 약 2,500만 대')]/parent::TEXT/@CharShape"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text(),'한옥에 대한 체험과 교육이 준비된 사생대회')]/parent::TEXT/@CharShape]"}] \ No newline at end of file