채점기준표 곰픽항목 추가
This commit is contained in:
@@ -12,11 +12,10 @@ const getToday = require('./getToday.js');
|
||||
const todayDate = getToday();
|
||||
|
||||
// --------------------------------------------------------
|
||||
// const scoringJson = require('./DIC_2502A.json');
|
||||
const scoringJson = require('./DIC_2502A.json');
|
||||
// const scoringJson = require('./DIC_2502B.json');
|
||||
// const scoringJson = require('./DIC_2502C.json');
|
||||
// const scoringJson = require('./DIC_2502D.json');
|
||||
const scoringJson = require('./samples/DIC(gompic).json');
|
||||
|
||||
// TEST
|
||||
// const scoringJson = require('./DIC_2502A_TEST.json');
|
||||
@@ -28,9 +27,9 @@ const scoringJson = require('./samples/DIC(gompic).json');
|
||||
// const answerFilesDir = './output/B/DIC';
|
||||
// const answerFilesDir = './output/C/DIC';
|
||||
// const answerFilesDir = './output/D/DIC';
|
||||
const answerFilesDir = './samples/';
|
||||
|
||||
// TEST
|
||||
// const answerFilesDir = './output/A/TEST';
|
||||
const answerFilesDir = './output/A/TEST';
|
||||
// const answerFilesDir = './output/B/TEST';
|
||||
// const answerFilesDir = './output/C/TEST';
|
||||
// const answerFilesDir = './output/D/TEST';
|
||||
@@ -38,15 +37,14 @@ const answerFilesDir = './samples/';
|
||||
// --------------------------------------------------------
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502A_채점결과.xlsx';
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502B_채점결과.xlsx';
|
||||
// const outputExcelFile = './' + todayDate + '_DIC_2502C_채점결과.xlsx';
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502C_채점결과.xlsx';
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502D_채점결과.xlsx';
|
||||
|
||||
// TEST
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502A_TEST.xlsx';
|
||||
const outputExcelFile = './'+todayDate+'_DIC_2502A_TEST.xlsx';
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502B_TEST.xlsx';
|
||||
// const outputExcelFile = './' + todayDate + '_DIC_2502C_TEST.xlsx';
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502C_TEST.xlsx';
|
||||
// const outputExcelFile = './'+todayDate+'_DIC_2502D_TEST.xlsx';
|
||||
const outputExcelFile = './'+todayDate+'_gompic.xlsx';
|
||||
// --------------------------------------------------------
|
||||
|
||||
|
||||
@@ -73,7 +71,7 @@ studentDirs.forEach(student => {
|
||||
);
|
||||
|
||||
// 곰픽 파일 gpdp 파일 이거나 xml 파일
|
||||
const gpdpFile = fs.readdirSync(studentDir).filter(
|
||||
const gpdpFiles = fs.readdirSync(studentDir).filter(
|
||||
file => file.endsWith('.xml')
|
||||
);
|
||||
|
||||
@@ -95,8 +93,8 @@ studentDirs.forEach(student => {
|
||||
console.error(`Error reading PSD file: ${psdPath}`, error);
|
||||
}
|
||||
});
|
||||
gpdpFile.forEach((gpdp, index) => {
|
||||
const gpdpPath = path.join('./', studentDir, gpdp);
|
||||
gpdpFiles.forEach((gpdpFile, index) => {
|
||||
const gpdpPath = path.join('./', studentDir, gpdpFile);
|
||||
console.log(`Reading ${gpdpPath}...`);
|
||||
|
||||
const xmlString = fs.readFileSync(gpdpPath, 'utf8');
|
||||
@@ -128,8 +126,6 @@ const flattenedData = scoringResultList.map(student => {
|
||||
// excel에 표시하지 않을 key값들
|
||||
const exceptKeys = [
|
||||
"0", // 학생 이름 항상 제외
|
||||
"1", // 1번 PSD 파일 채점 결과
|
||||
"2", // 2번 PSD 파일 채점 결과
|
||||
]
|
||||
const exceptSubkeys = [
|
||||
"videoStartTime",
|
||||
@@ -461,7 +457,7 @@ function getGmepScore(gmepData, scoringJson, index) {
|
||||
const result3 = ele3 ? xpath.select(ele3, gmepXmlDoc) : [];
|
||||
|
||||
// 결과값이 배열이 아닌 경우 배열로 변환
|
||||
// 예시) (2-9)는 xpath를 통해 클립(자막) 시작시간(number자료형)을 반환받으므로 배열로 변환하여 비교
|
||||
// 예시) (2-9)는 xpath를 통해 클립(자막) 시작시간(number숫자자료형)을 반환받으므로 배열로 변환하여 비교
|
||||
const resultValues = Array.isArray(result) ?
|
||||
result.map(r => (typeof r === 'object' ? r.value : r)) : [result];
|
||||
const resultValues2 = Array.isArray(result2) ?
|
||||
@@ -473,16 +469,16 @@ function getGmepScore(gmepData, scoringJson, index) {
|
||||
const allResults = [...[resultValues], ...[resultValues2], ...[resultValues3]];
|
||||
console.log("🚀 ~ allResults:", allResults)
|
||||
|
||||
// 정답(rightAnswer)의 값이 단일값이 아닐 경우 값 비교를 위해 단일 배열로 변환
|
||||
// (2-11) 자막의 위치 좌표값 비교를 위해 [x, y] 값을 가져오므로 배열로 변환하여 비교
|
||||
// 정답(rightAnswer)의 값이 단일값이 아닐 경우 값 비교를 위해 배열로 변환
|
||||
// 예시) (2-11) 자막의 위치 좌표값 비교를 위해 [x, y] 값을 가져오므로 배열로 변환하여 비교
|
||||
const rightAnswerArray = Array.isArray(rightAnswer) ? rightAnswer : [rightAnswer];
|
||||
|
||||
// 결과값이 범위값인 경우 소수점 3자리까지 비교
|
||||
const formattedResults = allResults.map(result => {
|
||||
// result의 길이가 1이상인 조건은 result값이 [x, y] 좌표값인 경우를 말한다
|
||||
// result의 길이가 1이상인 조건은 result값이 [x, y](좌표값, 두개 이상의 값)인 경우를 말한다
|
||||
if (Array.isArray(result) && result.length > 1) {
|
||||
return result.map(r => {
|
||||
// xml파일에 저장된 곰믹스 좌표값 소수점 3자리 아래 버리는 형식이므로
|
||||
// xml파일에 저장된 곰믹스 좌표값이 소수점 3자리 아래 버리는 형식이므로
|
||||
// 동일하게 결과값 소수점 3자리 아래 버린 후 반환
|
||||
const parsedValue = parseFloat(r);
|
||||
if (parsedValue >= 0 && parsedValue < 1) {
|
||||
@@ -525,71 +521,6 @@ function getGmepScore(gmepData, scoringJson, index) {
|
||||
scoringResult[key] = 0;
|
||||
}
|
||||
}
|
||||
// else if (type == "video" || type == "opening") {
|
||||
// const result = ele && xpath.select(ele, gmepXmlDoc);
|
||||
// const result2 = ele2 && xpath.select(ele2, gmepXmlDoc);
|
||||
// const result3 = ele3 && xpath.select(ele3, gmepXmlDoc);
|
||||
|
||||
// /**
|
||||
// * 1. result가 배열이 아닌 경우 배열로 변환
|
||||
// * (2-9)는 xpath구문을 통해 클립(자막) 시작시간(number자료형)을 반환받으므로 배열로 변환하여 비교
|
||||
// * 2. result가 배열이고 배열의 요소가 객체인 경우 value값만 추출하여 배열로 변환
|
||||
// * 3. result가 배열이고 배열의 요소가 객체가 아닌 문자열이나 숫자일 경우 그대로 배열로 변환
|
||||
// */
|
||||
// const resultValues = Array.isArray(result) ? result.map(r => (typeof r === 'object' ? r.value : r)) : [result];
|
||||
// const resultValues2 = Array.isArray(result2) ? result2.map(r => (typeof r === 'object' ? r.value : r)) : [result2];
|
||||
// const resultValues3 = Array.isArray(result3) ? result3.map(r => (typeof r === 'object' ? r.value : r)) : [result3];
|
||||
|
||||
// /**
|
||||
// * 정답과 일치하는 답안이 있는지 비교를 위해 배열로 변환
|
||||
// * 정답 rightAnswer의 값이 2개 이상인 경우 배열로 변환하여 비교
|
||||
// */
|
||||
// let allResults = [...[resultValues], ...[resultValues2], ...[resultValues3]];
|
||||
// console.log("🚀 ~ getGmepScore ~ allResults:", allResults)
|
||||
|
||||
// // allResults.forEach((result, i) => {
|
||||
// // if (result.length > 1) {
|
||||
// // result.forEach((r, j) => {
|
||||
// // if (Math.abs(r - rightAnswer[j]) <= 0.1) {
|
||||
// // true;
|
||||
// // } else {
|
||||
// // scoringResult[key] = 0;
|
||||
// // }
|
||||
// // });
|
||||
// // });
|
||||
|
||||
// // (2-11) 자막의 위치 좌표값 비교시 소수점 3자리까지 비교
|
||||
// // rightAnswer값이 배열일 경우
|
||||
// const rightAnswerArray = Array.isArray(rightAnswer) ? rightAnswer : [rightAnswer];
|
||||
// console.log("🚀 ~ getGmepScore ~ rightAnswerArray:", rightAnswerArray);
|
||||
|
||||
// // 결과값이 범위값인 경우 소수점 3자리까지 비교
|
||||
// allResults = allResults.map(result => {
|
||||
// if (result.length > 1) {
|
||||
// return result.map(r => {
|
||||
// if (typeof r === 'string') {
|
||||
// return parseFloat(r).toFixed(3);
|
||||
// }
|
||||
// return r;
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// console.log("🚀 ~ //allResults.forEach ~ allResults:", allResults)
|
||||
|
||||
// const isIncluded = allResults.some(arr =>
|
||||
// arr.length === rightAnswerArray.length && arr.every((val, index) => val === rightAnswerArray[index])
|
||||
// );
|
||||
// if (isIncluded) {
|
||||
// console.log("🚀 ~ getGmepScore ~ 정답:", rightAnswerArray);
|
||||
// totalScore += point;
|
||||
// scoringResult[key] = point;
|
||||
// }
|
||||
// else {
|
||||
// console.log("🚀 ~ getGmepScore ~ 오답:");
|
||||
// scoringResult[key] = 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
else {
|
||||
try {
|
||||
console.log('Unknown type:', ele);
|
||||
|
||||
Reference in New Issue
Block a user