From c5fe09108cf944933b5db9e6a98b04bd8c284558 Mon Sep 17 00:00:00 2001 From: devdra9 Date: Tue, 21 Jan 2025 15:15:44 +0900 Subject: [PATCH] =?UTF-8?q?[=ED=91=9C=20=EC=B2=AB=ED=96=89=20=EC=83=89?= =?UTF-8?q?=EC=83=81]=20=EC=B1=84=EC=A0=90=20=EA=B8=B0=EC=A4=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwp_conversion.log | 10 ++++++++++ score5.py | 23 ++++++++++++++++++----- scoring_criteria.json | 2 +- zzz.xbook | 2 +- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/hwp_conversion.log b/hwp_conversion.log index f21066d..9de0a83 100644 --- a/hwp_conversion.log +++ b/hwp_conversion.log @@ -1540,3 +1540,13 @@ 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 +2025-01-21 14:12:50,256 - INFO - 변환 성공: 워드(한글)-005172-김서인.hwp -> 워드(한글)-005172-김서인.hml +2025-01-21 14:12:50,657 - INFO - 변환 성공: 워드(한글)-005174-지율.hwp -> 워드(한글)-005174-지율.hml +2025-01-21 14:12:50,932 - INFO - 변환 성공: 워드(한글)-005175-문지환.hwp -> 워드(한글)-005175-문지환.hml +2025-01-21 14:12:51,261 - INFO - 변환 성공: 워드(한글)-005176-이세영.hwp -> 워드(한글)-005176-이세영.hml +2025-01-21 14:12:51,576 - INFO - 변환 성공: 워드(한글)-005177-김은유.hwp -> 워드(한글)-005177-김은유.hml +2025-01-21 14:12:51,793 - INFO - 변환 성공: 워드(한글)-005179-손민준.hwp -> 워드(한글)-005179-손민준.hml +2025-01-21 14:12:52,026 - INFO - 변환 성공: 워드(한글)-005180-도정원.hwp -> 워드(한글)-005180-도정원.hml +2025-01-21 14:12:52,245 - INFO - 변환 성공: 워드(한글)-005416-김민서.hwp -> 워드(한글)-005416-김민서.hml +2025-01-21 14:12:52,486 - INFO - 변환 성공: 워드(한글)-005605-김민서.hwp -> 워드(한글)-005605-김민서.hml +2025-01-21 14:12:52,811 - INFO - 변환 성공: 정답.hwp -> 정답.hml diff --git a/score5.py b/score5.py index 14b0e88..4eadc49 100644 --- a/score5.py +++ b/score5.py @@ -32,10 +32,13 @@ class XMLScorer: first_xpath = args[0] second_xpath = args[1] points = args[2] + category = args[3] - if second_xpath is not None: + 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: @@ -46,12 +49,24 @@ class XMLScorer: except ET.XPathEvalError as e: return None + + elif second_xpath is not None: + try: + # result = root.xpath(first_xpath) + 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 @@ -175,7 +190,7 @@ class XMLScorer: else: xpath = xpath.replace('{searchValue}', simliar_text) - result = self.query_xml(root, xpath, xpath2, points) + result = self.query_xml(root, xpath, xpath2, points, category) # [ boolean 타입 ] # 1. 이텔릭체, 굵게, 밑줄 등 효과가 적용 여부에 따라 @@ -445,8 +460,6 @@ class XMLScorer: 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: diff --git a/scoring_criteria.json b/scoring_criteria.json index 4e7a262..384eb8e 100644 --- a/scoring_criteria.json +++ b/scoring_criteria.json @@ -559,7 +559,7 @@ }, "2-35":{ "path":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", - "path2": null, + "path2": "//BORDERFILL[@Id=//CELLZONE[@StartRowAddr='0' and @EndRowAddr='0' and @StartColAddr='0' and @EndColAddr='2']/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor", "searchValue": null, "value": "10966730", "points": 2, diff --git a/zzz.xbook b/zzz.xbook index 03582de..cfc9a5f 100644 --- a/zzz.xbook +++ b/zzz.xbook @@ -1 +1 @@ -[{"kind":1,"language":"markdown","value":"# XPath Notebook\nDate: 2025-01-16     Time: 13:51:18"},{"kind":2,"language":"xpath","value":"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')"},{"kind":2,"language":"xpath","value":"//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=1]/*[contains(local-name(), 'BORDER')]/@Type='DoubleSlim'"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=1]"},{"kind":2,"language":"xpath","value":"boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'‘즐거운 컬러푸드 영양교실’')]/parent::TEXT/@CharShape][BOLD])"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text()[1],'‘즐거운 컬러푸드 영양교실’')]/parent::TEXT/@CharShape]"},{"kind":2,"language":"xpath","value":"boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'‘즐거운 컬러푸드 영양교실’')]/parent::TEXT/@CharShape][BOLD])"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text())[1],'‘즐거운 컬러푸드 영양교실’']/parent::TEXT/@CharShape]"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='DIAT']/parent::TEXT/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text(),\"2024. 1. 27.\")]/parent::TEXT/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//BINDATA[@Id=//BINITEM[@Format=\"OLE\"]/@BinData]/text()"},{"kind":2,"language":"xpath","value":"//BINITEM[@Format=\"OLE\"]/@BinData"},{"kind":2,"language":"xpath","value":"//c:barDir/@val=\"col\""},{"kind":2,"language":"xpath","value":"(//a:t[text()='과일야채 항산화지수 비교']/ancestor::a:r//a:ea/@typeface) = \"돋움체\""},{"kind":2,"language":"xpath","value":"//a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:latin/@typeface | //a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:ea/@typeface | //a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:cs/@typeface | //a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:sym/@typeface"},{"kind":2,"language":"xpath","value":"//a:r[not(a:latin/@typeface != a:ea/@typeface or a:latin/@typeface != a:cs/@typeface or a:latin/@typeface != a:sym/@typeface)]"},{"kind":2,"language":"xpath","value":"//a:t[text()='과일야채 항산화지수 비교']/ancestor::a:r/a:rPr/@b"},{"kind":2,"language":"xpath","value":"//c:catAx//a:ea/@typeface = \"돋움\""},{"kind":2,"language":"xpath","value":"//c:legend//a:ea/@typeface = \"돋움\""},{"kind":2,"language":"xpath","value":"//c:legend//a:defRPr/@sz"},{"kind":2,"language":"xpath","value":"//CHAR//text()[not(ancestor::HEADER)]"},{"kind":2,"language":"xpath","value":"//PAGEMARGIN[@Bottom='5669' and @Footer='2835' and @Gutter='0' and @Header='2835' and @Left='5669' and @Right='5669' and @Top='5668']\r\n"},{"kind":2,"language":"xpath","value":"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')])"},{"kind":2,"language":"xpath","value":"//PICTURE/descendant::SHAPECOMMENT[contains(text(),'그림A.jpg')]"},{"kind":2,"language":"xpath","value":"//TEXTART[@Text='전통주페어링특강안내']/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//CHAR[text()='한국의 전통주']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//TABLE/ROW[1]/CELL/@BorderFill"},{"kind":2,"language":"xpath","value":"//c:lineChart/c:grouping/@val"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[text()='한국의 전통주']/parent::TEXT/@CharShape]/@Height='2000'"},{"kind":2,"language":"xpath","value":"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(),'質的')])\r\n"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[text()='대한민국전통주살리기협회']/parent::TEXT/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//CHAR[text()='대한민국전통주살리기협회']"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//TABLE/ROW[1]/CELL/@BorderFill"},{"kind":2,"language":"xpath","value":"(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"},{"kind":2,"language":"xpath","value":"//a:t[text()='월평균 주종별 음주']/ancestor::a:r//a:ea/@typeface"},{"kind":2,"language":"xpath","value":"//a:t[text()='월평균 주종별 음주']/ancestor::a:r/a:rPr/@sz=1300"},{"kind":2,"language":"xpath","value":"//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='한국의 전통주']/ancestor::P[last()]/@ParaShape]/@Align"}] \ No newline at end of file +[{"kind":1,"language":"markdown","value":"# XPath Notebook\nDate: 2025-01-16     Time: 13:51:18"},{"kind":2,"language":"xpath","value":"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')"},{"kind":2,"language":"xpath","value":"//PAGEBORDERFILL[@Type='Both' or @Type='Even']/@BorferFill"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=1]/*[contains(local-name(), 'BORDER')]/@Type='DoubleSlim'"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=1]"},{"kind":2,"language":"xpath","value":"boolean(//CHARSHAPE[@Id=//CHAR[contains(text(),'‘즐거운 컬러푸드 영양교실’')]/parent::TEXT/@CharShape][BOLD])"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text()[1],'‘즐거운 컬러푸드 영양교실’')]/parent::TEXT/@CharShape]"},{"kind":2,"language":"xpath","value":"boolean(//CHARSHAPE[@Id=//CHAR[contains(text()[1],'‘즐거운 컬러푸드 영양교실’')]/parent::TEXT/@CharShape][BOLD])"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text())[1],'‘즐거운 컬러푸드 영양교실’']/parent::TEXT/@CharShape]"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//SECTION[1]//CHAR[text()='DIAT']/parent::TEXT/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[contains(text(),\"2024. 1. 27.\")]/parent::TEXT/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//BINDATA[@Id=//BINITEM[@Format=\"OLE\"]/@BinData]/text()"},{"kind":2,"language":"xpath","value":"//BINITEM[@Format=\"OLE\"]/@BinData"},{"kind":2,"language":"xpath","value":"//c:barDir/@val=\"col\""},{"kind":2,"language":"xpath","value":"(//a:t[text()='과일야채 항산화지수 비교']/ancestor::a:r//a:ea/@typeface) = \"돋움체\""},{"kind":2,"language":"xpath","value":"//a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:latin/@typeface | //a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:ea/@typeface | //a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:cs/@typeface | //a:t[text()='과일야채 항산화지수 비교']/ancestor::c:chart//a:sym/@typeface"},{"kind":2,"language":"xpath","value":"//a:r[not(a:latin/@typeface != a:ea/@typeface or a:latin/@typeface != a:cs/@typeface or a:latin/@typeface != a:sym/@typeface)]"},{"kind":2,"language":"xpath","value":"//a:t[text()='과일야채 항산화지수 비교']/ancestor::a:r/a:rPr/@b"},{"kind":2,"language":"xpath","value":"//c:catAx//a:ea/@typeface = \"돋움\""},{"kind":2,"language":"xpath","value":"//c:legend//a:ea/@typeface = \"돋움\""},{"kind":2,"language":"xpath","value":"//c:legend//a:defRPr/@sz"},{"kind":2,"language":"xpath","value":"//CHAR//text()[not(ancestor::HEADER)]"},{"kind":2,"language":"xpath","value":"//PAGEMARGIN[@Bottom='5669' and @Footer='2835' and @Gutter='0' and @Header='2835' and @Left='5669' and @Right='5669' and @Top='5668']\r\n"},{"kind":2,"language":"xpath","value":"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')])"},{"kind":2,"language":"xpath","value":"//PICTURE/descendant::SHAPECOMMENT[contains(text(),'그림A.jpg')]"},{"kind":2,"language":"xpath","value":"//TEXTART[@Text='전통주페어링특강안내']/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//CHAR[text()='한국의 전통주']/ancestor::RECTANGLE/descendant::WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//TABLE/ROW[1]/CELL/@BorderFill"},{"kind":2,"language":"xpath","value":"//c:lineChart/c:grouping/@val"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[text()='한국의 전통주']/parent::TEXT/@CharShape]/@Height='2000'"},{"kind":2,"language":"xpath","value":"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(),'質的')])\r\n"},{"kind":2,"language":"xpath","value":"//CHARSHAPE[@Id=//CHAR[text()='대한민국전통주살리기협회']/parent::TEXT/@CharShape]/@Height"},{"kind":2,"language":"xpath","value":"//CHAR[text()='대한민국전통주살리기협회']"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//TABLE/ROW[1]/CELL/@BorderFill"},{"kind":2,"language":"xpath","value":"(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"},{"kind":2,"language":"xpath","value":"//a:t[text()='월평균 주종별 음주']/ancestor::a:r//a:ea/@typeface"},{"kind":2,"language":"xpath","value":"//a:t[text()='월평균 주종별 음주']/ancestor::a:r/a:rPr/@sz=1300"},{"kind":2,"language":"xpath","value":"//PARASHAPE[@Id=//RECTANGLE//CHAR[text()='한국의 전통주']/ancestor::P[last()]/@ParaShape]/@Align"},{"kind":2,"language":"xpath","value":"//TABLE/ROW[1]/CELL/@BorderFill"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//TABLE/ROW[1]/CELL/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"},{"kind":2,"language":"xpath","value":"//BORDERFILL[@Id=//CELLZONE[@StartRowAddr=\"0\" and @EndRowAddr=\"0\" and @StartColAddr=\"0\" and @EndColAddr=\"2\"]/@BorderFill]/FILLBRUSH/WINDOWBRUSH/@FaceColor"}] \ No newline at end of file