рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╡реЗрдм рдкреЗрдЬреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдкреГрд╖реНрдареЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг
"рд╢рд┐рдВрдЧрд▓реНрд╕ рдЕрд▓реНрдЧреЛрд░рд┐рдердо
рдлреЙрд░ рд╡реЗрдм рдбреЙрдХреНрдпреВрдореЗрдВрдЯреНрд╕" рд╣реИ ред
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдиреЛрдб.рдЬреЗрдПрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореБрдЭреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ - рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрдирд╛ рдерд╛ред
рдХреЛрдб рдкрд░ рд╕рднреА рдХрд╛рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓реЗрдЦ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд╕рднреА рдмрд┐рдВрджреБ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рдеред
2 рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рд╕рдорд╛рдирддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдкрд╛рда рдХреЛ рд░рджреНрдж рдХрд░рдирд╛;
- рджрд╛рдж рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд;
- 84x рд╕реНрдерд┐рд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╛рдж рдХреЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╣реИрд╢;
- 84 рдЪреЗрдХрд╕рдо рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛;
- рддреБрд▓рдирд╛, рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред
рдЕрдВрдХ 3.4 рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдереЗред 1 - рдЖрдкрдХреЛ рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 84 рд╕реНрдЯреИрдЯрд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ 2 рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ - рдЪреЗрдХрд╕рдо рдХреЗ 84 рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛ред рдпрджрд┐ 1 рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП - рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 84 рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЗ рд▓рд┐рдП рджрд╛рдж рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ 84xN (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рджрд╛рдж рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЗ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ 2-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реЛрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЗрд╕ 84-рддрддреНрд╡ рд╕рд░рдгреА рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд╛рдж рд╣реИрд╢ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдиреНрдпреВрдирддрдо рд╣реИрд╢ рдХреЛ рд▓рдВрдмрд╛рдИ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ md5 рдХреЗ рд▓рд┐рдП рд╕рднреА рд╣реИрд╢ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЛрдЭ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ crc32 рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рддреБрд▓рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдЗрдЯрдо 3 рдФрд░ 4 рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЕрдВрддрд┐рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
- рдкрд╛рда рдХреЛ рд░рджреНрдж рдХрд░рдирд╛;
- рджрд╛рдж рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд;
- crc32 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд┐рдВрдЧрд▓ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛;
- рдЕрдиреБрдХреНрд░рдорд┐рдХ рддреБрд▓рдирд╛, рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред
1. рдкрд╛рда рдХрд╛ рдХреИрдирдирд╛рдЗрдЬреЗрд╢рди
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╣рд┐рддреАрдХрд░рдг рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- HTML рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕рдорд╛рд╢реЛрдзрди;
- рдкрдХреНрд╖реЛрдВ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рд╕рдлрд╛рдИ (рдЯреНрд░рд┐рдо);
- рдРрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ ",", "\", "\ n", '\ r', ',', ',', ':', '$', '#', '' ',' (') рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ , ')';
- рдПрдХ рд╡рд╛рдХреНрдп рдореЗрдВ рднрд╛рд╖рдг рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред
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];
рдЕрдиреНрдп рд╕рднреА рд╡рд┐рд╢реЗрд╖ред рдореИрдВрдиреЗ рднрд╛рд╖рдг рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
[',', '.', ':', '$', '#', '"', '(', ')'].forEach(strCharacterRemove);
рдлрд┐рд░ рдпрд╣ рд╕рднреА рд╕рдВрдЬреНрдЮрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рдФрд░ рдХреИрдиреЛрдиреЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХ рдХреЛ рддреИрдпрд╛рд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдкреЙрдЬрд╝ рдХрдорд╛рдВрдб рдХрд╛ рдмрд╣реБрд╡рдЪрди рд╕рдВрдЬреНрдЮрд╛ рдЬреИрд╕реЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдПрдХрд╡рдЪрди рд╕рдВрдЬреНрдЮрд╛ рд╣рдо рд╕рднреА рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд╛рда рдХреЛ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рддрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
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 рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ