U
    ki                     @   s  d dl T d dlZd dlZe Z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$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddgZdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd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gZddaddnd\dFd+ddNg	ZdddddgZe	ee e Z
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=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dZd[d\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dzd{d|d}d~dddddddddddddddddddgrZG dd dZe ZedddZdd Zdd Zdd Z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ddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐ddg4ZdϐdЄ Zdѐd҄ ZdӐdԄ ZdՐdք Z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   жu
   тогдаu   ктоu   этотu   тогоu   потомуu
   этогоu
   какойu   совсемu   нимu
   здесьu   этомu   одинu
   почтиu   мойu   темu
   чтобыu   нееu   сейчасu   былиu   кудаu
   зачемu   всехu   никогдаu
   можно   приu   наконецu   два   обu   другойu   хотьu
   послеu   надu   большеu   тотu
   черезu   этиu   нас   проu
   всего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meZmyZmyselfZweZourZoursZ	ourselvesZyouZyourZyoursZyourselfZ
yourselvesheZhimZhisZhimselfZsheZherZhersZherselfitZitsZitselfZtheyZthemZtheirZtheirsZ
themselvesZwhatwhichZwhoZwhomthisthatZtheseZthoseamisZareZwasZwerebeZbeenZbeingZhaveZhasZhadZhavingZdoZdoesZdidZdoingaZanZtheandZbutiforZbecauseasZuntilwhileZofZatZbyforwithZaboutZagainstZbetweenZintoZthroughZduringbeforeZafterZaboveZbelowtofromZupZdowninoutZonZoffZoverZunderZagainZfurtherZthenoncehereZthereZwhenwherewhyZhowallanyZbothZeachZfewZmoreZmostotherZsomeZsuchnoZnornotZonlyZownZsameZsoZthanZtooZverystZcanZwillZjustZdonZshouldZnowu   почемуu   можешьdocZwwwhttphttpsmailtou   оооu   аоu   паоu   заоu   ипu   гкu   ндсu   ндфлu   уснu
   основu   енвдu   пснu   фнсu   цбu   мфцu   гисu
   гибддu   мчсu   жкхu   рждu   аэсu   тэцu   гэсu   ввпu   внпu   сммu   сеоu   семu   цаu   цпu   кпu   кпиu   кпэu   кпдu   окрu   влu   срмu   ерпu   биu   ииu   млu   длu   нлпu   квu   ивu   врu   дрu   уиu   юиu   ксu   хрu   девопсu   сиайu   сидиu
   кьюэйu   динсu   айпиu
   юэрылu
   юэрайu   хттпu
   хттпсu   эсэсэлu   тиэлэсu   эсэсэйu   эфтипиu   рестu   соапu   джейсонu   иксэмэлu   эйчтиэмэлu   сиэсэсu   джейэсu
   диоэмu   сиэмэсu   сиэрымu
   иэрпиu   биайu   айтиu
   айотиu   виэрu   эйрu   юиксu   юайu   впнu   лвсu   гвсu   рэмu   ромu   цпу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                   @   s   e Zd Zdd ZeedddZeedddZedd	d
ZeedddZeedddZ	eedddZ
edddZedddZdS )RussianVerbAspectConverterc                 C   s  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"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<dd=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdKdLdMdNd&dOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcd,dddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd| _ dd | j  D | _ddddddddddddddddddddd g| _ddddddddd| _dddd	d	d
| _d{d|dd~ddddddddh| _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
   спать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
   сдатьr:   r;      организоватьr<   r=   r>   r?   u   поранитьr@   rA   rB   rC   u    проанализироватьu   разработатьu   внедритьu   опубликоватьu   описатьu   обобщитьrD   rE   rF   u   подтвердитьu   опровергнутьu   обосноватьu   установитьu   выявитьu   определитьu   оценитьu   рассчитатьu   спрогнозироватьrG   rH   rI   rJ   rK   rL   u   протестироватьu   осветитьu"   прокомментироватьu    проинформироватьu   сообщитьu   заявитьu   отметитьu   подчеркнутьrM   u   покритиковатьu   обвинитьu   оправдатьu   призватьu   потребоватьu   предложитьu   порекомендоватьu   отреагироватьu    законстатироватьu   процитироватьu   прорезюмироватьu    проинвестироватьu    профинансироватьrN   u   произвестиu   реализоватьu   закупитьrO   rP   rQ   rR   u    проинтегрироватьrS   rT   u   запланироватьu   управить"   проконтролироватьu   промониторитьu   проаудироватьrU   u   обучитьu   защититьrV   u   проэкзаменоватьu   проаттестоватьu   аккредитоватьrW   rX   rY   u   зарегулироватьu   пронормироватьu   легализоватьrZ   r[   u   запретитьu   разрешитьu   узаконитьu"   запрограммироватьr\   u   смоделироватьr]   r^   u   формализоватьu   закодироватьu   дешифроватьu   заархивироватьu   забэкапитьr_   u   исполнитьu   завершитьrb   u"   задокументироватьr`   u   отчитатьсяu   подделатьu   подключитьc                 S   s   i | ]\}}||qS  rc   ).0kvrc   rc   ./cmf/util/cmfnlp.py
<dictcomp>   s      z7RussianVerbAspectConverter.__init__.<locals>.<dictcomp>r   u   взr   r   r   u   переr   r   r   u   преr   r   u   расu   возr   u   предr   r   r   r	   r
      ять
   иватьu
   евать
   ывать   ать)   итьrm   u   етьrl      нутьrn   u   отьrm   rm   u   тьrn   )rk   rj   u   ватьrl   ri   ra   u   ранеть)perfective_to_imperfectiveitemsimperfective_to_perfectiveperfective_prefixessuffix_pairssuffix_replacementsbiaspect_verbs)selfrc   rc   rg   __init__-   s@                                                                                                                                                              S                   

         z#RussianVerbAspectConverter.__init__)verbreturnc                 C   s   |   }|}d}|dr0d}|dd }n|drJd}|dd }|| jkr\|| S || jkrp| j| S || jkr| j| | S || jkr|| S || jkr|S | || S )u^   
        Преобразует глагол к несовершенному виду
            сяN   сь)lowerstripendswithru   ro   rq   _auto_convert_to_imperfectiverv   rx   Z	orig_verb	reflexiverc   rc   rg   to_imperfective   s(    







z*RussianVerbAspectConverter.to_imperfectivec                 C   s   d}| dr d}|dd }n| dr:d}|dd }|}| jD ]B}||rDt|t|krD|t|d }t|dkrD|} qqD||kr| j D ]P\}}| |r|dkr|dt|  }|| }n|dt|  | } qq||7 }|S )j   
        Автоматическое преобразование с помощью правил
        rz   r{   Nr|   r}      rn   )r   rr   
startswithlenrs   rp   )rv   rx   r   resultprefixstemZperfect_suffixZimperfect_suffixrc   rc   rg   r      s0    




z8RussianVerbAspectConverter._auto_convert_to_imperfectiverx   c                 C   sd   |   }| |}|dkr.| |}|}n |dkrF| |}|}n|}|}|||||| jkdS )u_   
        Получить полную информацию о виде глагола
        
perfectiveimperfective)rx   aspectr   r   Zis_biaspect)r~   r   determine_aspectr   to_perfectiveru   )rv   rx   r   r   r   rc   rc   rg   get_aspect_info   s     


z*RussianVerbAspectConverter.get_aspect_infoc                 C   sl   || j krdS || jkrdS || jkr*dS | jD ](}||r0t|t|d kr0 dS q0|drhdS dS )u<   
        Определяет вид глагола
        Zbiaspectr   r      )rk   rj   unknown)ru   ro   rq   rr   r   r   r   )rv   rx   r   rc   rc   rg   r     s    




z+RussianVerbAspectConverter.determine_aspectc                 C   s   |   }|}d}|dr0d}|dd }n|drJd}|dd }|| jkr^| j| S || jkrv| j| | S || jkr|| S || jkr|S | || S )uu   
        Преобразует глагол несовершенного вида в совершенный
        rz   r{   Nr|   r}   )r~   r   r   rq   ro   _auto_convert_to_perfectiver   rc   rc   rg   r   *  s$    






z(RussianVerbAspectConverter.to_perfectivec                 C   s   d}| ds| dr(d}|dd }| jD ](}||s.|| }|| jkr.|} qq.|}| j D ],\}}| |rf|dt|  | } qqf|r|d7 }|S )r   Fr{   r}   TNr|   )r   rr   r   ro   rt   rp   r   )rv   rx   r   r   	candidater   suffixZreplacementrc   rc   rg   r   L  s$    



z6RussianVerbAspectConverter._auto_convert_to_perfectivec                 C   sR   |   }|| jkr$|| j| fS || jkr<| j| |fS | |}||fS dS )uz   
        Возвращает пару (несовершенный, совершенный) для глагола
        N)r~   r   rq   ro   r   )rv   rx   r   rc   rc   rg   get_aspect_pairn  s    


z*RussianVerbAspectConverter.get_aspect_pairc                 C   s   |d t jkrd}g S |  }t }|| | || | ||h }t }|D ]B}tj	
|stj	|}t|dkr||d  q\|| q\||h }|S )Nr   en)stringascii_lettersr~   r   setaddr   r   cmfutildictionary_ruchecksuggestr   )rv   rx   langresZ	clear_reswsugsrc   rc   rg   get_all_aspects~  s"    

z*RussianVerbAspectConverter.get_all_aspectsN)__name__
__module____qualname__rw   strr   r   r   r   r   r   r   r   rc   rc   rc   rg   r9   '   s   y&*""r9   r   c                 C   s
   t | S )N)
verb_apectr   r   rc   rc   rg   get_all_verb_aspects  s    r   c                 C   s   t  }| D ]}|| td|r&q
t|r2q
|tkr<q
|d tjkrRtj	}ntj
}||}|d d D ]}||dddd qnq
|S )Nu   [^А-Яа-яA-Za-z]r   r    -   ё   е)r   r   researchr   Zdictionary_checkSPELL_EXCLUDEr   r   Zdictionary_enr   r   replace)tokensr   r4   Z
dictionaryr   Zsugrc   rc   rg   tokens_enrich_spell  s     


r   c                 C   sp   t  }| D ]`}|| t|d d D ]>}|jdd}|| d|jkr*t|D ]}|| qXq*q
|S )Nr   r   r   ZINFN)r   r   morphparsenormal_formr   tagr   )r   r   r4   ZnwZnewtZasprc   rc   rg   tokens_enrich_morph   s    


r   c                 C   sV  |   } | dd} d}td| D ]}|s0q$tdd|}|d}|tkrRq$t|sbt|r|	drx|d	d  }|d
| 7 }q$|g}|td|7 }t
|}t|}t|}|D ]}|tkrq|d
| 7 }tjjj dd|i}t|d d dddd
dd
 }||kr|tkr|d
| 7 }qq$d
t
| d
S )Nr   r   rz   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   ZmodelsZ
CmfSynonymZdpZdata_driverZSessionZexecutelistjoin)textZnew_texttokenr   r4   ZtsqueryZpg_stem_tokenrc   rc   rg   text_normalize_enrich  s:    

,r   z.comz.orgz.netz.ruz.govz.eduz.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.suz.aic                 C   s,   dd dd tD  d }tt|| S )Nu   ^[a-zA-ZА-Яа-я0-9.-]+\.(?:r   c                 S   s   g | ]}|d d qS )   Nrc   )rd   domainrc   rc   rg   
<listcomp>P  s     z#token_is_domain.<locals>.<listcomp>z)$)r   popular_domainsboolr   match)r   Zdomain_patternrc   rc   rg   r   O  s    r   c                 C   s   d}t t|| S )Nz0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)r   r   r   )r   Zemail_patternrc   rc   rg   r   S  s    r   c                 C   s$   t t| d jdd d S )Nr   ,r   )r   r   r   r   r   r   r   rc   rc   rg   
partspeechW  s    r   c                 C   s   t | d jS )Nr   )r   r   r   r   rc   rc   rg   r   w  s    r   )Zcmf.includer   Z	pymorphy3ZMorphAnalyzerr   ZRUSSIAN_STOP_WORDSZENGLISH_STOP_WORDSZPROMPT_STOP_WORDS_NORMZTECH_STOP_WORDSr   r   r   r9   r   r   r   r   r   r   r   r   r   r   r   rc   rc   rc   rg   <module>   sl   3 5(                                                                                                C8                                               
 