[1-15, 16] 채점기준 변경

This commit is contained in:
2025-07-09 17:10:59 +09:00
parent 332be598d1
commit b8b233e50a
10 changed files with 38 additions and 19 deletions

BIN
250709_DIW_2506B_TEST.xlsx Normal file

Binary file not shown.

Binary file not shown.

BIN
250709_DIW_2506C_TEST.xlsx Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -176,11 +176,11 @@
"item": "문구 (● 홍보안내 ●)/① 글씨체 (돋움)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "홍보안내",
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "홍보안내",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"category": "Align",
"item": "문구 (● 홍보안내 ●)/② 정렬 (가운데 정렬)"
},
"17": {

View File

@@ -169,18 +169,18 @@
},
"15": {
"path": "//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape",
"searchValue": "사업안내",
"searchValue": "사업안내",
"value": "돋움",
"points": 1,
"category": "FontName",
"item": "문구 (★ 사업안내 ★)/① 글씨체 (돋움)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "사업안내",
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "사업안내",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"category": "Align",
"item": "문구 (★ 사업안내 ★)/② 정렬 (가운데 정렬)"
},
"17": {

View File

@@ -176,11 +176,11 @@
"item": "문구 (◈ 행사안내 ◈)/① 글씨체 (돋움)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "행사안내",
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "행사안내",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"category": "Align",
"item": "문구 (◈ 행사안내 ◈)/② 정렬 (가운데 정렬)"
},
"17": {

View File

@@ -176,11 +176,11 @@
"item": "문구 (◇ 행사안내 ◇)/① 글씨체 (돋움)"
},
"16": {
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
"searchValue": "행사안내",
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{match_str}')]/ancestor::P/@ParaShape]/@Align",
"match_str": "행사안내",
"value": "Center",
"points": 1,
"category": "OneAnswer",
"category": "Align",
"item": "문구 (◇ 행사안내 ◇)/② 정렬 (가운데 정렬)"
},
"17": {

View File

@@ -73,9 +73,12 @@ class XMLScorer:
if xml_type == "hml":
all_text = root.xpath(f"//BODY//text() | //TEXTART/@Text") if root is not None else []
if xml_type == "chart":
elif xml_type == "chart":
all_text = root.xpath(f"//c:chart//text()", namespaces=namespaces) if root is not None else []
else:
all_text = []
# 유사도 비교
max_score = 0
similar_text = ''
@@ -368,6 +371,22 @@ class XMLScorer:
self.evaluate_answer(scoring, user_answer, right_answer, points)
# [1-16] ◈ 행사안내 ◈
# 특수문자와 글자의 속성이 같고 문서 내부에 '행사안내'와 같은 문자가 있을 경우
# 유사도 문제로 의도치 않은 부분의 속성이 채점되는것을 방지하고자
# 해당 문자를 포함하는 모든 문단의 속성을 판단해
# 정렬값이 정답과 일치하는 경우 정답으로 채점
elif (category or "") == "Align":
match_str = criterion.get('match_str', None)
xpath = xpath.replace('{match_str}', match_str)
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
# 정답이 하나인 경우
# elif (category or "") == "OneAnswer":
@@ -1230,10 +1249,10 @@ def main():
# 채점하고자 하는 유형은 주석 해제
exam_types = [
'A',
'B',
# 'A',
# 'B',
'C',
'D',
# 'D',
]
test_mode = False

View File

@@ -1 +1 @@
[{"kind":2,"language":"xpath","value":"//a:t[text()='클라우드 보안투자']/ancestor::a:r//a:ea/@typeface"},{"kind":2,"language":"xpath","value":"boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕'"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//TEXT[CHAR[text()='태']]/@CharShape"},{"kind":2,"language":"xpath","value":"//PICTURE/IMAGE/@BinItem"},{"kind":2,"language":"xpath","value":"//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format=\"JPG\"]"},{"kind":2,"language":"xpath","value":"//P[.//FIELDBEGIN[@Type='Hyperlink'] and .//CHAR[contains(., 'http')]]"},{"kind":2,"language":"xpath","value":"//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true')]/@HorzOffset"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '※')]/descendant-or-self::text()"},{"kind":2,"language":"xpath","value":"//P[@ParaShape=\"17\"]/TEXT[@CharShape='7']//CHAR[string(.)]"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '기타')]/text()"}]
[{"kind":2,"language":"xpath","value":"//a:t[text()='클라우드 보안투자']/ancestor::a:r//a:ea/@typeface"},{"kind":2,"language":"xpath","value":"boolean(//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕'"},{"kind":2,"language":"xpath","value":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE/FONTID/@Hangul]/@Name='바탕' and //CHARSHAPE/@Height='1000' and //PARASHAPE/PARAMARGIN/@LineSpacing='160' and //PARASHAPE/@Align='Justify')"},{"kind":2,"language":"xpath","value":"//PARASHAPE[@Id=//CHAR[contains(text(),'사업안내')]/ancestor::P/@ParaShape]/@Align"},{"kind":2,"language":"xpath","value":"//CHAR[contains(text(),'행사안내')]"},{"kind":2,"language":"xpath","value":"//BINITEM[@BinData=//PICTURE/IMAGE/@BinItem][@Format=\"JPG\"]"},{"kind":2,"language":"xpath","value":"//P[.//FIELDBEGIN[@Type='Hyperlink'] and .//CHAR[contains(., 'http')]]"},{"kind":2,"language":"xpath","value":"//PICTURE[./IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]]/SHAPEOBJECT/POSITION[not(@TreatAsChar='true')]/@HorzOffset"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '※')]/descendant-or-self::text()"},{"kind":2,"language":"xpath","value":"//P[@ParaShape=\"17\"]/TEXT[@CharShape='7']//CHAR[string(.)]"},{"kind":2,"language":"xpath","value":"//CHAR[contains(string(.), '기타')]/text()"}]