diff --git a/backend/package-lock.json b/backend/package-lock.json index 8a67c96..ca45b81 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster-backend", - "version": "0.16.1-2", + "version": "0.16.1-3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster-backend", - "version": "0.16.1-2", + "version": "0.16.1-3", "dependencies": { "archiver": "^7.0.1", "cors": "^2.8.5", diff --git a/backend/package.json b/backend/package.json index 6694ae0..d3fb3f7 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "ripster-backend", - "version": "0.16.1-2", + "version": "0.16.1-3", "private": true, "type": "commonjs", "scripts": { diff --git a/backend/src/utils/playlistAnalysis.js b/backend/src/utils/playlistAnalysis.js index 3210775..2aba3a4 100644 --- a/backend/src/utils/playlistAnalysis.js +++ b/backend/src/utils/playlistAnalysis.js @@ -563,16 +563,50 @@ function buildEvaluationLabel(metrics) { return 'wahrscheinlich korrekt (lineare Segmentfolge)'; } +function normalizeRelativeScore(value, maxValue) { + const numericValue = Number(value || 0); + const numericMax = Number(maxValue || 0); + if (!Number.isFinite(numericValue) || numericValue <= 0) { + return 0; + } + if (!Number.isFinite(numericMax) || numericMax <= 0) { + return 0; + } + return Math.min(1, Math.max(0, numericValue / numericMax)); +} + function scoreCandidates(groupTitles) { const titles = Array.isArray(groupTitles) ? groupTitles : []; if (titles.length === 0) { return []; } + const maxDurationSeconds = titles.reduce( + (max, title) => Math.max(max, Number(title?.durationSeconds || 0)), + 0 + ); + const maxAudioTrackCount = titles.reduce( + (max, title) => Math.max(max, Number(title?.audioTrackCount || 0)), + 0 + ); + const maxChapterCount = titles.reduce( + (max, title) => Math.max(max, Number(title?.chapters || 0)), + 0 + ); + return titles .map((title) => { const metrics = computeSegmentMetrics(title.segmentNumbers); + const structureScore = Number(metrics.score || 0); + const durationScore = normalizeRelativeScore(title.durationSeconds, maxDurationSeconds) * 20; + const audioScore = normalizeRelativeScore(title.audioTrackCount, maxAudioTrackCount) * 4; + const chapterScore = normalizeRelativeScore(title.chapters, maxChapterCount) * 6; + const totalScore = structureScore + durationScore + audioScore + chapterScore; const reasons = [ + `structure_score=${structureScore.toFixed(2)}`, + `duration_score=${durationScore.toFixed(2)}`, + `audio_score=${audioScore.toFixed(2)}`, + `chapter_score=${chapterScore.toFixed(2)}`, `sequence_steps=${metrics.directSequenceSteps}`, `sequence_coherence=${metrics.sequenceCoherence.toFixed(3)}`, `backward_jumps=${metrics.backwardJumps}`, @@ -582,7 +616,7 @@ function scoreCandidates(groupTitles) { return { ...title, - score: Number(metrics.score || 0), + score: Number(totalScore.toFixed(4)), reasons, structuralMetrics: metrics, evaluationLabel: buildEvaluationLabel(metrics) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4179604..28aceca 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster-frontend", - "version": "0.16.1-2", + "version": "0.16.1-3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster-frontend", - "version": "0.16.1-2", + "version": "0.16.1-3", "dependencies": { "primeicons": "^7.0.0", "primereact": "^10.9.2", diff --git a/frontend/package.json b/frontend/package.json index 5fe4f95..0b34065 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "ripster-frontend", - "version": "0.16.1-2", + "version": "0.16.1-3", "private": true, "type": "module", "scripts": { diff --git a/package-lock.json b/package-lock.json index cb07829..faffc76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ripster", - "version": "0.16.1-2", + "version": "0.16.1-3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ripster", - "version": "0.16.1-2", + "version": "0.16.1-3", "devDependencies": { "concurrently": "^9.1.2" } diff --git a/package.json b/package.json index d9d9978..e6763ff 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ripster", "private": true, - "version": "0.16.1-2", + "version": "0.16.1-3", "scripts": { "dev": "concurrently \"npm run dev --prefix backend\" \"npm run dev --prefix frontend\"", "dev:backend": "npm run dev --prefix backend",