/** * Calculate the distances by using the numbers, strings and dates. * @param {node} source * @param {node} target * @param {array} properties - the properties of the nodes. * @return {number} the distance between source and target nodes. */ function calculateCosineSimilarity (source, target, properties, normArgs) { var numerator = 0.0; // console.log(properties); // Iterate through every column of data for (var i = 0; i < properties.length; i++) { property = properties[i]; if (property.toLowerCase() !== 'class' && property.toLowerCase() !== 'app' && property.toLowerCase() !== 'user' && property.toLowerCase() !== 'weekday') { var s = source[property], t = target[property]; numerator += s * t; } } let denominator = squareRooted(source, properties, normArgs) * squareRooted(target, properties, normArgs); // console.log(Math.abs(numerator / denominator)); return Math.abs(numerator / denominator); } function squareRooted (node, properties, normArgs) { var sum = 0.0; for (var i = 0, s; i < properties.length; i++) { var s = node[properties[i]]; sum += s * s; } return Math.sqrt(sum); }