From ddd919c20751abd002ce6489a5601ed868ae4b64 Mon Sep 17 00:00:00 2001 From: dragdra Date: Tue, 8 Apr 2025 16:11:38 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A9=94=EC=9D=B8=EC=86=8C=EC=8A=A4=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20=EC=8B=9C=ED=97=98?= =?UTF-8?q?=ED=83=80=EC=9E=85=EB=B3=84=20=EC=B1=84=EC=A0=90=20=ED=95=9C?= =?UTF-8?q?=EB=B2=88=EC=97=90=20=EC=B2=98=EB=A6=AC=20=EA=B0=80=EB=8A=A5?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 250407_DIC_2503A_TEST.xlsx | Bin 27242 -> 0 bytes 250408_DIC_2503A_채점결과.xlsx | Bin 0 -> 160311 bytes 250408_DIC_2503B_채점결과.xlsx | Bin 0 -> 217710 bytes 250408_DIC_2503C_채점결과.xlsx | Bin 0 -> 161779 bytes psdExport_2.js | 466 ++++++++++++++++----------------- 5 files changed, 227 insertions(+), 239 deletions(-) delete mode 100644 250407_DIC_2503A_TEST.xlsx create mode 100644 250408_DIC_2503A_채점결과.xlsx create mode 100644 250408_DIC_2503B_채점결과.xlsx create mode 100644 250408_DIC_2503C_채점결과.xlsx diff --git a/250407_DIC_2503A_TEST.xlsx b/250407_DIC_2503A_TEST.xlsx deleted file mode 100644 index 3c89f57fae4aeea36d9e112068e2e3b8e6430de5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27242 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 literal 0 HcmV?d00001 diff --git a/250408_DIC_2503C_채점결과.xlsx b/250408_DIC_2503C_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2dc7495e2b73f6cb7954b0620b27656f841c4f45 GIT binary patch literal 161779 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 XcI`jR(FU8 literal 0 HcmV?d00001 diff --git a/psdExport_2.js b/psdExport_2.js index 9aaad1d..41cad1e 100644 --- a/psdExport_2.js +++ b/psdExport_2.js @@ -11,266 +11,123 @@ const getGpdpScore = require('./gpdpScoring.js'); const getToday = require('./getToday.js'); const todayDate = getToday(); -// -------------------------------------------------------- -// const scoringJson = require('./DIC_2503A.json'); -const scoringJson = require('./DIC_2503B.json'); -// const scoringJson = require('./DIC_2503C.json'); -// const scoringJson = require('./DIC_2503D.json'); +const examType = [ + 'A', + 'B', + 'C', + // 'D' +]; +const examRound = '2503'; -// -------------------------------------------------------- -// const answerFilesDir = './output/A/DIC'; -const answerFilesDir = './output/B/DIC'; -// const answerFilesDir = './output/C/DIC'; -// const answerFilesDir = './output/D/DIC'; +// testMode가 true일 경우 TEST 폴더에 있는 답안 파일을 읽어옴 +// const testMode = true; +const testMode = false; -// TEST -// const answerFilesDir = './output/A/TEST'; -// const answerFilesDir = './output/B/TEST'; -// const answerFilesDir = './output/C/TEST'; -// const answerFilesDir = './output/D/TEST'; +const outputExcelFiles = []; -// -------------------------------------------------------- -// const outputExcelFile = './'+todayDate+'_DIC_2503A_채점결과.xlsx'; -const outputExcelFile = './'+todayDate+'_DIC_2503B_채점결과.xlsx'; -// const outputExcelFile = './'+todayDate+'_DIC_2503C_채점결과.xlsx'; -// const outputExcelFile = './'+todayDate+'_DIC_2503D_채점결과.xlsx'; +examType.forEach(type => { + const scoringJson = require(`./DIC_${examRound}${type}.json`); + const answerFilesDir = `./output/${type}/${testMode ? 'TEST' : 'DIC'}`; + const outputExcelFile = `./${todayDate}_DIC_${examRound}${type}_${testMode ? 'TEST.xlsx' : '채점결과.xlsx'}`; -// TEST -// const outputExcelFile = './'+todayDate+'_DIC_2503A_TEST.xlsx'; -// const outputExcelFile = './'+todayDate+'_DIC_2503B_TEST.xlsx'; -// const outputExcelFile = './'+todayDate+'_DIC_2503C_TEST.xlsx'; -// const outputExcelFile = './'+todayDate+'_DIC_2503D_TEST.xlsx'; - -// -------------------------------------------------------- - - -// 답안 폴더 내부에 디렉토리가 아닌 일반 파일이 있을 경우 디렉토리만 필터링 해서 불러옴 -const studentDirs = fs.readdirSync(answerFilesDir).filter(file => { - const filePath = path.join(answerFilesDir, file); - return fs.statSync(filePath).isDirectory(); -}); - -// 채점 결과 리스트 -const scoringResultList = []; -const psdData = []; - -studentDirs.forEach(student => { - // 맥에서 한글 디렉토리 이름을 읽어서 엑셀에 저장 할 시 자소 분리가 되어 저장되는 문제 노말라이즈해서 해결 - const name = student.normalize('NFC'); - const studentDir = path.join(answerFilesDir, student); - const psdFiles = fs.readdirSync(studentDir).filter(file => file.endsWith('.psd')); - // DIAT시험 프로젝트로 생성시 gmep확장자로 - // 교육용 프로젝프로 생성시 gmdp확장자로 생성됨 - // 두 경우 모두 처리 - const gmepFile = fs.readdirSync(studentDir).filter( - file => file.endsWith('.gmep') || file.endsWith('.gmdp') - ); - - // 곰픽 파일 gpdp 파일 이거나 xml 파일 - const gpdpFiles = fs.readdirSync(studentDir).filter( - file => file.endsWith('.xml') - ); - - // 학생 이름을 key로 하는 객체 생성 - // 채점결과 - const scoringResult = { - 0: name - }; - - psdFiles.forEach((psdFile, index) => { - const psdPath = path.join('./', studentDir, psdFile); - console.log(`Reading ${psdPath}...`); - try { - const psdFileData = psd.fromFile(psdPath); - psdFileData.parse(); - psdData[index] = psdFileData; - scoringResult[index + 1] = getScore(psdData, scoringJson, index); - } catch (error) { - console.error(`Error reading PSD file: ${psdPath}`, error); - } + // 답안 폴더 내부에 디렉토리가 아닌 일반 파일이 있을 경우 디렉토리만 필터링 해서 불러옴 + const studentDirs = fs.readdirSync(answerFilesDir).filter(file => { + const filePath = path.join(answerFilesDir, file); + return fs.statSync(filePath).isDirectory(); }); - gpdpFiles.forEach((gpdpFile, index) => { - const gpdpPath = path.join('./', studentDir, gpdpFile); - console.log(`Reading ${gpdpPath}...`); - const xmlString = fs.readFileSync(gpdpPath, 'utf8'); - // XML 문자열을 파싱하여 XML 문서 객체로 변환 - const xmlDocument = new DOMParser().parseFromString(xmlString, 'application/xml'); - // console.log('xmlDocument:', xmlDocument); + // 채점 결과 리스트 + const scoringResultList = []; + const psdData = []; - scoringResult[index + 1] = getGpdpScore(xmlDocument, scoringJson, index + 4); - }); - gmepFile.forEach((gmep, index) => { - const gmepPath = path.join('./', studentDir, gmep); - console.log(`Reading ${gmepPath}...`); + studentDirs.forEach(student => { + // 맥에서 한글 디렉토리 이름을 읽어서 엑셀에 저장 할 시 자소 분리가 되어 저장되는 문제 노말라이즈해서 해결 + const name = student.normalize('NFC'); + const studentDir = path.join(answerFilesDir, student); + const psdFiles = fs.readdirSync(studentDir).filter(file => file.endsWith('.psd')); + // DIAT시험 프로젝트로 생성시 gmep확장자로 + // 교육용 프로젝프로 생성시 gmdp확장자로 생성됨 + // 두 경우 모두 처리 + const gmepFile = fs.readdirSync(studentDir).filter( + file => file.endsWith('.gmep') || file.endsWith('.gmdp') + ); - const xmlString = fs.readFileSync(gmepPath, 'utf8'); - // XML 문자열을 파싱하여 XML 문서 객체로 변환 - const xmlDocument = new DOMParser().parseFromString(xmlString, 'application/xml'); - // console.log('xmlDocument:', xmlDocument); + // 곰픽 파일 gpdp 파일 이거나 xml 파일 + const gpdpFiles = fs.readdirSync(studentDir).filter( + file => file.endsWith('.xml') + ); - scoringResult[3] = getGmepScore(xmlDocument, scoringJson, 2); - }); - scoringResultList.push(scoringResult); -}); + // 학생 이름을 key로 하는 객체 생성 + // 채점결과 + const scoringResult = { + 0: name + }; -// // Flatten the resultData for better representation in Excel -// const flattenedData = scoringResultList.map(student => { -// // const name = student["0"]; -// const flattened = { "학생": student["0"] }; - -// // excel에 표시하지 않을 key값들 -// const exceptKeys = [ -// "0", // 학생 이름 항상 제외 -// // "1", // psd1 -// // "2", // psd2 -// ] -// const exceptSubkeys = [ -// "videoStartTime", -// "openingStartTime", -// ]; -// Object.keys(student).forEach(key => { -// if (exceptKeys.includes(key)) { -// return; -// } -// Object.keys(student[key]).forEach(subKey => { -// if (exceptSubkeys.includes(subKey)) { -// return; -// } -// flattened[`${key}-${subKey}`] = student[key][subKey]; -// }); -// }); -// return flattened; -// }); - -/** - * scoringResultList 배열을 엑셀에 출력하기 위한 데이터 정리 함수 - * @param {Array} scoringResultList - 학생별 채점 결과 리스트 - * @returns {Array} - 엑셀에 출력할 데이터 배열 - */ -function prepareExcelData(scoringResultList) { - return scoringResultList.map(student => { - // const flattened = { "학생": student["0"] }; // 학생 이름을 첫 번째 열로 설정 - const flattened = { "문항": student["0"] }; // 행열을 변환 할 경우 첫 행의 제목을 "문항"으로 설정 - - // 제외할 키와 서브키 정의 - const exceptKeys = [ - "0", // 학생 이름 제외 - // "1", // psd1 - // "2", // psd2 - ]; - const exceptSubkeys = ["videoStartTime", "openingStartTime"]; // 제외할 서브키 - - // 학생 데이터 순회 - Object.keys(student).forEach(key => { - if (exceptKeys.includes(key)) { - return; // 제외할 키는 건너뜀 - } - - // 서브키 순회 - if (typeof student[key] === "object") { - Object.keys(student[key]).forEach(subKey => { - if (exceptSubkeys.includes(subKey)) { - return; // 제외할 서브키는 건너뜀 - } - flattened[`${key}-${subKey}`] = student[key][subKey]; - }); - } else { - // 서브키가 없는 경우 - flattened[key] = student[key]; + psdFiles.forEach((psdFile, index) => { + const psdPath = path.join('./', studentDir, psdFile); + console.log(`Reading ${psdPath}...`); + try { + const psdFileData = psd.fromFile(psdPath); + psdFileData.parse(); + psdData[index] = psdFileData; + scoringResult[index + 1] = getScore(psdData, scoringJson, index); + } catch (error) { + console.error(`Error reading PSD file: ${psdPath}`, error); } }); + gpdpFiles.forEach((gpdpFile, index) => { + const gpdpPath = path.join('./', studentDir, gpdpFile); + console.log(`Reading ${gpdpPath}...`); - return flattened; - }); -} -// console.log(flattenedData); -const flattenedData = prepareExcelData(scoringResultList); + const xmlString = fs.readFileSync(gpdpPath, 'utf8'); + // XML 문자열을 파싱하여 XML 문서 객체로 변환 + const xmlDocument = new DOMParser().parseFromString(xmlString, 'application/xml'); + // console.log('xmlDocument:', xmlDocument); -function transposeData(data) { - // 데이터가 없으면 빈 배열 반환 - if (data.length === 0) return []; - - // 첫 번째 객체의 키(열 제목) 가져오기 - const keys = Object.keys(data[0]); - - // 행과 열을 변환 - const transposed = keys.map(key => { - const row = { "항목": key }; // 각 열 제목을 "항목"으로 설정 - data.forEach((item, index) => { - //console.log(data[index]['문항']); - row[data[index]['문항']] = item[key]; // 각 학생의 데이터를 열로 추가 + scoringResult[index + 1] = getGpdpScore(xmlDocument, scoringJson, index + 4); }); - return row; + gmepFile.forEach((gmep, index) => { + const gmepPath = path.join('./', studentDir, gmep); + console.log(`Reading ${gmepPath}...`); + + const xmlString = fs.readFileSync(gmepPath, 'utf8'); + // XML 문자열을 파싱하여 XML 문서 객체로 변환 + const xmlDocument = new DOMParser().parseFromString(xmlString, 'application/xml'); + // console.log('xmlDocument:', xmlDocument); + + scoringResult[3] = getGmepScore(xmlDocument, scoringJson, 2); + }); + scoringResultList.push(scoringResult); }); - return transposed; -} + const flattenedData = prepareExcelData(scoringResultList); + const transposedData = transposeData(flattenedData); -const transposedData = transposeData(flattenedData); -// const transposedData = transposeData(flattenedData).slice(1) + // 엑셀 파일 생성 + const worksheet = XLSX.utils.json_to_sheet(transposedData, { skipHeader: true }); + const workbook = XLSX.utils.book_new(); -// 엑셀 파일 생성 -const worksheet = XLSX.utils.json_to_sheet(transposedData, {skipHeader: true}); -const workbook = XLSX.utils.book_new(); + // 열 너비 계산 + const columnWidths = Object.keys(transposedData[0]).map(key => { + // 각 열의 최대 길이를 계산 + const maxLength = Math.max( + // key.length, // 열 제목의 길이 + // ...transposedData.map(row => (row[key] ? row[key].toString().length : 0)) // 각 셀의 데이터 길이 + 4 // 고정 너비 + ); + return { wch: maxLength + 1 }; // 여유 공간 추가 + }); -// 열 너비 계산 -const columnWidths = Object.keys(transposedData[0]).map(key => { - const maxLength = Math.max( - // key.length, // 열 제목의 길이 - // ...transposedData.map(row => (row[key] ? row[key].toString().length : 0)) // 각 셀의 데이터 길이 - 4 // 고정 너비 - ); - return { wch: maxLength + 1 }; // 여유 공간 추가 + // 열 너비 설정 + worksheet['!cols'] = columnWidths; + // Add the worksheet to the workbook + XLSX.utils.book_append_sheet(workbook, worksheet, '채점 결과'); + + // 엑셀 파일 저장 + XLSX.writeFile(workbook, outputExcelFile); + outputExcelFiles.push(outputExcelFile); }); - -// 열 너비 설정 -worksheet['!cols'] = columnWidths; -// Add the worksheet to the workbook -XLSX.utils.book_append_sheet(workbook, worksheet, '채점 결과'); - -// 엑셀 파일 저장 -XLSX.writeFile(workbook, outputExcelFile); -console.log('채점 결과가 ' + outputExcelFile + ' 파일에 저장되었습니다.'); - -/** - * 자막 태그의 인덱스를 구할 때 사용 - * 1. CRTrackClip 요소의 순서에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 - * 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 - */ -function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) { - let trackClipNode = null; - - // 동영상 자막이면 2, 오프닝 자막이면 1, 그 외는 0 - const subtitleOrder = type === 'video' ? 2 : type === 'opening' ? 1 : null; - const startTime = type === 'video' ? videoStartTime : openingStartTime; - - // xpath 구문을 통해 CRTrackClip 요소의 ClipIndex를 찾음 - const trackClipNode1 = xpath.select1(`//CRTrackList[@Name='텍스트' or @Name='비디오2']/CRTrackClip[not(@ClipIndex='-1')][${subtitleOrder}]`, xmlDoc); - const trackClipNode2 = xpath.select1(`//CRTrackList[@Name='텍스트' or @Name='비디오2']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = ${startTime}]`, xmlDoc); - - return trackClipNode = trackClipNode1 ?? trackClipNode2; -} - -/** - * 자막텍스트를 이용해 자막 태그의 인덱스를 구할 때 사용 - * 1. 자막 텍스트의 유사도를 판별 - * 2. 자막텍스트와 일치하는 자막요소(CROWneUnit)의 순서를 구함 - */ -function getClipIndexBySubtitle(xmlDoc, search) { - // 1. search값이 일치하지 않는 경우 : count가 0이 되어 @ClipIndex = 0 / CROwneUnit[1]을 가리킴 [오류] - // 2. search값이 일치하는 경우 - // 1) search값이 CROwneUnit[1]이면 : preceding-sibling::CROwneUnit이 없어서 @ClipIndex = 0 / CROwneUnit[1]을 가리킴 [정상] - // 2) search값이 CROwneUnit[2]이면 : preceding-sibling::CROwneUnit이 한개 있으므로 @ClipIndex = 1 / CROwneUnit[2]을 가리킴 [정상] ... - if (!search) { - return null; - } - const searchResult = search ? findSimilarString(xmlDoc, search, 0.8) : null; - const cROwneUnitPreceding = searchResult ? xpath.select(`//CROwneUnit[CRCUnitArr[@Name='${searchResult}']]/preceding-sibling::CROwneUnit`, xmlDoc) : null; - - const clipIndex = cROwneUnitPreceding ? cROwneUnitPreceding.length : null; - return clipIndex; -} +console.log('채점 결과가 ' + outputExcelFiles + ' 파일에 저장되었습니다.'); // xml 형식의 gmep 파일을 읽어서 점수를 계산 // scoring.json 파일 내에 있는 ele 요소는 xpath 형식으로 접근하여 요소를 탐색하고 나오는 값을 value와 비교하여 점수를 계산 @@ -772,3 +629,134 @@ function getScore(psdData, scoring, index) { scoringResult['총점'] = totalScore; return scoringResult; } + +/** + * 자막 태그의 인덱스를 구할 때 사용 + * 1. CRTrackClip 요소의 순서에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 + * 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함 + */ +function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) { + let trackClipNode = null; + + // 동영상 자막이면 2, 오프닝 자막이면 1, 그 외는 0 + const subtitleOrder = type === 'video' ? 2 : type === 'opening' ? 1 : null; + const startTime = type === 'video' ? videoStartTime : openingStartTime; + + // xpath 구문을 통해 CRTrackClip 요소의 ClipIndex를 찾음 + const trackClipNode1 = xpath.select1(`//CRTrackList[@Name='텍스트' or @Name='비디오2']/CRTrackClip[not(@ClipIndex='-1')][${subtitleOrder}]`, xmlDoc); + const trackClipNode2 = xpath.select1(`//CRTrackList[@Name='텍스트' or @Name='비디오2']/CRTrackClip[sum(preceding-sibling::CRTrackClip/@Length) = ${startTime}]`, xmlDoc); + + return trackClipNode = trackClipNode1 ?? trackClipNode2; +} + +/** + * 자막텍스트를 이용해 자막 태그의 인덱스를 구할 때 사용 + * 1. 자막 텍스트의 유사도를 판별 + * 2. 자막텍스트와 일치하는 자막요소(CROWneUnit)의 순서를 구함 + */ +function getClipIndexBySubtitle(xmlDoc, search) { + // 1. search값이 일치하지 않는 경우 : count가 0이 되어 @ClipIndex = 0 / CROwneUnit[1]을 가리킴 [오류] + // 2. search값이 일치하는 경우 + // 1) search값이 CROwneUnit[1]이면 : preceding-sibling::CROwneUnit이 없어서 @ClipIndex = 0 / CROwneUnit[1]을 가리킴 [정상] + // 2) search값이 CROwneUnit[2]이면 : preceding-sibling::CROwneUnit이 한개 있으므로 @ClipIndex = 1 / CROwneUnit[2]을 가리킴 [정상] ... + if (!search) { + return null; + } + const searchResult = search ? findSimilarString(xmlDoc, search, 0.8) : null; + const cROwneUnitPreceding = searchResult ? xpath.select(`//CROwneUnit[CRCUnitArr[@Name='${searchResult}']]/preceding-sibling::CROwneUnit`, xmlDoc) : null; + + const clipIndex = cROwneUnitPreceding ? cROwneUnitPreceding.length : null; + return clipIndex; +} + + +// // Flatten the resultData for better representation in Excel +// const flattenedData = scoringResultList.map(student => { +// // const name = student["0"]; +// const flattened = { "학생": student["0"] }; + +// // excel에 표시하지 않을 key값들 +// const exceptKeys = [ +// "0", // 학생 이름 항상 제외 +// // "1", // psd1 +// // "2", // psd2 +// ] +// const exceptSubkeys = [ +// "videoStartTime", +// "openingStartTime", +// ]; +// Object.keys(student).forEach(key => { +// if (exceptKeys.includes(key)) { +// return; +// } +// Object.keys(student[key]).forEach(subKey => { +// if (exceptSubkeys.includes(subKey)) { +// return; +// } +// flattened[`${key}-${subKey}`] = student[key][subKey]; +// }); +// }); +// return flattened; +// }); + +/** + * scoringResultList 배열을 엑셀에 출력하기 위한 데이터 정리 함수 + * @param {Array} scoringResultList - 학생별 채점 결과 리스트 + * @returns {Array} - 엑셀에 출력할 데이터 배열 + */ +function prepareExcelData(scoringResultList) { + return scoringResultList.map(student => { + // const flattened = { "학생": student["0"] }; // 학생 이름을 첫 번째 열로 설정 + const flattened = { "문항": student["0"] }; // 행열을 변환 할 경우 첫 행의 제목을 "문항"으로 설정 + + // 제외할 키와 서브키 정의 + const exceptKeys = [ + "0", // 학생 이름 제외 + // "1", // psd1 + // "2", // psd2 + ]; + const exceptSubkeys = ["videoStartTime", "openingStartTime"]; // 제외할 서브키 + + // 학생 데이터 순회 + Object.keys(student).forEach(key => { + if (exceptKeys.includes(key)) { + return; // 제외할 키는 건너뜀 + } + + // 서브키 순회 + if (typeof student[key] === "object") { + Object.keys(student[key]).forEach(subKey => { + if (exceptSubkeys.includes(subKey)) { + return; // 제외할 서브키는 건너뜀 + } + flattened[`${key}-${subKey}`] = student[key][subKey]; + }); + } else { + // 서브키가 없는 경우 + flattened[key] = student[key]; + } + }); + return flattened; + }); +} + +function transposeData(data) { + // 데이터가 없으면 빈 배열 반환 + if (data.length === 0) return []; + + // 첫 번째 객체의 키(열 제목) 가져오기 + const keys = Object.keys(data[0]); + + // 행과 열을 변환 + const transposed = keys.map(key => { + const row = { "항목": key }; // 각 열 제목을 "항목"으로 설정 + data.forEach((item, index) => { + //console.log(data[index]['문항']); + row[data[index]['문항']] = item[key]; // 각 학생의 데이터를 열로 추가 + }); + return row; + }); + + return transposed; +} +