
    o2pis                         d dl  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y)    )*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y)RussianVerbAspectConverterc           	      j   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| _         | j                   j                         D ci c]  \  }}||
 c}}| _        g d| _        ddddddddd| _        dddddd| _        h d| _        y c c}}w (  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   подключать)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)selfkvs      ./cmf/util/cmfnlp.py__init__z#RussianVerbAspectConverter.__init__-   sw   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+

 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+
 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+
 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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+
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+
: /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+
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+
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+
\ 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+
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+
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+
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+
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+
'f =A<[<[<a<a<c*dDAq1a4*d'$
  """  	
 #"  $
 
= +es   P/verbreturnc                    |j                         j                         }|}d}|j                  d      rd}|dd }n|j                  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 | j                  |      |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9D]]6"I9D 4&&&)## 777229== 422222489DD 4222)## 777 11$7)CC    c                    d}|j                  d      rd}|dd }n|j                  d      rd}|dd }|}| j                  D ]L  }|j                  |      st        |      t        |      kD  s-|t        |      d }t        |      dk\  sJ|} n ||k(  ra| j                  j                         D ]D  \  }}|j                  |      s|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   s+   
 	== I9D]]6"I9D .. 	Fv&3t9s6{+BCKL)t9>!F	 T>484E4E4K4K4M 
0 0==0%3#$9c.&9%9:!%(8!8!%&;N(;';!<?O!O
 	)r   c                     |j                         j                         }| j                  |      }|dk(  r| j                  |      }|}n|dk(  r| j	                  |      }|}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, \!//5LJ~%++D1JLJL ($4#6#66
 	
r   c                     || j                   v ry|| j                  v ry|| j                  v ry| j                  D ]0  }|j	                  |      st        |      t        |      dz   kD  s0 y |j                  d      ryy)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&3t9s6{Q+F#	$
 ==56!r   c                    |j                         j                         }|}d}|j                  d      rd}|dd }n|j                  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 | j                  |      |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9D]]6"I9D 777229== 422222489DD 4222)## 777 //5	AAr   c                 p   d}|j                  d      s|j                  d      rd}|dd }| j                  D ]+  }|j                  |      r||z   }|| j                  v s)|} nJ |}| j                  j                         D ]*  \  }}|j                  |      s|dt        |        |z   } n |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I9D .. 	F??6*"TM	 ? ??&F	 F'+'?'?'E'E'G #==(!-CK<0;>F fFr   c                     |j                         j                         }|| j                  v r|| j                  |   fS || j                  v r| j                  |   |fS | j	                  |      }||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9$?@@T44433D94@@++D1J*%%r   c                 (   |d   t         j                  v rd}g S |j                         j                         }t	               }|j                  | j                  |             |j                  | j                  |             ||hz
  }t	               }|D ]u  }t        j                  j                  |      sCt        j                  j                  |      }t        |      dkD  sP|j                  |d          e|j                  |       w ||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|!!#e$$T*+""4()dHn( E	 	!A((..q1,,44Q7t9Q;MM$q'*a 	! $(	r   N)__name__
__module____qualname__r   strr   r   r   r   r   r   r   r    r   r   r   r   '   s    w
r$DC $DC $DL(# (# (T
C 
8S S 0B# B# BD     D&C & &C &r   r   r   c                 ,    t         j                  |       S )N)
verb_apectr   )r   s    r   get_all_verb_aspectsr    s    %%d++r   c                 p   t               }| D ]  }|j                  |       t        j                  d|      r,t        j                  |      rB|t        v rK|d   t        j                  v rt        j                  }nt        j                  }|j                  |      }d}|D ]_  }|dk\  r nXt        |      dk  rd|v r|d   |d   k7  r*|dz  }|j                  |j                  dd      j                  dd             a t        j                  j                   j"                  j%                         j'                  d	d
|i      }d}|D ]c  \  }}|dk\  r Nt        |      dk  rd|v r"|d   |d   k7  r.|dz  }|j                  |j                  dd      j                  dd             e  |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''' ..J ..J!!!$ 	>Cz3x1}cz1v1~QJEGGCKKC(00t<=	> $$''33;;=EE G A

  	>FCz3x1}cz1v1~QJEGGCKKC(00t<=	>]:>v Jr   c                 >   t               }| D ]  }|j                  |       t        j                  |      d d D ]_  }|j                  j                  dd      }|j                  |       d|j                  v s?t        |      D ]  }|j                  |        a  |S )Nr   r  r  INFN)r   r   morphparsenormal_formr  tagr  )r  r   r   nwnewtasps         r   tokens_enrich_morphr*  )  s    
%C !
++a.!$ 	!B..((t4DGGDM/5 !CGGCL!	!! Jr   c                    | j                         } | j                  dd      } d}t        j                  d|       D ]k  }|st        j	                  dd|      }|j                  d      }|t        v r8t        |      st        |      r|j                  d      r|d	d  }|d
| z  }m|g}|t        j                  d|      z  }t        |      }t        |      }t        |      }|D ]  }|t        v r|d
| z  }t        j                  j                  j                   j#                         j%                  dd|i      }t'        |      d   d   j                  dd      j                  dd
      j                  dd
      j                         }||k7  s|t        vs|d
| z  } n d
j)                  t        |j                         j                  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=  7  s    ::<D<<d#DH
 8$? 0wU+G$N" 5!^E%:'ab	!E7#H"((:u--V$V,$V, 		0AN"!A3H ''**66>>@HHIpsvxyrz{G M!,Q/77R@HHcRZZ[^`cdjjlM!m>&Ia//		0+0> 88C(..s34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.sur>  z.aic           	          ddj                  t        D cg c]  }|dd  	 c}      z   dz   }t        t        j	                  ||             S c c}w )Nu   ^[a-zA-ZА-Яа-я0-9.-]+\.(?:r/  r	  z)$)r7  popular_domainsboolr  match)r:  domaindomain_patterns      r   r4  r4  x  sK    6\kBlRX6!":Bl9mmpttN/00 Cms   A
c                 D    d}t        t        j                  ||             S )Nz0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)rA  r  rB  )r:  email_patterns     r   r5  r5  |  s    GM.//r   c                     t        t        j                  |       d   j                        j	                  dd      j                         d   S )Nr   ,r  )r  r#  r$  r&  r  r1  r:  s    r   
partspeechrJ    s>    < E"1%))*33C<BBDQGGr   c                 F    t         j                  |       d   j                  S )Nr   )r#  r$  r%  rI  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   r3  r  r   r  r  r  r   r*  r=  r@  r4  r5  rJ  r%  r  r   r   <module>rS     s      	! @  A  K ; '*<<NOC} }| ()
,s ,F>@56n10H@-r   