Advertisement
Guest User

Rutso

a guest
Jun 30th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function splitName(name) {
  2.   var names = name.split(' ');
  3.   if (names.length === 0) {
  4.       return false;
  5.   }
  6.   var firstName = names[0];
  7.   var middleName = names.length > 2 ? names[1] : "";
  8.   var lastName = names.length > 2 ? names[2] : names[1];
  9.   return {
  10.       "firstName": firstName.toLowerCase(),
  11.       "middleName": middleName.toLowerCase(),
  12.       "lastName": lastName.toLowerCase()
  13.   };
  14. }
  15.  
  16. function isMiddleUnknown(name1, name2) {
  17.     return name1 === "" || name2 === "";
  18. }
  19.  
  20. function matchMiddleName(name1, name2) {
  21.     return name1 === name2;
  22. }
  23.  
  24. function matchFirstName(name1, name2) {
  25.     return name1 === name2;
  26. }
  27.  
  28. function matchLastName(name1, name2) {
  29.     return name1 === name2;
  30. }
  31.  
  32. function matchMiddleInitial(person1, person2) {
  33.     return (person1.middleName.length == 1 && person2.middleName.startsWith(person1.middleName) ) ||
  34.         ( person2.middleName.length == 1 && person1.middleName.startsWith(person2.middleName) );
  35. }
  36.  
  37. function exactMatch(person1, person2) {
  38.     var f =matchFirstName(person1.firstName, person2.firstName);
  39.     var l  = matchLastName(person1.lastName, person2.lastName);
  40.     var m  = matchMiddleName(person1.middleName, person2.middleName);
  41.     return l & f & m;
  42. }
  43.  
  44. function middleUknownMatch(person1, person2) {
  45.     var f =matchFirstName(person1.firstName, person2.firstName);
  46.     var l  = matchLastName(person1.lastName, person2.lastName);
  47.     var m  = isMiddleUnknown(person1.middleName, person2.middleName);
  48.     return f & l & m;
  49. }
  50.  
  51. function matchTransposition(person1, person2) {
  52.     var l  = matchLastName(person1.lastName, person2.lastName);
  53.     var lm1 = matchMiddleName(person1.firstName, person2.middleName);
  54.     var lm2 = matchMiddleName(person1.middleName, person2.firstName);
  55.  
  56.     return l && (lm1 && lm2);
  57. }
  58.  
  59. function matchMisspellings(person1, person2) {
  60.     // TODO: implement damerauLevenshteinDistance
  61.     var ld  = damerauLevenshteinDistance(person1.lastName, person2.lastName);
  62.     var fd = damerauLevenshteinDistance(person1.firstName, person2.firstName);
  63.     return l < 1 && f < 1;
  64. }
  65.  
  66. function matchPersons(person1, person2) {
  67.     if ( exactMatch(person1, person2) ) {
  68.         return true;
  69.     }
  70.  
  71.     if( middleUknownMatch(person1, person2) ) {
  72.         return true;
  73.     }
  74.  
  75.     if( matchMiddleInitial(person1, person2) ) {
  76.         return true;
  77.     }
  78.  
  79.     return false;
  80.  
  81. }
  82.  
  83. /**
  84.  * Transpose Middle Name and First Name
  85.  */
  86. function transposePerson(person) {
  87.   return {
  88.       "firstName": person.middleName,
  89.       "middleName": person.firstName,
  90.       "lastName": person.lastName
  91.   };
  92. }
  93.  
  94. function name_match(known_names, name) {
  95.   var i, personFromList;
  96.   var person = splitName(name);
  97.   for(i = 0; i < known_names.length; i++) {
  98.       personFromList = splitName(known_names[i]);
  99.       var transposedPerson = transposePerson (person);
  100.       var transposedpersonFromList = transposePerson (personFromList);
  101.       if (matchPersons(personFromList, person)) {
  102.         return true
  103.       } else {
  104.           // transpose the firstname and middle name and rerun the chehcks
  105.           if ( matchPersons(personFromList, transposedPerson) || matchPersons(transposedpersonFromList, person)) {
  106.               return true;
  107.           }
  108.       }
  109.   }
  110.  
  111.   return false;
  112. }
  113.  
  114. function test() {
  115.   var known_names = ["Alphonse Gabriel Capone", "Al Capone"];
  116.   if (name_match(known_names, "Alphonse Gabriel Capone") !== true) {
  117.     console.log('error1');
  118.   }
  119.   if (name_match(known_names, "Al Capone") !== true) {
  120.     console.log('error2');
  121.   }
  122.   if (name_match(known_names, "Alphonse Francis Capone") !== false) {
  123.     console.log('error3');
  124.   }
  125.  
  126.   var known_names = ["Alphonse Capone"];
  127.   if (name_match(known_names, "Alphonse Gabriel Capone") !== true) {
  128.     console.log('error4');
  129.   }
  130.   if (name_match(known_names, "Alexander Capone") !== false) {
  131.     console.log('error5');
  132.   }
  133.  
  134.   var known_names = ["Alphonse Gabriel Capone"];
  135.   if (name_match(known_names, "Alphonse Capone") !== true) {
  136.     console.log('error6');
  137.   }
  138.  
  139.   var known_names = ["Alphonse Gabriel Capone", "Alphonse Francis Capone"];
  140.   if (name_match(known_names, "Alphonse Gabriel Capone") !== true) {
  141.     console.log('error7');
  142.   }
  143.   if (name_match(known_names, "Alphonse Francis Capone") !== true) {
  144.     console.log('error8');
  145.   }
  146.   if (name_match(known_names, "Alphonse Edward Capone") !== false) {
  147.     console.log('error9');
  148.   }
  149.  
  150.   var known_names = ["Alphonse Gabriel Capone", "Alphonse F Capone"];
  151.   if (name_match(known_names, "Alphonse G Capone") !== true) {
  152.     console.log('error10');
  153.   }
  154.   if (name_match(known_names, "Alphonse Francis Capone") !== true) {
  155.     console.log('error11');
  156.   }
  157.   if (name_match(known_names, "Alphonse E Capone") !== false) {
  158.     console.log('error12');
  159.   }
  160.  
  161.   var known_names = ["Alphonse Gabriel Capone"];
  162.   if (name_match(known_names, "Gabriel Alphonse Capone") !== true) {
  163.     console.log('error13');
  164.   }
  165.   if (name_match(known_names, "Gabriel Capone") !== true) {
  166.     console.log('error14');
  167.   }
  168.   if (name_match(known_names, "Gabriel A Capone") !== true) {
  169.     console.log('error15');
  170.   }
  171.   if (name_match(known_names, "Capone Francis Alphonse") !== false) {
  172.     console.log('error16');
  173.   }
  174.  
  175.   var known_names = ["Alphonse Capone"];
  176.   if (name_match(known_names, "Alphonce Capone") !== true) {
  177.     console.log('error17');
  178.   }
  179.   if (name_match(known_names, "Alphonce Capome") !== true) {
  180.     console.log('error18');
  181.   }
  182.   if (name_match(known_names, "Alphons Capon") !== true) {
  183.     console.log('error19');
  184.   }
  185.   if (name_match(known_names, "Alphosne Capone") !== false) {
  186.     console.log('error20');
  187.   }
  188.   if (name_match(known_names, "Alfonse Capone") !== false) {
  189.     console.log('error21');
  190.   }
  191. }
  192. test();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement