Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function splitName(name) {
- var names = name.split(' ');
- if (names.length === 0) {
- return false;
- }
- var firstName = names[0];
- var middleName = names.length > 2 ? names[1] : "";
- var lastName = names.length > 2 ? names[2] : names[1];
- return {
- "firstName": firstName.toLowerCase(),
- "middleName": middleName.toLowerCase(),
- "lastName": lastName.toLowerCase()
- };
- }
- function isMiddleUnknown(name1, name2) {
- return name1 === "" || name2 === "";
- }
- function matchMiddleName(name1, name2) {
- return name1 === name2;
- }
- function matchFirstName(name1, name2) {
- return name1 === name2;
- }
- function matchLastName(name1, name2) {
- return name1 === name2;
- }
- function matchMiddleInitial(person1, person2) {
- return (person1.middleName.length == 1 && person2.middleName.startsWith(person1.middleName) ) ||
- ( person2.middleName.length == 1 && person1.middleName.startsWith(person2.middleName) );
- }
- function exactMatch(person1, person2) {
- var f =matchFirstName(person1.firstName, person2.firstName);
- var l = matchLastName(person1.lastName, person2.lastName);
- var m = matchMiddleName(person1.middleName, person2.middleName);
- return l & f & m;
- }
- function middleUknownMatch(person1, person2) {
- var f =matchFirstName(person1.firstName, person2.firstName);
- var l = matchLastName(person1.lastName, person2.lastName);
- var m = isMiddleUnknown(person1.middleName, person2.middleName);
- return f & l & m;
- }
- function matchTransposition(person1, person2) {
- var l = matchLastName(person1.lastName, person2.lastName);
- var lm1 = matchMiddleName(person1.firstName, person2.middleName);
- var lm2 = matchMiddleName(person1.middleName, person2.firstName);
- return l && (lm1 && lm2);
- }
- function matchMisspellings(person1, person2) {
- // TODO: implement damerauLevenshteinDistance
- var ld = damerauLevenshteinDistance(person1.lastName, person2.lastName);
- var fd = damerauLevenshteinDistance(person1.firstName, person2.firstName);
- return l < 1 && f < 1;
- }
- function matchPersons(person1, person2) {
- if ( exactMatch(person1, person2) ) {
- return true;
- }
- if( middleUknownMatch(person1, person2) ) {
- return true;
- }
- if( matchMiddleInitial(person1, person2) ) {
- return true;
- }
- return false;
- }
- /**
- * Transpose Middle Name and First Name
- */
- function transposePerson(person) {
- return {
- "firstName": person.middleName,
- "middleName": person.firstName,
- "lastName": person.lastName
- };
- }
- function name_match(known_names, name) {
- var i, personFromList;
- var person = splitName(name);
- for(i = 0; i < known_names.length; i++) {
- personFromList = splitName(known_names[i]);
- var transposedPerson = transposePerson (person);
- var transposedpersonFromList = transposePerson (personFromList);
- if (matchPersons(personFromList, person)) {
- return true
- } else {
- // transpose the firstname and middle name and rerun the chehcks
- if ( matchPersons(personFromList, transposedPerson) || matchPersons(transposedpersonFromList, person)) {
- return true;
- }
- }
- }
- return false;
- }
- function test() {
- var known_names = ["Alphonse Gabriel Capone", "Al Capone"];
- if (name_match(known_names, "Alphonse Gabriel Capone") !== true) {
- console.log('error1');
- }
- if (name_match(known_names, "Al Capone") !== true) {
- console.log('error2');
- }
- if (name_match(known_names, "Alphonse Francis Capone") !== false) {
- console.log('error3');
- }
- var known_names = ["Alphonse Capone"];
- if (name_match(known_names, "Alphonse Gabriel Capone") !== true) {
- console.log('error4');
- }
- if (name_match(known_names, "Alexander Capone") !== false) {
- console.log('error5');
- }
- var known_names = ["Alphonse Gabriel Capone"];
- if (name_match(known_names, "Alphonse Capone") !== true) {
- console.log('error6');
- }
- var known_names = ["Alphonse Gabriel Capone", "Alphonse Francis Capone"];
- if (name_match(known_names, "Alphonse Gabriel Capone") !== true) {
- console.log('error7');
- }
- if (name_match(known_names, "Alphonse Francis Capone") !== true) {
- console.log('error8');
- }
- if (name_match(known_names, "Alphonse Edward Capone") !== false) {
- console.log('error9');
- }
- var known_names = ["Alphonse Gabriel Capone", "Alphonse F Capone"];
- if (name_match(known_names, "Alphonse G Capone") !== true) {
- console.log('error10');
- }
- if (name_match(known_names, "Alphonse Francis Capone") !== true) {
- console.log('error11');
- }
- if (name_match(known_names, "Alphonse E Capone") !== false) {
- console.log('error12');
- }
- var known_names = ["Alphonse Gabriel Capone"];
- if (name_match(known_names, "Gabriel Alphonse Capone") !== true) {
- console.log('error13');
- }
- if (name_match(known_names, "Gabriel Capone") !== true) {
- console.log('error14');
- }
- if (name_match(known_names, "Gabriel A Capone") !== true) {
- console.log('error15');
- }
- if (name_match(known_names, "Capone Francis Alphonse") !== false) {
- console.log('error16');
- }
- var known_names = ["Alphonse Capone"];
- if (name_match(known_names, "Alphonce Capone") !== true) {
- console.log('error17');
- }
- if (name_match(known_names, "Alphonce Capome") !== true) {
- console.log('error18');
- }
- if (name_match(known_names, "Alphons Capon") !== true) {
- console.log('error19');
- }
- if (name_match(known_names, "Alphosne Capone") !== false) {
- console.log('error20');
- }
- if (name_match(known_names, "Alfonse Capone") !== false) {
- console.log('error21');
- }
- }
- test();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement