From 682019bf744d322bdfc96bc4111adcd55cb1fd0b Mon Sep 17 00:00:00 2001 From: dragdra Date: Fri, 21 Feb 2025 16:19:52 +0900 Subject: [PATCH] =?UTF-8?q?(3-10)=20=EC=98=A4=EB=94=94=EC=98=A4=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=EC=9C=84=EC=B9=98=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- 250221_DIC_2521A_TEST.xlsx | Bin 0 -> 30686 bytes 250221_DIC_2521C_TEST.xlsx | Bin 0 -> 27567 bytes DIC_2521A.json | 2 +- DIC_2521B.json | 2 +- DIC_2521C.json | 2 +- DIC_2521D.json | 2 +- README.md | 155 +++++++++++++++++++------------------ z.xbook | 2 +- 9 files changed, 90 insertions(+), 80 deletions(-) create mode 100644 250221_DIC_2521A_TEST.xlsx create mode 100644 250221_DIC_2521C_TEST.xlsx diff --git a/.gitignore b/.gitignore index 4e287b3..aad8ac2 100644 --- a/.gitignore +++ b/.gitignore @@ -135,4 +135,7 @@ output # xpath notebook .xbook -회차별채점자료/*/정답파일 \ No newline at end of file +회차별채점자료/*/정답파일 + +# 열려있는 xlsx파일 +~*.xlsx diff --git a/250221_DIC_2521A_TEST.xlsx b/250221_DIC_2521A_TEST.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3e2ba68d4a0de82b13fd6ce5a0ea9436244fc2cd GIT binary patch literal 30686 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 literal 0 HcmV?d00001 diff --git a/250221_DIC_2521C_TEST.xlsx b/250221_DIC_2521C_TEST.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ea30cc90102216fc7af639f00e0d0ca5fdf7b113 GIT binary patch literal 27567 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 Fe*+9v+pGWp literal 0 HcmV?d00001 diff --git a/DIC_2521A.json b/DIC_2521A.json index b33d479..fc50fd3 100644 --- a/DIC_2521A.json +++ b/DIC_2521A.json @@ -361,7 +361,7 @@ "point": 2 }, "30": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", + "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", "point": 2 }, "31": { diff --git a/DIC_2521B.json b/DIC_2521B.json index 9e00950..acbc21e 100644 --- a/DIC_2521B.json +++ b/DIC_2521B.json @@ -363,7 +363,7 @@ "point": 2 }, "30": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", + "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", "point": 2 }, "31": { diff --git a/DIC_2521C.json b/DIC_2521C.json index e758f4e..92c480c 100644 --- a/DIC_2521C.json +++ b/DIC_2521C.json @@ -361,7 +361,7 @@ "point": 2 }, "30": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", + "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", "point": 2 }, "31": { diff --git a/DIC_2521D.json b/DIC_2521D.json index d7ce7c9..7934991 100644 --- a/DIC_2521D.json +++ b/DIC_2521D.json @@ -363,7 +363,7 @@ "point": 2 }, "30": { - "ele": "//CRTrackArr/CRAudioTrackArr/CRTrackList[@Name='오디오1']/CRTrackClip[@Pos='0']", + "ele": "//CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')]", "point": 2 }, "31": { diff --git a/README.md b/README.md index 7bc43e8..559bd3a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ * PSD 관련해서 좀 더 추가적인 채점이 되도록 기능 개선 * PSD 라이브러리 변경도 생각해볼 것 -### psdExport.js +## psdExport.js nodejs 기반, scoring.json 파일에 채점기준표 만들어서 채점 @@ -22,120 +22,127 @@ nodejs 기반, scoring.json 파일에 채점기준표 만들어서 채점 2. 지정 폴더 내 gmep 파일 scoring.json 파일 내 3 참조해서 채점 3. 채점 완료 후 output.xlsx 생성 -### xpathTest.js +## xpathTest.js xpath 테스트 용 -### copyFiles.py +## copyFiles.py 특정 폴더 내에 DIC 답안지를 output 폴더로 시험 유형(1교시: A, 2교시: B, 3교시: C) 별로 구분해서 복사 -### 오류 및 수정 필요 부분 +## 오류 및 수정 필요 부분 -1. (해결) 문제3-9번 자막 위치 설정 '화면 정가운데 아래' 판별 시 자막의 길이에 따라 위치 기준이 바뀜 - * 텍스트 유사도 판별을 거치게 되면 정답으로 인정되는 텍스트의 길이도 유동적이므로 위치도 유동적으로 변경되어야 함 - * 수정예상방안 : 글자 수 마다 x,y 위치 값 따로 설정하는 방식 - * 현재 최소좌표와 최대좌표 사이의 값이면 정답으로 채점되도록 변경 +### 1. (3-9) 자막 위치 설정 '화면 정가운데 아래' 판별 시 자막의 길이에 따라 위치 기준이 바뀜 -2. .jpg / .psd 채점 파일 예외사항 - * 멀티미디어-003256-조은우(A) : 수험번호를 잘못입력한 psd 파일까지 총 4개의 psd파일 존재 - * 멀티미디어-003666-최우진(A) : 1번 jpg psd 파일 누락 - * 멀티미디어-005647-최영훈(A) : 2번 psd 파일 오류(2번 jpg파일의 확장자만 psd로 변경) - * 멀티미디어-003361-장하린(B) : - * 멀티미디어-001273-허윤서(C) : 수험번호 없는 psd파일 (멀티미디어_01-허윤서.psd)이 포함 - * 멀티미디어-005156-임예지(D) : +* 텍스트 유사도 판별을 거치게 되면 정답으로 인정되는 텍스트의 길이도 유동적이므로 위치도 유동적으로 변경되어야 함 +* 수정예상방안 : 글자 수 마다 x,y 위치 값 따로 설정하는 방식 +* [x] 현재 최소좌표와 최대좌표 사이의 값이면 정답으로 채점되도록 변경 - 1. 1번 파일 누락, 2번 파일만 작성 - * 현재 차례대로 읽어 들여 채점 하는 방식 - -> 1번 파일이 누락 된 수험자는 2번 파일이 1번 파일로 인식되어 채점 - -> 1번 파일이 누락 되어 있으면 건너 뛰고 2번 파일을 채점하도록 수정해야 함 +### 2. .jpg / .psd 채점 파일 예외사항 - 2. 3개 이상 파일이 있는 경우 +* 멀티미디어-003256-조은우(A) : 수험번호를 잘못입력한 psd 파일까지 총 4개의 psd파일 존재 +* 멀티미디어-003666-최우진(A) : 1번 jpg psd 파일 누락 +* 멀티미디어-005647-최영훈(A) : 2번 psd 파일 오류(2번 jpg파일의 확장자만 psd로 변경) +* 멀티미디어-003361-장하린(B) : +* 멀티미디어-001273-허윤서(C) : 수험번호 없는 psd파일 (멀티미디어_01-허윤서.psd)이 포함 +* 멀티미디어-005156-임예지(D) : - ![alt text](image.png) - * psd 1번, 2번 이후 3번째 psd 파일이 존재 하는 경우 - * 프로그램 실행 예상 결과는 scoringResult[] 리스트의 1번 2번 인덱스에 psd가 저장되고 3번에 gmep가 저장되어야 하지만 - 4개이상의 psd 파일이 있는 경우 scoringResult[4] 위치까지 데이터가 저장됨 - * gmep의 채점결과는 scoringResult[3]에 직접 저장하므로 - * 결과 예상은 scoringResult[3]까지 저장되어야 하지만 scoringResult[4]에 더미 값이 저장됨 +1. 1번 파일 누락, 2번 파일만 작성 -3. [3-15] [3-18] [3-21] 이미지 클립 트렌지션 xpath - * 곰믹스-C형-003109-최시아 - * [3-18] 이미지2.jpg 클립 트렌지션 [문 열기(앞으로 이동, 재생 시간 : 1.00)] 채점 문항 - * '이미지2.jpg'가 비디오트랙에 2개 연속으로 삽입되어 있음 - * 첫번째 '이미지2.jpg'의 클립 트렌지션은 채점기준에 부합하게 적용 되어있음 - * 두번째 '이미지2.jpg'의 클립 트렌지션은 - [3-21]문항에 적용되어야 할 '이미지1.jpg' 클립 트렌지션 [디졸브(앞으로 이동, 재생 시간 : 2.00)] 이 적용되어있음 (오적용 감점대상) - * 프로그램 구조상 동일한 이미지가 있을 경우 마지막에 적용된 이미지의 클립 트렌지션을 확인하고 채점 - * 현재 결과는 감점 처리 + * 현재 차례대로 읽어 들여 채점 하는 방식 + * 1번 파일이 누락 된 수험자는 2번 파일이 1번 파일로 인식되어 채점 + * 1번 파일이 누락 되어 있으면 건너 뛰고 2번 파일을 채점하도록 수정해야 함 - ![alt text](image-1.png) +2. 3개 이상 파일이 있는 경우 -4. (해결) 곰믹스-B형-000370-김태연 - * (3-1) 미디어 소스 순서 : 동영상.mp4 > 이미지2.jpg > 이미지1.jpg > 이미지3.jpg - * Type="0" 속성을 필터링 하기 위해서 + ![alt text](image.png) - ```xml - - ``` +* psd 1번, 2번 이후 3번째 psd 파일이 존재 하는 경우 + * 프로그램 실행 예상 결과는 scoringResult[] 리스트의 1번 2번 인덱스에 psd가 저장되고 3번에 gmep가 저장되어야 하지만 + 4개이상의 psd 파일이 있는 경우 scoringResult[4] 위치까지 데이터가 저장됨 + * gmep의 채점결과는 scoringResult[3]에 직접 저장하므로 + * 결과 예상은 scoringResult[3]까지 저장되어야 하지만 scoringResult[4]에 더미 값이 저장됨 - * 소스코드 변경 +### 3. (해결) [3-15] [3-18] [3-21] 이미지 클립 트렌지션 xpath - ```javascript - const clipIndexes = xpath.select('CRTrackClip[not(@Type="0")]/@ClipIndex', trackListNode); - ``` +* [x] 곰믹스-C형-003109-최시아 + * [3-18] 이미지2.jpg 클립 트렌지션 [문 열기(앞으로 이동, 재생 시간 : 1.00)] 채점 문항 + * '이미지2.jpg'가 비디오트랙에 2개 연속으로 삽입되어 있음 + * 첫번째 '이미지2.jpg'의 클립 트렌지션은 채점기준에 부합하게 적용 되어있음 + * 두번째 '이미지2.jpg'의 클립 트렌지션은 + [3-21]문항에 적용되어야 할 '이미지1.jpg' 클립 트렌지션 [디졸브(앞으로 이동, 재생 시간 : 2.00)] 이 적용되어있음 (오적용 감점대상) + * **프로그램 구조상 동일한 이미지가 있을 경우 마지막에 적용된 이미지의 클립 트렌지션을 확인하고 채점** + * [x] **현재(250221기준) 검색된 '이미지n.jpg'를 기준으로 가장 먼저 나오는 클립의 트렌지션을 채점하도록 변경** + ![alt text](image-1.png) + +### 4. (해결) 곰믹스-B형-000370-김태연 + +* (3-1) 미디어 소스 순서 : 동영상.mp4 > 이미지2.jpg > 이미지1.jpg > 이미지3.jpg + * Type="0" 속성을 필터링 하기 위해서 + + ```xml + + ``` + + * 소스코드 변경 + + ```javascript + const clipIndexes = xpath.select('CRTrackClip[not(@Type="0")]/@ClipIndex', trackListNode); + ``` * 이미지2.jpg-이미지 클립길이 - * [3-13] 이미지 클립 길이 [5.00] >> json파일 내부 xpath오타 수정 + * [3-13] 이미지 클립 길이 [5.00] >> json파일 내부 xpath오타 수정 * 이미지1.jpg-클립 트랜지션 - * [3-18] 문 열기(앞으로 이동, 재생 시간 : 1.00) + * [3-18] 문 열기(앞으로 이동, 재생 시간 : 1.00) ```xml ``` - * ClipIndex="2" 인덱스 값은 이미지를 참조하고 있지만 실제로는 더미 태그 >> Type 속성까지 확인하도록 xpath 변경 - + * ClipIndex="2" 인덱스 값은 이미지를 참조하고 있지만 실제로는 더미 태그 >> Type 속성까지 확인하도록 xpath 변경 * 이미지 클립 트랜지션 항목 Range 끝점과 시작점 차이로 길이 계산하도록 변경 -5. CRTrackClip +1. CRTrackClip * Type="0" ClipIndex="-1" : 공백 -5. todo - * 자막 위치 검사하는 로직 원복 - * 파일 명 split 해서 최대한 채점 파일 추려내기 - * 이미지 클립 트랜지션 항목 Range 끝점과 시작점 차이로 길이 계산하도록 변경 - ->> 곰믹스-B형-001551-이정우 - * 이미지2.jpg-클립 트랜지션 (완료) +* 곰믹스-B형-001551-이정우 + * 이미지2.jpg-클립 트랜지션 (완료) 요부분도..맞는데 오답처리되어있네요! +* 곰믹스B형-001393-우주원 + * 텍스트 틀렸는데 텍스트 점수가 정답으로 들어감 (완료) ->> 곰믹스B형-001393-우주원 - * 텍스트 틀렸는데 텍스트 점수가 정답으로 들어감 (완료) - ->> C형-000250-안윤 +* C형-000250-안윤 이친구도 동영상이 0.0에서 시작하는게 아니라서 그런지 배속이 틀렸다고 되어있긴합니다..ㅎㅎ (완료) - * 앞에 공백구간이 있을경우 CRTrackClip[1] 태그가 공백구간에 해당되서 + * 앞에 공백구간이 있을경우 CRTrackClip[1] 태그가 공백구간에 해당되서 xpath구문에 공백구간 제외하도록 변경 ->> 곰믹스-C형-005205-황채미 +* 곰믹스-C형-005205-황채미 이미지3의 오버레이(내려앉는:속도8) =>속도5로 되어있는데 정답으로 됨 요부분도 같이 확인부탁드릴게요수치가 잘못 체크된건지..ㅎㅎ (완료) - * 속성값 검색하는 구문 수정완료 + * 속성값 검색하는 구문 수정완료 ->> 곰믹스-B형-001551-이정우 +* 곰믹스-B형-001551-이정우 자막(연못의 연잎들) 시작시간(5.10) (완료) - * 자막 클립 리스트 중 1번, 2번 길이를 합한 길이로 채점 + * 자막 클립 리스트 중 1번, 2번 길이를 합한 길이로 채점 ->> 곰믹스-B형-003340-이안나 -'초록빛 이파리들...'자막 시작시간 오답처리 (완료) - * 자막 클립의 앞이 잘리게 되면 트림시간이 생성되어 CRTrackClip태그의 속성값들이 변경 됨 - * CRTrackClip 태그 ClipLength, Length, Pos 속성값 비교 연산 필요 - * ClipLength - Length = Pos +* 곰믹스-B형-003340-이안나 + * '초록빛 이파리들...'자막 시작시간 오답처리 (완료) + * 자막 클립의 앞이 잘리게 되면 트림시간이 생성되어 CRTrackClip태그의 속성값들이 변경 됨 + * CRTrackClip 태그 ClipLength, Length, Pos 속성값 비교 연산 필요 + * ClipLength - Length = Pos 1. 클립 조각 발생 스킵 여부 (5프레임) - - 멀티미디어-003678-신은재(A) 2프레임 : (3-1) 배열 점수 추가 + * 멀티미디어-003678-신은재(A) 2프레임 : (3-1) 배열 점수 추가 2. 배열(모션이미지클립 처리여부) -3. 오디오 \ No newline at end of file + +3. 오디오 + * 앞부분 공백이 없으면 Pos속성값과 무관하게 0부터 시작한것으로 처리 + * \ 오디오클립 태그가 하나라도 있어야 함 + * \ Count속성이 1이상 + * 첫번째 클립이 공백이 아닐것 + + ```xpath + //CRTrackList[@Name='오디오1'][@Count>='1']/CRTrackClip[1][not(@ClipIndex='-1')] + ``` diff --git a/z.xbook b/z.xbook index de698e8..4f13e24 100644 --- a/z.xbook +++ b/z.xbook @@ -1 +1 @@ -[{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength=\"-1\")]/@ClipIndex\r\n//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength='-1')]"}] \ No newline at end of file +[{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength=\"-1\")]/@ClipIndex\r\n//CRTrackList[@Name=\"비디오1\"]//CRTrackClip[not(@Length<\"10\" and @ClipLength='-1')]"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"오디오1\"][@Count>'1']/CRTrackClip[position()=1 and not(@ClipIndex='-1')]"},{"kind":2,"language":"xpath","value":"//CRTrackList[@Name=\"오디오1\"][@Count>'1']/CRTrackClip[1][not(@ClipIndex='-1')]"},{"kind":1,"language":"markdown","value":""}] \ No newline at end of file