All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.languagetool.rules.uk.grammar-grammar.xml Maven / Gradle / Ivy

The newest version!
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../../../../../../../../languagetool-core/src/main/resources/org/languagetool/rules/print.xsl" title="Pretty print" ?>
<?xml-stylesheet type="text/css" href="../../../../../../../../../languagetool-core/src/main/resources/org/languagetool/rules/rules.css" title="Easy editing stylesheet" ?>
<!--
Ukrainian grammar and typo rules for LanguageTool
Copyright (C) 2007 Andriy Rysin

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-->

<!--suppress CheckTagEmptyBody -->
<!DOCTYPE rules [
    <!ENTITY weekdays "понеділок|вівторлк|середа|четвер|п'ятниця|субота|неділя">
    <!ENTITY months "січень|лютий|березень|квітень|травень|червень|липень|серпень|вересень|жовтень|листопад|грудень|січня|лютого|березня|квітня|травня|червня|липня|серпня|вересня|жовтня|листопада|грудня">
    <!ENTITY abbrevMonths "січ|лют|бер|кві|тра|чер|лип|сер|вер|жов|лис|гру">
    <!ENTITY hours "перший|другий|третій|четвертий|п'ятий|шостий|сьомий|восьмий|дев'ятий|десятий|одинадцятий|дванадцятий|тринадцятий|чотирнадцятий|п'ятнадцятий|шістнадцятий|сімнадцятий|вісімнадцятий|дев'ятнадцятий">

    <!ENTITY punct_std "[,.:;!?…/()\[\]&quot;«»„“”–—-]|[.!?]{2,3}">
    <!ENTITY punct_dash "[–—-]">
    <!ENTITY punct_quote "[&quot;«»„“”]">
    <!ENTITY punct_quote_left "[&quot;«„“”]">
]>

<rules lang="uk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../../../../../../../languagetool-core/src/main/resources/org/languagetool/rules/rules.xsd">

  <category id="GRAMMAR" name="Граматика">

    <!-- group: дієслова -->

    <rule id="PREP_BEFORE_VERB" name="Прийменник перед дієсловом">
      <antipattern>
        <token regexp="yes">о?крім|замість|(за)?для|(за)?ради</token>
        <token postag_regexp="yes" postag="verb.*inf.*"/>
      </antipattern>
      <antipattern>
        <token case_sensitive="no">о</token>
        <token postag_regexp="yes" postag="verb.*impr.*"/>
      </antipattern>
      <antipattern>
        <token inflected="yes" regexp="yes">група|турнір|гепатит</token>
        <token case_sensitive="yes" regexp="yes">[А-Я]</token>
      </antipattern>
      <pattern>
        <token postag_regexp="yes" postag="prep.*">
          <exception negate_pos="yes" postag_regexp="yes" postag="prep.*" />
        </token>
        <token postag_regexp="yes" postag="verb.*">
          <exception negate_pos="yes" postag_regexp="yes" postag="verb.*|noninfl:&amp;(p|i).*|SENT_END|PARA_END" />
        </token>
      </pattern>
      <message>Прийменник \1 перед дієсловом <suggestion>\2</suggestion></message>
      <example correction="їхати">Їм треба <marker>в їхати</marker>.</example>
      <example correction="їхати">Їм треба <marker>в їхати</marker></example>
      <example correction="будь"><marker>для будь</marker> кого</example>
      <example correction="дер">програмою <marker>з дер</marker> жавного управління</example>
      <!-- ловимо іншим правилом
      <example correction="грати">потрапляти <marker>за грати</marker>.</example>
      -->
      <example>Їм треба їхати.</example>
      <example>Їм треба в'їхати.</example>
      <example>Просто взяти.</example>
      <example>Справедливості заради скажемо</example>
      <example>Справедливості заради хочеться зауважити</example>
      <example>Просто неба.</example>
      <example>Це більше задля годиться</example>
      <example>задля годиться</example>
      <example>не залишається нічого іншого, крім чекати.</example>
      <example>Наїхали на Мела Гібсона</example>
      <example>О покладіть мені квіти</example>
<!--
      <example>заради скажемо</example>
-->
      <example>кількість захворювань на гепатит В зменшилась у вісім разів.</example>
      <example>О слався, о слався, сміливцю...</example>
    </rule>

    <rulegroup id="MODAL_WORD" name="Узгодження з модальними словами">
      <rule>
        <antipattern>
          <token regexp="yes">чим|як|скільки|тільки</token>
          <token inflected="yes">можна</token>
        </antipattern>
        <pattern>
          <token regexp="yes">варто|годі|можна|треба|повинно
            <exception scope="previous" regexp="yes">кого</exception>
          </token>
          <token regexp="yes" min="0">було(-би?)?|буде</token>
          <token regexp="yes" min="0">би?</token>
          <token min="0">не</token>
          <marker>
            <token postag_regexp="yes" postag="verb.*">
              <exception postag_regexp="yes" postag="verb.*:inf.*"/>
              <exception regexp="yes">було(-би?)?|буде</exception>
              <exception negate_pos="yes" postag_regexp="yes" postag="verb.*|noninfl:&amp;(i|p).*|SENT_END|PARA_END"/>
            </token>
          </marker>
        </pattern>
        <message>Дієслово після модального слова має йти інфінітивом: <suggestion><match no="5" postag_regexp="yes" postag="verb.*:inf(?!.*short).*"/></suggestion></message>
        <example correction="писати">Треба <marker>писав</marker>.</example>
        <example correction="писати">Треба не <marker>писав</marker>.</example>
        <example correction="сподіватись|сподіватися">І тому варто <marker>сподіваюся</marker>, що це спрацює.</example>
        <example correction="бути">розвиватися взагалі більше не треба, варто <marker>були</marker> тільки галасливо-крикливим і наглим</example>
        <example correction="залишитись|залишитися">в Україні не повинно <marker>залишись</marker> жодного жеку.</example>
        <example>Повинен їхати</example>
        <example>Йому треба писати</example>
        <example>Чи варто їм таке писати?</example>
        <example>Чи варто було їм таке писати?</example>
        <example>Треба буде таке писати</example>
        <example>В кого треба видалено.</example>
        <example>можна буде встояти.</example>
        <example>Комерційний підхід до треб є незрозумілим</example>
        <example>конгрес повинен був сформулювати</example>
        <example>Не можна встоять.</example>
      </rule>

      <rule>
        <antipattern>
          <token regexp="yes">чим|як|скільки|тільки|наскільки</token>
          <token inflected="yes" regexp="yes">з?могти</token>
        </antipattern>
        <!-- TODO: можливо, треба додати «мала» у словник, як noun? -->
        <antipattern>
          <token>мала</token>
          <!-- TODO: for some reason fails "Та мала виявилася неговіркою."
          <token regexp="yes" min="0">би?</token>
          -->
          <token min="0">не</token>
          <token postag_regexp="yes" postag="verb.*?(past:f|pres:s:3|futr:s:3).*"/>
        </antipattern>
        <antipattern>
          <token regexp="yes">мав|міг|мусив</token>
          <token regexp="yes">був|було</token>
        </antipattern>
        <antipattern>
          <token regexp="yes">мали|могли|мусили</token>
          <token regexp="yes">бул[ио]</token>
        </antipattern>
        <pattern>
          <token inflected="yes" regexp="yes" postag_regexp="yes" postag="verb.*">мати|мусити|могти|змогти
            <exception regexp="yes">(може|мати|мало)(-би?)?</exception>
          </token>
          <token regexp="yes" min="0">би?</token>
          <token min="0">не</token>
          <marker>
            <token postag_regexp="yes" postag="verb.*">
              <exception postag_regexp="yes" postag="verb.*:inf.*"/>
              <exception negate_pos="yes" postag_regexp="yes" postag="verb.*|SENT_END|PARA_END"/>
              <!--
              <exception inflected="yes">бути</exception>
              -->
            </token>
          </marker>
        </pattern>
        <message>Дієслово після модального слова має йти інфінітивом: <suggestion><match no="4" postag_regexp="yes" postag="verb.*:inf(?!.*short).*"/></suggestion></message>
        <example correction="писати">Мусять <marker>писали</marker>.</example>
        <example correction="пищати">Маємо не <marker>пищали</marker>.</example>
        <example correction="спинитись|спинитися">І тому він має <marker>спинилися</marker>.</example>
        <example correction="відбуватись|відбуватися">Могли <marker>відбувалися</marker> лише за рахунок надлюдських зусиль.</example>
        <example correction="відбуватись|відбуватися">Свято могло не <marker>відбувалося</marker>.</example>
        <example correction="бути">Винні мають <marker>були</marker> покарані</example>
        <example>Має їхати</example>
        <example>чи може мав важливіші справи</example>
        <example>Він як міг уникав спонтанного спілкування.</example>
        <example>І чим могли допомагали відновлювати.</example>
        <!--
        <example>мала була лягати</example>
        -->
        <example>мав був налякати</example>
        <example>мав був додому вертати</example>
        <example>Та мала виявилася неговіркою.</example>
        <example>Мала не прокинулася навіть тоді</example>
        <example>Мав було розказати і про свою біду</example>
        <example>дівчата, що мали були утікати</example>
      </rule>

      <rule>
        <pattern>
        <!-- |братися|старатися -->
          <token regexp="yes" inflected="yes">бажати|благати
            <exception postag_regexp="yes" postag="(advp|insert).*"/>
            <exception scope="previous" regexp="yes">кого(-би?)?</exception>
          </token>
          <token regexp="yes" min="0">би?</token>
          <token min="0">не</token>
          <marker>
            <token postag_regexp="yes" postag="verb.*">
              <exception postag_regexp="yes" postag="verb.*:(inf|past:n|futr:s:3).*"/>
              <exception negate_pos="yes" postag_regexp="yes" postag="verb.*|SENT_END|PARA_END"/>
              <exception inflected="yes" postag_regexp="yes" postag="verb:imperf:(past|futr).*">бути</exception>
            </token>
          </marker>
        </pattern>
        <message>Дієслово після модального слова має йти інфінітивом: <suggestion><match no="4" postag_regexp="yes" postag="verb.*:inf(?!.*short).*"/></suggestion></message>
        <example correction="працювати">Вони не бажали <marker>працювали</marker>.</example>
        <example correction="стріляти">Вони благали не <marker>стрілятимуть</marker>.</example>
        <!-- TODO:
        <example correction="розбудити">старався не <marker>розбудить</marker>.</example>
         -->
        <example>братися не хочуть</example>
        <example>багато старатися не доведеться</example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes" postag_regexp="yes" postag="adj:.:v_naz.*">повинний</token>
          <token regexp="yes" min="0">би?</token>
          <token inflected="yes" postag_regexp="yes" postag="verb:imperf:(past|futr).*" min="0">бути</token>
          <token min="0">не</token>
          <marker>
            <token postag_regexp="yes" postag="verb.*">
              <exception postag_regexp="yes" postag="verb.*:inf.*"/>
              <exception negate_pos="yes" postag_regexp="yes" postag="verb.*|SENT_END|PARA_END"/>
              <exception inflected="yes" postag_regexp="yes" postag="verb:imperf:(past|futr).*">бути</exception>
            </token>
          </marker>
        </pattern>
        <message>Дієслово після модального слова має йти інфінітивом: <suggestion><match no="5" postag_regexp="yes" postag="verb.*:inf(?!.*short).*"/></suggestion></message>
        <example correction="писати">Повинен <marker>писатиме</marker>.</example>
        <example correction="плакати">Повинна не <marker>плакатиме</marker>.</example>
        <example correction="писати">Повинен би був <marker>писатиме</marker>.</example>
        <example>Повинен їхати</example>
        <example>І вони на всьому готовому живуть.</example>
        <!--  verb:inf:coll not in default dictionary
        <example>суспільство повинно довірять не лише програмі дій</example>
         -->
      </rule>
    </rulegroup>

    <rulegroup id="nemaye_v_rod" name="Немає з р.в.">
      <rule>
        <pattern>
          <token regexp="yes">немає?</token>
          <token postag_regexp="yes" postag="adj:m:v_rod.*" min="0"/>
          <marker>
            <token postag_regexp="yes" postag="noun:inanim:m:v_dav.*" regexp="yes">.+[ую]
              <exception postag_regexp="yes" postag="noun:.*?(v_rod|pron|numr|prop).*"/>
              <exception negate_pos="yes" postag_regexp="yes" postag="noun.*|.*_END"/>
            </token>
          </marker>
        </pattern>
        <message>Слово, пов'язане з «немає», має стояти в родовому відмінку</message>
        <suggestion><match no="3" postag_regexp="yes" postag="(noun:inanim:m:)v_...(.*)" postag_replace="$1v_rod$2.*"/></suggestion>
        <example correction="гаража">Там немає <marker>гаражу</marker>.</example>
        <example correction="графіка">Там немає жодного <marker>графіку</marker>.</example>
        <example>немає чим відвернути увагу</example>
        <example>значить білка немає та імунна система</example>
        <example>його немає другу добу</example>
        <example>немає перед ким</example>
        <example>немає Сергію виходу</example>
      </rule>

      <rule>
        <antipattern>
          <token regexp="yes">немає?</token>
          <token postag_regexp="yes" postag="(noun:inanim|adj):.:v_rod.*"/>
        </antipattern>
        <pattern>
          <marker>
            <token postag_regexp="yes" postag="noun:inanim:m:v_dav.*" regexp="yes">.+[ую]
              <exception postag_regexp="yes" postag="noun:.*?(v_rod|pron|numr|prop).*"/>
              <exception negate_pos="yes" postag_regexp="yes" postag="noun.*|.*_END"/>
              <exception scope="previous" postag_regexp="yes" postag="prep.*"/>
            </token>
          </marker>
          <token regexp="yes">немає?
            <!-- exception via next/postag_regexp does not work :( - need antipattern
            <exception scope="next" postag_regexp="yes" postag="noun:inanim:.:v_rod.*"/>
             -->
          </token>
        </pattern>
        <message>Слово, пов'язане з «немає», має стояти в родовому відмінку</message>
        <suggestion><match no="1" postag_regexp="yes" postag="(noun:inanim:m:)v_...(.*)" postag_replace="$1v_rod$2.*"/></suggestion>
        <example correction="предмета">Такого <marker>предмету</marker> немає.</example>
        <example>рейсів на кубу немає</example>
        <example>комітету немає резону сподіватися</example>
        <example>що комітету немає кому довірити</example>
        <example>У найповнішому медичному довіднику немає такої хвороби</example> 
        <!-- TODO:
        <example>загрози паводку немає</example>
         -->
      </rule>
    </rulegroup>

    <rulegroup id="VONO_IMPERF" name="Воно + безособова форма">
      <rule>
        <pattern>
          <token>воно</token>
          <token min="0">не</token>
          <token postag_regexp="yes" postag="verb:.*:impers.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="verb:.*:impers.*|SENT_END|PARA_END"/>
          </token>
        </pattern>
        <message>Неправильна конструкція (наз. відм + безос. форма дієслова)</message>
        <suggestion>його <match no="2"/> <match no="3"/></suggestion>
        <suggestion><match no="1"/> <match no="2"/> <match no="3" regexp_match="(.*)о" regexp_replace="$1е"/></suggestion>
        <example correction="його зафіксовано|воно зафіксоване">І так <marker>воно зафіксовано</marker> в законі.</example>
        <example correction="його не пов'язано|воно не пов'язане">І так <marker>воно не пов'язано</marker> з подією.</example>
        <example>воно приховано існувало багато років</example>
      </rule>

      <rule>
        <pattern>
          <token>воно</token>
          <token min="0" postag_regexp="yes" postag="adv(?!p).*">
            <exception negate_pos="yes" postag_regexp="yes" postag="adv(?!p).*"/>
          </token>
          <token postag_regexp="yes" postag="verb:.*:impers.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="verb:.*:impers.*|SENT_END|PARA_END"/>
          </token>
        </pattern>
        <message>Неправильна конструкція (наз. відм + безос. форма дієслова)</message>
        <suggestion>його <match no="2"/> <match no="3"/></suggestion>
        <suggestion><match no="1"/> <match no="2"/> <match no="3" regexp_match="(.*)о" regexp_replace="$1е"/></suggestion>
        <example correction="його тимчасово відкладено|воно тимчасово відкладене">І <marker>воно тимчасово відкладено</marker>.</example>
        <example>воно приховано існувало багато років</example>
      </rule>

      <rule>
        <antipattern>
          <token>все</token>
          <token>решта</token>
        </antipattern>
        <pattern>
          <token>решта</token>
          <token min="0">не</token>
          <token postag_regexp="yes" postag="verb:.*:impers.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="verb:.*:impers.*|SENT_END|PARA_END"/>
          </token>
        </pattern>
        <message>Неправильна конструкція (наз. відм. + безос. форма дієслова)</message>
        <suggestion>решту <match no="2"/> <match no="3"/></suggestion>
        <suggestion><match no="1"/> <match no="2"/> <match no="3" regexp_match="(.*)о" regexp_replace="$1а"/></suggestion>
        <example correction="решту зафіксовано|решта зафіксована">А <marker>решта зафіксовано</marker> в законі.</example>
        <example>все решта зафіксовано</example>
      </rule>

      <rule>
        <antipattern>
          <token>все</token>
          <token>решта</token>
        </antipattern>
        <pattern>
          <token>решта</token>
          <token min="0" postag_regexp="yes" postag="adv(?!p).*">
            <exception negate_pos="yes" postag_regexp="yes" postag="adv(?!p).*"/>
          </token>
          <token postag_regexp="yes" postag="verb:.*:impers.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="verb:.*:impers.*|SENT_END|PARA_END"/>
          </token>
        </pattern>
        <message>Неправильна конструкція (наз. відм + безос. форма дієслова)</message>
        <suggestion>решту <match no="2"/> <match no="3"/></suggestion>
        <suggestion><match no="1"/> <match no="2"/> <match no="3" regexp_match="(.*)о" regexp_replace="$1а"/></suggestion>
        <example correction="решту зафіксовано|решта зафіксована">А <marker>решта зафіксовано</marker> в законі.</example>
        <example correction="решту швиденько зафіксовано|решта швиденько зафіксована">А <marker>решта швиденько зафіксовано</marker> в законі.</example>
        <example>все решта зафіксовано</example>
      </rule>
    </rulegroup>

    <rule id="zapytaty_dozvolu" name="Запитати і спитати дозволу">
      <pattern>
        <marker>
          <token inflected="yes" regexp="yes">запитати(ся)?|запитавши</token>
        </marker>
        <token>дозволу</token>
      </pattern>
      <message>Правильно: <suggestion><match no="1" regexp_match="(?iu)запи(.*)" regexp_replace="спи$1"/></suggestion></message>
      <example correction="спитався"><marker>запитався</marker> дозволу</example>
    </rule>

    <rulegroup id="predyavlyaty" name="Пред'являти і подавати/заявляти/ставити">
      <rule>
        <pattern>
          <marker>
            <token inflected="yes" regexp="yes">пред'являти|пред'явити|пред'явивши|пред'являючи</token>
          </marker>
          <token regexp="yes" min="0">би?</token>
          <token postag_regexp="yes" postag="adj:[mp]:v_zna(?!:ranim).*" min="0"/>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:.:v_zna.*">позов</token>
        </pattern>
        <message>Правильно: <suggestion>подавати</suggestion></message>
        <suggestion>вчиняти</suggestion>
        <example correction="подавати|вчиняти">І він <marker>пред'явив</marker> позов.</example>
        <example correction="подавати|вчиняти">І він <marker>пред'являв</marker> би новий позов.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token inflected="yes" regexp="yes">пред'являти|пред'явити|пред'явивши|пред'являючи</token>
          </marker>
          <token regexp="yes" min="0">би?</token>
          <token postag_regexp="yes" postag="adj:[np]:v_zna(?!:ranim).*" min="0"/>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:.:v_zna.*">посвідчення</token>
        </pattern>
        <message>Правильно: <suggestion>показувати</suggestion></message>
        <example correction="показувати">І він <marker>пред'явив</marker> посвідчення.</example>
        <example correction="показувати">І він <marker>пред'являв</marker> би нові посвідчення.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token inflected="yes" regexp="yes">пред'являти|пред'явити|пред'явивши|пред'являючи</token>
          </marker>
          <token regexp="yes" min="0">би?</token>
          <token postag_regexp="yes" postag="adj:[fp]:v_zna(?!:ranim).*" min="0"/>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:.:v_zna.*">претензія</token>
        </pattern>
        <message>Правильно: <suggestion>заявляти</suggestion></message>
        <suggestion>мати</suggestion>
        <example correction="заявляти|мати">І він <marker>пред'явив</marker> претензії.</example>
        <example correction="заявляти|мати">І він <marker>пред'являв</marker> би нові претензії.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token inflected="yes" regexp="yes">пред'являти|пред'явити|пред'явивши|пред'являючи</token>
          </marker>
          <token regexp="yes" min="0">би?</token>
          <token postag_regexp="yes" postag="adj:[fnp]:v_zna(?!:ranim).*" min="0"/>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:.:v_zna.*" regexp="yes">вимога|звинувачення|обвинувачення</token>
        </pattern>
        <message>Правильно: <suggestion>ставити</suggestion></message>
        <example correction="ставити">І він <marker>пред'явив</marker> вимогу.</example>
        <example correction="ставити">І він <marker>пред'явив</marker> нові звинувачення.</example>
        <example correction="ставити">І він <marker>пред'являв</marker> би нові вимоги.</example>
      </rule>
    </rulegroup>

    <!-- group: дієслова: керування -->

    <rule id="ODRUZHYTYSIA_NA" name="Одружитися на">
      <pattern>
        <token inflected="yes" regexp="yes">одружуватися|одружитися|о?женитися|одружуючись|одружившись|о?женившись</token>
        <token regexp="yes" min="0">би?</token>
        <marker>
          <token>на</token>
        </marker>
      </pattern>
      <message>Правильно: одружитися <suggestion>з</suggestion> кимсь</message>
      <url>http://mova.kreschatic.kiev.ua/11.php</url>
      <example correction="з">Джонні Депп вирішив одружитися <marker>на</marker> Ембер Херд</example>
      <example>Джонні Депп вирішив одружитися з Ембер Херд</example>
    </rule>

    <rulegroup id="diyakuvaty_chomu" name="Дякувати чому" default="off">
      <rule>
        <antipattern>
<!--
          <unify>
            <feature id="person"/>
-->
          <token inflected="yes" regexp="yes">дякувати|подякувати
            <exception postag_regexp="yes" postag="verb:.*(:impr|:[12]).*"/>
          </token>
          <token postag_regexp="yes" postag="(adj|numr).*v_naz.*" min="0" max="2"/>
          <token postag_regexp="yes" postag="noun:.*v_naz.*"/>
<!--
          </unify>
-->
        </antipattern>
<!--
        <antipattern>
          <token postag_regexp="yes" postag="noun:.*v_dav.*"/>
          <token inflected="yes" regexp="yes">дякувати|подякувати
            <exception postag_regexp="yes" postag="verb:.*(:impr|:[12]).*"/>
          </token>
          <token postag_regexp="yes" postag="adj.*v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:.*v_naz.*"/>
        </antipattern>
-->
        <pattern>
          <token inflected="yes" regexp="yes">дякувати|подякувати</token>
          <token postag_regexp="yes" postag="(adj|numr).*v_zna.*" min="0" max="2">
            <exception postag_regexp="yes" postag="noun:.*:v_dav.*"/>
            <exception regexp="yes">його|її</exception>
          </token>
          <token postag_regexp="yes" postag="noun.*v_zna.*">
            <exception postag_regexp="yes" postag="noun.*:v_dav.*|.*predic.*|.*numr.*"/>
            <exception regexp="yes">його|її</exception>
          </token>
        </pattern>
        <message>Правильно: <suggestion><match no="1"/> <match no="2"/> <match no="3" postag_regexp="yes" postag="(noun.*:)v_zna(.*)" postag_replace="$1v_dav$2"/></suggestion></message>
        <example correction="дякує компанії">«ДТ» <marker>дякує компанію</marker> «ИнтВестДистрибьюшн».</example>
        <example correction="дякуватимемо директорові|дякуватимемо директору">Ми <marker>дякуватимемо директора</marker> компанії.</example>
        <!-- TODO:
        <example correction="подякувала холдинг">Учасниця <marker>подякувала холдинг</marker> за подарунок.</example>
        <example correction="подякував небу">Він <marker>подякував небо</marker> за дощ.</example>
        -->
        <example>Дякую мільйон разів</example>
        <example>Дякував сотий раз</example>
        <example>Він подякував тим, хто опікувався мною.</example>
        <example>і подякував козак дівчині.</example>
        <example>І подякувати слід незалежно від того</example>
        <example>Уряду дякує холдинг.</example>
        <example>Україні дякували іноземні уряди</example>
        <example>Саме «діркам» мають дякувати шахтарські селища регіону</example>
        <example>Подякувала мати за науку</example>
        <!-- handled by the next rule -->
        <example>подякувала його сестру</example>
        <example>Будемо дякувати його.</example>
      </rule>
      
      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">дякувати|подякувати</token>
          <token regexp="yes">його|її</token>
          <token postag_regexp="yes" postag="noun.*v_zna.*">
            <exception postag_regexp="yes" postag="noun.*:v_dav.*|.*predic.*|.*numr.*"/>
          </token>
        </pattern>
        <message>Правильно: <suggestion><match no="1"/> <match no="2"/> <match no="3" postag_regexp="yes" postag="(noun.*:)v_zna(.*)" postag_replace="$1v_dav$2"/></suggestion></message>
        <example correction="подякувала його сестрі"><marker>подякувала його сестру</marker>.</example>
        <example correction="дякувати його сміливості">Будемо <marker>дякувати його сміливість</marker>.</example>
        <!-- handled by the rule below -->
        <example>Подякувати його треба.</example>
        <example>Будемо дякувати його.</example>
      </rule>
      
      <rule>
        <pattern>
          <marker>
            <token inflected="yes" regexp="yes">дякувати|подякувати</token>
            <token regexp="yes">його|її</token>
          </marker>
          <token>
            <exception postag_regexp="yes" postag="noun.*(v_zna|v_dav).*"/>
          </token>
        </pattern>
        <message>Правильно: <suggestion><match no="1"/> <match no="2" postag_regexp="yes" postag="(noun.*:)v_zna(.*)" postag_replace="$1v_dav$2"/></suggestion></message>
        <example correction="подякувала йому"><marker>подякувала його</marker>.</example>
        <example correction="подякувати йому"><marker>подякувати його</marker> треба.</example>
        <example correction="подякувати йому"><marker>подякувати його</marker> вдруге.</example>
        <!-- handled by the rule above -->
        <example>Будемо дякувати його сестру.</example>
      </rule>
    </rulegroup>

    <rulegroup id="vybachaty_kogo" name="Вибачати кого">
      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">вибачати|вибачити|пробачати|пробачити</token>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>
            <token postag_regexp="yes" postag="(adj|numr):.:v_zna(?!:ri).*" min="0" max="2"/>
            <token postag_regexp="yes" postag="noun:anim:.:v_zna.*">
              <exception  postag_regexp="yes" postag="noun:anim:.:v_dav.*"/>
            </token>
          </unify>
        </pattern>
        <message>Правильно: <suggestion><match no="1"/> <match no="2" postag_regexp="yes" postag="(adj.*?)(?:v_rod|v_zna)(.*)" postag_replace="$1v_dav$2"/> <match no="3" postag_regexp="yes" postag="(noun:anim:.:)(?:v_rod|v_zna)(.*)" postag_replace="$1v_dav$2"/></suggestion></message>
        <example correction="вибачати хлопцеві|вибачати хлопцю"><marker>вибачати хлопця</marker>.</example>
        <example correction="вибачати тому хлопцеві|вибачати тому хлопцю"><marker>вибачати того хлопця</marker>.</example>
        <example correction="пробачили дівчині"><marker>пробачили дівчину</marker>.</example>
        <example correction="пробачили учням"><marker>пробачили учнів</marker>.</example>
        <example correction="пробачили дівчаткові|пробачили дівчатку"><marker>пробачили дівчатко</marker>.</example>
        <example correction="пробачили своїм батькам"><marker>пробачили своїх батьків</marker>.</example>
        <!-- TODO:
        <example correction="пробачили свому коханому"><marker>пробачила свого коханого</marker>.</example>
        -->
        <example>вибачити все йому</example>
      </rule>
    </rulegroup>

    <rulegroup id="NAVCHATY_CHOGO" name="Навчати чого">
      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">навч[иа]ти|навча(вши|ючи)|навчивши</token>
          <token postag_regexp="yes" postag="noun:anim.*?:v_zna.*|noun.*?v_zna.*pron:pers.*" min="0"/>
          <marker>
            <unify>
              <feature id="gender"/>
              <feature id="case"/>
              <token postag_regexp="yes" postag="numr:.:v_dav.*" min="0"/>
              <token postag_regexp="yes" postag="adj:.:v_dav.*" min="0">
                <exception>їх</exception>
              </token>
              <token postag_regexp="yes" postag="noun:inanim:.:v_dav.*">
                <exception postag_regexp="yes" postag="noun:.*:v_(rod|zna|oru).*|noun:anim.*:v_naz.*|adv.*"/>
  <!--               <exception scope="next">нікому</exception>  --> <!-- не вірити -->
              </token>
            </unify>
          </marker>
        </pattern>
        <message>Навчати чого</message>
        <example correction="">навчати <marker>математиці</marker>.</example>
        <example correction="">навчати <marker>елементарній математиці</marker>.</example>
        <example correction="">навчати учнів <marker>елементарній математиці</marker>.</example>
        <example correction="">навчати їх <marker>елементарній математиці</marker></example>
        <example correction="">навчати <marker>цьому</marker> виду спорту.</example>
        <example correction="">навчали <marker>улюбленому заняттю</marker>.</example>
        <example correction="">навчити <marker>всьому</marker>.</example>
        <example correction="">навчали <marker>необхідним навикам</marker>.</example>
        <example correction="">Вас хтось навчив <marker>цим рухам</marker>?</example>
        <example correction="">навчають <marker>незнайомим словам</marker>.</example>
        <!-- TODO:
        <example correction="">які навчали <marker>художній майстерності</marker> обдарованих дітей</example>
         -->
        <example>навчати математики.</example>
        <example>навчати елементарної математики.</example>
        <example>навчати фаху.</example>
        <example>навчати їх.</example>
        <example>навчило її нікому не вірити.</example>
        <example>Чого навчила вас ця поразка?</example>
        <example>якого мене навчили друзі.</example>
        <example>Цьому мав би навчити попередній досвід.</example>
        <example>якої їх навчив їхній лідер,</example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">навч[иа]ти|навча(вши|ючи)|навчивши</token>
          <token regexp="yes" min="0">би?</token>
          <token postag_regexp="yes" postag="noun:anim.*?:v_zna.*|noun.*?v_zna.*?pron:pers.*" min="0"/>
          <marker>
            <token postag_regexp="yes" postag="(noun|adj):.:v_dav.*">
              <exception postag_regexp="yes" postag="noun.*?:v_rod.*"/>
              <exception regexp="yes">їх|його|її</exception>
            </token>
          </marker>
          <or> 
            <token regexp="yes">&punct_std;</token>
            <token postag_regexp="yes" postag="conj.*"/>
          </or>
        </pattern>
        <message>Навчати чого</message>
        <example correction="">Мене навчили <marker>головному</marker> — бачити кінцеву мету</example>
        <example correction="">навчити дітей <marker>елементарному</marker> й прищепити любов</example>
        <example correction="">навчити дітей <marker>тому</marker>, що любов...</example>
        <example>а він навчив її,</example>
      </rule>

      <rule>
        <antipattern>
          <token regexp="yes">їх|його|її</token>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>
            <token postag_regexp="yes" postag="adj:.:v_rod.*" min="0"/>
            <token postag_regexp="yes" postag="noun:inanim:.:v_rod.*"/>
          </unify>
        </antipattern>
        <pattern>
          <token inflected="yes" regexp="yes">навч[иа]ти|навча(вши|ючи)|навчивши</token>
          <token regexp="yes">їх|його|її</token>
          <marker>
            <token postag_regexp="yes" postag="adj:.:v_dav.*" min="0"/>
            <token postag_regexp="yes" postag="noun:inanim:.:v_dav.*">
              <exception postag_regexp="yes" postag="noun:inanim:.:v_oru.*|adv.*"/>
            </token>
          </marker>
        </pattern>
        <message>Навчати чого</message>
        <example correction="">навчають її <marker>іноземним мовам</marker>.</example>
        <example correction="">навчити їх <marker>здоровому способу</marker> життя.</example>
        <example>навчають її живопису.</example>
      </rule>

      <rule>
        <antipattern>
          <token inflected="yes" regexp="yes">навч[иа]тися|навча(вши|ючи)сь|навчившись</token>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>
            <token postag_regexp="yes" postag="adj:.:v_rod.*" min="0"/>
            <token postag_regexp="yes" postag="noun:inanim:.:v_rod.*"/>
          </unify>
        </antipattern>
        <pattern>
          <token inflected="yes" regexp="yes">навч[иа]тися|навча(вши|ючи)сь|навчившись</token>
          <marker>
            <token postag_regexp="yes" postag="numr:.:v_dav.*" min="0">
              <exception postag_regexp="yes" postag="numr:.:v_naz.*"/>
            </token>
            <token postag_regexp="yes" postag="adj:.:v_dav.*" min="0" max="2"/>
            <token postag_regexp="yes" postag="noun:inanim:.:v_dav.*">
              <exception postag_regexp="yes" postag="noun:anim:.:v_naz.*|adv.*|.*?numr.*"/>
              <exception scope="next" postag_regexp="yes" postag="verb.*"/>
              <exception scope="next" regexp="yes">нікому</exception> <!-- не вірити -->
            </token>
          </marker>
        </pattern>
        <message>Навчатися чого</message>
        <example correction="">навчатися <marker>математиці</marker>.</example>
        <example correction="">навчатися <marker>елементарній математиці</marker>.</example>
        <example correction="">навчатися <marker>цьому</marker> виду спорту.</example>
        <example correction="">навчалися <marker>улюбленому заняттю</marker>.</example>
        <example correction="">навчитися <marker>всьому</marker>.</example>
        <example correction="">навчитися <marker>цій екзотиці</marker>.</example>
        <example correction="">не навчилися <marker>нічому</marker>.</example>
        <example correction="">не навчилися <marker>дечому</marker>.</example>
        <example correction="">навчитись <marker>тим технологіям</marker>.</example>
        <example correction="">навчилися <marker>високим стандартам</marker> життя</example>
        <example correction="">навчитись <marker>східним танцям</marker>.</example>
        <example correction="">навчилася <marker>бойовим мистецтвам</marker>.</example>
        <example correction="">Мир нехай навчається <marker>добру</marker>.</example>
        <example correction="">навчилася <marker>багатьом речам</marker>.</example>
        <example correction="">навчаються <marker>професійному співу</marker> діти.</example>
        <example correction="">уперто навчається <marker>спокійному подружньому коханню</marker>,</example>
        <example correction="">якій навчалися <marker>художній майстерності</marker> у цій школі</example>
        <example>навчатися менеджменту.</example>
        <example>вони навчалися далі, обираючи собі професію</example>
        <example>Куди піти навчатись ентузіастам із фотоапаратами.</example>
        <example>навчалися індійці.</example>
        <example>навчаються китайці.</example>
        <example>навчатися досі</example>
        <example>навчилася нікому не вірити.</example>
        <example>Але довго навчатися йому не довелося.</example>
        <example>навчатися власним коштом.</example>
        <example>не маючи можливості навчатися самому.</example>
        <example>доведеться таки навчитися цим провокаціям протистояти.</example>
        <example>там теж навчаються тисячі студентів, які потім...</example>
        <example>навчитися самій робити хліб</example>
        <example>тут навчалася півтора року.</example>
      </rule>
      
      <rule>
        <pattern>
          <token inflected="yes">навчання</token>
          <marker>
            <token postag_regexp="yes" postag="adj:.:v_dav.*" min="0"/>
            <token postag_regexp="yes" postag="noun:inanim:.:v_dav.*">
              <exception postag_regexp="yes" postag="noun:inanim:.:v_(oru|rod).*|adv.*"/>
            </token>
          </marker>
        </pattern>
        <message>Навчати чого</message>
        <example correction="">навчання <marker>математиці</marker>.</example>
        <example correction="">навчання <marker>іноземним мовам</marker>.</example>
        <!--
        <example correction="">навчанню їх <marker>здоровому способу</marker> життя.</example>
        -->
        <example>навчання персоналу</example>
      </rule>

    </rulegroup>

    <rule id="HVORITY_CHYM" name="Хворіти чим замість на що">
      <pattern>
        <token inflected="yes" regexp="yes">.*?хворі(ти|вши|ючи)</token>
        <marker>
          <token postag_regexp="yes" postag="adj:.:v_oru.*" min="0"/>
          <token postag_regexp="yes" postag="noun.*?:v_oru.*">
            <exception postag_regexp="yes" postag="noun:.*?:v_naz.*"/>
            <exception regexp="yes">дивом|чудом|протягом|часом|сім'ями|маленьким|дорослим</exception>
          </token>
        </marker>
      </pattern>
      <message>Хворіти вимагає конструкції з «на»</message>
      <suggestion>на <match no="2" postag_regexp="yes" postag="(adj:.*):v_oru(.*)" postag_replace="$1:v_zna(:r(in)?anim)?$2"/> <match no="3" postag_regexp="yes" postag="(noun:.*)v_oru(.*)" postag_replace="$1v_zna$2"/></suggestion>
      <example correction="на ангіну">Він хворіє <marker>ангіною</marker></example>
      <example correction="на страшну ангіну">Він хворіє <marker>страшною ангіною</marker></example>
      <example correction="на неї|на її">хворітиме <marker>нею</marker> на відстані.</example>
      <example correction="на щось">хворітиме <marker>чимсь</marker> дивним.</example>
      <!--
          <example correction="на себе">Перестати хворіти <marker>собою</marker></example>
      -->
      <example correction="на себе">хворіючи <marker>собою</marker>.</example>
      <example>тяжко хворіла пані Анка</example>
      <example>Він хворіє на ангіну</example>
      <example>Він не захворів дивом</example>
      <example>Той, хто захворів маленьким.</example>
    </rule>

    <rule id="zaznaty_porazku" name="Зазнати/завдати поразку">
      <pattern>
        <token regexp="yes" inflected="yes">зазнати|зазнавати|завдати|завдавати</token>
        <token min="0" postag_regexp="yes" postag="noun.*?v_dav.*">
          <exception postag_regexp="yes" postag="adj:f:v_zna.*"/>
        </token>
        <marker>
          <token min="0" postag_regexp="yes" postag="adj:f:v_zna.*"/>
          <token>поразку</token>
        </marker>
      </pattern>
      <message>Правильно: <suggestion><match no="3" postag_regexp="yes" postag="adj:f:v_zna(.*)" postag_replace="adj:f:v_rod$1"/> поразки</suggestion></message>
      <example correction="поразки">зазнати <marker>поразку</marker>.</example>
      <example correction="нищівної поразки">завдав <marker>нищівну поразку</marker>.</example>
      <example correction="нищівної поразки">завдав йому <marker>нищівну поразку</marker>.</example>
    </rule>

    <!-- group: числівники -->

    <rulegroup id="CONSISTENCY_NOUN_NUMERIC_FRACTIONAL" name="Узгодженість числа іменників з дробовими числівниками">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="numr:[fp].*|number"/>
          <token regexp="yes">десятих|десяті|сотих|соті|.*тисячних|.*тисячні|третіх|треті|четвертих|чверті|четверті</token>
          <marker>
            <token postag_regexp="yes" postag="noun:inanim:.:.*">
              <exception postag_regexp="yes" postag="noun:inanim:[mfnp]:v_rod.*|.*(predic|pron).*"/>
              <exception regexp="yes">класи|гра|біографій|витрат|голосів|грошей|занять|заяв|інвестицій|локомотивів|мінус|місць|плюс|потреб|потужностей|рейсів|сімей|смертей|фірм|шлюбів|творів|.*господарств|експонатів|країн|країн-.*</exception>
            </token>
          </marker>
        </pattern>
        <message>Після дробового числівника іменник має стояти в родовому відмінку однини</message>
        <suggestion><match no="3" postag_regexp="yes" postag="(.*):.:v_...(.*)" postag_replace="$1:[mnf]:v_rod$2"/></suggestion>
        <example correction="відсотка">дві десятих <marker>відсотки</marker></example>
        <example correction="відсотка">дві третіх <marker>відсотки</marker></example>
        <example correction="відсотка">три четверті <marker>відсотки</marker></example>
        <example>дві десяті відсотка</example>
        <example>через десяті руки</example>
        <example>дві третіх країн-членів</example>
        <example>дві десяті мм</example>
        <example>три чверті місць</example>
        <example>три чверті їх слухати неможливо</example>
        <example>на три чверті він ними був заповнений</example>
        <example>три чверті громадян</example>
        <example>усі три чверті гра була рівною</example>
        <example>два десятих класи</example>
        <example>заради цих двох сотих треба дуже багато попрацювати</example>
      </rule>
      <rule>
        <pattern>
          <marker>
            <token>два</token>
          </marker>
          <token regexp="yes">десятих|сотих|.*тисячних|третіх|четвертих</token>
          <token regexp="yes" inflected="yes">відсоток|.*метр|секунда|мільйон|мільярд</token>
        </pattern>
        <message>Десяті, соті, тисячні тощо — жіночого роду</message>
        <suggestion>дві</suggestion>
        <!--
        <suggestion><match no="1" postag_regexp="yes" postag="(numr):m(:.*)" postag_replace="$1:f$2"/></suggestion>
        -->
        <example correction="дві"><marker>два</marker> десятих відсотки</example>
        <example correction="дві"><marker>два</marker> третіх метра</example>
        <example>заради цих двох сотих треба дуже багато попрацювати</example>
        <example>не вистачило дві десятих секунди</example>
      </rule>
      <rule>
        <pattern>
          <marker>
            <token>півтора</token>
          </marker>
          <token regexp="yes">десятих|сотих|.*тисячних|третіх|четвертих</token>
          <token regexp="yes" inflected="yes">відсоток|.*метр|секунда|мільйон|мільярд</token>
        </pattern>
        <message>Десяті, соті, тисячні тощо — жіночого роду</message>
        <suggestion>півтори</suggestion>
        <example correction="півтори"><marker>півтора</marker> сотих секунди</example>
        <example>не вистачило півтора метра</example>
      </rule>
    </rulegroup>

    <rule id="consistency_numeric_fractional" name="Узгодженість дробових числівників">
      <pattern>
        <token regexp="yes">дві|три|чотири</token>
         <marker>
          <token regexp="yes">десятих|сотих|тисячних|третіх|четвертих</token>
        </marker>
      </pattern>
      <message>Хоча чинний правопис пропонує у дробовому числівнику після два, три, чотири писати: третіх, десятих, сотих, логічніше мало би бути: треті, десяті, соті…</message>
      <suggestion><match no="2" postag_regexp="yes" postag="(.*):.:v_...(.*)" postag_replace="$1:p:v_naz$2"/></suggestion>
      <example correction="десяті">дві <marker>десятих</marker></example>
      <example correction="соті">три <marker>сотих</marker></example>
      <!-- TODO: false positive
          <example>перше місце, три других і чотири третіх</example>
      -->
    </rule>

    <rule id="consistency_numeric_fractional_2019" name="Узгодженість дробових числівників (2019)">
      <pattern>
        <token regexp="yes">дві|три|чотири</token>
        <marker>
          <token regexp="yes">десяті|соті|тисячні|треті|четверті</token>
        </marker>
      </pattern>
      <message>Хоча логічніше мало би бути: треті, десяті, соті…, чинний правопис пропонує у дробовому числівнику після два, три, чотири писати: третіх, десятих, сотих,…</message>
      <suggestion><match no="2" postag_regexp="yes" postag="(.*):.:v_...(.*)" postag_replace="$1:p:v_rod$2"/></suggestion>
      <example correction="десятих">дві <marker>десяті</marker></example>
      <example correction="сотих">три <marker>соті</marker></example>
    </rule>

    <rulegroup id="CONSISTENCY_NOUN_NUMERIC_WHOLE" name="Узгодженість числа іменників з цілими числівниками">
      <rule>
        <pattern>
          <token regexp="yes">([1-9][0-9 \u00A0]*)[02-9]1
            <exception scope="previous" regexp="yes">[:./№]</exception>
            <exception regexp="yes">(1[0-9]{3}|20[0-2][0-9])</exception>
          </token>
          <token postag_regexp="yes" postag="adj.*" min="0">
            <exception postag_regexp="yes" postag="noun.*?:[mfn]:.*"/>
          </token>
          <marker>
            <token postag_regexp="yes" postag="noun.*?:p:.*">
              <exception postag_regexp="yes" postag=".*:[mfn]:.*|.*pron:pers.*|adv.*"/>
              <exception>рр.</exception>
            </token>
          </marker>
        </pattern>
        <message>Після числівника, що закінчується на 1, іменник має стояти в однині</message>
        <example type="incorrect">271 <marker>депутатів</marker> проголосували</example>
        <example type="incorrect">1 271 <marker>депутатів</marker> проголосували</example>
        <example type="incorrect">всього 441 <marker>рази</marker>.</example>
        <example type="incorrect">10931 <marker>глядачів</marker>.</example>
        <example>11 депутатів проголосували</example>
        <example>на тлі претендента 001 доходи великої родини</example>
        <example>27 депутатів проголосували</example>
        <example>проти 441 зараз.</example>
        <example>залишилася 781 тонна пестицидів.</example>
        <example>В 1999-2001 рр. він був секретарем.</example>
        <example>В 604-562 або 561 рр. до н.е.</example>
        <example>Про знеструмлення будинків 10 та 101 нас не повідомили.</example>
      </rule>
    </rulegroup>

    <rule name="Раза з дробовими числівниками" id="raza_with_fractions">
      <antipattern>
        <token regexp="yes">([0-9.,—–-]+)?[0-9]+[.,][0-9]+|півтора</token>
        <token>раза</token>
      </antipattern>
      <antipattern>
        <token regexp="yes">[0-9]+[.,][0-9]+([0-9.,—–-]+)?|півтора</token>
        <token>раза</token>
      </antipattern>
      <antipattern>
        <token>половиною</token>
        <token>раза</token>
      </antipattern>
      <antipattern>
        <token>раза</token>
        <token min="0" regexp="yes">[ву]</token>
        <token regexp="yes">півтора(-.*)?</token>
      </antipattern>
      <pattern>
        <token>раза
          <exception case_sensitive="yes">Раза</exception>
        </token>
      </pattern>
      <message>«\1» вживаємо лише після дробових числівників</message>
      <suggestion>рази</suggestion>
      <suggestion>разів</suggestion>
      <suggestion>разу</suggestion>
      <url>https://kulturamovy.org.ua/movni-trudnoshhi/r-movni-trudnoshhi/raz/</url>
      <example correction="рази|разів|разу">Два <marker>раза</marker> прочитав.</example>
      <example>1,5 раза.</example>
      <example>раза півтора-два</example>
      <example>у 2,3–2,5 раза</example>
      <example>2,5–5 раза</example>
      <example>Юсуф Раза Гілані</example>
      <example>два з половиною раза</example>
    </rule>

    <!-- group: іменник: керування -->

    <rulegroup id="token_agreement_noun_noun" name="Узгодження: іменник-іменник">
      <rule>
      <!--
        <antipattern>
          <token postag_regexp="yes" postag="noun:anim:m:v_dav.*prop:fname"/>
          <token postag_regexp="yes" postag="noun:anim:m:v_dav.*prop:lname"/>
        </antipattern>
        -->
        <pattern>
          <token postag_regexp="yes" postag="noun.*">
            <exception postag_regexp="yes" postag="adj.*|.*pron.*|verb.*|.*prop.*"/>
            <exception inflected="yes" regexp="yes">догода|пам'ятник|рік|інтерв'ю|коментар|допомога</exception>
            <!--
            <exception regexp="yes">місті</exception>
            -->
          </token>
          <marker>
            <token regexp="yes" postag_regexp="yes" postag="noun:inanim:m:v_dav.*">.*[ую]
              <exception postag_regexp="yes" postag="noun:inanim:.:v_rod.*|adj.*|verb.*|.*(prop|alt|slang|arch).*"/>
              <exception postag_regexp="yes" postag="noun:anim:m:.*"/>
              <exception regexp="yes">ставку|плату|курку|дню|дрібку|соску|кулю|бутсу|динаміку|зморшку|тирсу|цукерку|точку|півдню</exception>
            </token>
          </marker>
        </pattern>
        <message>Можливо, має бути р.в.: <suggestion><match no="2" postag_regexp="yes" postag="(noun:inanim:m:v_)dav(.*)" postag_replace="$1rod$2"/></suggestion>?</message>
        <example correction="білка">розчин <marker>білку</marker>.</example>
        <example correction="об'єкта">здавання <marker>об'єкту</marker>.</example>
        <example>сказати суду</example>
        <example>кожному клаптику.</example>
        <example>тягли за собою кару.</example>
        <example>Андрію Садовому</example>
        <example>не дати раду</example>
        <example>сонцю золотому</example>
        <example>Героя України провіднику</example>
        <example>за поразку беру</example>
        <example>пану директору</example>
        <example>висловив догану Вальтеру</example>
        <example>за цей злочин кару смертю</example>
      </rule>
    </rulegroup>

    <rulegroup id="NA_TAKIY_MOVI" name="На (такій) мові - (такою) мовою">
      <antipattern>
        <token regexp="yes" inflected="yes">базуватися|базований|вихований|ґрунтуватися|заробляти|зав'язаний|зекономити|знатися|зосередитися|зупинитися|позначитися|розумітися|сфокусуватися</token>
        <token postag_regexp="yes" postag="noun.*?:v_dav.*" min="0"/>
        <token>на</token>
      </antipattern>

      <rule>
        <antipattern>
          <token>мові</token>
          <token regexp="yes" inflected="yes">базуватися|вихований|ґрунтуватися|заробляти|зав'язаний|зекономити|знатися|зосередитися|зупинитися|позначитися|розумітися|сфокусуватися</token>
        </antipattern>
        <pattern>
          <token>на</token>
          <token postag_regexp="yes" postag="(adj|numr):f:v_mis.*"/>
          <token>мові</token>
        </pattern>
        <message>Правильно: <suggestion><match no="2" postag_regexp="yes" postag="(adj|numr):f:v_mis(.*)" postag_replace="$1:f:v_oru.*"/> мовою</suggestion></message>
        <example correction="Китайською мовою"><marker>На китайській мові</marker>.</example>
        <example correction="одною мовою|однією мовою"><marker>на одній мові</marker>.</example>
        <example>в українській мові</example>
        <example>давати заробляти росіянам на українській мові</example>
        <example>котрий розуміється на їхній мові</example>
        <example>У прийнятті рішення, на якій мові зупинитися</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes" inflected="yes">(за)?говорити|спілкуватись|балакати|розмовляти</token>
          <marker>
            <token>на</token>
            <!-- note: some languages we have as nouns in the dictionary but the rest are generic adj -->
            <token inflected="yes" postag_regexp="yes" postag="(adj|noun:inanim):f:v_mis.*" regexp="yes">українська|російська|англійська|німецька|іспанська|французька|польська</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion><match no="3" postag_regexp="yes" postag="(adj|noun:inanim):f:v_mis(.*)" postag_replace="$1:f:v_oru.*"/></suggestion></message>
        <example correction="англійською">говорив <marker>на англійській</marker>.</example>
        <example>в українській</example>
        <example>ґрунтується на німецькій</example>
        <example>на українській військовій базі</example>
        <example>на українській же військовій базі</example>
      </rule>

      <rule>
        <pattern>
          <token>на</token>
          <token>мові</token>
          <token postag_regexp="yes" postag="(adj|noun).*?v_rod.*"/>
        </pattern>
        <message>Правильно: <suggestion>мовою <match no="3"/></suggestion></message>
        <example correction="мовою майя">Говорили <marker>на мові майя</marker>.</example>
        <example correction="мовою зулуських">Говорили <marker>на мові зулуських</marker> племен.</example>
      </rule>
      <rule>
        <pattern>
          <token>на</token>
          <token postag_regexp="yes" postag="numr:.:v_mis.*"/>
          <token>мовах</token>
        </pattern>
        <message>Правильно: <suggestion><match no="2" postag_regexp="yes" postag="(numr:.:)v_mis(.*)" postag_replace="$1v_oru$2"/> мовами</suggestion></message>
        <example correction="двома мовами">Говорили <marker>на двох мовах</marker>.</example>
      </rule>
    </rulegroup>

    <rule id="na_ukraini" name="На Україні">
      <pattern>
        <marker>
          <token>на</token>
        </marker>
        <token>Україні</token>
      </pattern>
      <message>Згідно з чинною нормою пишемо "в Україні", однак у фольклорних і давніших літературних творах з історичних причин вживали "на Україні".</message>
      <suggestion>в</suggestion>
      <url>https://uk.wikipedia.org/wiki/%D0%9D%D0%B0_%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%96#%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D0%B0</url>
      <example correction="в"><marker>на</marker> Україні</example>
    </rule>

    <!-- group: час -->

    <rulegroup id="TIME" name="Час">
      <rule>
        <pattern>
          <token>пів</token>
          <token postag_regexp="yes" postag="adj:f:v_rod.*" regexp="yes" inflected="yes">&hours;</token>
        </pattern>
        <message>Правильно: <suggestion>(о) пів на <match no="2" postag_regexp="yes" postag="adj:f:v_zna(?!.*long).*"/></suggestion></message>
        <suggestion>(о) пів до <match no="2" postag_regexp="yes" postag="adj:f:v_rod(?!.*long).*"/></suggestion>
        <example correction="(о) пів на першу|(о) пів до першої"><marker>пів першої</marker> приїхав і він</example>
        <example>пів на першу приїхав і він</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token regexp="yes">[ву]</token>
          </marker>
          <token postag_regexp="yes" postag="adj:f:v_mis.*" regexp="yes" inflected="yes">&hours;</token>
          <token regexp="yes">годині|ранку|вечора|ночі</token>
        </pattern>
        <message>Правильно: <suggestion>о</suggestion></message>
        <example correction="о">аж <marker>у</marker> третій годині ночі</example>
        <example correction="о">аж <marker>у</marker> третій ранку</example>
        <example>аж о третій годині ночі</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token regexp="yes">[ву]</token>
          </marker>
          <token regexp="yes">([1-9]|[12][0-9])(-і?й)?</token>
          <token regexp="yes">годині|ранку|вечора|ночі</token>
        </pattern>
        <message>Правильно: <suggestion>о</suggestion></message>
        <example correction="о">аж <marker>у</marker> 10-й годині ночі</example>
        <example correction="о">аж <marker>у</marker> 10-й ранку</example>
        <example>аж о 5-ій годині ночі</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token regexp="yes">[ву]
              <exception scope="previous" inflected="yes" regexp="yes">влитися|втиснути|інтервал</exception>
            </token>
            <token regexp="yes">дві|три|чотири|п'ять|шість|сім|вісім|дев'ять|десять|одинадцять|дванадцять</token>
            <token regexp="yes">години?</token>
          </marker>
          <token regexp="yes">годині|ранку|вечора|ночі</token>
        </pattern>
        <message>Правильно: <suggestion>о ... годині</suggestion></message>
        <example correction="о ... годині">аж <marker>у вісім годин</marker> ночі</example>
        <example>процедура вилилася в шість годин</example>
        <example>матимемо різницю з Європою аж у дві години</example>
        <example>хронометраж стрічки в чотири години</example>
        <example>не можна у дві години фільму втиснути</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">[ву]</token>
          <token regexp="yes">(2[0-4]|1[0-9]|[1-9]):[0-9]{2}</token>
        </pattern>
        <message>Правильно: <suggestion>о <match no="2"/></suggestion></message>
        <example correction="о 17:00">почнеться <marker>в 17:00</marker> за місцевим часом</example>
        <example>з рахунком 22:33</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">[ву]</token>
          <token postag_regexp="yes" postag="num.*"/>
          <token>годин</token>
          <token postag_regexp="yes" postag="num.*"/>
          <token postag_regexp="yes" postag="num.*" min="0"/>
          <token>хвилин</token>
        </pattern>
        <message>Правильно: <suggestion>о <match no="2"/> <match no="3"/>і <match no="4"/> <match no="5"/> <match no="6"/></suggestion></message>
        <suggestion><match no="2"/> <match no="3"/> до <match no="4"/></suggestion>
        <example correction="о п'ять годині двадцять п'ять хвилин|п'ять годин до двадцять"><marker>в п'ять годин двадцять п'ять хвилин</marker></example>
        <example>п'ять хвилин на дев'яту</example>
      </rule>

      <rule>
        <pattern>
          <!--
              <token postag_regexp="yes" postag="num.*"/>
          -->
          <token postag_regexp="yes" postag="adj:f:v_mis.*" regexp="yes" inflected="yes">&hours;</token>
          <token>годині</token>
          <marker>
            <token postag_regexp="yes" postag="num.*" min="0"/>
            <token postag_regexp="yes" postag="adj.*"/>
            <token>хвилині</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>…надцять хвилин</suggestion></message>
        <example correction="…надцять хвилин">о першій годині <marker>двадцятій хвилині</marker></example>
        <example correction="…надцять хвилин">о першій годині <marker>тридцять п'ятій хвилині</marker></example>
        <example>о першій годині двадцять п'ять хвилин</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">[1-9]-і?й|[12][0-9]-і?й</token>
          <token>годині</token>
          <marker>
            <token postag_regexp="yes" postag="num.*" min="0"/>
            <token postag_regexp="yes" postag="adj.*"/>
            <token>хвилині</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>…надцять хвилин</suggestion></message>
        <example correction="…надцять хвилин">о 10-й годині <marker>двадцять п'ятій хвилині</marker></example>
        <example>о 10-й годині двадцять п'ять хвилин</example>
      </rule>

      <rule>
        <pattern>
          <token>без</token>
          <token postag_regexp="yes" postag="num.*" min="1" max="1"/>
          <token min="0">хвилин</token>
          <token postag_regexp="yes" postag="adj:f:v_naz.*" regexp="yes" inflected="yes">&hours;</token>
        </pattern>
        <message>Правильною є конструкція за + числівник у знахідному відмінку</message>
        <suggestion>за <match no="2" postag_regexp="yes" postag="numr:p:v_naz.*"/> <match no="3"/> <match no="4"/></suggestion>
        <suggestion><match no="2" postag_regexp="yes" postag="numr:p:v_naz.*"/> <match no="3"/> до <match no="4" postag_regexp="yes" postag="adj:f:v_rod.*"/></suggestion>
        <example correction="за десять третя|десять до третьої"><marker>без десяти третя</marker></example>
        <example correction="за двадцять хвилин третя|двадцять хвилин до третьої"><marker>без двадцяти хвилин третя</marker></example>
        <!--
        <example correction="за двадцять дві хвилин сьома|за двадцять двоє хвилин сьома|за  хвилин сьома|два хвилин до сьомої|двоє хвилин до сьомої|дві хвилин до сьомої"><marker>без двадцяти двох хвилин сьома</marker></example>
        -->
        <example>за десять хвилин третя</example>
      </rule>

      <rule>
        <antipattern>
          <token postag_regexp="yes" postag="adj:f:v_rod.*" regexp="yes" inflected="yes">&hours;</token>
          <token regexp="yes">половини|треті|чверті|частини</token>
        </antipattern>
        <pattern>
          <token postag_regexp="yes" postag="num.*" min="1" max="2"/>
          <token>хвилин</token>
          <marker>
            <token postag_regexp="yes" postag="adj:f:v_rod.*" regexp="yes" inflected="yes">&hours;</token>
          </marker>
        </pattern>
        <!-- TODO: use java code to get previous hour?? -->
        <message>Правильно: <suggestion>по [<match no="3" postag_regexp="yes" postag="adj:f:v_mis.*"/> - 1 година]</suggestion></message>
        <suggestion>на <match no="3" postag_regexp="yes" postag="adj:f:v_zna(?!.*long).*"/></suggestion>
        <example correction="по [третій - 1 година]|на третю">п'ять хвилин <marker>третьої</marker></example>
        <example correction="по [дев'ятій - 1 година]|на дев'яту">5 хвилин <marker>дев'ятої</marker></example>
        <example correction="по [сьомій - 1 година]|на сьому">двадцять п'ять хвилин <marker>сьомої</marker></example>
        <example>п'ять хвилин по восьмій</example>
        <example>п'ять хвилин на дев'яту</example>
        <example>11 хвилин другої половини зустрічі</example>
        <example>11 хвилин сьомої частини</example>
      </rule>
    </rulegroup>

    <rule id="U_YEAR" name="У XXXX року">
      <pattern>
        <token regexp="yes">[ув]</token>
        <token regexp="yes">[0-9]{4}</token>
        <token>року</token>
      </pattern>
      <message>Правильно: <suggestion><match no="1"/> <match no="2"/> році</suggestion></message>
      <suggestion><match no="2"/> року</suggestion>
      <example correction="в 2010 році|2010 року">ще <marker>в 2010 року</marker></example>
      <example>в 60-х роках</example>
    </rule>

    <rule id="u_svoyemu_zhyti" name="У своєму житі">
      <pattern>
        <token regexp="yes">[ув]</token>
        <token regexp="yes">своєму|твоєму|моєму|її|його|їхньому|вашому|нашому|духовному|національному|соціальному|економічному</token>
        <marker>
          <token>житі</token>
        </marker>
      </pattern>
      <message>Можливо: <suggestion>житті</suggestion>?</message>
      <example correction="житті">в моєму <marker>житі</marker></example>
    </rule>

    <!-- group: сполуки -->

    <rulegroup id="zgidno_z" name="Згідно з">
      <rule>
        <pattern>
          <token>згідно</token>
          <marker>
            <token postag_regexp="yes" postag="(noun|adj).*"/>
          </marker>
        </pattern>
        <message>Згідно з чим</message>
        <suggestion>з <match no="2" postag="((?:noun|adj).*?)v_(?:rod|dav)(.*)" postag_replace="$1v_oru$2" postag_regexp="yes"/></suggestion>
        <example correction="з статутом">згідно <marker>статуту</marker></example>
        <example correction="з теперішніми">згідно <marker>теперішніх</marker> умов</example>
        <example correction="з якими">згідно <marker>яких</marker></example>
        <example>згідно зі статутом</example>
        <example>згідно з правилом</example>
      </rule>
      
      <rule>
        <pattern>
          <token>згідно</token>
          <marker>
            <token regexp="yes">до|за</token>
            <token postag_regexp="yes" postag="(noun|adj).*"/>
          </marker>
        </pattern>
        <message>Згідно з чим</message>
        <suggestion>з <match no="3" postag="((?:noun|adj).*?)v_(?:rod|dav|oru)(.*)" postag_replace="$1v_oru$2" postag_regexp="yes"/></suggestion>
        <example correction="з статутом">згідно <marker>за статутом</marker></example>
        <example correction="з правилом">згідно <marker>до правила</marker></example>
      </rule>
    </rulegroup>

    <!-- group: керування відмінком -->

    <rule id="ZAVIDUVACH" name="Завідувач">
      <pattern>
        <token inflected="yes" regexp="yes">завідувач|завідувачка|зав|зав\.</token>
        <marker>
          <token postag_regexp="yes" postag="adj:.:v_oru.*" min="0"/>
          <token postag_regexp="yes" postag="noun.*?v_oru.*">
            <exception postag_regexp="yes" postag="noun.*?v_rod.*|.*?pron.*"/>
          </token>
        </marker>
      </pattern>
      <message>Завідувач(ка) чого</message>
      <suggestion><match no="2" postag_regexp="yes" postag="(adj:.:)v_oru(.*)" postag_replace="$1v_rod$2"/> <match no="3" postag_regexp="yes" postag="(noun.*)v_oru(.*)" postag_replace="$1v_rod$2"/></suggestion>
      <!-- TODO: change code to remove space -->
      <example correction="відділу">завідувача <marker>відділом</marker></example>
      <example correction="відділу">зав <marker>відділом</marker></example>
      <example correction="відділу"> зав. <marker>відділом</marker></example>
      <example correction="сьомого відділу">завідувачки <marker>сьомим відділом</marker></example>
      <example>завідувачем ним же створеної</example>
    </rule>

    <!-- group: імена і прізвища -->

    <rule id="IMENI_MALE_LAST_NAME" name="Ім. + чоловіче прізвище">
      <pattern>
        <token>ім.</token>
        <marker>
          <token postag_regexp="yes" postag="noun:anim:m:v_naz.*?:lname.*">
            <exception postag_regexp="yes" postag="noun:anim:m:v_rod.*?:lname.*"/>
          </token>
        </marker>
      </pattern>
      <message>Чоловіче прізвище відмінюється</message>
      <suggestion><match no="2" postag_regexp="yes" postag="(noun:anim:m:)v_naz(.*?:lname.*)" postag_replace="$1v_rod.*"/></suggestion>
      <example correction="Довженка">Кіностудія ім. <marker>Довженко</marker>.</example>      
    </rule>

    <rule id="INFLECTION_MALE_LAST_NAME" name="Відмінювання чоловічих прізвищ">
      <antipattern>
        <token postag_regexp="yes" postag="noun:anim:f.*?:fname.*"/>
        <token regexp="yes">і|й|та</token>
        <token postag_regexp="yes" postag="noun:anim:m.*?:fname.*"/>
        <token postag_regexp="yes" postag="noun:anim:.*?:lname.*"/>
      </antipattern>
      <pattern>
        <token postag_regexp="yes" postag="noun:anim:m.*:fname.*">
          <exception postag_regexp="yes" postag="noun.*:m:v_(naz|kly).*:fname.*"/>
          <exception postag_regexp="yes" postag="noun.*:f.*:fname.*"/>
          <exception regexp="yes">Тому|Ніколи|Владика</exception>
          <exception postag_regexp="yes" postag="noun.*:prop(?!:fname).*"/>
          <exception scope="previous" inflected="yes" regexp="yes">король|отець|патріарх|святий</exception>
        </token>
        <marker>
          <token postag_regexp="yes" postag="noun.*:m:v_naz.*:lname.*">
            <exception postag_regexp="yes" postag="noun.*:m:v_[^n].*:lname.*"/>
            <exception postag_regexp="yes" postag="noun.*:m:v_naz.*:fname.*"/>
            <!--
                <exception postag_regexp="yes" postag="noun.*:prop(?!:lname).*"/>
            -->
          </token>
        </marker>
      </pattern>
      <message>Чоловіче прізвище відмінюється разом з іменем</message>
      <!--
          <suggestion><match no="1" postag_regexp="yes" postag="(noun.*:m.*:)fname(.*)" postag_replace="$1lname.*">\2</match></suggestion>
      -->
      <url>http://pravopys.kiev.ua/pravopys.aspx?SectionID=1765</url>
      <example correction="">Бульвар Тараса <marker>Шевченко</marker></example>
      <example correction="">прийшов до Андрія <marker>Громико</marker> секретар.</example>
      <example correction="">прийшов до Петра <marker>Порошенко</marker> секретар.</example>
      <!-- TODO:
      <example correction="">Дякую Олегу <marker>Ляшко</marker> за те</example>
      -->
      <example>Прийшов Тарас Шевченко</example>
      <example>Картина Жені Шевченко</example>
      <example>Тому Путін цілком здатен...</example>
      <example>Ніколи Ковтуненко не був паном</example>
      <example>У Києві Шлемкевич працював секретарем</example>
      <example>Ну, будь здоровий, Семене Гурко!</example>
      <example>агент Сергія Шандор Варга</example>
      <example>Син Павла Мартин теж став бурмистром</example>
      <example>після смерті короля Данила Галич почав утрачати свою велич</example>
      <example>...на Донеччину Московського Патріарха Кирила Янукович ходив за ним по п’ятах</example>
      <example>спитав у отця Харитона Казанцев</example>
      <example>у соборі Святого Петра Ющенко</example>

      <!-- Лишаємо для іншого правила -->
      <example>Подружжю Наталі та Сергія Гедзь судилося вписати свої імена...</example>
      <example>виготовлені Людмилою і Мирославом Куць</example>
      <example>Людмили та Юрія Миськів</example>
      <example>Владика Ґудзяк</example>

      <!-- Важко розрізнити на граматичному рівні
          <example>Прибіг до Єремії Тишкевич</example>
          <example>охолодив Арсена Метелиця</example>
          <example>де    колись приймав Андрія Донець</example>
          <example>За нею увійшов Андрій, за Андрієм Рибалко</example>
          <example>У партії з Анандом Пономарьов розіграв</example>
          <example>як підвів Миколу Марчук</example>
          <example>під наглядом Петера Йоханссон став</example>
      -->
    </rule>

    <rulegroup id="PLURAL_LAST_NAME" name="Множина прізвищ">
      <rule>
        <antipattern>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:n:.*">подружжя</token>
          <token postag_regexp="yes" postag="noun:anim:f:v_rod.*:lname.*"/>
          <token regexp="yes">і|й|та</token>
          <token postag_regexp="yes" postag="noun:anim:m:v_rod.*:lname.*"/>
        </antipattern>
        <pattern>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:n:.*">подружжя</token>
          <marker>
            <token postag_regexp="yes" postag="noun:anim:[fm]:v_naz:prop:lname.*">
              <exception postag_regexp="yes" postag="noun:anim:p:v_rod:prop:lname.*"/>
            </token>
          </marker>
        </pattern>
        <message>Після «подружжя» прізвище має стояти в родовому відмінку множини</message>
        <suggestion><match no="2" postag_regexp="yes" postag="(noun:anim:)[fm]:v_...(?::nv)?(:prop:lname.*)" postag_replace="$1p:v_rod(:nv)?$2"/></suggestion>
        <example correction="Обам">Подружжя <marker>Обама</marker>.</example>
        <example correction="Кличків">Подружжя <marker>Кличко</marker>.</example>
        <!-- 
        <example correction="Гіббсів">Подружжя <marker>Гіббс</marker>.</example>
         -->
        <example>Подружжя Бушів.</example>
        <example>Подружжя Роше.</example>
        <example>подружжя Цвігун і Ковальчука</example>
      </rule>
      <rule>
        <antipattern>
          <token inflected="yes" postag_regexp="yes" postag="noun:anim:p:.*">брат</token>
          <token postag_regexp="yes" postag="noun:anim:m:v_naz.*:fname.*"/>
          <token regexp="yes">і|й|та</token>
          <token postag_regexp="yes" postag="noun:anim:m:v_naz.*:fname.*"/>
        </antipattern>
        <pattern>
          <token inflected="yes" postag_regexp="yes" postag="noun:anim:p:.*">брат</token>
          <marker>
            <token postag_regexp="yes" postag="noun:anim:m:v_naz:prop:lname.*">
              <exception postag_regexp="yes" postag="noun:anim:p:v_rod:prop:lname.*"/>
            </token>
          </marker>
        </pattern>
        <message>Після «брати́» прізвище має стояти в множині</message>
        <!-- TODO: figure out how to inflect 2nd token by the 1st inflection
        <suggestion><match no="2" postag_regexp="yes" postag="(noun:anim:)m:v_...(:prop:lname.*)" postag_replace="$1p:v_naz$2"/></suggestion>
         -->
        <example correction="">Брати <marker>Кличко</marker>.</example>
        <example correction="">Брати <marker>Грімм</marker>.</example>
        <example correction="">Брати <marker>Люм'єр</marker>.</example>
        <example correction="">Братів <marker>Кличко</marker>.</example>
        <example correction="">Брати <marker>Єременко</marker>.</example>
        <example>Брати Капранови.</example>
        <example>Брати Меладзе.</example>
        <example>брати Франк і Рональд</example>
      </rule>
    </rulegroup>

    <!-- group: самий, кращий... -->

    <rulegroup id="SAMYI_WITH_ADJ" name="Самий з прикметниками">
      <!-- TODO: якщо робити це правило загальним фальшивих помилок більше ніж правильних позначень,
          тож поки що обмежимося лише двома більш-менш стабільними випадками
      -->
      <antipattern>
        <token regexp="yes">як|що|де|куди|хто</token>
        <token>саме</token>
      </antipattern>
      <antipattern>
        <token inflected="yes">великий</token>
        <token inflected="yes">князь</token>
      </antipattern>
      <antipattern>
        <unify>
          <feature id="gender"/>
          <feature id="case"/>

          <token regexp="yes" inflected="yes">той|такий|цей|отой</token>
          <token inflected="yes">самий</token>
        </unify>
      </antipattern>
      <!-- can't unify over part же so need 1 more antipattern -->
      <antipattern>
        <token regexp="yes" inflected="yes">той|такий|цей|отой</token>
        <token regexp="yes">же?</token>
        <token inflected="yes">самий</token>
      </antipattern>

      <!-- comps -->
      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <token inflected="yes">самий</token>
            <token postag_regexp="yes" postag="adj.*:comps.*">
              <exception regexp="yes">(що|як)най.*</exception>
            </token>
          </unify>
        </pattern>
        <message>Замість «самий» + прикметник найвищого ступеня треба вживати якнай-, щонай-</message>
        <suggestion>як<match no="2"/></suggestion>
        <suggestion>що<match no="2"/></suggestion>
        <suggestion>щояк<match no="2"/></suggestion>
        <example correction="Якнайкращий|Щонайкращий|Щоякнайкращий"><marker>Самий найкращий</marker>.</example>
        <example correction="Якнайгірша|Щонайгірша|Щоякнайгірша"><marker>Сама найгірша</marker>.</example>
        <!-- handled by other rules in this group -->
        <example>самий перший</example>
        <example>повторювати те саме щонайменше нудно</example>
        <example>і, що саме найцікавіше,</example>
        <example>і куди саме найоптимальніше їхати</example>
        <example>вирішують, як саме найкраще заохотити</example>
        <example>Не можу сказати, де саме найкраще сприймали</example>
        <example>— на ту саму найчисельнішу фракцію</example>
        <example>увімкніть радіо на той самий найтихіший рівень гучності</example>
        <example>Йдеться про той самий найдешевший рослинний жир</example>
        <example>до самого великого князя</example>
      </rule>

      <!-- compr -->
      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <token inflected="yes">самий
            </token>
            <token postag_regexp="yes" postag="adj.*?:compc.*">
              <exception postag_regexp="yes" postag="verb.*"></exception>
              <exception case_sensitive="yes" regexp="yes">[А-ЯІЇЄҐ].*</exception>
            </token>
          </unify>
        </pattern>
        <message>Замість «самий» + прикметник треба вживати найвищий ступінь</message>
        <suggestion>най<match no="2"/></suggestion>
        <example correction="Найкращий"><marker>Самий кращий</marker>.</example>
        <example correction="Найгірша"><marker>Сама гірша</marker>.</example>
        <example>Сама прийшла</example>
        <example>Саме кращий</example>
        <example>в ту саму світлу кімнату</example>
        <example>Йдеться про той самий дешевший рослинний жир</example>
        <example>і куди саме оптимальніше їхати</example>
        <example>вирішують, як саме краще заохотити</example>
        <example>Не можу сказати, де саме краще сприймали</example>
        <example>ті ж самі вищі суди вирішать, що та чи інша справа</example>
        <!-- handled by other rules in this group -->
        <example>Самий найкращий</example>
        <example>Самий добрий</example>
      </rule>

      <!-- compb -->
      <rule>
        <antipattern>
          <token inflected="yes">вищий</token>
          <token inflected="yes">навчальний</token>
        </antipattern>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <token>самий
            </token>
            <token postag_regexp="yes" postag="adj.*?:v_(naz|zna).*?:compb.*">
              <exception postag_regexp="yes" postag="verb.*"></exception>
              <exception case_sensitive="yes" regexp="yes">[А-ЯІЇЄҐ].*</exception>
              <exception postag_regexp="yes" postag="noun:anim:p:.*" regexp="yes" inflected="yes">хворий|учений|постраждалий</exception>
            </token>
          </unify>
        </pattern>
        <message>Замість «самий» + прикметник треба вживати найвищий ступінь</message>
        <example correction=""><marker>Самий добрий</marker>.</example>
        <example correction="">Він — <marker>самий сильний</marker>.</example>
        <example correction="">Він — <marker>самий задоволений</marker>.</example>
        <example correction="">це <marker>самий безвідповідальний</marker> документ.</example>
        <example correction="">це <marker>самий креативний</marker> міністр.</example>
        <example>Самий цвіт</example>
        <example>Саме такий</example>
        <example>той самий страшний сон</example>
        <example>лише самих економічних санкцій</example>
        <example>і куди саме добре поїхати</example>
        <example>вирішують, як саме  заохотити</example>
        <example>де саме смачно поїсти</example>
        <example>та й самі хворі</example>
        <example>активність самих учених, які</example>
        <example>у скільки обійдеться цей самий гарантований контроль</example>
        <example>докласти такий же самий хороший підзаконний акт</example>
        <example>самим вищим навчальним закладом</example>
        <!-- handled by other rules in this group -->
        <example>Самий найкращий</example>
        <example>Самий кращий</example>
      </rule>

      <!-- саме краще, що в нас є -->
      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <marker>
              <token inflected="yes">самий
              </token>
              <token postag_regexp="yes" postag="adj.*?:comp[bc].*">
                <exception postag_regexp="yes" postag="verb.*"></exception>
                <exception>дуже</exception>
                <exception case_sensitive="yes" regexp="yes">[А-ЯІЇЄҐ].*</exception>
                <exception postag_regexp="yes" postag="noun:anim:p:.*" regexp="yes" inflected="yes">хворий|учений|постраждалий</exception>
              </token>
            </marker>
          </unify>
          <token>,</token>
          <token regexp="yes" inflected="yes">що|який</token>
        </pattern>
        <message>Замість «самий» + прикметник треба вживати найвищий ступінь</message>
        <example correction=""><marker>Саме краще</marker>, що в нас є.</example>
        <example correction=""><marker>Сама краща</marker>, яка в нас є.</example>
        <example>суцільнозерновий хліб, посипаний насінням, такий самий малий.</example>
        <example>і самий цвіт, що знайти його важко</example>
        <example>Той самий учений, що описав</example>
        <example>і самих хворих, які нібито не дотримувалися</example>
        <example>ті ж самі вищі суди вирішать, що та чи інша справа</example>
      </rule>

      <!-- саме краще — дітям -->
      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <marker>
              <token inflected="yes">самий
<!--
                <exception scope="previous" regexp="yes" inflected="yes">який|лише</exception>
-->
              </token>
              <token postag_regexp="yes" postag="adj.*?:comp[bc].*">
                <exception postag_regexp="yes" postag="verb.*"></exception>
                <exception regexp="yes">дуже|рада</exception>
              </token>
            </marker>
          </unify>
          <token regexp="yes">&punct_dash;</token>
        </pattern>
        <message>Замість «самий» + прикметник треба вживати найвищий ступінь</message>
        <example correction=""><marker>Саме краще</marker> — ливарний цех.</example>
        <example>Самий цвіт —</example>
        <example>Сама прийшла — сама пішла</example>
        <example>Саме такий — зелений.</example>
        <example>Саме вони — партизани, були початком.</example>
        <example>голова ради обирається на п'ять років, а сама рада — на чотири</example>
      </rule>

      <!-- самий перший -->
      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <token inflected="yes">самий
            </token>
            <token inflected="yes" regexp="yes">перший|найперший
              <exception case_sensitive="yes" regexp="yes">[А-ЯІЇЄҐ].*</exception>
            </token>
          </unify>
        </pattern>
        <message>Замість «самий перший» треба вживати найвищий ступінь: <suggestion>найперший</suggestion></message>
        <example correction="Найперший"><marker>Самий перший</marker>.</example>
        <example>самі першими втікали</example>
        <example>Та сама Перша кінна армія</example>
        <example>На самому Першому Національному пояснили</example>
      </rule>
    </rulegroup>

    <rulegroup id="kraschiy_vs_naikraschiy_with_ne" name="Кращий і найкращий (З не)">
      <antipattern>
        <token inflected="yes">кращий</token>
        <token min="0">,</token>
        <token regexp="yes">за|від|ніж|аніж|як|од</token>
      </antipattern>

      <rule>
        <antipattern>
          <token>чи</token>
          <token>не</token>
          <token>краще</token>
        </antipattern>
        <pattern>
          <token regexp="yes">далеко|чи</token>
          <token>не</token>
          <marker>
            <token inflected="yes">кращий</token>
          </marker>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">Кіно — чи не <marker>кращий</marker> інструмент</example>
        <example correction="найкращий">... була далеко не <marker>кращим</marker> способом...</example>
        <example>був не кращий, ніж сталінський</example>
        <example>Гітлерівський режим нічим не кращий сталінського</example>
        <example>Він — не кращий і не гірший</example>
        <example>на мою думку, далеко не кращий за них.</example>
        <example>І чи не краще було б зробити інакше.</example>
        <example>Виявився чи не кращим, ніж цього року.</example>
      </rule>

      <rule>
        <antipattern>
          <token>кращий</token>
          <token>і</token>
          <token>не</token>
          <token>гірший</token>
        </antipattern>
        <pattern>
          <token regexp="yes">&punct_dash;|це|зараз</token>
          <token>не</token>
          <marker>
            <token>кращий</token>
          </marker>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">блокування — не <marker>кращий</marker> варіант</example>
        <example correction="найкращий">Зараз не <marker>кращий</marker> період для прийняття важливих рішень.</example>
        <example>Він — не кращий і не гірший</example>
        <!-- TODO:
        <example>— Та й у мене — не кращий, — зітхнула Явдоха.</example>
        <example> емоції, як відомо, не кращий порадник</example>
        -->
      </rule>

      <rule>
        <antipattern>
          <token inflected="yes">кращий</token>
          <token>і</token>
          <token>не</token>
          <token inflected="yes">гірший</token>
        </antipattern>
        <pattern>
          <token>був</token>
          <token>не</token>
          <marker>
            <token inflected="yes">кращий</token>
          </marker>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">Це був не <marker>кращий</marker> матч Роналдо</example>
        <example>був не кращий, ніж сталінський</example>
        <example>був не кращим і не гіршим</example>
      </rule>

      <rule>
        <pattern>
          <token>не</token>
          <marker>
            <token inflected="yes">кращий</token>
          </marker>
          <token inflected="yes" regexp="yes">час|період|вихід|спосіб|бік</token>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">Зараз не <marker>кращий</marker> час починати справу.</example>
      </rule>
    </rulegroup>

    <rulegroup id="kraschiy_vs_naikraschiy_without_ne" name="Кращий і найкращий (без не)">
      <antipattern>
        <token>не</token>
        <token inflected="yes">кращий</token>
      </antipattern>
      <antipattern>
        <token>кращий</token>
        <token max="3"/>
        <token postag_regexp="yes" postag="adj:.:v_naz:compc.*"/>
      </antipattern>
      <antipattern>
        <token regexp="yes">значно|набагато|суттєво|трохи|куди|дещо|якомога|чим|тим|ще</token>
        <!--
        <token postag_regexp="yes" postag="adv(:.*|$)">
          <exception postag_regexp="yes" postag="conj.*"/>
          <exception postag_regexp="yes" postag=".*?:dem.*"/>
          <exception regexp="yes">натомість|взагалі</exception>
        </token>
        -->
        <token>кращий</token>
      </antipattern>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token regexp="yes">з|із|поміж|серед</token>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий"><marker>кращий</marker> з людей</example>
        <example correction="найкращий"><marker>кращий</marker> із світів</example>
        <example correction="найкращий"><marker>кращий</marker> із кращих</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">серед|поміж|з|із</token>
          <token postag_regexp="yes" postag="noun:.*?:v_rod(?!.*?pron).*"/>
          <marker>
            <token>кращий</token>
          </marker>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">серед жінок <marker>кращий</marker> результат</example>
        <example>який із них кращий, який дешевший</example>
        <example>який із них кращий і дешевший</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">за|як</token>
          <marker>
            <token>кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj.*?:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:.*?:v_naz.*"/>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">за <marker>кращий</marker> короткий сценарій</example>
        <example correction="найкращий">як <marker>кращий</marker> виконавець</example>
        <example>розраховувати на кращий результат</example>
        <example>за кращий город, за багатше князівство</example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">конкурс|звання|змагання|тендер|претендувати</token>
          <token regexp="yes" min="0">[:—–-]</token>
          <token>на</token>
          <marker>
            <token>кращий</token>
          </marker>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">конкурс на <marker>кращий</marker> фільм</example>
        <example correction="найкращий">організовує конкурси: на <marker>кращий</marker> твір про гімназію</example>
      </rule>

      <rule>
        <pattern>
          <token postag_regexp="yes" postag="noun:.*?:v_naz.*"/>
          <token regexp="yes">&punct_dash;</token>
          <marker>
            <token>кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj:.:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:.*?:v_naz.*"/>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">Сергій Стаховський — <marker>кращий</marker> тенісист</example>
        <example correction="найкращий">книжка - <marker>кращий</marker> подарунок</example>
        <example correction="найкращий">собака - <marker>кращий</marker> друг людини</example>
        <example>якийсь інший світ – кращий світ, вільніший</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий
              <exception scope="previous" regexp="yes">&punct_quote_left;</exception>
            </token>
          </marker>
          <token postag_regexp="yes" postag="adj:m:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:anim:m:v_naz.*"/>
          <token postag_regexp="yes" postag="adj:.:v_rod.*" min="0"/>
          <token postag_regexp="yes" postag="noun:.*?:v_rod.*"/>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">там <marker>кращий</marker> поет революції</example>
        <example correction="найкращий">спочатку <marker>кращий</marker> голеадор чемпіонату</example>
        <example correction="найкращий"><marker>кращий</marker> гравець цього матчу</example>
        <example>значно кращий гравець команди</example>
        <example>куди кращий гравець команди</example>
        <example>кращий стан здоров'я</example>
        <example>розвернути в кращий бік життя</example>
        <example>забезпечити для себе кращий розподіл ресурсів</example>
        <example>швидший і кращий розвиток економіки</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">&punct_quote_left;</token>
          <marker>
            <token spacebefore="no">кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj:m:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:.*?:m:v_naz.*"/>
          <token postag_regexp="yes" postag="noun:.*?:v_rod.*"/>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">«<marker>кращий</marker> оперний спектакль року»</example>
        <example correction="найкращий">«<marker>кращий</marker> господар року»</example>
        <example>кращий стан здоров'я</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj:m:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:inanim:m:v_naz.*"/>
          <or>
            <token postag_regexp="yes" postag="noun:inanim:.:v_rod.*" regexp="yes">світу|міста|країни|планети|області|сезону|турніру|матчу|року|місяця|сторіччя|століття</token>
            <token postag_regexp="yes" postag="noun:inanim:.:v_rod.*?geo.*"/>
          </or>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий"><marker>кращий</marker> час сезону</example>
        <example correction="найкращий"><marker>кращий</marker> документальний фільм року</example>
        <example correction="найкращий"><marker>кращий</marker> фестиваль Європи</example>
        <!-- TODO:
        <example correction="найкращий"><marker>кращий</marker> фільм країн</example>
        -->
        <example>розвернути в кращий бік життя</example>
        <example>забезпечити для себе кращий розподіл ресурсів</example>
        <example>швидший і кращий розвиток економіки</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj:.:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:anim:.:v_naz.*"/>
          <token regexp="yes">у|в|на</token>
          <or>
            <token postag_regexp="yes" postag="noun:inanim:.:v_mis.*" regexp="yes">світі|місті|країні|планеті|області|сезоні|турнірі|матчі|році|сторіччі|столітті|сфері</token>
            <token postag_regexp="yes" postag="noun:inanim:.:v_mis.*?geo.*"/>
          </or>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий"><marker>кращий</marker> захисник в Україні</example>
        <example>розвернути в кращий бік на сході</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj:.:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:inanim:.:v_naz.*"/>
          <token regexp="yes">у|в|на</token>
          <token postag_regexp="yes" postag="noun:inanim:.:v_mis.*" regexp="yes">світі|місті|країні|планеті|області|сезоні|турнірі|матчі|році|місяці|сторіччі|столітті|сфері|історії</token>
          <!--
          <or>
            <token postag_regexp="yes" postag="noun:inanim:.:v_mis.*" regexp="yes">світі|місті|країні|планеті|області|сезоні|турнірі|матчі|році|сторіччі|столітті|сфері</token>
            <token postag_regexp="yes" postag="noun:inanim:.:v_mis.*?geo.*"/>
          </or>
          -->
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <!-- TODO:
        <example correction="найкращий"><marker>кращий</marker> турнір у Європі</example>
        -->
        <example correction="найкращий"><marker>кращий</marker> матч у сезоні</example>
        <example correction="найкращий"><marker>кращий</marker> проект у сфері</example>
        <example correction="найкращий"><marker>кращий</marker> кооператив у області</example>
        <!--
        <example correction="найкращий">це все одно був <marker>кращий</marker> виступ в порівнянні з усіма іншими</example>
        -->
        <example>має куди кращий ресурс на всіх рівнях</example>
        <example>розвернути в кращий бік на сході</example>
        <example>жодних змін у кращий бік у ставленні</example>
        <example>поширюючи кращий досвід у межах двосторонньої</example>
        <example>але кращий результат у відсотках</example>
        <example>Важко уявити собі кращий момент у житті</example>
        <example>Попри кращий розвиток в Україні чоловічого баскетболу</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token regexp="yes">кращ(ий|і)</token>
          </marker>
          <token postag_regexp="yes" postag="adj:[mp]:v_naz.*" min="0"/>
          <token regexp="yes" inflected="yes" postag_regexp="yes" postag="noun.*:[mp]:v_naz.*">друг|бомбардир|спортсмен|бестселер|представник|винахід|учень</token>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">наш <marker>кращий</marker> друг людини - собака</example>
        <example correction="найкращий">натомість <marker>кращий</marker> бомбардир чемпіонату</example>
        <example correction="найкращий">і <marker>кращий</marker> український бомбардир</example>
        <example correction="найкращий">і <marker>кращі</marker> учні</example>
        <!-- TODO: exception that maybe not worth complicating the rules
        <example> щедріший, гостинніший і взагалі кращий друг</example>
        -->
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token>світовий</token>
          <token>досвід</token>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">спираючись на <marker>кращий</marker> світовий досвід</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">свій|мій|наш|твій</token>
          <marker>
            <token>кращий</token>
          </marker>
          <token postag_regexp="yes" postag="adj.*?:v_naz.*" min="0"/>
          <token postag_regexp="yes" postag="noun:.*?:v_naz.*"/>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">наш <marker>кращий</marker> друг людини - собака</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token>захист</token>
          <token regexp="yes">&punct_dash;</token>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий"><marker>кращий</marker> захист - це напад</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>кращий</token>
          </marker>
          <token>тому</token>
          <token postag_regexp="yes" postag="noun:.*?:v_naz.*"/>
        </pattern>
        <message>Коли мається на увазі найвищий ступінь порівняння, слід вживати <suggestion>найкращий</suggestion></message>
        <example correction="найкращий">це — <marker>кращий</marker> тому доказ</example>
      </rule>

    </rulegroup>

    <rulegroup id="BIL_MASC" name="Біль - ч.р.">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="adj:f:.*">
            <exception postag_regexp="yes" postag="adj:m:.*"/>
            <exception postag_regexp="yes" postag="(part|conj).*"/>
            <exception regexp="yes" inflected="yes">мережаний|невинний|тонкий|сам</exception>
          </token>
          <token inflected="yes" postag_regexp="yes" postag="noun:inanim:f:.*">біль
            <exception>білі</exception>
            <exception case_sensitive="yes">Біль</exception>
          </token>
        </pattern>
        <message>Іменник біль - чоловічого роду</message>
        <suggestion><match no="1" postag_regexp="yes" postag="(adj):f:(v_...)(.*)" postag_replace="$1:m:$2(:rinanim)?$3"/> <match no="2" postag_regexp="yes" postag="(noun:inanim):f:(.*):xp2" postag_replace="$1:m:$2:xp1"/></suggestion>
        <example correction="сильний біль"><marker>сильна біль</marker></example>
        <example correction="сильний біль"><marker>сильну біль</marker></example>
        <example>Стояла біла, як біль, так перелякалася.</example>
        <example>Лице біллю білували.</example>
        <example>увесь їхній біль</example>
        <example>пошибає душу мою болем</example>
        <example>Помітивши гіркоту на стиснутих вустах Арсена та біль у його почервонілих очах</example>
        <example>можу сама біль втамувати</example>
        <example>Христина Біль</example>
      </rule>
     <!-- забагато фальшивих:
      * як могла, терпіла біль
      *  заробила головний біль і витратила
      * якщо біль спровокувала банальна    перевтома
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="verb.*:f(:.*|$)"/>
          <token>біль</token>
        </pattern>
        <message>Іменник біль - чоловічого роду</message>
        <suggestion><match no="1" postag_regexp="yes" postag="(verb.*):f(.*)" postag_replace="$1:m$2"/> <match no="2" postag_regexp="yes" postag="(noun:inanim):f:(.*)" postag_replace="$1:m:$2"/></suggestion>
        <example correction="почавсь біль|почався біль"><marker>почалася біль</marker></example>
        <example>собі завдала болю</example>
      </rule>
      <rule>
        <pattern>
          <token>біль</token>
          <token postag_regexp="yes" postag="(part|adv).*" min="0"/>
          <token postag_regexp="yes" postag="verb.*:f(:.*|$)"/>
        </pattern>
        <message>Іменник біль - чоловічого роду</message>
        <suggestion><match no="1" postag_regexp="yes" postag="(noun:inanim):f:(.*)" postag_replace="$1:m:$2"/> <match no="2"/> <match no="3" postag_regexp="yes" postag="(verb.*):f(.*)" postag_replace="$1:m$2"/></suggestion>
        <example correction="біль почавсь|біль почався"><marker>біль почалася</marker> раптово</example>
        <example correction="біль не проходив"><marker>біль не проходила</marker></example>
      </rule>
     -->
    </rulegroup>

    <!-- group: кличний -->

    <rule id="pryvit_z_klychnym" name="привіт з кличним">
      <pattern>
        <token>привіт</token>
        <token min="0">,</token>
        <token postag_regexp="yes" postag="noun:anim:.:v_naz:prop:fname.*">
          <exception postag_regexp="yes" postag="noun:anim:.:v_kly:prop:fname.*"></exception>
        </token>
      </pattern>
      <message>При звертанні треба вживати кличний відмінок</message>
      <suggestion>\1, <match no="3" postag_regexp="yes" postag="(noun:anim:.:)v_naz(:prop:fname.*)" postag_replace="$1v_kly$2"/></suggestion>
      <example correction="Привіт, Василю"><marker>Привіт Василь</marker>!</example>
    </rule>

    <rulegroup id="KLYCHNYI_AND_IMPERATIVE" name="Кличний та наказова форма" default="on">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="noun.*:v_kly.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="noun.*:v_kly.*"/>
          </token>
          <token postag_regexp="yes" postag="part.*" min="0"/>
          <token postag_regexp="yes" postag="verb.*:impr.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="verb.*impr.*|SENT_END|PARA_END"/>
          </token>
        </pattern>
        <message>Можливо, пропущена кома після кличного?</message>
        <suggestion><match no="1"/>, <match no="2"/> <match no="3"/></suggestion>
        <example correction="Олено, поклич"><marker>Олено поклич</marker> тата.</example>
        <example correction="Олено, не розлий"><marker>Олено не розлий</marker> молоко.</example>
      </rule>

<!-- забагато фальшивих спрацьовувань, напр.
    * Отоді, куме, заживем,
    * 
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="noun.*:v_kly.*">
            <exception negate_pos="yes" postag_regexp="yes" postag="noun.*:v_kly.*"/>
            <exception postag_regexp="yes" postag="(part|conj|prep).*"/>
          </token>
          <token>,</token>
          <token postag_regexp="yes" postag="verb.*:futr:p:1.*">
            <exception postag_regexp="yes" postag="verb.*impr.*"/>
          </token>
        </pattern>
        <message>Можливо, дієслово має стояти у наказовій формі?</message>
        <suggestion><match no="1"/>, <match no="3" postag_regexp="yes" postag="verb.*impr:p:1.*"/></suggestion>
        <!-
        <example correction="Олено, підім|Олено, підімо"><marker>Олено, пішли</marker> додому.</example>
        ->
        <example correction="Ірмо, повернімось|Ірмо, повернімося|Ірмо, повернімся">Пані <marker>Ірмо, повернемося</marker> до театру.</example>
        <example>Яким, вибачте, фанатичним бажанням</example>
      </rule>
-->
      <rule>
        <pattern>
<!--
          <or>
            <token postag="SENT_START"/>
            <token regexp="yes">[!?:;,…"«“„\(\)\[\]/–—-]</token>
          </or>
-->
          <token postag="SENT_START"/>
          <marker>
            <token postag_regexp="yes" postag="noun:anim(:.:v_naz|:f:v_zna|:m:v_dav).*">
              <exception postag_regexp="yes" postag="noun:anim:.*:v_kly.*"/>
              <exception postag_regexp="yes" postag="noun.*(lname).*|.*pron.*|(intj|part).*"/>
              <exception regexp="yes">.*-.*|типу|чорт</exception>
              <!--
              <exception>ласка</exception>
              <exception regexp="yes">честь|милість|високість</exception>
              -->
            </token>
            <token>,</token>
            <token postag_regexp="yes" postag="verb.*:impr(:s:2|:p:1).*">
              <exception negate_pos="yes" postag_regexp="yes" postag="verb.*impr.*|SENT_END|PARA_END"/>
              <exception postag_regexp="yes" postag="verb.*insert.*"/>
              <!--TODO: якщо знай, бач.., не виділені комою, вони не отримують тегу insert після зняття омонімії -->
              <exception case_sensitive="yes" regexp="yes">.*\.|[А-ЯІЇЄҐ].*|знай|бач|бачте|скажімо|дякуй|дякуйте</exception>
            </token>
          </marker>
        </pattern>
        <message>Можливо, іменник має бути у кличному відмінку?</message>
        <suggestion><match no="2" postag_regexp="yes" postag="(noun:anim:.:)(v_naz|v_zna|v_dav)(.*)" postag_replace="$1v_kly$3"/>, <match no="4"/></suggestion>
        <example correction="Олено, ходім"><marker>Олена, ходім</marker> додому.</example>
        <example correction="Христе, ходім"><marker>Христю, ходім</marker> додому.</example>
        <example correction="Відьмаче, ходім"><marker>Відьмаку, ходім</marker> додому.</example>
        <!--
        <example correction="Насте, ходім"><marker>Настю ходім</marker> додому.</example>
        -->
        <example>Настю відправ додому</example>
        <example>хлопці, ходім</example>
        <example>Олі та Віті, ходім</example>
        <example>... (Conservative Party) конституція, див. Хартія свободи...</example>
        <example>будь ласка, скажіть мені</example>
        <example>Ваша честь, дивіться.</example>
        <example>та я феміністка, відчепіться</example>
        <example>Я, повірте, навіть не знав</example>
        <!-- dynamic tagger does not work on v_kly yet -->
        <example>Екс-вкладники, готуйтеся до нових черг!</example>
        <example>Гей, збирайтеся, панове молодці</example>
        <example>Христя, знай, озиралася з повозки</example>
        <example>Яким, вибачте, фанатичним бажанням</example>
        <example>Іпатій Потій (1541–1613) — ...</example>
        <example>Дівчина знай опускала туди</example>
        <example>Чорт забирай!</example>
        <example>Бобові перетріть крізь сито</example>
        <example>Рибу з'їж сам</example>
        <example>Настю відправ додому</example>
      </rule>
    </rulegroup>

    <!-- group: сполучуваність -->
  
    <rulegroup id="SEKTOR_GAZA" name="Сектор Газа">
      <rule>
        <pattern>
          <token>сектор</token>
          <token case_sensitive="yes">Газа</token>
        </pattern>
        <message>Правильно: <suggestion>Сектор Гази</suggestion></message>
        <example correction="Сектор Гази">Приїхав в <marker>Сектор Газа</marker> в лютому.</example>
        <example correction="Сектор Гази">Приїхав в <marker>сектор Газа</marker> в лютому.</example>
      </rule>
      <rule>
        <pattern case_sensitive="yes">
          <token>сектор</token>
          <token>Гази</token>
        </pattern>
        <message>Правильно: <suggestion>Сектор Гази</suggestion></message>
        <example correction="Сектор Гази">Приїхав в <marker>сектор Гази</marker> в лютому.</example>
      </rule>
    </rulegroup>

    <!-- group: неправильно вжите слово -->

    <rule id="pozhezhni" name="Пожежні">
      <antipattern>
        <unify>
          <feature id="gender"/>
          <feature id="case"/>
          <token inflected="yes" postag_regexp="yes" postag="adj:p:.*">пожежний</token>
          <token postag_regexp="yes" postag="noun:inanim:p:.*"/>
        </unify>
      </antipattern>
      <pattern>
        <marker>
          <token inflected="yes" postag_regexp="yes" postag="adj:p:.*">пожежний</token>
        </marker>
      </pattern>
      <message>У значенні іменника правильно вживати <suggestion>пожежники</suggestion></message>
      <example correction="пожежники">приїхали <marker>пожежні</marker>.</example>
      <example>пожежні вежі</example>
      <example>пожежних випадків</example>
      <!-- 
      <example>пожежних інспекторів</example>
       -->
    </rule>
 
    <rulegroup id="stypin_vs_stepin" name="Ступінь і степінь">
      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">науковий|вчений</token>
          <marker>
            <token>степінь</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>ступінь</suggestion></message>
        <example correction="ступінь">Науковий <marker>степінь</marker></example>
        <example>Піднесення до степеня</example>
        <example>Науковий ступінь</example>
      </rule>
    </rulegroup>

    <rule id="vchenyi_stupin" name="Вчений ступінь">
      <pattern>
        <marker>
          <token inflected='yes' regexp='yes'>[ву]чений</token>
        </marker>
        <token inflected='yes' regexp="yes">ступінь|степінь</token>
      </pattern>
      <message>Правильно: <suggestion>науковий</suggestion></message>
      <example correction="науковий"><marker>вчений</marker> ступінь</example>
    </rule>

    <rulegroup id="graty_vs_hraty" name="Грати/ґрати">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="prep.*">
            <exception postag_regexp="yes" postag="adv.*"/>
            <exception>проти</exception>
          </token>
          <marker>
            <token inflected="yes" postag_regexp="yes" postag="noun:inanim.*">грати</token>
          </marker>
        </pattern>
        <message>Можливо, замість дієслова «грати» тут має бути іменник «ґрати»?</message>
        <suggestion><match no="2" regexp_match="(?iu)г([а-яіїєґ]+)" regexp_replace="ґ$1"/></suggestion>
        <example correction="ґрати">кинути за <marker>грати</marker>.</example>
        <example correction="ґратами">сидіти за <marker>гратами</marker>.</example>
        <example>щоб просто грати</example>
        <example>щоб добре грати</example>
      </rule>

      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>

            <token regexp="yes" inflected="yes">тюремний|залізний|дерев'яний|холодний|захисний|міцний|кований</token>
            <marker>
              <token inflected="yes" postag_regexp="yes" postag="noun:inanim.*">грати</token>
            </marker>
          </unify>
        </pattern>
        <message>Можливо, замість дієслова «грати» тут має бути іменник «ґрати»?</message>
        <suggestion><match no="2" regexp_match="(?iu)г([а-яіїєґ]+)" regexp_replace="ґ$1"/></suggestion>
        <example correction="ґратами">за залізними <marker>гратами</marker>.</example>
        <example>на такому рівні грати</example>
      </rule>
    </rulegroup>

    <rule id="postupok_vchynok" name="Поступок і вчинок">
      <pattern>
        <token regexp="yes" inflected="yes" postag_regexp="yes" postag="adj:[mp]:.*">(не)?хороший|поганий|героїчний</token>
        <marker>
          <token regexp="yes">поступ(ок|ка|ку|ком|ки|ків|кам|ками|ках)</token>
        </marker>
      </pattern>
      <message>Правильно: <suggestion>вчинок</suggestion>.</message>
      <example correction="вчинок">поганий <marker>поступок</marker>.</example>
    </rule>

    <rulegroup id="doklad_vs_dopovid" name="Доклад і доповідь">
      <rule>
        <pattern>
          <token inflected="yes">доклад
            <exception postag_regexp="yes" postag="verb.*"/>
          </token>
        </pattern>
        <message>Правильно: (коли йдеться про реферат чи виступ) <suggestion>доповідь</suggestion></message>
        <example correction="доповідь">Вона виступила з <marker>докладом</marker> на конференції.</example>
        <example>решту доклади своїми</example>
        <!-- TODO:
        <example correction="доповідь">про це свідчать доклади різних міжнародних правозахисних організацій</example>
         -->
      </rule>

      <rule>
        <pattern>
          <token postag_regexp="yes" postag="prep.*"/>
          <marker>
            <token inflected="yes">доклад</token>
          </marker>
        </pattern>
        <message>Правильно: (коли йдеться про реферат чи виступ) <suggestion>доповідь</suggestion></message>
        <example correction="доповідь">Ілюстрація до <marker>докладу</marker> на конференції.</example>
        <example>решту доклади своїми</example>
      </rule>
    </rulegroup>

    <rule id="nezalezhno_vin" name="Незалежно він">
      <pattern>
        <token regexp="yes">(не)?залежно</token>
        <marker>
          <token>він</token>
        </marker>
      </pattern>
      <message>Можливо: <suggestion>від</suggestion>?</message>
      <example correction="від">і залежно <marker>він</marker> результату</example>
    </rule>

    <rulegroup id="pamiatnyk_chogo" name="Пам'ятник чого і чому">
      <rule>
        <pattern>
          <token inflected="yes">пам'ятник</token>
          <marker>
            <token postag_regexp="yes" postag="noun:anim:.:v_rod.*prop:lname.*">
              <exception postag_regexp="yes" postag="noun:anim:.:v_dav.*prop:lname.*"/>
            </token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion><match no="2" postag_regexp="yes" postag="(noun:anim:.:)v_rod(.*prop:lname.*)" postag_replace="$1v_dav$2"/></suggestion></message>
        <example correction="Франкові|Франку">Пам'ятник <marker>Франка</marker></example>
        <example>пам'ятник Роналду</example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes">пам'ятник</token>
          <marker>
            <token postag_regexp="yes" postag="noun:anim:.:v_rod.*prop:fname.*">
              <exception postag_regexp="yes" postag="noun:anim:.:v_dav.*prop:fname.*"/>
            </token>
            <token postag_regexp="yes" postag="noun:anim:.:v_rod.*prop:lname.*">
              <exception postag_regexp="yes" postag="noun:anim:.:v_dav.*prop:lname.*"/>
            </token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion><match no="2" postag_regexp="yes" postag="(noun:anim:.:)v_rod(.*prop:fname.*)" postag_replace="$1v_dav$2"/> <match no="3" postag_regexp="yes" postag="(noun:anim:.:)v_rod(.*prop:lname.*)" postag_replace="$1v_dav$2"/></suggestion></message>
        <example correction="Іванові Франкові|Іванові Франку|Івану Франкові|Івану Франку">Пам'ятник <marker>Івана Франка</marker></example>
        <example>пам'ятник Кріштіану Роналду</example>
      </rule>
    </rulegroup>

    <rule id="NEDILYA_VS_TYZHDEN" name="Неділя і тиждень">
      <pattern>
        <!-- TODO:
            <token postag_regexp="yes" postag="num.*">
            <exception inflected="yes">один</exception></token>
        -->
        <token regexp="yes">дві|три|чотири|п'ять|шість|сім|вісім|дев'ять|десять</token>
        <marker>
          <token inflected="yes">неділя</token>
        </marker>
      </pattern>
      <message>Правильно: <suggestion>тижні</suggestion></message>
      <example correction="тижні">Це зайняло нам дві <marker>неділі</marker></example>
      <example>Це зайняло нам два тижні.</example>
      <example>провів одну неділю без внучки</example>
    </rule>

    <rule id="KORYSNA_META" name="Корисна мета">
      <pattern>
        <marker>
          <token inflected="yes">корисний</token>
        </marker>
        <token inflected="yes" regexp="yes">мета|міркування|мотив|інтерес|ціль</token>
      </pattern>
      <message>Правильно: <suggestion><match no="1" postag_regexp="yes" postag="(adj.*):comp." postag_replace="$1">корисливий</match></suggestion></message>
      <example correction="корисливою">використати ділянку з якоюсь <marker>корисною</marker> метою</example>
    </rule>

    <rulegroup id="VIROGIDNIST_VS_YMOVIRNIST" name="Вірогідність і ймовірність">
      <rule>
        <pattern>
          <or>
            <token inflected="yes" regexp="yes">(не)?великий|(не)?високий|малий|низький|(най)?більший|(най)?вищий|(най)?менший|(най)?нижчий|гарантований</token>
            <token inflected="yes" regexp="yes">збільшувати|збільшити|підвищувати|підвищити</token>
          </or>
          <marker>
            <token inflected="yes">вірогідність</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>ймовірність</suggestion></message>
        <example correction="ймовірність">Є висока <marker>вірогідність</marker> дощу.</example>
        <example>Є висока ймовірність дощу.</example>
      </rule>

      <rule>
        <pattern>
          <token>з</token>
          <marker>
            <token>вірогідністю</token>
          </marker>
          <token postag_regexp="yes" postag="num.*"/>
        </pattern>
        <message>Правильно: <suggestion>ймовірністю</suggestion></message>
        <example correction="ймовірністю">З <marker>вірогідністю</marker> 90%.</example>
        <example>Грається з вірогідністю.</example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes" regexp="yes">(най)?вірогідніший</token>
        </pattern>
        <message>Правильно: <suggestion>(най)імовірніший</suggestion></message>
        <example correction="(най)імовірніший">Це сценарій <marker>вірогіднішій</marker>.</example>
      </rule>

      <rule>
        <pattern>
          <token>найбільш</token>
          <marker>
            <token>вірогідно</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>ймовірно</suggestion></message>
        <example correction="ймовірно">Це найбільш <marker>вірогідно</marker>.</example>
      </rule>
    </rulegroup>

    <rulegroup id="hiena_heena" name="Гієна та геєна">
      <rule>
        <pattern>
          <token regexp="yes" inflected="yes">в?огненний|в?огняний|вічний|лютий|в|у</token>
          <marker>
            <token inflected="yes">гієна</token>
          </marker>
        </pattern>
        <message>Можливо: <suggestion>геєна</suggestion>?</message>
        <example correction="геєна">в люту <marker>гієну</marker>.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token inflected="yes">гієна</token>
          </marker>
          <token regexp="yes" inflected="yes">в?огненний|в?огняний|вічний|лютий</token>
        </pattern>
        <message>Можливо: <suggestion>геєна</suggestion>?</message>
        <example correction="геєна">в <marker>гієну</marker> люту.</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes" inflected="yes">смердючий|голодний|дикий|підступний|виття|зграя|сміх|сміятися</token>
          <marker>
            <token inflected="yes">геєна</token>
          </marker>
        </pattern>
        <message>Можливо: <suggestion>гієна</suggestion>?</message>
        <example correction="гієна">сміх <marker>геєни</marker>.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token inflected="yes">геєна</token>
          </marker>
          <token regexp="yes" inflected="yes">смердючий|голодний|дикий|підступний|сміятися|вити</token>
        </pattern>
        <message>Можливо: <suggestion>гієна</suggestion>?</message>
        <example correction="гієна"><marker>геєна</marker> сміється.</example>
      </rule>

    </rulegroup>

    <rule id="vybraty_predstavnyka" name="Вибрати і обрати">
      <pattern>
        <marker>
          <token inflected="yes" regexp="yes">виби?рати|вибираючи|виби?равши</token>
        </marker>
        <unify>
          <feature id="gender"/>
          <feature id="case"/>
          <token postag_regexp="yes" postag="adj:.:v_zna:ranim.*" min="0"/>
          <token inflected="yes" regexp="yes" postag_regexp="yes" postag="noun:.*v_zna.*">представник|президент|депутат</token>
        </unify>
      </pattern>
      <message>Правильно: <suggestion>обрати</suggestion>.</message>
      <suggestion>обирати</suggestion>
      <example correction="обрати|обирати"><marker>вибирали</marker> представників.</example>
    </rule>

      <!--
    <rulegroup id="TON_VS_TONN" name="Тон/тонн" default="off">
          <rule>
          <pattern>
          <token postag_regexp="yes" postag="num.*"/>
          <marker>
          <token>тон</token>
          </marker>
          </pattern>
          <message>Правильно: <suggestion>тонн</suggestion></message>
          <example correction="тонн">1600 <marker>тон</marker></example>
          <example correction="тонн">п'ять <marker>тон</marker></example>
          </rule>
      <rule>
        <pattern>
          -
              <token regexp="yes" inflected="yes">п'ять|шість|сім|вісім|дев'ять|нуль|десять|двадцять|тридцять|сорок|.*десят|дев'яносто|сто|двісті|триста|чотириста|п'ятсот|шістсот|сімсот|вісімсот|сотня|тисяча|мільйон|мільярд|тис.|млн|млрд|([0-9-]*[05-9]|[0-9-]+11)
          -
          <or>
            <token regexp="yes" inflected="yes">тис\.|млн|млрд</token>
            <token postag_regexp="yes" postag=".*num.*">
              <exception postag_regexp="yes" postag=".*:v_oru.*"/>
              <exception scope="previous" regexp="yes">[:./№«]</exception>
              <exception regexp="yes">(1[0-9]{3}|20[0-2][0-9])</exception>
              <exception regexp="yes">один|перший</exception>
            </token>
          </or>
          <marker>
            <token regexp="yes">(нано|мікро|мілі|дека|кіло|мега|гіга|тера|пета)?тон</token>
          </marker>
        </pattern>
        <message>Ви мали на увазі: <suggestion><match no="2"/>н</suggestion>?</message>
        <example correction="кілотонн">10 <marker>кілотон</marker></example>
        <example correction="тонн">10 <marker>тон</marker></example>
        <example correction="тонн">п'ять <marker>тон</marker></example>
        <example correction="тонн">72-78 <marker>тон</marker></example>
        <example correction="тонн">кілька <marker>тон</marker></example>
        <example>лише один тон</example>
        <example>10 тонн</example>
        <example>10 тонів</example>
      </rule>
    </rulegroup>
      -->

    <rule id="VYSHIDNYI_VYHIDNYI" name="Висхідний і вихідний">
      <pattern>
        <marker>
          <token inflected="yes">висхідний</token>
        </marker>
        <token inflected="yes" regexp="yes">позиція|положення|пункт|точка</token>
      </pattern>
      <message>Ви мали на увазі: <suggestion>вихідний</suggestion>?</message>
      <example correction="вихідний">Поверталися на <marker>висхідну</marker> позицію.</example>
    </rule>

    <rule id="HRYVNA_HRYVNIA" name="Гривна і гривня">
      <antipattern>
        <token inflected="yes" regexp="yes" skip="-1">браслет|золотавий|плести|прикраса|прикрашати|прикасити|прикрашений|шийний|шия</token>
        <token inflected="yes">гривна
          <exception inflected="yes">гривня</exception>
        </token>
      </antipattern>
      <antipattern>
        <token inflected="yes" skip="-1">гривна
          <exception inflected="yes">гривня</exception>
        </token>
        <token inflected="yes" regexp="yes">браслет|плести|прикраса|прикрашати|прикасити|прикрашений|шийний|шия</token>
      </antipattern>
      <pattern>
        <marker>
          <token inflected="yes">гривна
            <exception inflected="yes">гривня</exception>
          </token>
        </marker>
      </pattern>
      <message>На позначення грошової одиниці вживаємо: <suggestion><match no="1" postag_regexp="yes" postag="noun:inanim:.*">гривня</match></suggestion></message>
      <example correction="гривень">Заробив 7 млн <marker>гривен</marker>.</example>
      <example>девальвація гривні</example>
      <example>На шиї він мав золоту гривну, на пальцях – золоті персні</example>
      <example>«гривна» — це давня нашийна прикраса.</example>
    </rule>

    <rulegroup id="BEZVISTI_VS_BEZVISTY" name="Безвісті/безвісти">
      <rule>
        <pattern>
          <token regexp="yes">зник.*|пропа[вл].*</token>
          <marker>
            <token>безвісті</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>безвісти</suggestion></message>
        <example correction="безвісти">зниклих <marker>безвісті</marker>.</example>
        <example correction="безвісти">пропали <marker>безвісті</marker>.</example>
      </rule>
      <rule>
        <pattern>
          <marker>
            <token>безвісті</token>
          </marker>
          <token regexp="yes">зник.*|пропа[вл].*</token>
        </pattern>
        <message>Правильно: <suggestion>безвісти</suggestion></message>
        <example correction="безвісти"><marker>безвісті</marker> зникли.</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">зник.*|пропа[вл].*</token>
          <marker>
            <token>без</token>
            <token regexp="yes">віст[іи]</token>
          </marker>
        </pattern>
        <message>Правильно: <suggestion>безвісти</suggestion></message>
        <example correction="безвісти">зниклих <marker>без вісті</marker>.</example>
        <example correction="безвісти">пропали <marker>без вісти</marker>.</example>
      </rule>
      <rule>
        <pattern>
          <marker>
            <token>без</token>
            <token regexp="yes">віст[іи]</token>
          </marker>
          <token regexp="yes">зник.*|пропа[вл].*</token>
        </pattern>
        <message>Правильно: <suggestion>безвісти</suggestion></message>
        <example correction="безвісти"><marker>без вісті</marker> зникли.</example>
        <example correction="безвісти"><marker>без вісти</marker> зникли.</example>
      </rule>
    </rulegroup>

    <rule id="bez_visty" name="Без вісти/безвісти">
      <pattern>
        <token>без</token>
        <token>вісти</token>
      </pattern>
      <message>Правильно: <suggestion>безвісти</suggestion></message>
      <example correction="безвісти"><marker>без вісти</marker></example>
    </rule>

    <rule id="na_trebe" name="На треба">
      <pattern>
        <token>на</token>
        <token>треба</token>
      </pattern>
      <message>Правильно: <suggestion>не треба</suggestion></message>
      <example correction="не треба">Агов, <marker>на треба</marker> цього!</example>
    </rule>

    <rule id="vytupaye" name="Витупає і виступає">
      <pattern>
        <token regexp="yes">витупа(є|ють|ємо?)</token>
      </pattern>
      <message>Можливо, ви мали на увазі <suggestion><match no="1" regexp_match="(?iu)витупа(є|ють|ємо?)" regexp_replace="виступа$1"/></suggestion>?</message>
      <example correction="виступає">він <marker>витупає</marker> завтра.</example>
    </rule>

    <rulegroup id="chyselnyi_chyslennyi" name="Чисельний і численний">
      <rule>
        <pattern>
          <marker>
              <token regexp="yes" inflected="yes">(не)?чисельний</token>
          </marker>
          <token regexp="yes" inflected="yes">асортимент|армія|верства|військо|ворог|гарнізон|глядач|громада|гурт|делегація|духовенство|заява|звернення|колектив|контингент|мітинг|нація|народ|організація|осередок|порушення|представництво|пікет|протест|прошарок|публікація|родина|сім'я|супротивник|товариство</token>
        </pattern>
        <message>Численний — який складається з великої кількості, чисельний — який стосується числа, кількості</message>
        <suggestion><match no="1" regexp_match="(не)?(чисельн)(.*)" regexp_replace="$1численн$3"/></suggestion>
        <example correction="численним">з <marker>чисельним</marker> військом</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">(най)?(більш|менш)е?|доволі|досить|дуже|настільки</token>
          <marker>
              <token inflected="yes" regexp="yes">(не)?чисельний</token>
          </marker>
        </pattern>
        <message>Численний — який складається з великої кількості, чисельний — який стосується числа, кількості</message>
        <suggestion><match no="2" regexp_match="(не)?(чисельн)(.*)" regexp_replace="$1численн$3"/></suggestion>
        <example correction="численним">стає більш <marker>чисельним</marker>.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
              <token regexp="yes" inflected="yes">(не)?численний</token>
          </marker>
          <token regexp="yes" inflected="yes">вигляд|диференціювання|зріст|зростання|інтегрування|масштаб|метод|наростання|приріст|різниця|розв'язання|співвідношення|стан</token>
        </pattern>
        <message>Численний — який складається з великої кількості, чисельний — який стосується числа, кількості</message>
        <suggestion><match no="1" regexp_match="(не)?(численн)(.*)" regexp_replace="$1числов$3"/></suggestion>
        <suggestion><match no="1" regexp_match="(не)?(численн)(.*)" regexp_replace="$1чисельн$3"/></suggestion>
        <example correction="числовому|чисельному">і <marker>численному</marker> методу</example>
      </rule>

      <!-- only singular -->
      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>
            <marker>
              <token regexp="yes" inflected="yes">(не)?численний</token>
            </marker>
            <token regexp="yes" inflected="yes" postag_regexp="yes" postag="noun:.*?:[mnf].*">алгоритм|аналіз|експеримент|значення|критерій|масив|моделювання|опис|прогноз|розв'язок|розв'язання|ряд|спосіб|рішення|характеристика</token>
          </unify>
        </pattern>
        <message>Численний — який складається з великої кількості, чисельний — який стосується числа, кількості</message>
        <suggestion><match no="1" regexp_match="(не)?(численн)(.*)" regexp_replace="$1числов$3"/></suggestion>
        <suggestion><match no="1" regexp_match="(не)?(численн)(.*)" regexp_replace="$1чисельн$3"/></suggestion>
        <example correction="числовому|чисельному">і <marker>численному</marker> експерименті</example>
        <example>тестували на численних експериментах</example>
        <example>численні переваги</example>
      </rule>

      <!--  both ok: кількість, перевага, більшість, меншість -->
    </rulegroup>

    <rulegroup id="neporivniuvayi" name="Непорівнюваний">
      <rule>
        <pattern>
          <token inflected="yes">непорівнюваний</token>
        </pattern>
        <message>Непорівнюваний має значення "що його не порівнюють" (в момент мовлення). В більшості випадків потрібне слово: <suggestion>непорівнянний</suggestion> "що його неможливо порівняти"</message>
        <example correction="непорівнянний">отакий <marker>непорівнюваний</marker> варіант</example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes">непорівнюваність</token>
        </pattern>
        <message>Непорівнюваність має значення "що його не порівнюють" (в момент мовлення). В більшості випадків потрібне слово: <suggestion>непорівнянність</suggestion> "неможливість порівняти"</message>
        <example correction="непорівнянність">отака <marker>непорівнюваність</marker></example>
      </rule>

      <rule>
        <pattern>
          <token inflected="yes">непояснюваний</token>
        </pattern>
        <message>Непояснюваний має значення "що його не пояснюють" (в момент мовлення). В більшості випадків потрібне слово: <suggestion>непоясненний</suggestion> "що його неможливо пояснити"</message>
        <example correction="непоясненний">отакий <marker>непояснюваний</marker> варіант</example>
      </rule>
    </rulegroup>

    <rule id="vidryvaty_dveri" name="Відривати двері">
      <pattern>
        <marker>
          <token inflected="yes" regexp="yes">відривати(ся)?|відрити(ся)?|відритий</token>
        </marker>
        <token inflected="yes" regexp="yes">двері|вікно</token>
      </pattern>
      <message>Можливо: <suggestion><match no="1" regexp_match="(?iu)відри(.*)" regexp_replace="відкри$1"/></suggestion>?</message>
      <example correction="відкрив">він <marker>відрив</marker> двері</example>
    </rule>

    <rulegroup id="vika_viku" name="Віка і віку">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="num.*"/>
          <marker>
            <token>віка</token>
          </marker>
        </pattern>
        <message>Родовий відмінок від «вік» є <suggestion>віку</suggestion></message>
        <example correction="віку">події ХХ <marker>віка</marker>.</example>
        <example>розглядала його віка, губи</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes">[ву]сі|на|кінця|од|до|чверть|середин.*|дожив.*|[ву]корот.*</token>
          <marker>
            <token>віка</token>
          </marker>
        </pattern>
        <message>Родовий відмінок від «вік» є <suggestion>віку</suggestion></message>
        <example correction="віку">на всі <marker>віка</marker>.</example>
        <example>розглядала його віка, губи</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>віка</token>
          </marker>
          <token min="0">не</token>
          <token regexp="yes">збав.*|дожив.*</token>
        </pattern>
        <message>Родовий відмінок від «вік» є <suggestion>віку</suggestion></message>
        <example correction="віку">хочеш <marker>віка</marker> збавити.</example>
        <example>розглядала його віка, губи</example>
      </rule>
    </rulegroup>

    <rulegroup id="nezvazhayuchi_ne" name="Незважаючи не">
      <rule>
        <pattern>
          <token>незважаючи</token>
          <token>не</token>
        </pattern>
        <message>Можливо, ви мали на увазі <suggestion>\1 на</suggestion></message>
        <example correction="незважаючи на">і <marker>незважаючи не</marker> це.</example>
      </rule>

      <rule>
        <pattern>
          <token>не</token>
          <marker>
            <token>зважаючи</token>
            <token>не</token>
          </marker>
        </pattern>
        <message>Можливо, ви мали на увазі <suggestion>\2 на</suggestion></message>
        <example correction="зважаючи на">і не <marker>зважаючи не</marker> це.</example>
      </rule>

      <rule>
        <antipattern>
          <token>зважаючи</token>
          <token>не</token>
          <token regexp="yes">лише|с?тільки</token>
          <token>на</token>
        </antipattern>
        <pattern>
          <token>зважаючи
            <exception scope="previous">не</exception>
          </token>
          <token>не</token>
        </pattern>
        <message>Можливо, ви мали на увазі <suggestion>\1 на</suggestion></message>
        <example correction="зважаючи на">і <marker>зважаючи не</marker> ситуацію</example>
        <example>зважаючи не лише на сучасні проблеми</example>
      </rule>

    </rulegroup>

    <rulegroup id="adres_adresa" name="Адреса і адрес">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="adj:m:v_(naz|zna).*pron:pos"/>
          <marker>
            <token>адрес</token>
          </marker>
        </pattern>
        <message>Можливо, ви мали на увазі <suggestion>адреса</suggestion></message>
        <example correction="адреса">дав йому свій <marker>адрес</marker>.</example>
        <example>дав йому свою адресу</example>
      </rule>
<!--
      <rule>
        <pattern>
          <token regexp="yes">домашній|електронний|поштовий|зворотний|теперішній</token>
          <marker>
            <token>адрес</token>
          </marker>
        </pattern>
        <message>Можливо, ви мали на увазі <suggestion>адреса</suggestion></message>
        <example correction="адреса">дав йому домашній <marker>адрес</marker>.</example>
        <example>дав йому поштових адрес</example>
      </rule>
-->

      <rule>
        <pattern>
          <unify>
            <feature id="gender"/>
            <feature id="case"/>
            <token postag_regexp="yes" postag="adj:m:(?!.*pron:pos).*">
              <exception inflected="yes" regexp="yes">(при)?вітальний|(по|в)дячний</exception>
            </token>
            <marker>
              <token inflected="yes">адрес</token>
            </marker>
          </unify>
        </pattern>
        <message>Можливо, ви мали на увазі <suggestion>адреса</suggestion></message>
        <example correction="адреса">дав йому домашній <marker>адрес</marker>.</example>
        <example>на домашній <marker>адресі</marker>.</example>
      </rule>

    </rulegroup>

    <rulegroup id="na_vylit_vs_navylit" name="На виліт і навиліт">
      <rule>
        <pattern>
          <token regexp="yes" inflected="yes">пройти|проходити|проби(ва)?ти|проши(ва)?ти|подати|подача|куля|поранення</token>
          <token postag_regexp="yes" postag="noun.*v_zna.*" min="0"/>
          <marker>
            <token>на</token>
            <token>виліт</token>
          </marker>
        </pattern>
        <message>Може ви мали на увазі <suggestion>навиліт</suggestion>?</message>
        <example correction="навиліт">куля пройшла <marker>на виліт</marker>.</example>
      </rule>

      <rule>
        <pattern>
          <token regexp="yes" inflected="yes">матч|гра|кандидат|претендент|квиток|дозвіл|обмеження|черга</token>
          <marker>
            <token>навиліт</token>
          </marker>
        </pattern>
        <message>Може ви мали на увазі <suggestion>на виліт</suggestion>?</message>
        <example correction="на виліт">той матч <marker>навиліт</marker>.</example>
      </rule>
    </rulegroup>

    <rulegroup id="pogodnyi_vs_pogidnyi" name="Погодний і погідний">
      <rule>
        <pattern>
          <marker>
            <token inflected="yes">погідний</token>
          </marker>
          <token inflected="yes" regexp="yes">умова|чинник|явище|фактор|катаклізм|сюрприз|аномалія</token>
        </pattern>
        <message>Може ви мали на увазі <suggestion><match no="1" postag_regexp="yes" postag="adj.*">погодний</match></suggestion>?</message>
        <example correction="погодних">за таких <marker>погідних</marker> умов.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token inflected="yes">погодний</token>
          </marker>
          <token inflected="yes" regexp="yes">день|вечір|небо|обличчя</token>
        </pattern>
        <message>Може ви мали на увазі <suggestion><match no="1" postag_regexp="yes" postag="adj.*">погідний</match></suggestion>?</message>
        <example correction="погідний">мав <marker>погодний</marker> день.</example>
      </rule>
    </rulegroup>

  <!--
    <rulegroup id="yih_vs_yiniy" name="Їх та їхній" default="off">
      <rule>
        <pattern>
          <marker>
            <token>їх</token>
          </marker>
          <token inflected="yes" regexp="yes">організм|пам'ять|становище|замисел|сподівання|ресурс|потреба|майно|знайомство|хвиля|голос|тренер|родич</token>
          < життя ? >
        </pattern>
        <message>Якщо «їх» відповідає на питання «кого/чого», а не «чий», треба вживати <suggestion>їхній</suggestion>?</message>
        <example correction="їхній">на <marker>їх</marker> сподівання.</example>
      </rule>
    </rulegroup>
    -->

    <rulegroup id="pyvyd_vs_pryvid" name="Привід та привид">
      <rule>
        <pattern>
          <token regexp="yes" inflected="yes">механічний|електричний|формальний|зайвий|да(ва)?ти|шукати|мати</token>
          <marker>
            <token>привид</token>
          </marker>
        </pattern>
        <message>Може ви мали на увазі <suggestion>привід</suggestion>?</message>
        <example correction="привід">механічний <marker>привид</marker>.</example>
      </rule>

      <rule>
        <pattern>
          <marker>
            <token>привид</token>
          </marker>
          <token regexp="yes">для|до</token>
        </pattern>
        <message>Може ви мали на увазі <suggestion>привід</suggestion>?</message>
        <example correction="привід">шукав <marker>привид</marker> для.</example>
      </rule>
    </rulegroup>

    <rule id="sprytni_napoi" name="Спритні напої">
      <pattern>
        <token inflected="yes">спритний</token>
        <token inflected="yes">напій</token>
      </pattern>
      <message>Можливо ви мали на увазі: <suggestion><match no="1" regexp_match="(?iu)спритн(.*)" regexp_replace="спиртн$1"/> \2</suggestion></message>
      <example correction="спиртними напоями"><marker>спритними напоями</marker></example>
    </rule>

    <rule id="pokrashennya" name="Покрашення і покращення">
      <pattern>
        <token inflected="yes">покрашення</token>
      </pattern>
      <message>Можливо ви мали на увазі: <suggestion><match no="1" regexp_match="(?iu)покраш(.*)" regexp_replace="покращ$1"/></suggestion></message>
      <example correction="покращенню"><marker>покрашенню</marker> вже сьогодні</example>
    </rule>

<!--
    TODO: досить складна логіка
    <rulegroup id="NE_Z_PRUKMETNYKAMY" name="Не з прикметниками" default="off">
      <rule>
        <pattern>
          <token postag_regexp="yes" postag="adv.*" regexp="yes" >ні.*</token>
          <marker>
            <token postag_regexp="yes" postag="adj.*" regexp="yes" >не.*</token>
          </marker>
        </pattern>
        <message>Не з прикметником пишеться окремо</message>
        <example correction="">Нітрохи <marker>нецікава</marker> лекція.</example>
      </rule>
    </rulegroup>
-->

  </category>

  <category id="LOGICAL_ERRORS" name="Логічні помилки">
    <rulegroup id="INVALID_DATE" name="Неправильна дата, наприклад '31 лютого 2014'">
      <rule>
        <pattern>
          <marker>
            <token>31</token>
            <token regexp="yes">квітень|квітня|кві|червень|червня|вересень|вересня|вер|листопад|листопада|лис</token>
          </marker>
        </pattern>
        <message>Місяць \2 має лише 30 днів.</message>
        <example correction="">Це трапилося <marker>31 листопада</marker> 2014 р.</example>
        <example>Це трапилося <marker>30 листопада</marker> 2014 р.</example>
      </rule>
      <rule>
        <pattern>
          <marker>
            <token regexp="yes">3[01]</token>
            <token regexp="yes">лютий|лютого|лют</token>
          </marker>
        </pattern>
        <message>Лютий має 28 днів або 29 днів у переступному році.</message>
        <example correction="">Це трапилося <marker>30 лютого</marker> 2014 р.</example>
        <example>Це трапилося <marker>28 лютого</marker> 2014 р.</example>
      </rule>
    </rulegroup>

    <rule id="YEAR_20001" name="Забагато нулів в номері року">
      <pattern>
        <token regexp="yes">&months;|рік</token>
        <token regexp="yes">200\d\d</token>
      </pattern>
      <message>Можливо <suggestion><match no="1"/> <match no="2" regexp_match="200" regexp_replace="20"/></suggestion>?</message>
      <short>Помилка друку?</short>
      <example>Мою поїздку запланували на травень 2014 р.</example>
      <example correction="травень 2014">Мою поїздку запланували на <marker>травень 20014</marker> р.</example>
    </rule>

    <rulegroup id="DATE_WEEKDAY1" name="День тижня не відповідає даті">
      <!-- "понеділок, 7 жовтня 2014" -->
      <rule>
        <pattern>
          <token regexp="yes">&weekdays;</token>
          <token>,</token>
          <token regexp="yes">\d\d?</token>
          <token regexp="yes">&months;|&abbrevMonths;</token>
          <token regexp="yes">\d\d\d\d</token>
        </pattern>
        <filter class="org.languagetool.rules.uk.DateCheckFilter" args="year:\5 month:\4 day:\3 weekDay:\1"/>
        <message>Днем тижня \3 \4 \5 є не \1, а {realDay}.</message>
        <example correction="">Конференція відбудеться в <marker>понеділок, 7 жовтня 2014</marker> р.</example>
        <example correction="">Конференція відбудеться в <marker>понеділок, 7 жов 2014</marker> р.</example>
        <example>Конференція відбудеться у вівторок, 7 жовтня 2014 р.</example>
        <example>Конференція відбудеться у вівторок, 7 жов 2014 р.</example>
      </rule>
    </rulegroup>

  </category>

</rules>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy