Advertisement
Guest User

Untitled

a guest
May 25th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.80 KB | None | 0 0
  1. function levenshtein(s1, s2, costs) {
  2. var i, j, l1, l2, flip, ch, chl, ii, ii2, cost, cutHalf;
  3. l1 = s1.length;
  4. l2 = s2.length;
  5.  
  6. costs = costs || {};
  7. var cr = costs.replace || 1;
  8. var cri = costs.replaceCase || costs.replace || 1;
  9. var ci = costs.insert || 1;
  10. var cd = costs.remove || 1;
  11.  
  12. cutHalf = flip = Math.max(l1, l2);
  13.  
  14. var minCost = Math.min(cd, ci, cr);
  15. var minD = Math.max(minCost, (l1 - l2) * cd);
  16. var minI = Math.max(minCost, (l2 - l1) * ci);
  17. var buf = new Array((cutHalf * 2) - 1);
  18.  
  19. for (i = 0; i <= l2; ++i) {
  20. buf[i] = i * minD;
  21. }
  22.  
  23. for (i = 0; i < l1; ++i, flip = cutHalf - flip) {
  24. ch = s1[i];
  25. chl = ch.toLowerCase();
  26.  
  27. buf[flip] = (i + 1) * minI;
  28.  
  29. ii = flip;
  30. ii2 = cutHalf - flip;
  31.  
  32. for (j = 0; j < l2; ++j, ++ii, ++ii2) {
  33. cost = (ch === s2[j] ? 0 : (chl === s2[j].toLowerCase()) ? cri : cr);
  34. buf[ii + 1] = Math.min(buf[ii2 + 1] + cd, buf[ii] + ci, buf[ii2] + cost);
  35. }
  36. }
  37. return buf[l2 + cutHalf - flip];
  38. }
  39.  
  40.  
  41. function (root) {
  42. 'use strict';
  43. function extend(a, b) {
  44. for (var property in b) {
  45. if (b.hasOwnProperty(property)) {
  46. a[property] = b[property];
  47. }
  48. }
  49. return a;
  50. }
  51. function distance(s1, s2, options) {
  52. var m = 0;
  53. var defaults = { caseSensitive: true };
  54. var settings = extend(defaults, options);
  55. var i;
  56. var j;
  57. if (s1.length === 0 || s2.length === 0) {
  58. return 0;
  59. }
  60. if (!settings.caseSensitive) {
  61. s1 = s1.toUpperCase();
  62. s2 = s2.toUpperCase();
  63. }
  64. if (s1 === s2) {
  65. return 1;
  66. }
  67. var range = (Math.floor(Math.max(s1.length, s2.length) / 2)) - 1;
  68. var s1Matches = new Array(s1.length);
  69. var s2Matches = new Array(s2.length);
  70. for (i = 0; i < s1.length; i++) {
  71. var low = (i >= range) ? i - range : 0;
  72. var high = (i + range <= s2.length) ? (i + range) : (s2.length - 1);
  73. for (j = low; j <= high; j++) {
  74. if (s1Matches[i] !== true && s2Matches[j] !== true && s1[i] === s2[j]) {
  75. ++m;
  76. s1Matches[i] = s2Matches[j] = true;
  77. break;
  78. }
  79. }
  80. }
  81. if (m === 0) {
  82. return 0;
  83. }
  84. var k = 0;
  85. var numTrans = 0;
  86. for (i = 0; i < s1.length; i++) {
  87. if (s1Matches[i] === true) {
  88. for (j = k; j < s2.length; j++) {
  89. if (s2Matches[j] === true) {
  90. k = j + 1;
  91. break;
  92. }
  93. }
  94. if (s1[i] !== s2[j]) {
  95. ++numTrans;
  96. }
  97. }
  98. }
  99. var weight = (m / s1.length + m / s2.length + (m - (numTrans / 2)) / m) / 3;
  100. var l = 0;
  101. var p = 0.1;
  102. if (weight > 0.7) {
  103. while (s1[l] === s2[l] && l < 4) {
  104. ++l;
  105. }
  106. weight = weight + l * p * (1 - weight);
  107. }
  108. return weight;
  109. }
  110. if (typeof define === 'function' && define.amd) {
  111. define([], distance);
  112. } else if (typeof exports === 'object') {
  113. module.exports = distance;
  114. } else {
  115. root.distance = distance;
  116. }
  117. })(this);
  118.  
  119. function Hamming(strand1, strand2) {
  120. function shortestStrand(strand1, strand2)
  121. {
  122. if (strand1.length > strand2.length)
  123. {
  124. return strand2;
  125. }
  126. else
  127. {
  128. return strand1
  129. };
  130. };
  131. function strandCounting(shortest, splitStrand1, splitStrand2){
  132. var count = 0
  133. for (var i = 0; i < shortest.length; i++) {
  134. if (splitStrand1[i] != splitStrand2[i]) {
  135. count+=1
  136. };
  137. };
  138. return count;
  139. };
  140. var splitStrand1 = strand1.split("");
  141. var splitStrand2 = strand2.split("");
  142. var shortest = shortestStrand(splitStrand1,splitStrand2)
  143. var result = strandCounting(shortest, splitStrand1, splitStrand2);
  144. return result;
  145. };
  146.  
  147. function DL(source, target) {
  148. if (!source || source.length === 0)
  149. if (!target || target.length === 0)
  150. return 0;
  151. else
  152. return target.length;
  153. else if (!target)
  154. return source.length;
  155. var sourceLength = source.length;
  156. var targetLength = target.length;
  157. var score = [];
  158. var INF = sourceLength + targetLength;
  159. score[0] = [INF];
  160. for (var i=0 ; i <= sourceLength ; i++) { score[i + 1] = []; score[i + 1][1] = i; score[i + 1][0] = INF; }
  161. for (var i=0 ; i <= targetLength ; i++) { score[1][i + 1] = i; score[0][i + 1] = INF; }
  162. var sd = {};
  163. var combinedStrings = source + target;
  164. var combinedStringsLength = combinedStrings.length;
  165. for(var i=0 ; i < combinedStringsLength ; i++) {
  166. var letter = combinedStrings[i];
  167. if (!sd.hasOwnProperty(letter))
  168. sd[letter] = 0;
  169. }
  170. for (var i=1 ; i <= sourceLength ; i++) {
  171. var DB = 0;
  172. for (var j=1 ; j <= targetLength ; j++) {
  173. var i1 = sd[target[j - 1]];
  174. var j1 = DB;
  175. if (source[i - 1] == target[j - 1]) {
  176. score[i + 1][j + 1] = score[i][j];
  177. DB = j;
  178. }
  179. else
  180. score[i + 1][j + 1] = Math.min(score[i][j], Math.min(score[i + 1][j], score[i][j + 1])) + 1;
  181. score[i + 1][j + 1] = Math.min(score[i + 1][j + 1], score[i1][j1] + (i - i1 - 1) + 1 + (j - j1 - 1));
  182. }
  183. sd[source[i - 1]] = i;
  184. }
  185. return score[sourceLength + 1][targetLength + 1];
  186. }
  187.  
  188.  
  189.  
  190. var peopleInUsers = db.users.find({})
  191. while (peopleInUsers.hasNext()){
  192. obj = peopleInUsers.next();
  193. print(obj["name"],levenshtein(obj["name"],"denis"))
  194. }
  195.  
  196. var peopleInUsers = db.users.find({})
  197. while (peopleInUsers.hasNext()){
  198. obj = peopleInUsers.next();
  199. print(obj["name"],distance(obj["name"],"denis"))
  200. }
  201.  
  202. var peopleInUsers = db.users.find({})
  203. while (peopleInUsers.hasNext()){
  204. obj = peopleInUsers.next();
  205. print(obj["name"],Hamming(obj["name"],"denisaaaaa"))
  206. }
  207.  
  208. var peopleInUsers = db.users.find({})
  209. while (peopleInUsers.hasNext()){
  210. obj = peopleInUsers.next();
  211. print(obj["name"],DL(obj["name"],"denisaaaaa"))
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement