Guest User

Untitled

a guest
May 26th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. "use strict";
  2. const _ = require('lodash');
  3.  
  4. module.exports = function index (content1, content2){
  5. var allChar = content1.concat(content2);
  6. var allChar = content1.concat(content2);
  7. var uniqueChar = removeDuplicateArray(allChar);
  8. var data1 = vectorDataSet(uniqueChar, content1).sort();
  9. var data2 = vectorDataSet(uniqueChar, content2).sort();
  10. var resultSimilarity = calculateSimilarity(data1, data2);
  11. return resultSimilarity;
  12. }
  13.  
  14. function removeDuplicateArray (arr){
  15. let uniqueArray = Array.from(new Set(arr));
  16. return uniqueArray;
  17. }
  18.  
  19. function multiDimensionalUnique (arr){
  20. var uniques = [];
  21. var itemsFound = {};
  22. for(var i = 0, l = arr.length; i < l; i++) {
  23. var stringified = JSON.stringify(arr[i]);
  24. if(itemsFound[stringified]) { continue; }
  25. uniques.push(arr[i]);
  26. itemsFound[stringified] = true;
  27. }
  28. return uniques;
  29. }
  30.  
  31. function vectorDataSet (allData, contentData){
  32. var resultVectorDataSet = [];
  33. allData.map((item, index)=>{
  34. var isAny = false;
  35. contentData.find(function(element){
  36. if(element == item){
  37. let data = [element, _.countBy(contentData)[element]]
  38. resultVectorDataSet.push(data);
  39. isAny = true;
  40. }
  41. })
  42. if(isAny == false){
  43. let data = [item, 0];
  44. resultVectorDataSet.push(data);
  45. }
  46. });
  47. var resultVectorDataSet = multiDimensionalUnique(resultVectorDataSet);
  48. return resultVectorDataSet;
  49. }
  50.  
  51. function calculateSimilarity (data1, data2){
  52. var similarityVal = 0;
  53. var d1=[];
  54. var d2 = [];
  55. var d1Square = 0;
  56. var d2Square = 0;
  57. var sumD = 0;
  58. data1.map((item, index)=>{
  59. d1.push(item[1]);
  60. });
  61. data2.map((item, index)=>{
  62. d2.push(item[1]);
  63. });
  64. if (d1.length === d2.length) {
  65. for(let count = 0; count < d1.length; count++){
  66. sumD = sumD + (d1[count]*d2[count]);
  67. d1Square = d1Square + Math.pow(d1[count], 2);
  68. d2Square = d2Square + Math.pow(d2[count], 2);
  69. }
  70. }
  71. similarityVal = sumD / (Math.sqrt(d1Square)*Math.sqrt(d2Square))
  72. return similarityVal;
  73. }
Add Comment
Please, Sign In to add comment