Node.JS рдкрд░ рд╢рд┐рдВрдЧрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдЕрдВрдЧреНрд░реЗрдЬреА рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд▓рд┐рдП рдлрдЬреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ

рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╡реЗрдм рдкреЗрдЬреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдкреГрд╖реНрдареЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг "рд╢рд┐рдВрдЧрд▓реНрд╕ рдЕрд▓реНрдЧреЛрд░рд┐рдердо рдлреЙрд░ рд╡реЗрдм рдбреЙрдХреНрдпреВрдореЗрдВрдЯреНрд╕" рд╣реИ ред

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдиреЛрдб.рдЬреЗрдПрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореБрдЭреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ - рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдирд╛ рдерд╛ред

рдХреЛрдб рдкрд░ рд╕рднреА рдХрд╛рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓реЗрдЦ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд╕рднреА рдмрд┐рдВрджреБ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рдеред

2 рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
  1. рдкрд╛рда рдХреЛ рд░рджреНрдж рдХрд░рдирд╛;
  2. рджрд╛рдж рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд;
  3. 84x рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╛рдж рдХреЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╣реИрд╢;
  4. 84 рдЪреЗрдХрд╕рдо рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛;
  5. рддреБрд▓рдирд╛, рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред

рдЕрдВрдХ 3.4 рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдереЗред 1 - рдЖрдкрдХреЛ рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 84 рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ 2 рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ - рдЪреЗрдХрд╕рдо рдХреЗ 84 рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛ред рдпрджрд┐ 1 рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП - рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 84 рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЗ рд▓рд┐рдП рджрд╛рдж рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ 84xN (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд╛рдж рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЗ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ 2-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реЛрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЗрд╕ 84-рддрддреНрд╡ рд╕рд░рдгреА рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд╛рдж рд╣реИрд╢ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдиреНрдпреВрдирддрдо рд╣реИрд╢ рдХреЛ рд▓рдВрдмрд╛рдИ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ md5 рдХреЗ рд▓рд┐рдП рд╕рднреА рд╣реИрд╢ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдЭ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ crc32 рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдЗрдЯрдо 3 рдФрд░ 4 рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЕрдВрддрд┐рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
  1. рдкрд╛рда рдХреЛ рд░рджреНрдж рдХрд░рдирд╛;
  2. рджрд╛рдж рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд;
  3. crc32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд┐рдВрдЧрд▓ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛;
  4. рдЕрдиреБрдХреНрд░рдорд┐рдХ рддреБрд▓рдирд╛, рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред

1. рдкрд╛рда рдХрд╛ рдХреИрдирдирд╛рдЗрдЬреЗрд╢рди

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╣рд┐рддреАрдХрд░рдг рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
  1. HTML рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕рдорд╛рд╢реЛрдзрди;
  2. рдкрдХреНрд╖реЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рд╕рдлрд╛рдИ (рдЯреНрд░рд┐рдо);
  3. рдРрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ ",", "\", "\ n", '\ r', ',', ',', ':', '$', '#', '' ',' (') рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ , ')';
  4. рдПрдХ рд╡рд╛рдХреНрдп рдореЗрдВ рднрд╛рд╖рдг рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред
var strWordRemove = function(entry) { var regex = new RegExp('(^|\\s)' + entry + '(?=\\s|$)', 'g'); text = text.replace(regex, ''); }; var strCharacterRemove = function(entry) { var escapeRegExp = function (str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); }; var regex = new RegExp(escapeRegExp(entry), 'g'); text = text.replace(regex, ''); }; 


рдкрд╣рд▓рд╛ рдкрд╛рда рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рд╡рд┐рд╢реЗрд╖ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдХреНрд╖рд░ред рдЖрдЧреЗ рдЦреБрдж рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

  var withoutTagsRegex = /(<([^>]+)>)/ig; text = text.replace(withoutTagsRegex, ""); text = text.trim(); ['тАЭ', 'тАЬ', "\n", '\r'].forEach(strCharacterRemove); 


Node.JS рдХреЗ рд▓рд┐рдП рдПрдХ npm рдкреИрдХреЗрдЬ "рдкреЙрд╕" рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкрд╛рда рдореЗрдВ рднрд╛рд╖рдг рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкреЙрд╕ рдХреЗ рд╕рд╛рде рднрд╛рд╖рдг рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рднрд╛рдЧреЛрдВ
 var words = new pos.Lexer().lex(text); var taggedWords = new pos.Tagger().tag(words); var removeWords = []; var nounWords = []; for (var i in taggedWords) { var taggedWord = taggedWords[i]; var word = taggedWord[0]; var tag = taggedWord[1]; //Adjective /* JJ Adjective big JJR Adj., comparative bigger JJS Adj., superlative biggest CC Coord Conjuncn and,but,or IN Preposition of,in,by TO ├Тto├У to UH Interjection oh, oops DT Determiner the,some */ //console.log(word + " /" + tag); if(tag === 'NNS') { nounWords.push(word); } if(['JJ', 'JJR', 'JJS', 'CC', 'IN', 'TO', 'UH', 'DT'].indexOf(tag) !== -1) { removeWords.push(word); } } removeWords.forEach(strWordRemove); 


рдЕрдиреНрдп рд╕рднреА рд╡рд┐рд╢реЗрд╖ред рдореИрдВрдиреЗ рднрд╛рд╖рдг рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
 [',', '.', ':', '$', '#', '"', '(', ')'].forEach(strCharacterRemove); 

рдлрд┐рд░ рдпрд╣ рд╕рднреА рд╕рдВрдЬреНрдЮрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рдФрд░ рдХреИрдиреЛрдиреЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рддреИрдпрд╛рд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкреЙрдЬрд╝ рдХрдорд╛рдВрдб рдХрд╛ рдмрд╣реБрд╡рдЪрди рд╕рдВрдЬреНрдЮрд╛ рдЬреИрд╕реЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдПрдХрд╡рдЪрди рд╕рдВрдЬреНрдЮрд╛
 // replace all plural nouns to single ones nounWords.forEach(function(entry) { //parent's || Apple's || Smurf's if(entry.length > 2 && entry.slice(-2) === "'s") { // now skip it. in future we can test to remove it return ; } var newOne = ''; if(entry.length > 3 && entry.slice(-3) === "ies") { newOne = entry.slice(0, -3) + 'y'; } else if(entry.length > 2 && entry.slice(-1) === "s") { newOne = entry.slice(0,-1); } else { return ; } var rexp = new RegExp('(^|\\s)' + entry + '(?=\\s|$)','g') text = text.replace(rexp, "$1" + newOne ); }); 


рд╣рдо рд╕рднреА рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рда рдХреЛ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рддрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
 text = text.replace(/ +(?= )/g,''); callback(text); 

2. рджрд╛рдж рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдирд╛

рдЗрд╕ рдЖрдЗрдЯрдо рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдкрд╛рда рдХреЛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕рд░рдгрд┐рдпрд╛рдБ рдмрдирд╛рдПрдБред
 var makeShingles = function(text, callback) { var words = text.split(' '); var shingles = []; var wordsLength = words.length; while(shingles.length !== (wordsLength - shingleLength + 1)) { shingles.push(words.slice(0, shingleLength).join(' ')); words = words.slice(1); } callback(shingles) }; 

3. crc32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд┐рдВрдЧрд▓ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рджрд╛рдж рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╣реИрд╢ рдХрд░рддреЗ рд╣реИрдВред 0 рд╕реЗ 1 рддрдХ рдХрд╛ рдкрд╣рд▓рд╛ рдЪрдХреНрд░ 84 рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣реИрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рд╕реЗ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рд╕рд╛рдл рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдЕрдЪрд╛рдирдХ рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдкрд░ рд▓реМрдЯреВрдВрдЧрд╛)ред
 var hashingShingles = function(shingles, callback) { var hashes = []; for(var i = 0, n = 1; i < n; i++) { var hashedArr = []; for(var j = 0, k = shingles.length; j < k; j++) { hashedArr.push(crc.crc32(shingles[j])); } hashes.push(hashedArr); } callback(hashes); }; 

4. рдЕрдиреБрдХреНрд░рдорд┐рдХ рддреБрд▓рдирд╛, рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Google рд╕рдорд╛рдЪрд╛рд░ рд╕реЗ 2 рд╕рдорд╛рдЪрд╛рд░ рд▓рд┐рдП рдЬреЛ рдЙрд╕рдиреЗ рдЗрд╕реА рддрд░рд╣ рджрд┐рдЦрд╛рдПред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЬрд╕рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдФрд░ рдлрд┐рд░, рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ Async рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ред рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдорд┐рд▓рд╛рди рд╡рд╛рд▓реЗ рджрд╛рджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╛рдпрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХреАред

2 рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
 var fileJSON = require('./article1.json'); var content1 = fileJSON.content; var fileJSON2 = require('./article2.json'); var content2 = fileJSON2.content; var async = require('async'); async.parallel([ function(callback){ textCanonization(content1, function(text) { makeShingles(text, function(shingles) { hashingShingles(shingles, function(hashes) { callback(null, hashes); }); }) }); }, function(callback){ textCanonization(content2, function(text) { makeShingles(text, function(shingles) { hashingShingles(shingles, function(hashes) { callback(null, hashes); }); }) }); } ], function(err, results){ var firstHashes = results[0]; var secondHashes = results[1]; var compareShingles = function(arr1, arr2) { var count = 0; arr1[0].forEach(function(item) { if(arr2[0].indexOf(item) !== -1) { count++; } }); return count*2/(arr1[0].length + arr2[0].length)*100; }; var c = compareShingles(firstHashes, secondHashes); console.log(c); }); 


рд╕реВрддреНрд░ count*2/(arr1[0].length + arr2[0].length)*100 2 рдкрд╛рдареЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдХреЛ рдЦреЛрдЬрддреА рд╣реИред

рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЧреНрд░рдВрдереЛрдВ: FTC рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ Apple рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА рдкрд░ рдХрдо рд╕реЗ рдХрдо $ 32.5 рдорд┐рд▓рд┐рдпрди рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░реЗрдЧрд╛ рдФрд░ рдРрдк рд╢рд┐рдХрд╛рдпрддреЛрдВ рдХрд╛ рдирд┐рдкрдЯрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Apple 32.5 рдорд┐рд▓рд┐рдпрди рдбреЙрд▓рд░ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░реЗрдЧрд╛ ред 10 рдХреЗ рдмрд░рд╛рдмрд░ рд╢рд┐рдВрдЧрд▓ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде - рдЧреНрд░рдВрде 2.16% рдХреЗ рд╕рдорд╛рди рдереЗ рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред
рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ 84x рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рдХреНрдпреЛрдВ рд╣реИред рдФрд░ рд╕рд╛рде рд╣реА рдореИрдВ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдПрдХ рд╢рд┐рдВрдЧрд▓ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ (10 рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкреВрд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг github.com рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

Source: https://habr.com/ru/post/In209826/


All Articles