67 lines
2.0 KiB
JavaScript
67 lines
2.0 KiB
JavaScript
const natural = require('natural');
|
|
module.exports = {
|
|
userTypes :{
|
|
customer : 'Customer',
|
|
admin : 'Admin'
|
|
},
|
|
status : {
|
|
Active : 'Active',
|
|
Deactive : 'Deactive'
|
|
},
|
|
registerWith :{
|
|
Email : 'Email',
|
|
google : 'Google',
|
|
facebook : 'Facebook'
|
|
},
|
|
arrayConverterName : (arr) => {
|
|
let playListName = [];
|
|
arr.forEach(el => {
|
|
playListName.push(el.name);
|
|
})
|
|
return playListName
|
|
},
|
|
mapConverter : (map) => {
|
|
let mostPlayedSong = [];
|
|
map.forEach((value,key)=> {
|
|
mostPlayedSong.push(key);
|
|
})
|
|
return mostPlayedSong
|
|
},
|
|
calculateWordAlignmentAccuracy : (recognizedLyrics, originalLyrics)=> {
|
|
const recognizerWords = recognizedLyrics.map(item => item.text.toLowerCase());
|
|
const originalWords = originalLyrics.map(item => item.text.toLowerCase());
|
|
|
|
const totalWords = Math.max(recognizerWords.length, originalWords.length);
|
|
let correctWords = 0;
|
|
|
|
for (let i = 0; i < Math.min(recognizerWords.length, originalWords.length); i++) {
|
|
const distance = natural.LevenshteinDistance(recognizerWords[i], originalWords[i]);
|
|
|
|
// Words are considered aligned if the Levenshtein distance is 0
|
|
if (distance === 0) {
|
|
correctWords++;
|
|
}
|
|
}
|
|
|
|
const wordAlignmentAccuracy = (correctWords / totalWords) * 100;
|
|
return wordAlignmentAccuracy;
|
|
},
|
|
calculateTimingAccuracy :(recognizedLyrics, originalLyrics) =>{
|
|
const totalWords = originalLyrics.length;
|
|
let timingDifference = 0;
|
|
|
|
for (let i = 0; i < totalWords; i++) {
|
|
const recognizedTime = recognizedLyrics[i].time;
|
|
const originalTime = originalLyrics[i].time;
|
|
|
|
// Compute the absolute timing difference
|
|
timingDifference += Math.abs(recognizedTime - originalTime);
|
|
}
|
|
|
|
// Compute average timing difference
|
|
const averageTimingDifference = timingDifference / totalWords;
|
|
const timingAccuracy = 100 - (averageTimingDifference / originalLyrics[totalWords - 1].time) * 100;
|
|
|
|
return timingAccuracy;
|
|
}
|
|
} |