Merge branch 'main' of https://repo.teamsf.co.kr/g-zero/HWP-Scoring
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
_old_excel_files/
|
||||
output/
|
||||
input/
|
||||
*.xlsx
|
||||
|
||||
@@ -1532,3 +1532,11 @@
|
||||
2025-01-18 17:33:15,690 - INFO - 변환 성공: 워드(한글)-005686-홍유하.hwp -> 워드(한글)-005686-홍유하.hml
|
||||
2025-01-18 17:33:15,916 - INFO - 변환 성공: 워드(한글)-005687-강태원.hwp -> 워드(한글)-005687-강태원.hml
|
||||
2025-01-18 17:33:16,364 - INFO - 변환 성공: 워드(한글)-005688-정지예.hwp -> 워드(한글)-005688-정지예.hml
|
||||
2025-01-20 14:32:03,574 - INFO - 변환 성공: 워드(한글)-005172-김서인.hwp -> 워드(한글)-005172-김서인.hml
|
||||
2025-01-20 14:32:03,980 - INFO - 변환 성공: 워드(한글)-005174-지율.hwp -> 워드(한글)-005174-지율.hml
|
||||
2025-01-20 14:32:04,227 - INFO - 변환 성공: 워드(한글)-005175-문지환.hwp -> 워드(한글)-005175-문지환.hml
|
||||
2025-01-20 14:32:04,561 - INFO - 변환 성공: 워드(한글)-005176-이세영.hwp -> 워드(한글)-005176-이세영.hml
|
||||
2025-01-20 14:32:04,881 - INFO - 변환 성공: 워드(한글)-005177-김은유.hwp -> 워드(한글)-005177-김은유.hml
|
||||
2025-01-20 14:32:05,103 - INFO - 변환 성공: 워드(한글)-005179-손민준.hwp -> 워드(한글)-005179-손민준.hml
|
||||
2025-01-20 14:32:05,346 - INFO - 변환 성공: 워드(한글)-005180-도정원.hwp -> 워드(한글)-005180-도정원.hml
|
||||
2025-01-20 14:32:07,797 - INFO - 변환 성공: 정답.hwp -> 정답.hml
|
||||
|
||||
63
score5.py
63
score5.py
@@ -15,6 +15,12 @@ class XMLScorer:
|
||||
def __init__(self, scoring_criteria_path):
|
||||
# 채점 기준 로드
|
||||
self.scoring_criteria = self._load_scoring_criteria(scoring_criteria_path)
|
||||
|
||||
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):
|
||||
@@ -37,9 +43,7 @@ class XMLScorer:
|
||||
return result
|
||||
else:
|
||||
return result
|
||||
# result = root.xpath(second_xpath)
|
||||
# print(f'result : {result}')
|
||||
# return result
|
||||
|
||||
except ET.XPathEvalError as e:
|
||||
return None
|
||||
else:
|
||||
@@ -141,6 +145,7 @@ class XMLScorer:
|
||||
|
||||
previous_first_digit = first_digit
|
||||
|
||||
id = criterion_id
|
||||
xpath = criterion['path']
|
||||
xpath2 = criterion['path2']
|
||||
search_value = criterion['searchValue']
|
||||
@@ -190,16 +195,19 @@ class XMLScorer:
|
||||
actual_answer = int(result[0])
|
||||
else:
|
||||
actual_answer = result[0]
|
||||
|
||||
|
||||
if "오타감점" in category:
|
||||
points = self.get_typo_score()
|
||||
|
||||
scoring = {
|
||||
'id': id,
|
||||
'category': category, # 채점 분류
|
||||
'item': item, # 채점 항목
|
||||
'right_answer': right_answer, # 정답
|
||||
'actual_answer': actual_answer, # 실제 작성 답안
|
||||
'points': 0,
|
||||
'points': points,
|
||||
'deductions': [] # 각 기준별 감점 내역
|
||||
}
|
||||
scoring['points'] = points
|
||||
|
||||
# 점수 차감 조건
|
||||
# 1. 정답이 실수형으로 반환받은 경우는 채점항목의 부분점수 합산 결과이므로
|
||||
@@ -210,8 +218,8 @@ class XMLScorer:
|
||||
scoring['points'] = actual_answer
|
||||
|
||||
elif type(actual_answer) is int:
|
||||
# 오차범위 5 이상이면 감점
|
||||
if abs(actual_answer - right_answer) > 5:
|
||||
# 오차범위 3 이상이면 감점
|
||||
if abs(actual_answer - right_answer) > 3:
|
||||
scoring['points'] -= points
|
||||
else:
|
||||
# right_answer(JSON파일 내 valuer값) null일 경우 점수감점 없이 진행
|
||||
@@ -244,8 +252,6 @@ class XMLScorer:
|
||||
}
|
||||
|
||||
def binary_to_chartxml(self, xml_path):
|
||||
|
||||
print(f'binary_to_chartxml {xml_path}')
|
||||
tree = ET.parse(xml_path)
|
||||
root = tree.getroot()
|
||||
|
||||
@@ -344,24 +350,25 @@ class XMLScorer:
|
||||
|
||||
# result_diff 배열의 길이를 맨 앞에 저장
|
||||
temp = 40 - min(len(result_diff)*2, 40)
|
||||
self.set_typo_score(temp)
|
||||
|
||||
result_diff.insert(0, temp)
|
||||
return result_diff
|
||||
|
||||
# XML 파일 채점
|
||||
def score_directory(self, xml_directory, answer_path):
|
||||
|
||||
# xml 파일 불러오기
|
||||
xml_files = Path(xml_directory).glob('*.hml')
|
||||
|
||||
# 결과 저장할 리스트
|
||||
results = []
|
||||
|
||||
|
||||
for xml_file in xml_files:
|
||||
result = {}
|
||||
chart_xml = self.binary_to_chartxml(xml_file)
|
||||
result['score'] = self._score_xml_file(xml_file, chart_xml)
|
||||
result['typo'] = self.typo_check(answer_path, xml_file)
|
||||
result['score'] = self._score_xml_file(xml_file, chart_xml)
|
||||
# result['score']['score_results'][2]['points'] = result['typo'][0]
|
||||
results.append(result)
|
||||
return results
|
||||
|
||||
@@ -373,6 +380,7 @@ class XMLScorer:
|
||||
number = match.group(1)
|
||||
name = match.group(2)
|
||||
return number, name
|
||||
|
||||
return None, None
|
||||
|
||||
def export_to_excel(self, results, output_path=None):
|
||||
@@ -405,29 +413,46 @@ class XMLScorer:
|
||||
else:
|
||||
detail_row = {'채점항목':f"{number}-{name}"}
|
||||
|
||||
for i, scoring in enumerate(result['score_results']):
|
||||
# detail_row[scoring['item']] = scoring['points']
|
||||
detail_row[f'{i+1}'] = scoring['points']
|
||||
section_num = None
|
||||
partial_idx = 0
|
||||
for i, score_result in enumerate(result['score_results']):
|
||||
current_section = int(score_result['id'].split('-')[0])
|
||||
if section_num is None:
|
||||
section_num = current_section
|
||||
|
||||
if current_section != section_num:
|
||||
# 이전 섹션의 부분합을 출력
|
||||
detail_row[f'[{section_num}]합계'] = result['partial_scores'][partial_idx]['score']
|
||||
partial_idx += 1
|
||||
section_num = current_section
|
||||
|
||||
detail_row[f'{i+1}'] = score_result['points']
|
||||
|
||||
# 마지막 섹션의 부분합을 출력
|
||||
if section_num is not None and partial_idx < len(result['partial_scores']):
|
||||
detail_row[f'[{section_num}]합계'] = result['partial_scores'][partial_idx]['score']
|
||||
|
||||
detail_row['총점'] = result.get('total_score', 0)
|
||||
detail_data.append(detail_row)
|
||||
|
||||
summary_df = pd.DataFrame(summary_data)
|
||||
detail_df = pd.DataFrame(detail_data).transpose()
|
||||
|
||||
# detail_df = pd.DataFrame(detail_data)
|
||||
|
||||
for temp in results:
|
||||
result = temp['typo']
|
||||
typo_data.append(result)
|
||||
|
||||
type_df = pd.DataFrame(typo_data).transpose()
|
||||
typo_df = pd.DataFrame(typo_data).transpose()
|
||||
# detail_df = pd.DataFrame(detail_data)
|
||||
|
||||
# detail_df.iloc[3] = typo_df.iloc[0]
|
||||
|
||||
# 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=False)
|
||||
type_df.to_excel(writer, sheet_name='오타내역', index=False)
|
||||
typo_df.to_excel(writer, sheet_name='오타내역', index=False)
|
||||
|
||||
# 열 너비 자동 조정
|
||||
# for sheet_name in writer.sheets:
|
||||
|
||||
749
scoring_criteria_2501.json
Normal file
749
scoring_criteria_2501.json
Normal file
@@ -0,0 +1,749 @@
|
||||
{
|
||||
"0-01":{
|
||||
"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-02":{
|
||||
"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-03":{
|
||||
"path":"",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":null,
|
||||
"points": 40,
|
||||
"category": "오타감점",
|
||||
"item": "오타 1개 -2점"
|
||||
},
|
||||
"1-01":{
|
||||
"path": "//TEXTART[@Text='{searchValue}']/TEXTARTSHAPE/@FontName",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": "휴먼옛체",
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/① 글씨체 : 휴먼옛체"
|
||||
},
|
||||
"1-02": {
|
||||
"path": "//TEXTART[@Text='{searchValue}']/descendant::WINDOWBRUSH/@FaceColor",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": "7246108",
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/② 채우기 : 색상(RGB:28,145,110)"
|
||||
},
|
||||
"1-03": {
|
||||
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Width",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": 22677,
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/③ 크기 : 너비(80mm)"
|
||||
},
|
||||
"1-04": {
|
||||
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/SIZE/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": 5669,
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/④ 크기 : 높이(20mm)"
|
||||
},
|
||||
"1-05": {
|
||||
"path": "//TEXTART[@Text='{searchValue}']/SHAPEOBJECT/POSITION/@TreatAsChar",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": "true",
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/⑤ 위치 (글자처럼 취급)"
|
||||
},
|
||||
"1-06": {
|
||||
"path": "//PARASHAPE[@Id=//TEXTART[@Text='{searchValue}']/ancestor::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": "Center",
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/⑥ 정렬 (가운데 정렬)"
|
||||
},
|
||||
"1-07":{
|
||||
"path": "",
|
||||
"path2": null,
|
||||
"searchValue": "전통주페어링특강안내",
|
||||
"value": null,
|
||||
"points": 2,
|
||||
"category": "글맵시",
|
||||
"item":"문구 (전통주페어링특강안내)/⑦ 글맵시모양 (육안확인)"
|
||||
},
|
||||
"1-08": {
|
||||
"path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][BOLD])",
|
||||
"path2": null,
|
||||
"searchValue": "혼술, 홈술, 집술",
|
||||
"value": true,
|
||||
"points": 2,
|
||||
"category": "글꼴속성",
|
||||
"item":"문구 (혼술, 홈술, 집술)/진하게"
|
||||
},
|
||||
"1-09": {
|
||||
"path": "boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'{searchValue}')]/parent::TEXT/@CharShape][UNDERLINE])",
|
||||
"path2": null,
|
||||
"searchValue": "혼술, 홈술, 집술",
|
||||
"value": true,
|
||||
"points": 2,
|
||||
"category": "글꼴속성",
|
||||
"item":"문구 (혼술, 홈술, 집술)/밑줄"
|
||||
},
|
||||
"1-10": {
|
||||
"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.0,
|
||||
"points": 3,
|
||||
"category": "특수문자",
|
||||
"item":"① ★, ② ★, ③ ※"
|
||||
},
|
||||
"1-11": {
|
||||
"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-12": {
|
||||
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": "행사안내",
|
||||
"value": "Center",
|
||||
"points": 1,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (행사안내)/② 정렬 (가운데 정렬)"
|
||||
},
|
||||
"1-13": {
|
||||
"path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][BOLD])",
|
||||
"path2": null,
|
||||
"searchValue": "2025년 2월 2일(일) 18:00까지 온라인으로 등록",
|
||||
"value": true,
|
||||
"points": 1,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (2025년 2월 2일(일) 18:00까지 온라인으로 등록)/① 진하게"
|
||||
},
|
||||
"1-14": {
|
||||
"path": "boolean(//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape][ITALIC])",
|
||||
"path2": null,
|
||||
"searchValue": "2025년 2월 2일(일) 18:00까지 온라인으로 등록",
|
||||
"value": true,
|
||||
"points": 1,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (2025년 2월 2일(일) 18:00까지 온라인으로 등록)/② 기울임"
|
||||
},
|
||||
"1-15": {
|
||||
"path": "boolean(//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/following-sibling::P[1]/@ParaShape]/PARAMARGIN/@Left=2000 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":"문구 (※ 기타… 이하 문단)/왼쪽여백 (10pt), 내어쓰기 (12pt)"
|
||||
},
|
||||
"1-16": {
|
||||
"path": "//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "2025. 1. 15.",
|
||||
"value": 1300,
|
||||
"points": 2,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (2025. 1. 15.)/① 크기 (13pt)"
|
||||
},
|
||||
"1-17": {
|
||||
"path": "//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": "2025. 1. 15.",
|
||||
"value": "Center",
|
||||
"points": 1,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (2025. 1. 15.)/② 정렬 (가운데 정렬)"
|
||||
},
|
||||
"1-18": {
|
||||
"path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
|
||||
"path2": null,
|
||||
"searchValue": "대한민국전통주살리기협회",
|
||||
"value": "궁서체",
|
||||
"points": 2,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (대한민국전통주살리기협회)/① 글씨체 (궁서체)"
|
||||
},
|
||||
"1-19": {
|
||||
"path": "//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "대한민국전통주살리기협회",
|
||||
"value": 2700,
|
||||
"points": 2,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (대한민국전통주살리기협회)/② 크기 (27pt)"
|
||||
},
|
||||
"1-20": {
|
||||
"path": "//PARASHAPE[@Id=//CHAR[text()='{searchValue}']/ancestor::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": "대한민국전통주살리기협회",
|
||||
"value": "Center",
|
||||
"points": 2,
|
||||
"category": "글꼴 속성",
|
||||
"item":"문구 (대한민국전통주살리기협회)/정렬 (가운데 정렬)"
|
||||
},
|
||||
"1-21": {
|
||||
"path": "//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
|
||||
"path2": null,
|
||||
"searchValue": "DIAT",
|
||||
"value": "굴림",
|
||||
"points": 2,
|
||||
"category": "머리말",
|
||||
"item":"문구 (DIAT)/① 글꼴 (굴림)"
|
||||
},
|
||||
"1-22": {
|
||||
"path": "//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/@CharShape]/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "DIAT",
|
||||
"value": 900,
|
||||
"points": 2,
|
||||
"category": "머리말",
|
||||
"item":"문구 (DIAT)/② 크기 (9pt)"
|
||||
},
|
||||
"1-23": {
|
||||
"path": "//PARASHAPE[@Id=//SECTION[1]//CHAR[text()='{searchValue}']/parent::TEXT/parent::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": "DIAT",
|
||||
"value": "Right",
|
||||
"points": 2,
|
||||
"category": "머리말",
|
||||
"item":"문구 (DIAT)/③ 정렬 (오른쪽 정렬)"
|
||||
},
|
||||
"1-24": {
|
||||
"path": "//SECTION[1]//PAGENUM/@FormatType",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": "HangulSyllable",
|
||||
"points": 2,
|
||||
"category": "쪽번호",
|
||||
"item":"① 쪽 번호 매기기 (가,나,다 순으로)"
|
||||
},
|
||||
"1-25": {
|
||||
"path": "//SECTION[1]//PAGENUM/@Pos",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": "BottomCenter",
|
||||
"points": 2,
|
||||
"category": "쪽번호",
|
||||
"item":"② 가운데 아래"
|
||||
},
|
||||
"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-02":{
|
||||
"path":"count(//SECTION)>1 or (//P/@PageBreak='true')",
|
||||
"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":14173,
|
||||
"points": 1,
|
||||
"category": "글상자",
|
||||
"item": "문구 (한국의 전통주)/① 크기-너비 (50mm)"
|
||||
},
|
||||
"2-05":{
|
||||
"path":"//RECTANGLE//CHAR[text()='{searchValue}']/ancestor::RECTANGLE/SHAPEOBJECT/SIZE/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "한국의 전통주",
|
||||
"value":3402,
|
||||
"points": 1,
|
||||
"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>0",
|
||||
"path2": null,
|
||||
"searchValue": "한국의 전통주",
|
||||
"value":true,
|
||||
"points": 1,
|
||||
"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='2000')",
|
||||
"path2": null,
|
||||
"searchValue": "한국의 전통주",
|
||||
"value":true,
|
||||
"points": 1,
|
||||
"category": "글상자",
|
||||
"item": "문구 (한국의 전통주)/⑨ 글씨크기 (20pt)"
|
||||
},
|
||||
"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": "① 파일명 \"그림B.jpg\" 삽입"
|
||||
},
|
||||
"2-15":{
|
||||
"path":"//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Width",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":8503,
|
||||
"points": 2,
|
||||
"category": "그림삽입",
|
||||
"item": "② 크기-너비 (30mm)"
|
||||
},
|
||||
"2-16":{
|
||||
"path":"//IMAGE[@BinItem=//BINITEM[@Format='JPG']/@BinData]/preceding-sibling::SHAPEOBJECT/SIZE/@Height",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":8503,
|
||||
"points": 2,
|
||||
"category": "그림삽입",
|
||||
"item": "③ 크기-높이 (30mm)"
|
||||
},
|
||||
"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":6800,
|
||||
"points": 2,
|
||||
"category": "그림삽입",
|
||||
"item": "⑤ 위치 (어울림 : 세로-쪽의 위 24mm)"
|
||||
},
|
||||
"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(),'MZ세대')]/following-sibling::FOOTNOTE/descendant::CHAR[contains(text(),'밀레니얼 세대와 Z세대를 통틀어 지칭하는 신조어')])",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":true,
|
||||
"points": 3,
|
||||
"category": "각주",
|
||||
"item": "문구 (MZ세대)/① 문구입력"
|
||||
},
|
||||
"2-26":{
|
||||
"path":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
|
||||
"path2": null,
|
||||
"searchValue": "밀레니얼 세대와 Z세대를 통틀어 지칭하는 신조어",
|
||||
"value": "굴림",
|
||||
"points": 2,
|
||||
"category": "",
|
||||
"item": "문구 (MZ세대)/② 글씨체 (굴림)"
|
||||
},
|
||||
"2-27":{
|
||||
"path":"//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "밀레니얼 세대와 Z세대를 통틀어 지칭하는 신조어",
|
||||
"value":900,
|
||||
"points": 2,
|
||||
"category": "",
|
||||
"item": "문구 (MZ세대)/③ 크기 (9pt)"
|
||||
},
|
||||
"2-28":{
|
||||
"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-29":{
|
||||
"path":"boolean(//CHAR[contains(text(),'도 막')])",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":true,
|
||||
"points": 2,
|
||||
"category": "편집",
|
||||
"item": "문구 (…문인(文人)들의 문집에토 막걸리로…)/\"토\" → \"도\" 글자바꿈"
|
||||
},
|
||||
"2-30":{
|
||||
"path":"boolean(//CHAR[contains(text(),'하는 문')])",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":true,
|
||||
"points": 2,
|
||||
"category": "편집",
|
||||
"item": "문구 (…마시고 문화에서 취하는 술의 맛과…)/\"문화에서\" / \"취하는\" 순서바꿈"
|
||||
},
|
||||
"2-31":{
|
||||
"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-32":{
|
||||
"path":"//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/@Height",
|
||||
"path2": null,
|
||||
"searchValue": "월평균 주종별 음주(단위:%)",
|
||||
"value": 1200,
|
||||
"points": 1,
|
||||
"category": "표",
|
||||
"item": "제목 문구 (월평균 주종별 음주(단위:%))/② 크기 (12pt)"
|
||||
},
|
||||
"2-33":{
|
||||
"path":"boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/parent::TEXT/@CharShape]/BOLD)",
|
||||
"path2": null,
|
||||
"searchValue": "월평균 주종별 음주(단위:%)",
|
||||
"value":true,
|
||||
"points": 1,
|
||||
"category": "표",
|
||||
"item": "제목 문구 (월평균 주종별 음주(단위:%))/③ 진하게"
|
||||
},
|
||||
"2-34":{
|
||||
"path":"//PARASHAPE[@Id=//CHAR[contains(text(),'{searchValue}')]/ancestor::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": "월평균 주종별 음주(단위:%)",
|
||||
"value": "Center",
|
||||
"points": 1,
|
||||
"category": "표",
|
||||
"item": "제목 문구 (월평균 주종별 음주(단위:%))/④ 정렬 (가운데 정렬)"
|
||||
},
|
||||
"2-35":{
|
||||
"path":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": "10966730",
|
||||
"points": 2,
|
||||
"category": "표",
|
||||
"item": "위쪽 제목 셀/① 색상(RGB:202,86,167)"
|
||||
},
|
||||
"2-36":{
|
||||
"path":"boolean(//CHARSHAPE[@Id=//TABLE/ROW[1]/descendant::TEXT/@CharShape]/BOLD)",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":true,
|
||||
"points": 2,
|
||||
"category": "표",
|
||||
"item": "위쪽 제목 셀/② 진하게"
|
||||
},
|
||||
"2-37":{
|
||||
"path":"boolean(//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/BOTTOMBORDER[@Type='DoubleSlim' and @Width='0.5mm'])",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":true,
|
||||
"points": 2,
|
||||
"category": "표",
|
||||
"item": "제목 셀 아래선/이중실선 (0.5mm)"
|
||||
},
|
||||
"2-38":{
|
||||
"path":"//FONTFACE[@Lang='Hangul']/FONT[@Id=//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/FONTID/@Hangul]/@Name",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":"한양중고딕",
|
||||
"points": 2,
|
||||
"category": "표",
|
||||
"item": "글자모양/① 글씨체 (중고딕)"
|
||||
},
|
||||
"2-39":{
|
||||
"path":"//CHARSHAPE[@Id=//TABLE/ROW/descendant::TEXT/@CharShape]/@Height",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":1000,
|
||||
"points": 2,
|
||||
"category": "표",
|
||||
"item": "글자모양/② 크기 (10pt)"
|
||||
},
|
||||
"2-40":{
|
||||
"path":"//PARASHAPE[@Id=//TABLE/ROW/descendant::P/@ParaShape]/@Align",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":"Center",
|
||||
"points": 2,
|
||||
"category": "표",
|
||||
"item": "글자모양/③ 정렬 (가운데 정렬)"
|
||||
},
|
||||
"2-41":{
|
||||
"path":"//c:lineChart/c:grouping/@val",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": "standard",
|
||||
"points": 3,
|
||||
"category": "chart_xml",
|
||||
"item": "① 종류 (꺾은선형)"
|
||||
},
|
||||
"2-42":{
|
||||
"path":"//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Width",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":22677,
|
||||
"points": 2,
|
||||
"category": "차트",
|
||||
"item": "② 크기-너비 (80mm)"
|
||||
},
|
||||
"2-43":{
|
||||
"path":"//OLE[@BinItem=//BINITEM[@Format='OLE']/@BinData]/descendant::SIZE/@Height",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":22677,
|
||||
"points": 2,
|
||||
"category": "차트",
|
||||
"item": "③ 크기-높이 (80mm)"
|
||||
},
|
||||
"2-44":{
|
||||
"path":"//a:t[text()='{searchValue}']/ancestor::a:r//a:ea/@typeface",
|
||||
"path2": null,
|
||||
"searchValue": "월평균 주종별 음주",
|
||||
"value": "궁서체",
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "제목 문구 (\"월평균 주종별 음주\")/① 글씨체 (궁서체)"
|
||||
},
|
||||
"2-45":{
|
||||
"path":"//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@sz",
|
||||
"path2": null,
|
||||
"searchValue": "월평균 주종별 음주",
|
||||
"value": 1300,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "제목 문구 (\"월평균 주종별 음주\")/② 크기 (13pt)"
|
||||
},
|
||||
"2-46":{
|
||||
"path":"//a:t[text()='{searchValue}']/ancestor::a:r/a:rPr/@b",
|
||||
"path2": null,
|
||||
"searchValue": "월평균 주종별 음주",
|
||||
"value": 1,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "제목 문구 (\"월평균 주종별 음주\")/③ 진하게"
|
||||
},
|
||||
"2-47":{
|
||||
"path":"//c:catAx//a:ea/@typeface",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": "맑은 고딕",
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "X축/① 글꼴 (맑은 고딕)"
|
||||
},
|
||||
"2-48":{
|
||||
"path":"//c:catAx//a:defRPr/@sz",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": 900,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "X축/② 크기 (9pt)"
|
||||
},
|
||||
"2-49":{
|
||||
"path":"//c:catAx//a:defRPr/@i",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": 1,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "X축/③ 기울임"
|
||||
},
|
||||
"2-50":{
|
||||
"path":"//c:valAx//a:ea/@typeface",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": "맑은 고딕",
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "Y축/① 글꼴 (맑은 고딕)"
|
||||
},
|
||||
"2-51":{
|
||||
"path":"//c:valAx//a:defRPr/@sz",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": 900,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "Y축/② 크기 (9pt)"
|
||||
},
|
||||
"2-52":{
|
||||
"path":"//c:valAx//a:defRPr/@i",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": 1,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "Y축/③ 기울임"
|
||||
},
|
||||
"2-53":{
|
||||
"path":"//c:legend//a:ea/@typeface",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value":"맑은 고딕",
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "범례/① 글꼴 (맑은 고딕)"
|
||||
},
|
||||
"2-54":{
|
||||
"path":"//c:legend//a:defRPr/@sz",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": 900,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "범례/② 크기 (9pt)"
|
||||
},
|
||||
"2-55":{
|
||||
"path":"//c:legend//a:defRPr/@i",
|
||||
"path2": null,
|
||||
"searchValue": null,
|
||||
"value": 1,
|
||||
"points": 2,
|
||||
"category": "chart_xml",
|
||||
"item": "범례/③ 기울임"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user