곰믹스 자막(3-10)(3-11) 자막텍스트로 ClipIndex 값 구하는 로직 추가
This commit is contained in:
@@ -160,9 +160,7 @@ console.log('채점 결과가 ' + outputExcelFile + ' 파일에 저장되었습
|
||||
/**
|
||||
* 자막 태그의 인덱스를 구할 때 사용
|
||||
* 1. CRTrackClip 요소의 순서에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함
|
||||
* 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함
|
||||
* @returns video index
|
||||
*
|
||||
* 2. CRTrackClip 요소의 시작시간에 따라 그 요소에 해당하는 CROwneUnit 태그의 순서를 구함
|
||||
*/
|
||||
function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) {
|
||||
let trackClipNode = null;
|
||||
@@ -175,9 +173,30 @@ function getTrackClipNode(xmlDoc, type, videoStartTime, openingStartTime) {
|
||||
const trackClipNode1 = xpath.select1(`//CRTrackList[@Name="텍스트"]/CRTrackClip[not(@ClipIndex='-1')][${subtitleOrder}]`, xmlDoc);
|
||||
const trackClipNode2 = xpath.select1(`//CRTrackList[@Name='텍스트']/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;
|
||||
}
|
||||
|
||||
// xml 형식의 gmep 파일을 읽어서 점수를 계산
|
||||
// scoring.json 파일 내에 있는 ele 요소는 xpath 형식으로 접근하여 요소를 탐색하고 나오는 값을 value와 비교하여 점수를 계산
|
||||
// scoring.json 파일 내에 있는 type은 비교할 값의 타입을 의미하며, boolean, array 등이 있음
|
||||
@@ -206,19 +225,20 @@ function getGmepScore(gmepData, scoringJson, index) {
|
||||
const videoStartTime = scoringData.videoStartTime;
|
||||
const openingStartTime = scoringData.openingStartTime;
|
||||
|
||||
console.log(`example number: ${key}`)
|
||||
|
||||
// xpath 전처리
|
||||
const trackClipNode = getTrackClipNode(gmepXmlDoc, type, videoStartTime, openingStartTime);
|
||||
const subtitleIndex = trackClipNode ? parseInt(trackClipNode.getAttribute('ClipIndex'), 10) + 1 : null;
|
||||
const clipIndex = getClipIndexBySubtitle(gmepXmlDoc, search);
|
||||
const subtitleOrder = type === 'video' ? 2 : type === 'opening' ? 1 : null;
|
||||
const startTime = type === 'video' ? videoStartTime
|
||||
: type === 'opening' ? openingStartTime : null;
|
||||
|
||||
[ele, ele2] = [ele, ele2].map(e => e?.replace(/{subtitleIndex}/g, subtitleIndex));
|
||||
[ele, ele2] = [ele, ele2].map(e => e?.replace(/{subtitleOrder}/g, subtitleOrder));
|
||||
[ele, ele2] = [ele, ele2].map(e => e?.replace(/{startTime}/g, startTime));
|
||||
|
||||
console.log("🚀 ~ getGmepScore ~ ele:", ele)
|
||||
console.log("🚀 ~ getGmepScore ~ ele2:", ele2)
|
||||
[ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{subtitleIndex}/g, subtitleIndex));
|
||||
[ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{subtitleOrder}/g, subtitleOrder));
|
||||
[ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{startTime}/g, startTime));
|
||||
[ele, ele2, ele3] = [ele, ele2, ele3].map(e => e?.replace(/{clipIndex}/g, clipIndex));
|
||||
|
||||
// search 값이 undefined 아니면 ele의 {search}부분을 search로 치환
|
||||
/**
|
||||
@@ -239,8 +259,10 @@ function getGmepScore(gmepData, scoringJson, index) {
|
||||
= [ele, ele2, ele3].map(e => e?.includes('{search}') ? null : e);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`example number: ${key}`)
|
||||
|
||||
console.log("🚀 ~ getGmepScore ~ ele:", ele)
|
||||
console.log("🚀 ~ getGmepScore ~ ele2:", ele2)
|
||||
console.log("🚀 ~ getGmepScore ~ ele3:", ele3)
|
||||
|
||||
// xpath
|
||||
if (ele === 'none') {
|
||||
|
||||
Reference in New Issue
Block a user