рд╣рд╛рдп, рд╣реИрдмреНрд░ред
рд╣реЗрдмреНрд░рд┐рдЯрд┐рдВрдЧ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ, рдЕрдВрдЧреНрд░реЗрдЬреА рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдб рд╢рдмреНрдж рдмрдирд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рдЧрдИ рдереАред рдмреЗрд╢рдХ, рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдРрд╕реА рддрд╕реНрд╡реАрд░ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕рднреА рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдмрд░ рдХреЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рдмрд╛рджрд▓ рджреЗрдЦреЗрдВрдЧреЗред
рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреГрдкрдпрд╛ рдХреНрдпрд╛ рд╣реБрдЖ, рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред
рдкрджрдЪреНрдЫреЗрдж
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛рд╕реЗрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ, 2006 рд╕реЗ 2019 рддрдХ рд╣реИрдмрд░ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЗ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдПрд╕рд╡реА рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рд╢реМрдХ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрдВрдбреЛрдВ рдХреЗ рдбреЗрдЯрд╛рдлреНрд░реЗрдо рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдЪреБрдиреЗрдВред
df = pd.read_csv(log_path, sep=',', encoding='utf-8', error_bad_lines=True, quotechar='"', comment='#') if year != 0: dates = pd.to_datetime(df['datetime'], format='%Y-%m-%dT%H:%MZ') df['datetime'] = dates df = df[(df['datetime'] >= pd.Timestamp(datetime.date(year, 1, 1))) & ( df['datetime'] < pd.Timestamp(datetime.date(year + 1, 1, 1)))]
Unicode2str рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреЗрдЪреАрджрд╛ рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдгреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЧреИрд░-рдорд╛рдирдХ рдЙрджреНрдзрд░рдг - OSX рдХреЗ рддрд╣рдд, рдпрд╣ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ "рдпреВрдирд┐рдХреЛрдб .ncodeError: 'рдЪрд╛рд░реНрдореИрдк' рдХреЛрдбреЗрдХ рд╡рд░реНрдг рдХреЛ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ" рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдерд╛ред
рдЕрдЧрд▓рд╛ рдХрджрдо рд░реВрд╕реА-рднрд╛рд╖рд╛ рдХреЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдЕрдиреНрдп рд╕рднреА рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдПрд╕рд╕реАрдЖрдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ 2 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдг рдмрдЪреЗ рд╣реИрдВ, рддреЛ рд╣рдо "рдкреВрд░реНрдг" рд╢рдмреНрдж рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдЬреЛ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдЧреЛ рднрд╛рд╖рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред
def to_ascii(s): try: s = s.replace("'", '').replace("-", '').replace("|", '') return s.decode('utf-8').encode("ascii", errors="ignore").decode() except: return '' def is_asciiword(s): ascii_word = to_ascii(s) return len(ascii_word) > 2
рдЕрдЧрд▓рд╛ рдХрд╛рдо рд╢рдмреНрдж рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ рд╣реИ - рдПрдХ рд╢рдмреНрдж рдХреНрд▓рд╛рдЙрдб рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЛ рдПрдХ рдорд╛рдорд▓реЗ рдФрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдВрдд рдореЗрдВ "рдПрд╕" рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рдЕрдкрдардиреАрдп рд╡рд░реНрдгреЛрдВ рдЬреИрд╕реЗ рдХреЛрд╖реНрдардХ рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ (рдФрд░ рдореИрдВ рднрд╛рд╖рд╛рд╡рд┐рджреН рдирд╣реАрдВ рд╣реВрдВ), рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
def normal_eng(s): for sym in ("'s", '{', '}', "'", '"', '}', ';', '.', ',', '[', ']', '(', ')', '-', '/', '\\'): s = s.replace(sym, ' ') return s.lower().strip()
, '{', '}', " '",' " ','} ','; ''ред ',,', ',' [ ','] ',' def normal_eng(s): for sym in ("'s", '{', '}', "'", '"', '}', ';', '.', ',', '[', ']', '(', ')', '-', '/', '\\'): s = s.replace(sym, ' ') return s.lower().strip()
рдЕрдм рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ рд╣реИ, рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдпрд╣ pymorphy2 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
import pymorphy2 morph = pymorphy2.MorphAnalyzer() res = morph.parse(u"") for r in res: print r.normal_form, r.tag.case
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
NOUN,inan,masc sing,datv datv NOUN,inan,masc sing,loc2 loc2 NOUN,inan,neut sing,datv datv NOUN,inan,masc sing,gen2 gen2
рд╢рдмреНрдж "рджреБрдирд┐рдпрд╛" рдХреЗ рд▓рд┐рдП, рдореЙрд░реНрдлрдЕрдирд▓рд╛рдЗрдЬрд╝рд░ рдиреЗ "рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк" рдХреЛ рд╕рдВрдЬреНрдЮрд╛ "рджреБрдирд┐рдпрд╛" (рдпрд╛ "рджреБрдирд┐рдпрд╛") рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ), рдПрдХрд╡рдЪрди, рдФрд░ рд╕рдВрднрд╡ рдорд╛рдорд▓реЛрдВ рдЬреИрд╕реЗ рдбреЗрдЯрд┐рд╡, рдЬреЗрдирд┐рдЯрд┐рд╡ рдпрд╛ рд╕реНрдерд╛рдирд┐рдХред
MorphAnalyzer рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╢рдмреНрдж рдПрдХ рд╕рдВрдЬреНрдЮрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
morph = pymorphy2.MorphAnalyzer() def normal_rus(w): res = morph.parse(w) for r in res: if 'NOUN' in r.tag: return r.normal_form return None
рдпрд╣ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдЬреЛ рдХреБрдЫ рд╣реБрдЖ рдЙрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рд╣рдЯрд╛рдП рдЧрдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯреБрдХрдбрд╝реЗ):
from collections import Counter c_dict = Counter() for s in titles.values: for w in s.split(): if is_asciiword(w):
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рдЙрдирдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╣рдо рдкрд╣рд▓реЗ 100 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирд╕реЗ рд╢рдмреНрджреЛрдВ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХрд╛ рдПрдХ рдмрд╛рджрд▓ рдмрдирддреЗ рд╣реИрдВ:
common = c_dict.most_common(100) wc = WordCloud(width=2600, height=2200, background_color="white", relative_scaling=1.0, collocations=False, min_font_size=10).generate_from_frequencies(dict(common)) plt.axis("off") plt.figure(figsize=(9, 6)) plt.imshow(wc, interpolation="bilinear") plt.title("%d" % year) plt.xticks([]) plt.yticks([]) plt.tight_layout() file_name = 'habr-words-%d.png' % year plt.show()
рдкрд░рд┐рдгрд╛рдо, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рдЕрдЬреАрдм рдирд┐рдХрд▓рд╛:

рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛:
3958 3619 1828 840 2018 496 389 375 375
рд╢рдмреНрдж "рдкреНрд░рджрд░реНрд╢рди", "рджреВрд╕рд░рд╛" рдФрд░ "рд╕рджреА" рдПрдХ рдмрдбрд╝реЗ рдЕрдВрддрд░ рд╕реЗ рдЕрдЧреНрд░рдгреА рдереЗред рдФрд░ рдпрджреНрдпрдкрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ (рдЖрдк "рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000 рдмрд╛рд░ рдХреА рдЧрддрд┐ рд╕реЗ рдЦреЛрдЬ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рддрд░рд╣ рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдПрдХ рд╕рджреА рд▓рдЧ рдЬрд╛рдПрдЧреА), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╢рдмреНрдж рдереЗред рдФрд░ рд╡реНрдпрд░реНрде рдореЗрдВ рдирд╣реАрдВ - рдЬреИрд╕рд╛ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЙрд░реНрдлрдирд▓рд╛рдпрд░ рдиреЗ "рд╕реА" рд╢рдмреНрдж рдХреЛ "рджреВрд╕рд░рд╛" рдФрд░ "рд╕реА" рд╢рдмреНрдж рдХреЛ "рд╢рддрд╛рдмреНрджреА" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдпрд╛рдиреА "рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ ..." рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдореЙрд░реНрдлрдЕрдирд▓реАрдЬрд╝рд░ рдиреЗ 3 рд╢рдмреНрджреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ - "рджреВрд╕рд░рд╛", "рд╕рд╣рд╛рдпрддрд╛", "рддрдХрдиреАрдХ", рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИред рдЕрдЧрд▓реЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╢рдмреНрдж "рдЬрдм" ("рдЬрдм рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ...") рдФрд░ "рдкрд╣рд▓реЗ рд╕реЗ рд╣реА" рдереЗ, рдЬрд┐рдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ "рдкреНрд░рддреНрдпрдХреНрд╖" рдФрд░ "рдкрд╣рд▓реЗ рд╕реЗ рд╣реА" рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рдерд╛ - рдЬрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдХреЗрд╡рд▓ 2 рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╢рдмреНрджреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдФрд░ рд░реВрд╕реА-рднрд╛рд╖рд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджрд░реНрдЬ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░, рд╢рд╛рдпрдж рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдирд╣реАрдВ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд░рдВрдЧ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд▓реЛрдХрди" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдпрд╛ рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА :) рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХрдореЛрдмреЗрд╢ рд╕рдЪреНрдЪрд╛рдИ рдХреЗ рд╕рдорд╛рди рд╣реИ (рдЧреЛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдФрд░ рд╕рд╛рдВрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд▓реЗрдЦ)ред рдпрд╣ рд╕рдм рдПрдХ рдЬрд┐рдлрд╝ (
рдкрд┐рдЫрд▓реЗ рдкреАрдврд╝реА рдХреЗ рдХреЛрдб рдореЗрдВ
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣реИ ) рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рд╣рдореЗрдВ 2006 рд╕реЗ 2019 рддрдХ рд╣реИрдмрд░ рдХреЗ рд╢реАрд░реНрд╖рдХреЛрдВ рдореЗрдВ рдХреАрд╡рд░реНрдб рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рд░реВрд╕реА рдкрд╛рда рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛рдлреА рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ред рдмреЗрд╢рдХ, рдХреБрдЫ рдЖрд░рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдмреЛрд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдПрдХ рд▓рдЪреАрд▓реА рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЕрдкрд╡рд╛рдж рд╣реИрдВ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрджрд░реНрдн рдХреА рднрд╛рд╡рдирд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ 100% рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рде рдореЗрдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ, рдкрд╛рдпрдерди рдореЗрдВ рд╕рд┐рд░рд┐рд▓рд┐рдХ рдЧреНрд░рдВрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо, рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИ - рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдПрдВ, рдкреНрд░рд┐рдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЯреВрдЯреЗ рд╣реБрдП рдЖрдЙрдЯрдкреБрдЯ, рдЕрдЬрдЧрд░ 2.7 рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдпреВ "рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛, рдЖрджрд┐ред рдпрд╣ 21 рд╡реАрдВ рд╕рджреА рдореЗрдВ рднреА рдЕрдЬреАрдм рд╣реИ, рдЬрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ KOI8-R рдпрд╛ CP-1252 рдЬреИрд╕реЗ рд╕рднреА рдирд╛рд╕реНрддрд┐рдХреЛрдВ рдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИ рд╣реИ, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рддрд╛рд░реЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдкрд╛рда рдХреЗ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ
рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддрд╕реНрд╡реАрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реБрдИ - рд▓рдЧрднрдЧ рд╕рднреА рдЖрдИрдЯреА рд╢рдмреНрдж рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП 10 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд░реВрд╕реА рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛рдлреА рдХрдо рдмрджрд▓ рдЧрдИ рд╣реИред рд╕рдВрднрд╡рддрдГ, рд░реВрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 50-100 рд╡рд░реНрд╖реЛрдВ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рдмрд╛рдж рд▓реЗрдЦ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрдЧрд╛;)