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

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

There is a newer version: 6.5
Show 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 "перший|другий|третій|четвертий|п'ятий|шостий|сьомий|восьмий|дев'ятий|десятий|одинадцятий|дванадцятий|тринадцятий|чотирнадцятий|п'ятнадцятий|шістнадцятий|сімнадцятий|вісімнадцятий|дев'ятнадцятий">
]>

<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 name="Граматика">

        <rulegroup name="Узгодженість частин речення" id="CONSISTENCY_VERB">
            <rule>
                <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.*" />
                    </token>
                </pattern>
                <message>Прийменник \1 перед дієсловом <suggestion>\2</suggestion></message>
                <example>Їм треба їхати.</example>
                <example>Їм треба в'їхати.</example>
                <example>Просто взяти.</example>
                <!-- TODO: case sensitivity in MultiWordChunker 
                <example>Справедливості заради скажемо</example>
                <example>Справедливості заради хочеться зауважити</example>
                -->
                <example>Просто неба.</example>
                <example>Це більше задля годиться</example>
                <example>задля годиться</example>
                <example>не залишається нічого іншого, крім чекати.</example>
                <example>Наїхали на Мела Гібсона</example>
                <example>О покладіть мені квіти</example>
                <example>заради скажемо</example>
                <example>кількість захворювань на гепатит В зменшилась у вісім разів.</example>
                <example correction="їхати">Їм треба <marker>в їхати</marker>.</example>
                <example correction="будь"><marker>для будь</marker> кого</example>
            </rule>
            <rule>
                <pattern>
                    <token postag_regexp="yes" postag="predic.*">
                        <exception negate_pos="yes" postag_regexp="yes" postag="predic.*|adj.*" />
                        <exception scope="previous">кого</exception>
                    </token>
                    <marker>
                    <token postag_regexp="yes" postag="verb.*">
                        <exception postag_regexp="yes" postag="verb:(rev:)?inf.*|.*unknown.*"/>
                        <exception negate_pos="yes" postag_regexp="yes" postag="verb.*"/>
                        <exception regexp="yes">буде|було|був</exception>
                    </token>
                    </marker>
                </pattern>
                <message>Дієслово після присудкового слова має йти інфінітивом: <suggestion><match no="2" postag_regexp="yes" postag="verb(:rev)?:inf.*"/></suggestion></message>
                <example>Повинен їхати</example>
                <example>Йому треба писати</example>
                <example>Чи варто їм таке писати?</example>
                <example>Чи варто було їм таке писати?</example>
                <example>Треба буде таке писати</example>
                <example>В кого треба видалено.</example>
                <example>можна буде встояти.</example>
                <example correction="писати">Повинен <marker>писатиме</marker>.</example>
                <example correction="писати">Треба <marker>писав</marker>.</example>
                <example correction="встояти">Не можна <marker>встоять</marker>.</example>
                <example correction="сподіватись|сподіватися">І тому варто <marker>сподіваюся</marker>, що це спрацює.</example>
            </rule>
        </rulegroup>

        <rulegroup name="Узгодженість відмінків з прийменниками" id="CONSISTENCY_VIDM_prep">
            <rule>
                <pattern>
                    <token>згідно</token>
                    <marker>
                    <token postag_regexp="yes" postag="(noun|adj|prep).*">
                        <exception regexp="yes">з|зі|із</exception>
                    </token>
                    </marker>
                </pattern>
                <message>Згідно з чим</message>
                <example correction="">згідно <marker>статуту</marker></example>
                <example correction="">згідно <marker>до</marker> правила</example>
                <example>згідно зі статутом</example>
                <example>згідно з правилом</example>
            </rule>
        </rulegroup>

        <rulegroup name="Узгодженість відмінків з іменниками" id="CONSISTENCY_VIDM_noun">
            <rule>
                <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>
        </rulegroup>

        <rulegroup name="Узгодженість відмінків з дієсловами" id="CONSISTENCY_VIDM_AFTER_VERBS">
            <rule>
                <pattern>
                  <token inflected="yes" regexp="yes">навч[иа]ти</token>
                  <token postag_regexp="yes" postag="noun.*v_zna.*anim.*|.*pron:pers.*" min="0"/>
                  <marker>
                    <token postag_regexp="yes" postag="adj.*v_dav.*" min="0">
                      <exception regexp="yes">всьому|цьому</exception> <!-- <exception postag_regexp="yes" postag=".*pron:dem.*"/> -->
                    </token>
                    <token postag_regexp="yes" postag="noun.*:v_dav.*|.*v_dav.*pron:dem.*">
                      <exception postag_regexp="yes" postag=".*:v_(rod|zna|oru).*|noun:.:v_(naz|dav).*:anim.*|adv.*"/>
                      <exception>нікому</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>навчати математики</example>
                <example>навчати елементарної математики</example>
                <example>навчати фаху</example>
                <example>навчати їх</example>
                <example>навчило її нікому не вірити</example>
                <example>Чого навчила вас ця поразка?</example>
            </rule>
            <rule>
                <pattern>
                  <token inflected="yes" regexp="yes">навч[иа]тися</token>
                  <marker>
                    <token postag_regexp="yes" postag="adj.*v_dav.*" min="0">
                      <exception regexp="yes">всьому|цьому|самому</exception>
                    </token>
                    <token postag_regexp="yes" postag="noun.*:v_dav.*|.*:n:.*pron:dem.*"> <!--TODO: всьому|цьому -->
                      <exception postag_regexp="yes" postag=".*:v_(rod|zna|oru).*|noun:.:(v_naz|v_dav).*(:anim|pron:pers).*|adv.*"/>
                      <exception>нікому</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>Куди піти навчатись ентузіастам із фотоапаратами.</example>
                <example>навчалися індійці.</example>
                <example>навчаються китайці.</example>
                <example>навчатися досі</example>
                <example>навчилася нікому не вірити</example>
                <example>Але довго навчатися йому не довелося</example>
            </rule>
        </rulegroup>

        <rulegroup name="Узгодженість числа іменників з числівниками" id="CONSISTENCY_NOUN_NUMERIC">
            <rule>
                <pattern>
                  <token postag_regexp="yes" postag="num.*">
                    <exception scope="previous">на</exception>
                  </token>
                  <token regexp="yes">десятих|сотих|третіх|треті|четвертих|чверті|четверті</token>
                  <marker>
                    <token postag_regexp="yes" postag="noun:.:.*">
                      <exception postag_regexp="yes" postag="noun:[mfnp]:v_rod.*"/>
                      <exception postag_regexp="yes" postag="noun:.*:anim.*"/>
                      <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>
            </rule>
            <rule>
                <antipattern>
                    <token regexp="yes">соті|десяті|.*[234]</token>
                    <token case_sensitive="yes" postag_regexp="yes" postag="noun:m:v_rod.*" regexp="yes">[А-ЯІЇЄҐ].*</token>
                </antipattern>
                <pattern>
                    <token regexp="yes">два|дві|обидва|обидві|три|чотири|[^,.№:-]*[2-9]?[234]
                      <exception postag_regexp="yes" postag="date|time"/>
                      <exception scope="previous" regexp="yes">[:/№]|статт[яі]|пункті?|частин[аи]|[а-яіїєґ]+\.|\.</exception> <!-- ст.,ч.,п. тощо -->
                    </token>
                    <token postag_regexp="yes" postag="adj.*" min="0">
                      <exception regexp="yes">третіх|четвертих</exception>
                      <exception postag_regexp="yes" postag="noun:p:v_naz.*"/>
                    </token>
                    <marker>
                        <token postag_regexp="yes" postag="noun:m:v_rod.*" regexp="yes">.*[ая]
                            <exception postag_regexp="yes" postag="noun:p:v_naz.*"/>
                            <exception regexp="yes">січня|березня|квітня|травня|червня|липня|серпня|вересня|жовтня|листопада|грудня</exception>
                        </token>
                    </marker>
                </pattern>
                <message>Після числівника що закінчується на 2-4 іменник має стояти в називному відмінку множини: <suggestion><match no="3" postag="noun:p:v_naz.*" postag_regexp="yes"/></suggestion></message>
                <example correction="вулики">двадцять три <marker>вулика</marker></example>
                <example correction="тижні">24 <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>співвласника ДБК-3 Петра Шелюка</example>
                <example>1/2 шилінга</example>
                <example>після поразки 0:2 Базилевича</example>
                <example>три головні завдання</example>
                <example>2,2 мільйона</example>
                <example>три століття</example>
                <example>три роки тому</example>
                <example>дві третіх шлунка</example>
                <example>1992 року</example>
                <example>три тис. грн.</example>
                <example>3 липня 1998р.</example>
                <example>ст. 33 документа</example>
                <example>статті 43 Закону</example>
                <example>заспівали дві пісні короля футболу</example>
                <example>випередивши на дві соті Давида Ньясу з Катару</example>
            </rule>
            <rule>
                <pattern>
                    <token regexp="yes" inflected="yes">десять|двадцять|тридцять|сорок|.*десят|дев'яносто|сто|двісті|триста|чотириста|п'ятьсот|шістьсот|сімсот|вісімсот|сотня|тисяча|мільйон|мільярд|([0-9]*[05-9]|[0-9]+11)
                      <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>
                    </token>
                    <token postag_regexp="yes" postag="adj.*" min="0"/>
                    <marker>
                        <!--
                        <token postag_regexp="yes" postag="noun:m:v_naz.*" regexp="yes">.*[бвгґджйзклмнпрстфхцчшщ]ь?
                            <exception scope="previous">хвилин за</exception>
                            <exception postag_regexp="yes" postag="noun:p:v_rod.*|verb.*|predic.*"/>
                            <exception regexp="yes" case_sensitive="yes">[А-ЯІЇЄҐ].*</exception>
                            <exception regexp="yes">раз|чоловік|грам|тис|куб|як|абзац|клас|канал|номер|плюс|поверх|пункт</exception>
                        </token>
                        -->
                        <token postag_regexp="yes" postag="noun:m:v_naz.*" regexp="yes">(нано|мікро|мілі|дека|кіло|мега|гіга|тера|пета)?(герц|байт|бар|бер|ват|вольт|солдат|децибел|рентген|моль|мікрон|грам|аршин|лат|карат)</token>
                    </marker>
                </pattern>
                <message>Після числівника що закінчується на 5-9 або 0 іменник має стояти в родовому відмінку множини: <suggestion><match no="3" postag="noun:p:v_rod.*" postag_regexp="yes"/></suggestion></message>
                <!--
                <example correction="грамів">сто <marker>грам</marker></example>
                <example correction="грамів">100 <marker>грам</marker></example>
                -->
                <example correction="байтів">10 <marker>байт</marker></example>
                <example correction="мілібарів">10 <marker>мілібар</marker></example>
                <example correction="солдатів">дві сотні <marker>солдат</marker></example>
                <example correction="солдатів">дві сотні хоробрих <marker>солдат</marker></example>
                <example>хвилин за 10 спікер увійшов</example>
                <example>до 16 вхід заборонено</example>
                <example>в 40 став наймолодшим</example>
                <example>50 тис. людей</example>
                <example>сто грамів</example>
                <example>100 грамів</example>
                <example>10 разів</example>
                <example>10 раз</example>
                <example>10 номер</example>
                <example>У 2008 президент</example>
                <example>10 плюс 5</example>
                <example>о 17.15 патріарх буде в місті</example>
                <example>«5 канал»</example>
                <example>у свої сімдесят два роки</example>
                <example>на виборах-2007 Блок Литвина</example>
                <example>127 Шевченко Євген Валерійович</example>
                <example>керував сотнею німець</example>
                <example>комендантом сотні став Віталій</example>
                <example>ці мільйони слід шукати там</example>
            </rule>
            <rule>
                <pattern>
                    <token regexp="yes" inflected="yes">десять|двадцять|тридцять|сорок|.*десят|дев'яносто|сто|двісті|триста|чотириста|п'ятьсот|шістьсот|сімсот|вісімсот|сотня|тисяча|мільйон|мільярд|([0-9]*[05-9]|[0-9]+11)
                      <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>
                    </token>
                    <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>10 тонн</example>
                <example>10 тонів</example>
            </rule>
            <rule>
                <pattern>
                    <token regexp="yes">([1-9][0-9]*)[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 regexp="yes">рр\.</exception>
                        </token>
                    </marker>
                </pattern>
                <message>Після числівника що закінчується на 1 іменник має стояти в однині</message>
                <example type="incorrect">271 <marker>депутатів</marker> проголосовали</example>
                <example type="correct">11 депутатів проголосовали</example>
                <example type="correct">на тлі претендента 001 доходи великої родини</example>
                <example type="correct">27 депутатів проголосовали</example>
                <example type="correct">проти 441 зараз.</example>
                <example type="correct">залишилася 781 тонна пестицидів.</example>
                <example>В 1999-2001 рр. він був секретарем.</example>
                <example>В 604-562 або 561 рр. до н.е.</example>
                <example>Про знеструмлення будинків 10 та 101 нас не повідомили.</example>
            </rule>
            <rule>
                <antipattern>
                  <token regexp="yes">[12][0-9]{3},[12][0-9]{3}</token>
                  <token regexp="yes">рр\.</token>
                </antipattern>
                <pattern>
                  <token regexp="yes">.*,[1-46-9]+</token> <!-- ,5 - виняток: 4,5 роки може читатися як «чотири з половиною роки» -->
                  <marker>
                    <token postag_regexp="yes" postag="noun:.:.*">
                      <exception postag_regexp="yes" postag="noun:[mfn]:(v_rod|nv).*|.*pron.*"/>
                      <exception regexp="yes">тис|рази|куб|кал</exception>
                      <exception case_sensitive="yes" regexp="yes">[А-ЯІЇЄҐ].*</exception>
                    </token>
                  </marker>
                </pattern>
                <message>Після десяткового дробу іменник має стояти в родовому відмінку однини: <suggestion><match no="2" postag_regexp="yes" postag="(.*):.:v_...(.*)" postag_replace="$1:[mnf]:v_rod$2"/></suggestion></message>
                <example correction="кілограма">2,4 <marker>кілограми</marker></example>
                <example correction="мільйона">2,4 <marker>мільйони</marker></example>
                <example>33,77 тонни</example>
                <example>2,19 бала</example>
                <example>33,77 мм</example>
                <example>33,77 тис</example>
                <example>33,5 роки</example>
                <example>33,5 Терещенко</example>
                <example>1998,1999 рр.</example>
                <example>із результатом 28,91 вона посіла третє місце</example>
                <example>Становлять відповідно 0,5 і 0,3 її оцінки.</example>
            </rule>
        </rulegroup>

        <rulegroup name="Узгодженість роду іменників з числівниками" id="CONSISTENCY_NOUN_NUMERIC_GENDER">
            <rule>
                <pattern>
                   <marker>
                    <token>півтора</token>
                   </marker>
                   <token postag_regexp="yes" postag="noun:f:.*">
                      <exception postag_regexp="yes" postag="noun:[nm]:(nv|v_rod).*"/>
                   </token>
                </pattern>
                <message>В жіночому роді правильно: <suggestion>півтори</suggestion></message>
                <example correction="півтори"><marker>півтора</marker> доби</example>
                <example correction="півтори"><marker>півтора</marker> тисячі</example>
                <example>півтори доби</example>
            </rule>
            <rule>
                <pattern>
                   <token regexp="yes">півтор[аи]</token>
                   <marker>
                     <token postag_regexp="yes" postag="noun:p:.*">
                        <exception postag_regexp="yes" postag="noun:[nmf]:(nv|v_rod).*"/>
                        <exception>рази</exception>
                     </token>
                   </marker>
                </pattern>
                <message>Після «півтора» треба вживати родовий однини: <suggestion><match no="2" postag_regexp="yes" postag="noun:[mnf]:v_rod.*"/></suggestion></message>
                <example correction="відра">півтора <marker>відер</marker></example>
                <example correction="сотні">півтори <marker>сотень</marker></example>
                <example correction="мільярда">півтора <marker>мільярди</marker></example>
                <example>півтора літра</example>
                <example>півтора рази</example>
                <example>півтора тисячі</example> <!-- ingore this mistake here, it'll be caght by rule above -->
            </rule>
            <rule>
                <pattern>
                   <token>півтора</token>
                   <marker>
                     <token postag_regexp="yes" postag="noun:[mn]:.*">
                        <exception postag_regexp="yes" postag="noun:[nmfp]:(nv|v_rod).*"/>
                        <exception>рази</exception>
                     </token>
                   </marker>
                </pattern>
                <message>Після «півтора» треба вживати родовий однини: <suggestion><match no="2" postag_regexp="yes" postag="(noun:.):v_...(.*)" postag_replace="$1:v_rod$2"/></suggestion></message>
                <example correction="копальника">півтора <marker>копальнику</marker></example>
                <example correction="відра">півтора <marker>відрі</marker></example>
                <example>півтора літра</example>
                <example>півтора рази</example>
                <example>півтора тисячі</example> <!-- ingore this mistake here, it'll be caght by rule above -->
            </rule>
            <rule>
                <pattern>
                   <marker>
                     <token>півтори</token>
                   </marker>
                   <token postag_regexp="yes" postag="noun:[mn]:.*">
                      <exception postag_regexp="yes" postag="noun:[fp]:(nv|v_rod).*"/>
                   </token>
                </pattern>
                <message>В чоловічому та середньому роді правильно: «<suggestion>півтора</suggestion>»</message>
                <example correction="півтора"><marker>півтори</marker> відра</example>
                <example correction="півтора"><marker>півтори</marker> кухля</example>
                <example>півтора відра</example>
                <example>півтори доби</example>
                <example>півтора кухля</example>
                <example>півтори сотні</example> <!-- ingore this mistake here, it'll be caght by rule above -->
            </rule>
        </rulegroup>


        <rulegroup name="Час" id="TIME">
          <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.*"/></suggestion></message>
            <suggestion>(о) пів до <match no="2" postag_regexp="yes" postag="adj:f:v_rod.*"/></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>годині</token>
            </pattern>
            <message>Правильно: <suggestion>о</suggestion></message>
            <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>годині</token>
            </pattern>
            <message>Правильно: <suggestion>о</suggestion></message>
            <example correction="о">аж <marker>у</marker> 10-й годині ночі</example>
            <example>аж о 5-ій годині ночі</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="2"/>
              <token min="0">хвилин</token>
              <token postag_regexp="yes" postag="adj:f:v_naz.*" regexp="yes" inflected="yes">&hours;</token>
            </pattern>
            <message>Правильно: <suggestion>за <match no="2" postag_regexp="yes" postag="numr:p:v_naz.*"/> <match no="3"/> <match no="4"/></suggestion></message>
            <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.*"/></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>


        <rulegroup name="Пасивний предикат або пасивний атрибут (ev. апозиція) з інструменталем дієвої особи" id="PASSIVE_PREDICATE">
            <rule>
                <pattern>
                    <token postag_regexp="yes" postag="noun.*v_zna.*|adj:n:v_zna:&amp;pron:dem"/>
                    <marker>
                    <token postag_regexp="yes" postag="verb:impers.*">
                      <exception regexp="yes">визнано|названо|призначено|.*обрано|обумовлено|.*укомплектовано|зумовлено</exception>
                    </token>
                    <token postag_regexp="yes" postag="adj.*v_oru.*" min="0" max="2">
                      <exception regexp="yes">тим|таким</exception>
                    </token>
                    <token postag_regexp="yes" postag="noun.*v_oru.*:anim.*|.*v_oru.*pron:pers.*">
                      <exception negate_pos="yes" postag_regexp="yes" postag="noun.*v_oru.*:anim.*|.*v_oru.*pron:pers.*"/>
                      <exception postag_regexp="yes" postag="&lt;(adv|insert)&gt;"/>
                      <exception regexp="yes">тим|таким|персоною|днями|цими</exception>
                    </token>
                    <!-- TODO: особа-діяч може бути не лише :anim
                    <token postag_regexp="yes" postag="noun.*v_oru.*"/>
                    -->
                    </marker>
                </pattern>
                <message>Невластива мові конструкція: пасивний предикат</message>
                <url>http://kurylo.wikidot.com/3-nevlastyva-ukrainskii-movi-konstruktsiia:pasyvnyi-predykat</url>
                <example>Користувача авторизовано.</example>
                <example>Листа написано Келлі.</example>
                <example>Справу порушено за фактом.</example>
                <example>Наказ підписано синьою ручкою.</example>
                <example>церковні терміни використано тією мірою.</example>
                <example>це викликано тим, що</example>
                <example>його обрано президентом</example>
                <example>документ виписано таким чином</example>
                <example>Яку роль відведено Ульянченко</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 type="incorrect">Справу <marker>порушено міським судом</marker></example>
                -->
                <example correction="">Користувача <marker>авторизовано адміністратором</marker>.</example>
                <!-- 
                <example correction="">Все <marker>зроблено самими учасниками</marker></example>
                <example correction="">Потепління <marker>ускладнено нашою недолугою діяльністю</marker></example>
                 -->
            </rule>
        </rulegroup>
<!--
        <rulegroup name="Узгодженість" id="CONISTENCY">
            <rule>
                <pattern>
                   <unify negate="yes">
                        <feature id="gender"></feature>
                        <feature id="number"></feature>
                        <feature id="case"></feature>
                        <token postag_regexp="yes" postag="adj:.*"></token>
                        <token postag_regexp="yes" postag="noun:.*"></token>
                    </unify>
                </pattern>
                <message>Неузгоджений рід/число/відмінок</message>
                <example>Синя яхта</example>
                <example>Гарні вірші</example>
                <example type="incorrect"><marker>Синій яхта</marker>.</example>
            </rule>
        </rulegroup>
-->
<!--
        <rulegroup name="Узгодженість відмінку" id="CONISTENCY_VIDM_1">
            <rule>
                <pattern>
                    <token postag="prep:rv_rod"></token>
                    <token postag_regexp="yes" postag="(noun|adj):v_[^r].*"></token>
                </pattern>
                <message>Прийменник вимагає родового відмінку <suggestion>\2</suggestion></message>
                <example>Для відтінку.</example>
                <example>Для синього відтінку.</example>
                <example type="incorrect"><marker>Для відтінок</marker>.</example>
            </rule>
        </rulegroup>
-->
<!--
        <rulegroup name="Узгодженість роду" id="CONISTENCY_GENDER">
                <rule>
                    <pattern>
                        <token postag_regexp="yes" postag="adj:m:.*">
                            <exception postag_regexp="yes" postag="adj:[^m]:.*"/>
                        </token>
                        <token postag_regexp="yes" postag="noun:[^m]:.*">
                            <exception postag_regexp="yes" postag="noun:m:.*"/>
                        </token>
                    </pattern>
                    <message>Неузгодженість роду</message>
                    <example>абонентське абонування</example>
                    <example>холодне серце</example>
                    <example>холодним вітром</example>
                    <example>холодним серцем</example>
                    <example type="incorrect"><marker>абонентський абонування</marker>.</example>
                    <example type="incorrect"><marker>холодним водою</marker>.</example>
                </rule>
        </rulegroup>
-->
    </category>

    <category 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>

        <rule id="WORD_REPEAT" name="Повторення слова">
            <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.*"/></suggestion></message>
            <suggestion>(о) пів до <match no="2" postag_regexp="yes" postag="adj:f:v_rod.*"/></suggestion>
            <example correction="(о) пів на першу|(о) пів до першої"><marker>пів першої</marker> приїхав і він</example>
            <example>пів на першу приїхав і він</example>
          </rule>

    </category>

</rules>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy