
    iҮ                         d dl T d dlZd dlZ ej                    Zg dZg dZg dZg dZ e	eez   ez             Z
g dZ G d d	          Z e            Zd
efdZd Zd Zd Zg dZd Zd Zd Zd ZdS )    )*N)u   иu   вu   воu   неu   чтоu   он   наu   я   с   со   какu   аu   тоu   всеu   онаu   такu   егоu   ноu   даu   тыu   к   уu   же   вы   заu   бы   поu   толькоu   ееu   мнеu   былоu   вот   отu   меняu   ещеu   нетu   о   изu   емуu   теперь
   когдаu   дажеu   нуu
   вдругu   лиu   еслиu   ужеu   илиu   ниu   бытьu   былu   него   доu   васu   нибудьu
   опятьu   ужu   вамu   ведьu   тамu
   потомu   себяu   ничегоu   ейu
   можетu   ониu   тут   где   естьu   надоu   нейu   дляu   мыu   тебяu   их   чемu   былаu   самu   чтобu   безu
   будтоu   чего   разu   тожеu   себе   подu
   будетu   жu
   тогда   ктоu   этотu   тогоu   потомуu
   этого
   какойu   совсемu   нимu
   здесьu   этомu   одинu
   почтиu   мойu   темu
   чтобыu   нееu   сейчасu   были   кудаu
   зачемu   всехu   никогдаu
   можно   приu   наконецu   два   обu   другойu   хотьu
   послеu   надu   большеu   тотu
   черезu   этиu   нас   проu
   всегоu   нихu
   какаяu
   многоu
   развеu   триu   этуu   мояu   впрочемu   хорошоu   своюu   этойu
   передu   иногдаu
   лучшеu   чутьu   томu   нельзяu
   такойu   имu
   болееu   всегдаu   конечноu   всюu
   между)imemymyselfweourours	ourselvesyouyouryoursyourself
yourselveshehimhishimselfsheherhersherselfititsitselftheythemtheirtheirs
themselveswhatwhichwhowhomthisthatthesethoseamisarewaswerebebeenbeinghavehashadhavingdodoesdiddoingaantheandbutiforbecauseasuntilwhileofatbyforwithaboutagainstbetweenintothroughduringbeforeafterabovebelowtofromupdowninoutonoffoverunderagainfurtherthenonceheretherewhenwherewhyhowallanybotheachfewmoremostothersomesuchnonornotonlyownsamesothantooverystcanwilljustdonshouldnow)	r   r   u   почемуr   r   r   r   u   можешьr   )docwwwhttphttpsmailto)su   контрафактu   оооu   аоu   паоu   заоu   ипu   гкu   ндсu   ндфлu   уснu
   основu   енвдu   пснu   фнсu   цбu   мфцu   гисu
   гибддu   мчсu   жкхu   рждu   аэсu   тэцu   гэсu   ввпu   внпu   сммu   сеоu   семu   цаu   цпu   кпu   кпиu   кпэu   кпдu   окрu   влu   срмu   ерпu   биu   ииu   млu   длu   нлпu   квu   ивu   врu   дрu   уиu   юиu   ксu   хрu   девопсu   сиайu   сидиu
   кьюэйu   динсu   айпиu
   юэрылu
   юэрайu   хттпu
   хттпсu   эсэсэлu   тиэлэсu   эсэсэйu   эфтипиu   рестu   соапu   джейсонu   иксэмэлu   эйчтиэмэлu   сиэсэсu   джейэсu
   диоэмu   сиэмэсu   сиэрымu
   иэрпиu   биайu   айтиu
   айотиu   виэрu   эйрu   юиксu   юайu   впнu   лвсu   гвсu   рэмu   ромu   цпуu   гпуu   эсэсдиu   эйчдидиu   бпu   своu
   пэнэлu   битубиu   битусиu   ситусиu   битуджиu   эрэнди   эмэнэйu   эйсиэйпиu   тибидиu   тибиэйu   эфкьюэйu
   эйчарu   пиарu   сиэсэрu
   юэспиu   эмвипиu   эсэлэйu   эндиэйu
   айпиоr   c                       e Zd Zd ZdedefdZdedefdZdefdZdedefdZdedefdZ	dedefd	Z
defd
ZdefdZdS )RussianVerbAspectConverterc           	      L   i ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdyd0dzd{d|d}d~dddddddddi ddddddddddddddddddddddddddLddddddddi ddddddddddddddddddddddddddddÓddœddǓddɓi ddXdd̓ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddi ddddddddddddddddddddddddddd d ddddddi ddddddd	d
ddddddddddddddddddddddddd d!i d"d#d$d%d&d'd(d(d)d)d*d*d+d+d,d,d-d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=i d>d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdYdZd[d\d]i d^d_d`d`dadadbdbdcdcdddedfdfdgdgdhdidjdkdldmdndodpdqdrdrdsdtdudvdwdwi dxdydzd{d|d}d~d~ddddddddddddddddddddddddddi dddddddddddddddddddddldmdddddddddd| _         d | j                                         D             | _        g d| _        ddddddddd| _        dddddd| _        h d| _        d S (  Nu   сделатьu   делатьu   написатьu   писатьu   прочитатьu   читатьu   сказатьu   говоритьu   увидетьu   видетьu   услышатьu   слышатьu   построитьu   строитьu   выучитьu
   учитьu   поработатьu   работатьu   приготовитьu   готовитьu   открытьu   открыватьu   закрытьu   закрыватьu   начатьu   начинатьu   закончитьu   заканчиватьu   купитьu   покупатьu   продатьu   продаватьu   датьu   даватьu   получитьu   получатьu   объяснитьu   объяснятьu   понятьu   пониматьu   решитьu   решатьu   спроситьu   спрашиватьu   встретитьu   встречатьu   вспомнитьu   помнитьu   подождатьu
   ждатьu
   найтиu   искатьu   потерятьu   терятьu   изучитьu   изучатьu   поменятьu   менятьu   посмотретьu   смотретьu   послушатьu   слушатьu   сыгратьu   игратьu
   спетьu   петьu   станцеватьu   танцеватьu    попутешествоватьu   путешествоватьu   отдохнутьu   отдыхатьu   поспатьu
   спатьu   съестьr   u   выпитьu   питьu
   взятьu
   братьu   положитьu   кластьu   поставитьu   ставитьu   повеситьu   вешатьu   порезатьu   резатьu   помытьu   мытьu   почиститьu   чиститьu   заплатитьu   платитьu   ответитьu   отвечатьu   провестиu   проводитьu   принестиu   приноситьu   умеретьu   умиратьu   заперетьu   запиратьu   лечьu   лежатьu
   сестьu   сидетьu
   пойтиu   идтиu   узнатьu
   знатьu   захотетьu   хотетьu   встатьu   стоятьu   прожитьu   житьu   подуматьu   думатьu   запомнитьu   забытьu   забыватьu   помочьu   помогатьu   кончитьu   кончатьu
   войтиu   входитьu
   выйтиu   выходитьu   прийтиu   приходитьu   уйтиu   уходитьu   побежатьu   бежатьu   побегатьu   бегатьu   поехатьu
   ехатьu   поездитьu   ездитьu   полетатьu   летатьu   поплытьu
   плытьu   понестиu
   нестиu   повестиu
   вестиu   привестиu   повозитьu   возитьu
   одетьu   одеватьu   раздетьu   раздеватьu   поестьu   погулятьu   гулятьu   нарисоватьu   рисоватьu   научитьсяu   учитьсяu   полюбитьu   любитьu   понравитьсяu   нравитьсяu   испугатьсяu   боятьсяu   засмеятьсяu   смеятьсяu   заплакатьu   плакатьu   поцеловатьu   целоватьu   обнятьu   обниматьu   побитьu   битьu   подратьсяu   дратьсяu   броситьu   бросатьu   пойматьu   ловитьu   назватьu   называтьu   посчитатьu   считатьu   изменитьu   изменятьu   показатьu   показыватьu   доказатьu   доказыватьu   создатьu   создаватьu   сломатьu   ломатьu   разрезатьu   сваритьu   варитьu   пожаритьu   жаритьu   испечьu   печьu   родитьсяu   рождатьсяu   вырастиu
   растиu   постаретьu   старетьu   позватьu
   зватьu   пригласитьu   приглашатьu   появитьсяu   появлятьсяu   исчезнутьu   исчезатьu   упастьu   падатьu   поднятьu   подниматьu   опуститьu   опускатьu   повернутьu   поворачиватьu   остановитьu   останавливатьu   продолжитьu   продолжатьu   вернутьu   возвращатьu   вернутьсяu   возвращатьсяu   взглянутьu   взглядыватьu   улыбнутьсяu   улыбатьсяu   закричатьu   кричатьu   шепнутьu   шептатьu
   сдатьu   сдавать   жениться   использовать   организоватьu   организовывать   атаковать   исследовать   обещать   велетьu   поранитьu   ранить   наследовать   казнить   крестить   миноватьu    проанализироватьu   анализироватьu   разработатьu   разрабатыватьu   внедритьu   внедрятьu   опубликоватьu   публиковатьu   описатьu   описыватьu   обобщитьu   обобщатьu"   систематизироватьu    классифицироватьu    интерпретироватьu   подтвердитьu   подтверждатьu   опровергнутьu   опровергатьu   обосноватьu   обосновыватьu   установитьu   устанавливатьu   выявитьu   выявлятьu   определитьu   определятьu   оценитьu   оцениватьu   рассчитатьu   рассчитыватьu   спрогнозироватьu   прогнозироватьu   модернизироватьu   оптимизироватьu    автоматизироватьu"   стандартизироватьu   апробироватьu$   экспериментироватьu   протестироватьu   тестироватьu   осветитьu   освещатьu"   прокомментироватьu   комментироватьu    проинформироватьu   информироватьu   сообщитьu   сообщатьu   заявитьu   заявлятьu   отметитьu   отмечатьu   подчеркнутьu   подчеркиватьu   акцентироватьu   покритиковатьu   критиковатьu   обвинитьu   обвинятьu   оправдатьu   оправдыватьu   призватьu   призыватьu   потребоватьu   требоватьu   предложитьu   предлагатьu   порекомендоватьu   рекомендоватьu   отреагироватьu   реагироватьu    законстатироватьu   констатироватьu   процитироватьu   цитироватьu   прорезюмироватьu   резюмироватьu    проинвестироватьu   инвестироватьu    профинансироватьu   финансироватьu   бюджетироватьu   произвестиu   производитьu   реализоватьu   реализовыватьu   закупитьu   закупатьu   импортироватьu   экспортироватьu   конкурироватьu   кооперироватьu    проинтегрироватьu   интегрироватьu"   диверсифицироватьu   стратегироватьu   запланироватьu   планироватьu   управитьu   управлятьu"   проконтролироватьu   контролироватьu   промониторитьu   мониторитьu   проаудироватьu   аудироватьu   преподаватьu   обучитьu   обучатьu   защититьu   защищатьu   диссертироватьu   проэкзаменоватьu   экзаменоватьu   проаттестоватьu   аттестовыватьu   аккредитоватьu   аккредитовыватьu   лицензироватьu   сертифицироватьu(   законодательствоватьu   зарегулироватьu   регулироватьu   пронормироватьu   нормироватьu   легализоватьu   легализовыватьu   ратифицироватьu   санкционироватьu   запретитьu   запрещатьu   разрешитьu   разрешатьu   узаконитьu   узакониватьu"   запрограммироватьu   программироватьu"   алгоритмизироватьu   смоделироватьu   моделироватьu   симулироватьu   визуализироватьu   формализоватьu   формализовыватьu   закодироватьu   кодироватьu   дешифроватьu   дешифровыватьu   заархивироватьu   архивироватьu   забэкапитьu   бэкапитьu   инициироватьu   исполнитьu   исполнятьu   завершитьu   завершатьu"   задокументироватьu   документироватьu   презентоватьu   отчитатьсяu   отчитыватьсяu   подделатьu   подделыватьu   подключитьu   подключатьc                     i | ]\  }}||	S  r   ).0kvs      ./cmf/util/cmfnlp.py
<dictcomp>z7RussianVerbAspectConverter.__init__.<locals>.<dictcomp>   s    *d*d*dDAq1a*d*d*d    )r   u   взr
   r   r   u   переr   r	   r   u   преr   r   u   расu   возr   u   предr   r   r   r   r      ять
   иватьu
   евать
   ывать   ать)   итьr   u   етьr      нутьr   u   отьr   r   u   тьr   )r   r   u   ватьr   r   >      ранетьr   r   r   r   r   r   r   r   r   r   r   )perfective_to_imperfectiveitemsimperfective_to_perfectiveperfective_prefixessuffix_pairssuffix_replacementsbiaspect_verbs)selfs    r   __init__z#RussianVerbAspectConverter.__init__-   s,   Q+
,<n Q+
N`bp Q+
 .Q+
2BDVQ+
XhjxQ+
 0Q+
2FHXQ+
ZjlxQ+
 #$6Q+
 9QRdQ+
 gw  yMQ+
 2	Q+
 5CDV	Q+
 Ym  oG	Q+

 .Q+

 1ABVQ+

 YcdrQ+
 Q+

 uG  I[Q+
 !"6Q+
 9GHZQ+
 ]klzQ+
  6Q+
 9MNbQ+
 ey  {KQ+
 !,Q+
 1=nQ+
 OabpQ+
 sC  EUQ+
 Q+
 1GHZQ+
 ]q  sCQ+
 EU  WeQ+
 *Q+
 '=>RQ+
 Q+
 Q+
 Uw  yWQ+
 !"4Q+
 7GQ+
 WefpQ+
 sA  CMQ+
 ,Q+
 );NQ+
 MabrQ+
 uG  IWQ+
 Q+
 1?
Q+
 MabrQ+
 uI  K[Q+
  2Q+
 5GH\Q+
 _q  sGQ+
 .Q+
 Q+
 Q+
 1CDVQ+
 YcdrQ+
 uA  CQQ+
  *!Q+
  '5l!Q+
  EWXf!Q+
  iw  yG!Q+
" j#Q+
" +=n#Q+
" Ocdt#Q+
" wE  GY#Q+
$ .%Q+
$ 1ABR%Q+
$ Uabr%Q+
$ uA  CU%Q+
& 0'Q+
& 3=>N'Q+
 Q+
 Q+
& Qcdr'Q+
& uG  IW'Q+
( l)Q+
( -?)Q+
( Qcdr)Q+
( uE  GS)Q+
* l+Q+
* -=l+Q+
* M_`l+Q+
* oA  CQ+Q+
, *-Q+
, -=>R-Q+
, Ucdn-Q+
, qC  ES-Q+
. #$6/Q+
. 9MN^/Q+
. as  uC/Q+
 Q+
 Q+
0 %&:1Q+
0 =STd1Q+
0 g}  Q1Q+
2 !"23Q+
2 5KL^3Q+
2 ao  qC3Q+
4 J5Q+
4 )=>N5Q+
4 Qabr5Q+
4 uE  GU5Q+
6 07Q+
6 3GHX7Q+
6 [m  oA7Q+
8  69Q+
8 9KLb9Q+
8 eu  wK9Q+
: n;Q+
 Q+
 Q+
: /CN;Q+
: Ueft;Q+
: wI  KY;Q+
< J=Q+
< );<P=Q+
< Scdp=Q+
< sG  IY=Q+
> l?Q+
> -CDZ?Q+
> ]q  sI?Q+
@ !"4AQ+
@ 7EnAQ+
@ Wgh|AQ+
B  2CQ+
B 5IJdCQ+
B g}  [CQ+
D #$:EQ+
 Q+
 Q+
D =MNdEQ+
D g{  }WEQ+
F !":GQ+
F =SThGQ+
F k  AQGQ+
H .IQ+
H 1=>NIQ+
H QcdvIQ+
J '(BKQ+
J E_`~KQ+
J AU  WkKQ+
L %&>MQ+
L AQRbMQ+
L es  uCMQ+
L EW  YgMQ+
N %&>OQ+
N AQRbOQ+
 Q+
 Q+
N ew  yKOQ+
P  2QQ+
P 5WXtQQ+
P wO  QmQQ+
R  2SQ+
R 5OPhSQ+
R k{  }QSQ+
T  2UQ+
T 5YZ~UQ+
V /0RWQ+
V Uw  y[WQ+
X %&@YQ+
X C]^vYQ+
X yO  QkYQ+
Z #$@[Q+
Z CSTf[Q+
Z i  AW[Q+
 Q+
 Q+
\ 2]Q+
\ 5KLf]Q+
\ iI  Ki]Q+
^ -.N_Q+
^ Qo  qO_Q+
` /0RaQ+
` Uy  {_aQ+
b '(BcQ+
b Ek  mScQ+
d +,DeQ+
d GYZleQ+
d oS  UseQ+
f /0LgQ+
f OabtgQ+
f wG  I[gQ+
h  2iQ+
h 5MNhiQ+
 Q+
 Q+
h kG  IeiQ+
j )*BkQ+
j EWXjkQ+
j mA  C[kQ+
l  4mQ+
l 7OPdmQ+
l g}  UmQ+
n -.JoQ+
n Mi  kCoQ+
p /0NqQ+
p Qm  oEqQ+
r -.HsQ+
r Km  oKsQ+
t /0LuQ+
t Ok  mIuQ+
v #$<wQ+
v ?WXtwQ+
 Q+
 Q+
v wI  K]wQ+
x )*FyQ+
x Ig  iGyQ+
z )*F{Q+
z Ie  gC{Q+
| /0L}Q+
| Os  uY}Q+
~ +,JQ+
~ Mi  kCQ+
@  4AQ+
@ 7[\zAQ+
@ }Y  [qAQ+
B )*@CQ+
B C[\tCQ+
B wG  IYCQ+
D  2EQ+
D 5STrEQ+
 Q+
 Q+
D uU  WqEQ+
F +,HGQ+
F Kg  iIGQ+
H )*FIQ+
H Ii  kKIQ+
J 78bKQ+
J eC  E_KQ+
L +,DMQ+
L Ga  cAMQ+
N +,JOQ+
N Mm  oOOQ+
P !"6QQ+
P 9MNbQQ+
P ey  {SQQ+
R 12RSQ+
R Uy  {_SQ+
T )*DUQ+
 Q+
 Q+
T Gab|UQ+
V -.NWQ+
V Qm  oOWQ+
X '(>YQ+
X AYZvYQ+
Z +,F[Q+
Z I_`r[Q+
Z uO  Qk[Q+
\ !"6]Q+
\ 9MNb]Q+
\ eI  Ki]Q+
^ 12R_Q+
^ Uo  qK_Q+
` #$>aQ+
` AUVnaQ+
` qG  I_aQ+
 Q+
'f +e*dD<[<a<a<c<c*d*d*d'$
 $
 $
  """  	
 	
 #"  $
 $
 
 
 
r   verbreturnc                    |                                                                 }|}d}|                    d          rd}|dd         }n!|                    d          rd}|dd         }|| j        v r||z   S || j        v r| j        |         S || j        v r| j        |         |z   S || j        v r||z   S || j        v r|S |                     |          |z   S )u^   
        Преобразует глагол к несовершенному виду
            сяN   сь)lowerstripendswithr   r   r   _auto_convert_to_imperfectiver   r   	orig_verb	reflexives       r   to_imperfectivez*RussianVerbAspectConverter.to_imperfective   s    zz||!!##		==   	I9DD]]6"" 	I9D 4&&&)## 77729== 42222489DD 4222)## 777 11$77)CCr   c                 n   d}|                     d          rd}|dd         }n!|                     d          rd}|dd         }|}| j        D ]e}|                    |          rNt          |          t          |          k    r.|t          |          d         }t          |          dk    r|} nf||k    ru| j                                        D ][\  }}|                     |          rA|dk    r|dt          |                    }||z   }n|dt          |                    |z   } n\||z  }|S )j   
        Автоматическое преобразование с помощью правил
        r   r   Nr   r      r   )r   r   
startswithlenr   r   )r   r   r   resultprefixstemperfect_suffiximperfect_suffixs           r   r   z8RussianVerbAspectConverter._auto_convert_to_imperfective   sz   
 	==   	I9DD]]6"" 	I9D . 	 	Fv&& 3t99s6{{+B+BCKKLL)t99>>!FE T>>484E4K4K4M4M 
 
0 0==00 	%33#$9c.&9&9%9$9:!%(8!8!%&;N(;(;';&;!<?O!OE	 	)r   c                    |                                                                 }|                     |          }|dk    r|                     |          }|}n"|dk    r|                     |          }|}n|}|}|||||| j        v dS )u_   
        Получить полную информацию о виде глагола
        
perfectiveimperfective)r   aspectr   r   is_biaspect)r   r   determine_aspectr   to_perfectiver   )r   r   r   r   r   s        r   get_aspect_infoz*RussianVerbAspectConverter.get_aspect_info   s     zz||!!## &&t,, \!!//55LJJ~%%++D11JLLJL ($4#66
 
 	
r   c                     || j         v rdS || j        v rdS || j        v rdS | j        D ]=}|                    |          r&t          |          t          |          dz   k    r dS >|                    d          rdS dS )u<   
        Определяет вид глагола
        biaspectr   r      )r   r   unknown)r   r   r   r   r   r   r   )r   r   r   s      r   r   z+RussianVerbAspectConverter.determine_aspect  s     4&&&:4222<T444!> . 	$ 	$Fv&& $3t99s6{{Q+F+F#|| ==566 	"!>yr   c                    |                                                                 }|}d}|                    d          rd}|dd         }n!|                    d          rd}|dd         }|| j        v r| j        |         S || j        v r| j        |         |z   S || j        v r||z   S || j        v r|S |                     |          |z   S )uu   
        Преобразует глагол несовершенного вида в совершенный
        r   r   Nr   r   )r   r   r   r   r   _auto_convert_to_perfectiver   s       r   r   z(RussianVerbAspectConverter.to_perfective*  s    zz||!!##		==   	I9DD]]6"" 	I9D 77729== 42222489DD 4222)## 777 //55	AAr   c                    d}|                     d          s|                     d          rd}|dd         }| j        D ])}|                    |          s||z   }|| j        v r|} nT*|}| j                                        D ]7\  }}|                     |          r|dt          |                    |z   } n8|r|dz  }|S )r   Fr   r   TNr   )r   r   r   r   r   r   r   )r   r   r   r   	candidater   suffixreplacements           r   r   z6RussianVerbAspectConverter._auto_convert_to_perfectiveL  s   
 	==   	DMM&$9$9 	I9D . 	 	F??6** "TM	 ???&FE F'+'?'E'E'G'G  #==(( !-CKK<-0;>FE
  	fFr   c                     |                                                                 }|| j        v r|| j        |         fS || j        v r| j        |         |fS |                     |          }||fS )uz   
        Возвращает пару (несовершенный, совершенный) для глагола
        )r   r   r   r   r   )r   r   r   s      r   get_aspect_pairz*RussianVerbAspectConverter.get_aspect_pairn  s}     zz||!!##4222$9$?@@T4443D94@@++D11J*%%r   c                    |d         t           j        v rd}g S |                                                                }t	                      }|                    |                     |                     |                    |                     |                     ||hz
  }t	                      }|D ]}t          j	        
                    |          sNt          j	                            |          }t          |          dk    r|                    |d                    o|                    |           ||hz
  }|S )Nr   en)stringascii_lettersr   r   setaddr   r   cmfutildictionary_ruchecksuggestr   )r   r   langres	clear_reswsugss          r   get_all_aspectsz*RussianVerbAspectConverter.get_all_aspects~  s!   7f***DIzz||!!##ee$$T**+++""4(()))dHn( EE	 	! 	!A(..q11 !,44Q77t99Q;;MM$q'***a    $(	r   N)__name__
__module____qualname__r   strr   r   r   r   r   r   r   r  r   r   r   r   r   '   s2       w
 w
 w
r$DC $DC $D $D $D $DL(# (# ( ( ( (T
C 
 
 
 
8S S    0B# B# B B B BD           D&C & & & & &C & & & & & &r   r   r   c                 6    t                               |           S )N)
verb_apectr  )r   s    r   get_all_verb_aspectsr	    s    %%d+++r   c                    t                      }| D ]}|                    |           t                              d|          r4t                              |          rO|t          v rY|d         t          j        v rt          j	        }nt          j
        }|                    |          }d}|D ]x}|dk    r not          |          dk    rd|v r#|d         |d         k    r6|dz  }|                    |                    dd                              dd                     yt          j        j        j                                                            d	d
|i          }d}|D ]{\  }}|dk    r not          |          dk    r!d|v r&|d         |d         k    r9|dz  }|                    |                    dd                              dd                     ||S )Nu   [^А-Яа-яA-Za-z]r   r       -   ё   еz
        SELECT
            name, similarity(:word, name) as sim
        FROM cmf_synonym
        WHERE
            :word % name
        ORDER BY "sim" desc
        LIMIT 5;
            word)r   r   researchr   dictionary_checkSPELL_EXCLUDEr   r   dictionary_enr   r   r   replacemodels
CmfSynonymdpdata_driverSessionexecute)	tokensr   r   
dictionaryr  foundsugsugs_syn_s	            r   tokens_enrich_spellr#    s   
%%C :> :>


99+Q// 	##A&& 	Q46''' .JJ .J!!!$$ 	> 	>Czz3xx1}}czz1v1~~QJEGGCKKC((00t<<==== $'3;;==EE G A

 
  	> 	>FCzz3xx1}}czz1v1~~QJEGGCKKC((00t<<====Jr   c                 t   t                      }| D ]}|                    |           t                              |          d d         D ]l}|j                            dd          }d|v r"|                    |           d|j        v r,t          |          D ]}d|v r|                    |           m|S )Nr   r  r  r  INFN)r   r   morphparsenormal_formr  tagr	  )r  r   r   nwnewtasps         r   tokens_enrich_morphr-  )  s    
%%C ! !


++a..!$ 	! 	!B>))$55Dd{{GGDMMM/55 ! !Cczz GGCLLLL	! Jr   c                 v   |                                  } |                     dd          } d}t                              d|           D ]}|st                              dd|          }|                    d          }|t          v rAt          |          st          |          r(|	                    d          r
|d	d          }|d
| z  }|g}|t                              d|          z  }t          |          }t          |          }t          |          }|D ]}|t          v r|d
| z  }t          j        j        j                                                            dd|i          }t'          |          d         d                             dd                              dd
                              dd
                                          }||k    r|t          vr|d
| z  }Ӑd
                    t          |                                                    d
                              S )Nr  r  r   u   [^А-Яа-яA-Za-z0-9_.:@-]z[:_]r  z .,@-zwww.   r  z[_.:@-]z!select to_tsquery('russian', :q);qr   '|&)r   r  r  splitsubr   ALL_STOP_WORDStoken_is_domaintoken_is_emailr   r   r#  r-  r  r  r  r  r  r  listjoin)textnew_texttokenr  r   tsquerypg_stem_tokens          r   text_normalize_enrichr@  =  s9    ::<<D<<d##DH
 8$?? 0 0 	wU++G$$N"" 5!! 	^E%:%: 	'' "abb	E#H"((:u---V$V,,$V,, 		0 		0AN""AH '*6>>@@HHIpsvxyrz{{G MM!,Q/77R@@HHcRRZZ[^`cddjjllM!!m>&I&I////		0 88C((..s3344555r   )4z.comz.orgz.netz.ruz.govz.edu.ioz.coz.infoz.bizz.mez.tvz.usz.caz.ukz.dez.frz.jpz.cnz.inz.auz.mxz.itz.esz.brz.nlz.sez.plz.chz.atz.bez.fiz.noz.dkz.krz.sgz.hkz.uaz.czz.roz.grz.zaz.clz.arz.saz.egz.aeu   .рфu   .русz.surA  z.aic                     dd                     d t          D                       z   dz   }t          t                              ||                     S )Nu   ^[a-zA-ZА-Яа-я0-9.-]+\.(?:r2  c                 "    g | ]}|d d         S )r  Nr   )r   domains     r   
<listcomp>z#token_is_domain.<locals>.<listcomp>  s!    BlBlBlRX6!"":BlBlBlr   z)$)r:  popular_domainsboolr  match)r=  domain_patterns     r   r7  r7  ~  sJ    6BlBl\kBlBlBl9m9mmpttN//000r   c                 V    d}t          t                              ||                     S )Nz0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)rG  r  rH  )r=  email_patterns     r   r8  r8    s#    GM..///r   c                     t          t                              |           d         j                                      dd                                          d         S )Nr   ,r  )r  r&  r'  r)  r  r4  r=  s    r   
partspeechrO    sG    < E""1%)**33C<<BBDDQGGr   c                 L    t                               |           d         j        S )Nr   )r&  r'  r(  rN  s    r   r(  r(    s    ;;ua ,,r   )cmf.includer   	pymorphy3MorphAnalyzerr&  RUSSIAN_STOP_WORDSENGLISH_STOP_WORDSPROMPT_STOP_WORDS_NORMTECH_STOP_WORDSr   r6  r  r   r  r  r	  r#  r-  r@  rF  r7  r8  rO  r(  r   r   r   <module>rX     s           	!! @  @  @  A  A  A  K  K  K ;;; '*<<NOOC C C} } } } } } } }| ('))
,s , , , ,F> > >@  (56 56 56n  1 1 10 0 0H H H@- - - - -r   