diff options
Diffstat (limited to 'JLanguageTool/src/rules/ru')
-rw-r--r-- | JLanguageTool/src/rules/ru/grammar.xml | 1576 | ||||
-rw-r--r-- | JLanguageTool/src/rules/ru/replace.txt | 115 |
2 files changed, 1691 insertions, 0 deletions
diff --git a/JLanguageTool/src/rules/ru/grammar.xml b/JLanguageTool/src/rules/ru/grammar.xml new file mode 100644 index 0000000..74199ca --- /dev/null +++ b/JLanguageTool/src/rules/ru/grammar.xml @@ -0,0 +1,1576 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?xml-stylesheet type="text/xsl" href="../print.xsl" +title="Pretty print" ?> +<?xml-stylesheet type="text/css" href="../rules.css" +title="Easy editing stylesheet" ?> +<!-- +LanguageTool. +Copyright (C) 2005 Daniel Naber (http://www.danielnaber.de) +A Russian rule file for LanguageTool +Copyright (C) 2008-2010 Yakov Reztsov +$Id$ +--> +<rules lang="ru" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../rules.xsd"> + <category name="Пунктуация"> + <rule default="on" id="ABREV_DOT" name="Точка после сокращений"> + <pattern case_sensitive="yes" mark_to="-1"> + <token regexp="yes">тыс|зам|коп|руб|наб|нач|пер|шт|ед|экз|км|дм|см|мм|просп|пр|пос|кв|Тел|исп|Исп</token> + <token negate="yes" regexp="yes">.|/</token> + </pattern> + <message>Точка должна стоять после сокращений. Должно быть: <suggestion>\1.</suggestion></message> + <short>Точка после сокращений.</short> + <example type="correct">Стоимость работ составила 10 тыс. рублей.</example> + <example type="incorrect">Стоимость работ составила 10 <marker>тыс</marker> рублей.</example> + </rule> + <rule default="off" id="ABREV_DOT2" name="Точка после сокращений (млн, млрд)"> + <pattern case_sensitive="yes" mark_to="-1"> + <token regexp="yes">млн|млрд</token> + <token negate="yes" regexp="yes">.|/</token> + </pattern> + <message>Точка должна стоять после сокращений. Должно быть: <suggestion>\1.</suggestion></message> + <short>Точка после сокращений.</short> + <example type="correct">Стоимость работ составила 10 млн. рублей.</example> + <example type="incorrect">Стоимость работ составила 10 <marker>млн</marker> рублей.</example> + </rule> + <rulegroup id="POZHALUJSTA" name="«пожалуйста» выделяется запятыми"> + <rule> + <pattern case_sensitive="yes" mark_to="0"> + <token negate="yes" regexp="yes">[\p{Punct}]|всегда<exception postag="SENT_START"></exception></token> + <token>пожалуйста</token> + </pattern> + <message>Нет запятой: <suggestion>\1, \2</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Закройте дверь, <marker>пожалуйста.</marker></example> + <example type="incorrect">Закройте <marker>дверь пожалуйста</marker>.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_to="0"> + <token postag="SENT_START"></token> + <token>Пожалуйста</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Нет запятой: <suggestion>\2, \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct"><marker>Пожалуйста, закройте</marker> дверь.</example> + <example type="incorrect"><marker>Пожалуйста закройте</marker> дверь.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="KAK_PRAVILO" name="Вводное сочетание как обычно, как всегда, ..."> + <!--Вводное сочетание как обычно, как всегда, как правило, как исключение, как сейчас, как нарочно +--> + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>как</token> + <token regexp="yes">обычно|всегда|правило|исключение|нарочно|сейчас</token> + <token negate="yes">,</token> + </pattern> + <message>Нет запятой: <suggestion>\1, \2 \3, \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct"><marker>Мы, как правило, ходим</marker> ходим в походы летом.</example> + <example type="incorrect" correction="Мы, как правило, ходим"><marker>Мы как правило ходим</marker> в походы летом.</example> + </rule> + + + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>как</token> + <token regexp="yes">обычно|всегда|правило|исключение|нарочно|сейчас</token> + <token>,</token> + </pattern> + <message>Нет запятой: <suggestion>\1, \2 \3\4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct"><marker>Мы, как правило,</marker> ходим в походы летом.</example> + <example type="incorrect" correction="Мы, как правило,"><marker>Мы как правило,</marker> ходим в походы летом.</example> + </rule> + + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token>как</token> + <token regexp="yes">обычно|всегда|правило|исключение|нарочно|сейчас</token> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Нет запятой: <suggestion>\2 \3,</suggestion></message> + <short>Нет запятой.</short> + <example type="correct">Мы, <marker>как правило,</marker> ходим в походы летом.</example> + <example type="incorrect">Мы, <marker>как правило</marker> ходим в походы летом.</example> + </rule> + + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token>Как</token> + <token regexp="yes">обычно|всегда|правило|исключение|нарочно|сейчас</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Нет запятой: <suggestion>\2 \3, \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct"><marker>Как правило,</marker> мы ходим в походы летом.</example> + <example type="incorrect" correction="Как правило, мы"><marker>Как правило мы</marker> ходим в походы летом.</example> + </rule> + </rulegroup> + <rulegroup id="KAK_I" name="После союза как следует и"> + <!--TODO: Detect 2 comma.--> + <rule> + <pattern case_sensitive="no"> + <token negate="yes" regexp="yes">[\p{Punct}]|так|же|равно|также|время|-|—<exception postag="SENT_START"></exception></token> + <token>как</token> + <token>и</token> + </pattern> + <message>Оборот "как и" выделяется запятыми: <suggestion>\1, \2 \3</suggestion>.</message> + <short>Оборот "как и" выделяется запятыми.</short> + <example type="correct">Мы<marker>, как и наши товарищи,</marker> любим заниматься спортом.</example> + <example type="incorrect"><marker>Мы как и</marker> наши товарищи любим заниматься спортом.</example> + </rule> + + </rulegroup> + <rulegroup default="on" id="A_NO_DA" name="Союзы 'а, но'"> + <rule> + <pattern case_sensitive="yes" mark_to="-1"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—|’|ну|Ну|«<exception postag="SENT_START"></exception></token> + <token>а</token> + <token negate="yes" regexp="yes">[\p{Punct}]|\)</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">И растёт ребёнок там не по дням, а по часам.</example> + <example type="incorrect">И растёт ребёнок там не по <marker>дням а</marker> по часам.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—|«<exception postag="SENT_START"></exception></token> + <token>но</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Она говорила мало, но толково.</example> + <example type="incorrect">Она говорила <marker>мало но</marker> толково.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="VVODNOE_SLOVO" name="Вводные слова: по-видимому, ..."> + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—|как|который|которого|которому| + котором|которая|которой|которую|которые|которых| + которыми|которое|которым<exception postag="SENT_START"></exception></token> + <token regexp="yes">по-видимому|по-моему|по-твоему|впрочем</token> + <token negate="yes">,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2, \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Это показалось ему, по-видимому, странным.</example> + <example type="incorrect" correction="ему, по-видимому, странным">Это показалось <marker>ему по-видимому странным</marker>.</example> + </rule> + + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—|как|который|которого|которому| + котором|которая|которой|которую|которые|которых| + которыми|которое|которым<exception postag="SENT_START"></exception></token> + <token regexp="yes">по-видимому|по-моему|по-твоему|впрочем</token> + <token>,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2\3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Это показалось <marker>ему, по-видимому,</marker> странным.</example> + <example type="incorrect" correction="ему, по-видимому,">Это показалось <marker>ему по-видимому,</marker> странным.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token regexp="yes">по-видимому|по-моему|по-твоему|впрочем</token> + <token negate = "yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Это показалось ему, <marker>по-видимому,</marker> странным.</example> + <example type="incorrect">Это показалось ему, <marker>по-видимому</marker> странным.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token regexp="yes">По-видимому|По-моему|По-твоему|Впрочем</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2, \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">По-видимому, это странное явление.</example> + <example type="incorrect" correction="По-видимому, это"><marker>По-видимому это</marker> странное явление.</example> + </rule> + <rule> + <!-- Вводные слова: итак, следовательно, во-первых, наконец, между прочим, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token regexp="yes">итак|следовательно|во-первых|во-вторых|в-третьих|в-четвертых|в-пятых</token> + <token negate="yes">,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2, \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, во-первых, представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, во-первых, представляет">Эта <marker>работа во-первых представляет</marker> огромную научную ценность.</example> + </rule> + <rule> + <!-- Вводные слова: итак, следовательно, во-первых, наконец, между прочим, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token regexp="yes">итак|следовательно|во-первых|во-вторых|в-третьих|в-четвертых|в-пятых</token> + <token>,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2\3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта <marker>работа, во-первых,</marker> представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, во-первых,">Эта <marker>работа во-первых,</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token regexp="yes">итак|следовательно|во-первых|во-вторых|в-третьих|в-четвертых|в-пятых</token> + <token negate = "yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, <marker>во-первых,</marker> представляет огромную научную ценность.</example> + <example type="incorrect">Эта работа, <marker>во-первых</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token regexp="yes">Итак|Следовательно|Во-первых|Во-вторых|В-третьих|В-четвертых|В-пятых</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2, \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Во-первых, эта работа представляет огромную научную ценность.</example> + <example type="incorrect" correction="Во-первых, эта"><marker>Во-первых эта</marker> работа представляет огромную научную ценность.</example> + </rule> + <rule> + <!-- Вводные слова: видишь (ли), понимаешь (ли), ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token regexp="yes">видишь|понимаешь</token> + <token>ли</token> + <token negate="yes">,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3, \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, видишь ли, представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, видишь ли, представляет">Эта <marker>работа видишь ли представляет</marker> огромную научную ценность.</example> + </rule> + + <rule> + <!-- Вводные слова: видишь (ли), понимаешь (ли), ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token regexp="yes">видишь|понимаешь</token> + <token>ли</token> + <token>,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3\4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта <marker>работа, видишь ли,</marker> представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, видишь ли,">Эта <marker>работа видишь ли,</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token regexp="yes">видишь|понимаешь</token> + <token>ли</token> + <token negate = "yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2 \3,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, <marker>видишь ли,</marker> представляет огромную научную ценность.</example> + <example type="incorrect">Эта работа, <marker>видишь ли</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token regexp="yes">Видишь|Понимаешь</token> + <token>ли</token> + <token negate="yes" regexp="yes">,|.</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2 \3, \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Видишь ли, эта работа представляет огромную научную ценность.</example> + <example type="incorrect" correction="Видишь ли, эта"><marker>Видишь ли эта</marker> работа представляет огромную научную ценность.</example> + </rule> + </rulegroup> + <rulegroup default="off" id="KAK_VVODNOE" name="Слова, которые могут выступать в роли вводных: к счастью, ..."> + <rule> + <!--Вводные слова: к счастью, к несчастью, к радости, к ужасу, к сожалению, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>к</token> + <token regexp="yes">счастью|несчастью|радости|ужасу|сожалению</token> + <token negate="yes">,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Мы, к сожалению, не успели на поезд.</example> + <example type="incorrect" correction="Мы, к сожалению,"><marker>Мы к сожалению не</marker> успели на поезд.</example> + </rule> + + <rule> + <!--Вводные слова: к счастью, к несчастью, к радости, к ужасу, к сожалению, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>к</token> + <token regexp="yes">счастью|несчастью|радости|ужасу|сожалению</token> + <token>,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3\4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Мы, к сожалению, не успели на поезд.</example> + <example type="incorrect" correction="Мы, к сожалению,"><marker>Мы к сожалению,</marker> не успели на поезд.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token>к</token> + <token regexp="yes">счастью|несчастью|радости|ужасу|сожалению</token> + <token negate = "yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2 \3,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Мы, <marker>к сожалению,</marker> не успели на поезд.</example> + <example type="incorrect">Мы, <marker>к сожалению</marker> не успели на поезд.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token>К</token> + <token regexp="yes">счастью|несчастью|радости|ужасу|сожалению</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2 \3, \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">К сожалению, мы не успели на поезд.</example> + <example type="incorrect" correction="К сожалению, мы"><marker>К сожалению мы</marker> не успели на поезд.</example> + </rule> + + <rule> + <!-- Вводные слова: конечно, несомненно, вероятно, может быть, кажется, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—|наиболее|наименее|более|менее<exception postag="SENT_START"></exception></token> + <token regexp="yes">конечно|несомненно|вероятно|кажется</token> + <token negate="yes">,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, несомненно, представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, несомненно,">Эта <marker>работа несомненно представляет</marker> огромную научную ценность.</example> + </rule> + <rule> + <!-- Вводные слова: конечно, несомненно, вероятно, может быть, кажется, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—|наиболее|наименее|более|менее<exception postag="SENT_START"></exception></token> + <token regexp="yes">конечно|несомненно|вероятно|кажется</token> + <token>,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2\3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, несомненно, представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, несомненно,">Эта <marker>работа несомненно,</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token regexp="yes">конечно|несомненно|вероятно|кажется</token> + <token negate = "yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, <marker>конечно,</marker> представляет огромную научную ценность.</example> + <example type="incorrect">Эта работа, <marker>конечно</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token regexp="yes">Конечно|Несомненно|Вероятно|Кажется</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2, \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Несомненно, эта работа представляет огромную научную ценность.</example> + <example type="incorrect" correction="Несомненно, эта"><marker>Несомненно эта</marker> работа представляет огромную научную ценность.</example> + </rule> + <rule> + <!-- Вводные слова: одним словом, вообще, иначе говоря, так сказать, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>одним</token> + <token>словом</token> + <token negate="yes">,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, одним словом, представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, одним словом,">Эта <marker>работа одним словом представляет</marker> огромную научную ценность.</example> + </rule> + <rule> + <!-- Вводные слова: одним словом, вообще, иначе говоря, так сказать, ...--> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>одним</token> + <token>словом</token> + <token>,</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3\4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, одним словом, представляет огромную научную ценность.</example> + <example type="incorrect" correction="работа, одним словом,">Эта <marker>работа одним словом,</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes" mark_from="1" mark_to="-1"> + <token>,<exception postag="SENT_START"></exception></token> + <token>одним</token> + <token>словом</token> + <token negate = "yes" regexp="yes">[\p{Punct}]|-|—</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2 \3,</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Эта работа, <marker>одним словом,</marker> представляет огромную научную ценность.</example> + <example type="incorrect">Эта работа, <marker>одним словом</marker> представляет огромную научную ценность.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token postag="SENT_START"></token> + <token>Одним</token> + <token>словом</token> + <token negate="yes" regexp="yes">[\p{Punct}]</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\2 \3, \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Одним словом, эта работа представляет огромную научную ценность.</example> + <example type="incorrect" correction="Одним словом, эта"><marker>Одним словом эта</marker> работа представляет огромную научную ценность.</example> + </rule> + </rulegroup> + + <rulegroup default="off" id="PREDLOGI_KROME" name="Дополнения, вводимые предлогами: кроме, ..."> + <!--Дополнения, вводимые предлогами: кроме, помимо, вместо, сверх, за исключением + --> + <!--TODO: Detect 2 comma.--> + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token regexp="yes">кроме|помимо|вместо</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">Около костра, кроме Ивана, грелось ещё пять человек.</example> + <example type="incorrect">Около <marker>костра кроме</marker> Ивана грелось ещё пять человек.</example> + </rule> + <rule> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>за</token> + <token>исключением</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">В поход, за исключением Ивана, пошло ещё пять человек.</example> + <example type="incorrect" correction="поход, за исключением">В <marker>поход за исключением</marker> Ивана пошло ещё пять человек.</example> + </rule> + </rulegroup> + <rule default="on" id="V_tom_chisle" name="В том числе"> + <pattern case_sensitive="yes"> + <token negate="yes" regexp="yes">и|[\p{Punct}]|-|—<exception postag="SENT_START"></exception></token> + <token>в</token> + <token>том</token> + <token>числе</token> + </pattern> + <message>Запятая пропущена здесь:<suggestion>\1, \2 \3 \4</suggestion>.</message> + <short>Нет запятой.</short> + <example type="correct">В тайге ещё сохранились редкие хищники, в том числе дальневосточный леопард.</example> + <example type="incorrect">В тайге ещё сохранились редкие <marker>хищники в том числе</marker> дальневосточный леопард.</example> + </rule> + + <rule default="on" id="DEFIS_COMMA" name="Дефис и запятая"> + <pattern> + <token regexp="yes">-|—|–</token> + <token>,</token> + </pattern> + <message>Запятая должна стоять перед тире. Должно быть: <suggestion>\2 \1</suggestion></message> + <short>Запятая - перед тире.</short> + <example type="correct">Здорово живешь, соседка, - поздоровался Иван.</example> + <example type="incorrect">Здорово живешь, соседка<marker> -,</marker> поздоровался Иван.</example> + </rule> + + <rulegroup default="on" id="Hyphen_and_spaces" name="Пробелы перед/после дефиса."> + <rule> + <pattern case_sensitive="yes"> + <token regexp="yes">.*[а-я]</token> + <token spacebefore="yes" regexp="yes">-[а-я].*</token> + </pattern> + <message>Перед дефисом не должно быть пробела: <suggestion>\1\2</suggestion></message> + <short>Лишний пробел.</short> + <example type="correct">Кое-кто пошёл в магазин.</example> + <example type="incorrect"><marker>Кое -кто</marker> пошёл в магазин.</example> + </rule> + + <rule> + <pattern case_sensitive="yes"> + <token regexp="yes">.*[а-я]-</token> + <token spacebefore="yes" regexp="yes">[а-я][а-я].*</token> + </pattern> + <message>После дефиса не должно быть пробела: <suggestion>\1\2</suggestion></message> + <short>Лишний пробел.</short> + <example type="correct">Кое-кто пошёл в магазин.</example> + <example type="incorrect"><marker>Кое- кто</marker> пошёл в магазин.</example> + </rule> + </rulegroup> + + + <rulegroup default="on" id="NO_KAK_POPALO" name="Что угодно, как попало"> + <!--Что угодно, как попало не выделяются запятыми. + --> + <rule> + <pattern> + <token>,</token> + <token regexp="yes">что|как</token> + <token regexp="yes">попало|угодно</token> + </pattern> + <message>Запятая не нужна:<suggestion> \2 \3</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">Работа была сделана как попало.</example> + <example type="incorrect">Работа была сделана<marker>, как попало</marker>.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="NO_NE_KAK" name="Почти как, не как, ..."> + <!--Перед сравнительным оборотом стоит не или слова совсем, совершенно, почти, именно запятая не ставится. + --> + <rule> + <pattern> + <token regexp="yes">не|совсем|совершенно|почти|именно</token> + <token>,</token> + <token>как</token> + </pattern> + <message>Запятая не нужна:<suggestion>\1 \3</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">Работа была сделана совсем как попало.</example> + <example type="incorrect">Работа была сделана <marker>совсем, как</marker> попало.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="NO_NE_TO_CHTO" name="Не то что, не так чтобы, не иначе как"> + <!-- Внутри сочетаний не то что, не то (так) чтобы, не иначе как запятая не ставится. + --> + <rule> + <pattern> + <token>не</token> + <token regexp="yes">то|иначе</token> + <token>,</token> + <token regexp="yes">что|как|чтобы</token> + </pattern> + <message>Запятая не нужна:<suggestion>\1 \2 \4</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">Работа была сделана не иначе как полностью.</example> + <example type="incorrect">Работа была сделана <marker>не иначе, как</marker> полностью.</example> + </rule> + <rule> + <pattern> + <token>не</token> + <token>так</token> + <token>,</token> + <token>чтобы</token> + </pattern> + <message>Запятая не нужна:<suggestion>\1 \2 \4</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">Работа была сделана не так чтобы полностью.</example> + <example type="incorrect">Работа была сделана <marker>не так, чтобы</marker> полностью.</example> + </rule> + + </rulegroup> + <rulegroup default="on" id="I_TO_I_SE" name="Цельные выражения: ни рыба ни мясо, ..."> + <!-- Запятая не ставится в цельных выражениях: + и то и се, + ни то ни се, + ни свет ни заря, + и так и сяк, + и туда и сюда, + ни рыба ни мясо, + ни жив ни мертв. + --> + <rule> + <pattern> + <token regexp="yes">и|ни</token> + <token>то</token> + <token>,</token> + <token regexp="yes">и|ни</token> + <token regexp="yes">се|сё</token> + </pattern> + <message>Запятая не нужна:<suggestion>\1 \2 \4 \5</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">И то и сё.</example> + <example type="incorrect"><marker>И то, и сё</marker>.</example> + </rule> + + <rule> + <pattern> + <token>ни</token> + <token regexp="yes">свет|рыба|жив</token> + <token>,</token> + <token>ни</token> + <token regexp="yes">заря|мясо|мертв|мёртв</token> + </pattern> + <message>Запятая не нужна:<suggestion>\1 \2 \4 \5</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">Он проснулся ни свет ни заря</example> + <example type="incorrect">Он проснулся <marker>ни свет, ни заря</marker>.</example> + </rule> + <rule> + <pattern> + <token>и</token> + <token regexp="yes">так|туда</token> + <token>,</token> + <token>и</token> + <token regexp="yes">сяк|сюда</token> + </pattern> + <message>Запятая не нужна:<suggestion>\1 \2 \4 \5</suggestion>.</message> + <short>Запятая не нужна.</short> + <example type="correct">И так и сяк.</example> + <example type="incorrect"><marker>И так, и сяк</marker>.</example> + </rule> + + </rulegroup> + </category> + <category name="Типографика"> + <rule default="off" id="KAVITCHKI" name="„ → ”"> + <pattern> + <token>“</token> + </pattern> + <message>Кавычки не соответствуют нормам типографики. Должно быть: <suggestion>„</suggestion>пример<suggestion>”</suggestion>.</message> + <short>Неправильные кавычки.</short> + <example type="correct">Газета „Правда”.</example> + <example correction="„|”" type="incorrect">Газета <marker>“</marker>Правда”.</example> + </rule> + <rule default="off" id="Three_dot" name="... → …"> + <pattern> + <token>.</token> + <token>.</token> + <token>.</token> + </pattern> + <message>Заменить на типографский символ троеочия?<suggestion>…</suggestion></message> + <short>Заменить на троеточие?</short> + <example type="correct">Продолжение следует…</example> + <example type="incorrect">Продолжение следует<marker>...</marker></example> + </rule> + + <rule default="on" id="PUNKT_KAVITCHKI" name="Кавычки и знаки препинания"> + <pattern> + <token spacebefore="no" regexp="yes">;|:|-|—</token> + <token regexp="yes">»|\)</token> + </pattern> + <message>Знаки препинания должны стоять после закрывающихся кавычек или скобок. Должно быть: <suggestion>\2\1</suggestion></message> + <short>Знаки препинания - после кавычек/скобок.</short> + <example type="correct">Газета «Правда»: "У нас опубликована сенсационная статья"!</example> + <example type="correct">У нас опубликована сенсационная ;) статья.</example> + <example type="incorrect">Газета «Правда<marker>:»</marker> "У нас опубликована сенсационная статья"!</example> + </rule> + + <rulegroup default="on" id="Digit_defis_letter" name="Окончания порядковых числительных"> + <rule> + <pattern> + <token regexp="yes">[\p{Digit}](й|го|му|м|о|я|е|ми|х)</token> + </pattern> + <message>Пропущен дефис. Должно быть: <suggestion><match no="1" regexp_match="([\p{Digit}])(й|го|му|м|о|я|е|ми|х)" regexp_replace="$1-$2"/></suggestion></message> + <short>Пропущен дефис.</short> + <example type="correct">План должен быть выполнен к 6-му сентября.</example> + <example type="incorrect">План должен быть выполнен к <marker>6му</marker> сентября.</example> + </rule> + <rule> + <pattern> + <token regexp="yes">[\p{Digit}]</token> + <token regexp="yes">й|го|му|о|я|е|ми|х</token> + </pattern> + <message>Пропущен дефис. Должно быть: <suggestion>\1-\2</suggestion></message> + <short>Пропущен дефис.</short> + <example type="correct">План должен быть выполнен к 6-му сентября.</example> + <example type="incorrect">План должен быть выполнен к <marker>6 му</marker> сентября.</example> + </rule> + </rulegroup> + + + </category> + <category name="Грамматика"> + + <rulegroup default="on" id="SoglasovanieP" name="Согласование падежей"> + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:.*:Nom NN:.*:.*:Nom --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:.*:Nom"></exception></token> + <token postag="ADJ:.*:Nom" postag_regexp="yes"><exception negate_pos="yes" postag="ADJ:.*:Nom" postag_regexp="yes"></exception><exception scope="previous" postag_regexp="yes" postag="NN:.*" ></exception></token> + <token postag="NN:(.*):(.*):.*" skip ="-1" postag_regexp="yes"><exception postag="NN:.*:.*:Nom" postag_regexp="yes"></exception><exception scope="next" postag="NN:.*:.*:Nom" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + <message>Прилагательное не согласуется с существительным по падежу. + <suggestion><match no="2"></match> <match no="3" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:Nom" ></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании падежей.</short> + <example type="correct">Добротная усадьба.</example> + <example type="incorrect"><marker>Добротная усадьбе</marker>.</example> + </rule> + <rule> + <pattern mark_from="1" mark_to="-1"> + + <!-- ADJ:.*:R NN:.*:.*:R --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:.*:R"></exception></token> + <token postag="ADJ:(.*):.*" postag_regexp="yes"><exception postag="ADJ:.*:R" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:(.*):.*" postag_regexp="yes"/><exception scope="previous" postag="NN:.*" postag_regexp="yes"></exception></token> + <token postag="NN:.*:.*:R" skip ="-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:R" postag_regexp="yes"></exception><exception negate_pos="yes" scope= "next" postag="NN:.*:.*:R" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по падежу. + <suggestion><match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:R"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании падежей.</short> + <example type="correct">Нет крепкого сна.</example> + <example type="incorrect">Нет <marker>крепкому сна</marker>.</example> + </rule> + + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:.*:D NN:.*:.*:D --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:.*:D"></exception></token> + <token postag="ADJ:(.*):.*" postag_regexp="yes"><exception postag="ADJ:.*:D" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:(.*):.*" postag_regexp="yes"/><exception scope="previous" postag="NN:.*" postag_regexp="yes"></exception></token> + <token postag="NN:.*:.*:D" skip = "-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:D" postag_regexp="yes"></exception><exception negate_pos="yes" scope ="next" postag="NN:.*:.*:D" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по падежу. + <suggestion><match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:D"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании падежей.</short> + <example type="correct">Вода стекала по мягкому жёлобу.</example> + <example type="incorrect">Вода стекала по <marker>мягкого жёлобу</marker>.</example> + </rule> + + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:.*:V NN:.*:.*:V --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:.*:V"></exception></token> + <token postag="ADJ:(.*):.*" postag_regexp="yes"><exception postag="ADJ:.*:V" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:(.*):.*" postag_regexp="yes"/><exception scope="previous" postag_regexp="yes" postag="NN:.*" ></exception></token> + <token postag="NN:.*:.*:V" skip="-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:V" postag_regexp="yes"></exception><exception negate_pos="yes" scope= "next" postag="NN:.*:.*:V" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по падежу. + <suggestion><match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:V"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании падежей.</short> + <example type="correct">Мы увидели бурную реку.</example> + <example type="incorrect">Мы увидели <marker>бурной реку</marker>.</example> + </rule> + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:.*:T NN:.*:.*:T --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:.*:T"></exception></token> + <token postag="ADJ:(.*):.*" postag_regexp="yes"><exception postag="ADJ:.*:T" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:(.*):.*" postag_regexp="yes"/><exception scope="previous" postag="NN:.*" postag_regexp="yes"></exception></token> + <token postag="NN:.*:.*:T" skip = "-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:T" postag_regexp="yes"></exception><exception negate_pos="yes" scope="next" postag="NN:.*:.*:T" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по падежу. + <suggestion><match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:T"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании падежей.</short> + <example type="correct">Они справились с бурной рекой</example> + <example type="incorrect">Они справились с <marker>бурную рекой</marker>.</example> + </rule> + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:.*:P NN:.*:.*:P --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:.*:P"></exception></token> + <token postag="ADJ:(.*):.*" postag_regexp="yes"><exception postag="ADJ:.*:P" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:(.*):.*" postag_regexp="yes"/><exception scope="previous" postag="NN:.*" postag_regexp="yes"></exception></token> + <token postag="NN:.*:.*:P" skip="-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:P" postag_regexp="yes"></exception><exception negate_pos="yes" scope="next" postag="NN:.*:.*:P" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по падежу. + <suggestion><match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:P"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании падежей.</short> + <example type="correct">Они думали о родном доме.</example> + <example type="incorrect">Они думали о <marker>родного доме</marker>.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="SoglasovanieG" name="Согласование слов по роду/числу"> + <rule> + + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:Masc NN:Masc --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:Masc:Sin:.*"></exception></token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:Masc:.*" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:.*:.*" postag_regexp="yes"/><exception scope="previous" postag="NumC:.*|Num:.*" postag_regexp="yes"></exception><exception scope="previous" regexp="yes">[\p{Digit}]*</exception></token> + <token postag="NN:Masc:Sin:.*" skip="-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:Masc:Sin:.*" postag_regexp="yes"></exception><exception postag="NN:Masc:Sin:.*" scope= "next" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по роду. + <suggestion><match no="2" postag="ADJ:.*:(.*)" postag_regexp="yes" postag_replace="ADJ:Masc:$1"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании по роду.</short> + <example type="correct">Был построен добротный дом.</example> + <example type="incorrect">Был построен <marker>добротная дом</marker>.</example> + </rule> + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:Fem NN:Fem --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:Fem:Sin:.*"></exception></token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:Fem:.*" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:.*:.*" postag_regexp="yes"/><exception scope="previous" postag="NumC:.*|Num:.*" postag_regexp="yes"></exception><exception scope="previous" regexp="yes">[\p{Digit}]*</exception></token> + <token postag="NN:Fem:Sin:.*" skip="-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:Fem:Sin:.*" postag_regexp="yes"></exception><exception postag="NN:Fem:Sin:.*" scope="next" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по роду. + <suggestion><match no="2" postag="ADJ:.*:(.*)" postag_regexp="yes" postag_replace="ADJ:Fem:$1"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании по роду.</short> + <example type="correct">Пушистая кошка грелась на солнышке.</example> + <example type="incorrect">Эта <marker>пушистое кошка</marker> грелась.</example> + </rule> + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:Neut NN:Neut --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:Neut:Sin:.*"></exception></token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:Neut:.*" postag_regexp="yes"></exception><exception negate_pos="yes" postag="ADJ:.*:.*" postag_regexp="yes"/><exception scope="previous" postag="NumC:.*|Num:.*" postag_regexp="yes"></exception><exception scope="previous" regexp="yes">[\p{Digit}]*</exception></token> + <token postag="NN:Neut:Sin:.*" skip="-1" postag_regexp="yes"><exception negate_pos="yes" postag="NN:Neut:Sin:.*" postag_regexp="yes"></exception><exception postag="NN:Neut:Sin:.*" scope="next" postag_regexp="yes"></exception></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по роду. + <suggestion><match no="2" postag="ADJ:.*:(.*)" postag_regexp="yes" postag_replace="ADJ:Neut:$1"></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании по роду.</short> + <example type="correct">Вдали виднелось синее небо.</example> + <example type="incorrect">Вдали виднелось <marker>синий небо</marker>.</example> + </rule> + + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:PL NN:.*:PL --> + + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:PL:.*"></exception></token> + <token postag="ADJ:PL:.*" postag_regexp="yes"><exception negate_pos="yes" postag="ADJ:PL:.*" postag_regexp="yes"></exception> <exception scope="previous" postag="NumC:.*|Num:.*" postag_regexp="yes"></exception><exception scope="previous" regexp="yes">[\p{Digit}]*</exception> </token> + <token postag="NN:.*:.*:.*" skip="-1" postag_regexp="yes"><exception postag="NN:.*:PL:.*" postag_regexp="yes"></exception><exception postag="NN:.*:PL:.*" scope="next" postag_regexp="yes"></exception><exception negate_pos="yes" postag="NN:.*:.*:.*" postag_regexp="yes"/></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по числу.</message> + <short>Грамматическая ошибка в согласовании по числу.</short> + <example type="correct">Вдали виднелись красивые сосны.</example> + <example type="incorrect">Вдали виднелись <marker>красивые ёлка</marker>.</example> + </rule> + <rule> + <pattern mark_from="1" mark_to="-1"> + <!-- ADJ:!PL NN:.*:Sin --> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag_regexp="yes" postag="NN:.*:Sin:.*"></exception></token> + <token postag="ADJ:.*:(.*)" postag_regexp="yes"><exception negate_pos="yes" postag="ADJ:.*:(.*)" postag_regexp="yes"></exception><exception postag="ADJ:PL:.*" postag_regexp="yes"></exception><exception regexp="yes" scope="previous">и|или|но|да</exception></token> + <token postag="NN:.*:.*:.*" skip="-1" postag_regexp="yes"><exception postag="NN:.*:Sin:.*" postag_regexp="yes"></exception><exception postag="NN:.*:Sin:.*" scope="next" postag_regexp="yes"></exception><exception negate_pos="yes" postag="NN:.*:.*:.*" postag_regexp="yes"/></token> + <token regexp="yes">.|;</token> + </pattern> + + <message>Прилагательное не согласуется с существительным по числу. + <suggestion><match no="2" postag="ADJ:.*:(.*)" postag_regexp="yes" postag_replace="ADJ:PL:$1" ></match> <match no="3"></match></suggestion> + </message> + <short>Грамматическая ошибка в согласовании по числу.</short> + <example type="correct">Мебель сделана из красивой сосны.</example> + <example type="incorrect">Столы сделаны из <marker>красивой сосен</marker>.</example> + </rule> + + + + </rulegroup> + + <rulegroup default="on" id="O_P_padeg" name="Предлоги и предложный падеж"> + <rule> + <pattern mark_from="1"> + <token postag="SENT_START" skip ="-1"><exception regexp="yes" scope="next" >о|обо|об|в|во|при|по|на|и|или|но|да</exception></token> + <token postag="NN:.*:.*:P" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:P" postag_regexp="yes"></exception><exception regexp="yes" scope="previous">«|[\p{Punct}]|[\p{Digit}]*</exception></token> + </pattern> + <message>Предложный падеж предполагает наличие предлога (о – обо – об; в – во; при; по; на): <suggestion>о \2</suggestion>, <suggestion>об \2</suggestion>, <suggestion>обо \2</suggestion>, <suggestion>в \2</suggestion>, <suggestion>во \2</suggestion>, <suggestion>при \2</suggestion>, <suggestion>по \2</suggestion>, <suggestion>на \2</suggestion>.</message> + <short>Пропущен предлог.</short> + <example type="correct">Они думали о доме.</example> + <example type="incorrect">Они думали <marker>доме</marker>.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="SENT_START"></token> + <token postag="NN:.*:.*:P" postag_regexp="yes"><exception negate_pos="yes" postag="NN:.*:.*:P" postag_regexp="yes"></exception></token> + </pattern> + <message>Предложный падеж предполагает наличие предлога (о – обо – об; в – во; при; по; на): <suggestion>О <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>Об <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>Обо <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>В <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>Во <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>При <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>По <match no="2" case_conversion ="startlower"/></suggestion>, <suggestion>На <match no="2" case_conversion ="startlower"/></suggestion>.</message> + <short>Пропущен предлог.</short> + <example type="correct">О доме они думали.</example> + <example type="incorrect"><marker>Доме</marker> они думали.</example> + </rule> + </rulegroup> + + <rulegroup default="on" id="Com_Num" name="Собирательные числительные"> + <rule> + <pattern> + <token regexp= "yes">пятеро|шестеро|семеро</token> + <token postag="NN:Fem:.*" postag_regexp="yes"></token> + </pattern> + <!-- согласовать падежи для коррекции ошибок - выполнено + --> + <message>Собирательные числительные (двое, трое, четверо, пятеро, шестеро, семеро) НЕЛЬЗЯ употреблять с существительными женского рода + <suggestion><match no="1" regexp_match="(пят|шест|сем)еро" regexp_replace="$1ь" ></match> <match no="2"></match></suggestion> + </message> + <short>Грамматическая ошибка.</short> + <example type="correct">Здесь было семь подруг.</example> + <example type="incorrect">Здесь было <marker>семеро подруг</marker>.</example> + <example type="incorrect">Здесь было <marker>пятеро подруг</marker>.</example> + </rule> + <rule> + <pattern> + <token>двое</token> + <token postag="NN:Fem:.*" postag_regexp="yes"></token> + </pattern> + <message>Собирательные числительные (двое, трое, четверо, пятеро, шестеро, семеро) НЕЛЬЗЯ употреблять с существительными женского рода + <suggestion>две <match no="2" postag="NN:Fem:PL:Nom"></match></suggestion> + </message> + <short>Грамматическая ошибка.</short> + <example type="correct">Здесь были две подруги.</example> + <example type="incorrect">Здесь были <marker>двое подруг</marker>.</example> + </rule> + <rule> + <pattern> + <token>трое</token> + <token postag="NN:Fem:.*" postag_regexp="yes"></token> + </pattern> + <message>Собирательные числительные (двое, трое, четверо, пятеро, шестеро, семеро) НЕЛЬЗЯ употреблять с существительными женского рода + <suggestion>три <match no="2" postag="NN:Fem:PL:Nom"></match></suggestion> + </message> + <short>Грамматическая ошибка.</short> + <example type="correct">Здесь были три подруги.</example> + <example type="incorrect">Здесь были <marker>трое подруг</marker>.</example> + </rule> + <rule> + <pattern> + <token>четверо</token> + <token postag="NN:Fem:.*" postag_regexp="yes"></token> + </pattern> + <message>Собирательные числительные (двое, трое, четверо, пятеро, шестеро, семеро) НЕЛЬЗЯ употреблять с существительными женского рода + <suggestion>четыре <match no="2" postag="NN:Fem:PL:Nom"></match></suggestion> + </message> + <short>Грамматическая ошибка.</short> + <example type="correct">Здесь были четыре подруги.</example> + <example type="incorrect">Здесь были <marker>четверо подруг</marker>.</example> + </rule> + </rulegroup> + + <rulegroup default="on" id="Oba_obe" name="Числительные оба/обе"> + <rule> + <pattern> + <token regexp= "yes">оба|обоих|обоим|обоими</token> + <token postag="NN:Fem:.*" postag_regexp="yes"><exception negate_pos="yes" postag="NN:Fem:.*" postag_regexp="yes"></exception></token> + </pattern> + <message>Числительное оба (обоих, обоим, обоими) употребляется только с существительными мужского рода: <suggestion>обе \2</suggestion>,<suggestion>обеих \2</suggestion>,<suggestion>обеим \2</suggestion>,<suggestion>обеими \2</suggestion>.</message> + <short>Грамматическая ошибка.</short> + <example type="correct">По обеим сторонам.</example> + <example type="incorrect">По <marker>обоим сторонам</marker>.</example> + </rule> + + <rule> + <pattern> + <token regexp= "yes">обе|обеих|обеим|обеими</token> + <token postag="NN:Masc:.*" postag_regexp="yes"><exception negate_pos="yes" postag="NN:Masc:.*" postag_regexp="yes"></exception></token> + </pattern> + <message>Числительное обe (обеих, обеим, обеими) употребляется только с существительными женского рода: <suggestion>оба \2</suggestion>,<suggestion>обоих \2</suggestion>,<suggestion>обоим \2</suggestion>,<suggestion>обоими \2</suggestion>.</message> + <short>Грамматическая ошибка.</short> + <example type="correct">На обоих столах.</example> + <example type="incorrect">На <marker>обеих столах</marker>.</example> + </rule> + </rulegroup> + + <rulegroup default="on" id="Pnn_compose_error" name="Ошибки в образовании местоимений"> + + <rule> + <pattern> + <token regexp= "yes">ихний|ихняя|ихнее|ихнего|ихнему|ихним|ихнем|ихней|ихнюю</token> + </pattern> + <message>Правильная форма - <suggestion>их</suggestion>.</message> + <short>Правильная форма - "их".</short> + <example type="correct">Там находится их дом.</example> + <example type="incorrect">Там находится <marker>ихний</marker> дом.</example> + </rule> + + </rulegroup> + + + <rulegroup default="on" id="Ne_pril_prich" name="Не с прилагательными/причастиями"> + <rule> + <pattern mark_from="1"> + <token regexp= "yes">очень|весьма|крайне|совершенно|вполне|почти|отчасти|совсем|чрезвычайно</token> + <token>не</token> + <token postag="ADJ:.*" postag_regexp="yes"></token> + </pattern> + <message>Пишется слитно: <suggestion>\2\3</suggestion>.</message> + <short>Слитно с не</short> + <example type="correct">Этот поступок был крайне неосторожным.</example> + <example type="incorrect">Этот поступок был крайне <marker>не осторожным</marker>.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token regexp= "yes">очень|крайне|совершенно|совсем|чрезвычайно</token> + <token>не</token> + <token postag="PT:.*" postag_regexp="yes"></token> + </pattern> + <message>Пишется слитно: <suggestion>\2\3</suggestion>.</message> + <short>Слитно с не</short> + <example type="correct">Это совсем непродуманное решение.</example> + <example type="incorrect">Это совсем <marker>не продуманное</marker> решение.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="Kak_budto" name="Сложный союз (частица) “как будто”"> + <rule> + <pattern case_sensitive="no"> + <token>какбудто</token> + </pattern> + <message>Сложный союз (частица) "как будто" пишется раздельно: <suggestion>как будто</suggestion>.</message> + <short>"Как будто" пишется раздельно.</short> + <example type="correct"><marker>Как будто</marker> время остановилось.</example> + <example type="incorrect"><marker>Какбудто</marker> время остановилось.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="Pravopisanie_slitno1" name="Правописание слов “наверху”, “внизу” ..."> + <!-- To Do +ввиду (но: иметь в виду) +вглубь +вдоль +взамен +вместо +вне +заместо +навстречу +накануне +наподобие +напротив +насчёт +ниже +посередине +сверх +свыше +согласно +--> + <rule> + <!-- внизу, снизу, наверху, вверху, сверху + --> + <pattern case_sensitive="no"> + <token regexp = "yes">на|в|с</token> + <token regexp = "yes">верху|низу</token> + </pattern> + <message>Слово пишется слитно: <suggestion>\1\2</suggestion>.</message> + <short>Пишется слитно.</short> + <example type="correct">Он будет <marker>наверху</marker>.</example> + <example type="incorrect">Он будет <marker>на верху</marker>.</example> + </rule> + + + <rule> + <!-- поверх, подо, помимо + --> + <pattern case_sensitive="no"> + <token>по</token> + <token regexp = "yes">верх|до|мимо</token> + </pattern> + <message>Слово пишется слитно: <suggestion>\1\2</suggestion>.</message> + <short>Пишется слитно.</short> + <example type="correct"><marker>Помимо</marker> чисто игровых проблем на ситуацию в таблице могут влиять и различные нюансы.</example> + <example type="incorrect"><marker>По мимо</marker> чисто игровых проблем на ситуацию в таблице могут влиять и различные нюансы.</example> + </rule> + <rule> + <!-- невзирая на, несмотря на + --> + <pattern case_sensitive="no"> + <token>не</token> + <token regexp = "yes">взирая|смотря</token> + <token>на</token> + </pattern> + <message>Слово пишется слитно: <suggestion>\1\2 \3</suggestion>.</message> + <short>Пишется слитно.</short> + <example type="correct">Премия в этом году состоялась <marker>невзирая на</marker> кризис.</example> + <example type="incorrect">Премия в этом году состоялась <marker>не смотря на</marker> кризис.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="Vo_chto_by_to_ni_stalo" name="“Во что бы то ни стало”"> + <rule> + <pattern case_sensitive="no"> + <token>во</token> + <token>чтобы</token> + <token>то</token> + <token regexp="yes">ни|не</token> + <token>стало</token> + </pattern> + <message>Пишется раздельно: <suggestion>во что бы то ни стало</suggestion>.</message> + <short>Пишется раздельно: “во что бы то ни стало”.</short> + <example type="correct">Мы должны попасть домой <marker>во что бы то ни стало</marker>.</example> + <example type="incorrect">Мы должны попасть домой <marker>во чтобы то ни стало</marker>.</example> + </rule> + <rule> + <pattern case_sensitive="no"> + <token>во</token> + <token>что</token> + <token>бы</token> + <token>то</token> + <token>не</token> + <token>стало</token> + </pattern> + <message>Пишется раздельно: <suggestion>во что бы то ни стало</suggestion>.</message> + <short>Пишется раздельно: “во что бы то ни стало”.</short> + <example type="correct">Мы должны попасть домой <marker>во что бы то ни стало</marker>.</example> + <example type="incorrect">Мы должны попасть домой <marker>во что бы то не стало</marker>.</example> + </rule> + + </rulegroup> + + <rulegroup default="on" id="Tak_je_kak_i" name="Сложный союз “так же как и”"> + <rule> + <pattern case_sensitive="no"> + <token>также</token> + <token>как</token> + <token>и</token> + </pattern> + <message>Сложный союз: <suggestion>так же \2 \3</suggestion>.</message> + <short>Сложный союз "так же как и".</short> + <example type="correct">Мы, <marker>так же как и</marker> наши товарищи, любим заниматься спортом.</example> + <example type="incorrect">Мы, <marker>также как и</marker> наши товарищи, любим заниматься спортом.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="V_K_S" name="Беглая гласная в предлогах: в, к, с, без, из ..."> + <rule> + <pattern> + <token>во</token> + <token regexp="yes">[аёоуыэюяьън].*</token> + </pattern> + <message>Неправильная форма предлога. Буква "о" не нужна. Должно быть: <suggestion>в \2</suggestion>.</message> + <short>Буква "о" не нужна.</short> + <example type="correct">Мы видели её в окне.</example> + <example type="incorrect">Мы видели её <marker>во окне</marker>.</example> + </rule> + <rule> + <pattern> + <token>ко</token> + <token regexp="yes">[аеёиоуыэюяьън].*</token> + </pattern> + <message>Неправильная форма предлога. Буква "о" не нужна. Должно быть: <suggestion>к \2</suggestion>.</message> + <short>Буква "о" не нужна.</short> + <example type="correct">Мы успели к обеду.</example> + <example type="incorrect">Мы успели <marker>ко обеду</marker>.</example> + </rule> + <rule> + <pattern> + <token>cо</token> + <token regexp="yes">[аеёиоуыэюяьънбгдкптфхцч].*</token> + </pattern> + <message>Неправильная форма предлога. Буква "о" не нужна. Должно быть: <suggestion>c \2</suggestion>.</message> + <short>Буква "о" не нужна.</short> + <example type="correct">Иван взял сумку с едой.</example> + <example type="incorrect">Иван взял сумку <marker>cо едой</marker>.</example> + </rule> + <rule> + <pattern> + <token>безо</token> + <token regexp="yes">[аеёиоуыэюяьън].*</token> + </pattern> + <message>Неправильная форма предлога. Буква "о" не нужна. Должно быть: <suggestion>без \2</suggestion>.</message> + <short>Буква "о" не нужна.</short> + <example type="correct">Он убегал без оглядки.</example> + <example type="incorrect">Он убегал <marker>безо оглядки</marker>.</example> + </rule> + <rule> + <pattern> + <token>изо</token> + <token regexp="yes">[аеёиоуыэюяьън].*</token> + </pattern> + <message>Неправильная форма предлога. Буква "о" не нужна. Должно быть: <suggestion>из \2</suggestion>.</message> + <short>Буква "о" не нужна.</short> + <example type="correct">Из окна выпал пакет.</example> + <example type="incorrect"><marker>Изо окна</marker> выпал пакет.</example> + </rule> + </rulegroup> + <rulegroup default="off" id="S_SO" name="Беглая гласная в предлогах: c, co."> + <rule> + <pattern> + <token>с</token> + <token regexp="yes">[сзшжлрмщ][йцкнгшщзхфвпрлджчсмтб].*|ль[йцкнгшщзхфвпрлджчсмтб].*</token> + </pattern> + <message>Неправильная форма предлога. Должно быть: <suggestion>со \2</suggestion>.</message> + <short>Неправильная форма предлога.</short> + <example type="correct">Кошка спрыгнула со шкафа.</example> + <example type="incorrect">Кошка спрыгнула <marker>с шкафа</marker>.</example> + </rule> + </rulegroup> + + <rulegroup default="on" id="O_OB_OBO" name="Правописание предлогов о, об, обо"> + <rule> + <pattern> + <token regexp="yes">обо|о</token> + <token regexp="yes">[аиоуэ].*<exception>и</exception></token> + </pattern> + <message>Неправильная форма предлога. Должно быть: <suggestion>об \2</suggestion>.</message> + <short>Неправильная форма предлога.</short> + <example type="correct">Об интернете.</example> + <example type="incorrect"><marker>О интернете</marker>.</example> + </rule> + <rule> + <pattern> + <token regexp="yes">об|о</token> + <token regexp="yes">мне|всё|что</token> + </pattern> + <message>Неправильная форма предлога. Должно быть: <suggestion>обо \2</suggestion>.</message> + <short>Неправильная форма предлога.</short> + <example type="correct">Они говорили обо мне.</example> + <example type="incorrect">Они говорили <marker>об мне</marker>.</example> + </rule> + <rule> + <pattern> + <token>об</token> + <token regexp="yes">всём|всей|всех|всем</token> + </pattern> + <message>Неправильная форма предлога. Должно быть: <suggestion>обо \2</suggestion> или <suggestion>о \2</suggestion>.</message> + <short>Неправильная форма предлога.</short> + <example type="correct">Обо всём.</example> + <example type="incorrect"><marker>Об всём</marker>.</example> + </rule> + </rulegroup> + + <rule default="on" id="Verb_and_PREP" name="Глагол и предлог"> + <pattern> + <!-- PREP VB:.* --> + <token postag="PREP" postag_regexp="yes"><exception negate_pos="yes" postag="PREP" postag_regexp="yes"></exception><exception>спустя</exception></token> + <token postag="VB:.*" postag_regexp="yes"><exception negate_pos="yes" postag="VB:.*" postag_regexp="yes"></exception></token> + + </pattern> + <message>Предлог перед глаголом не употребляется. Должно быть: <suggestion>\2</suggestion> или <suggestion>\2 \1</suggestion>.</message> + <short>Предлог перед глаголом не употребляется.</short> + <example type="correct">Он пошёл в лес.</example> + <example type="incorrect">Он <marker>в пошёл</marker> лес.</example> + </rule> + + <rule default="on" id="PREP_and_PNN" name="Предлог и местоимения"> + + <pattern mark_to="-1" > + <!-- PREP (его, ему, ей... ) -> PREP (него, нему, ней... ) --> + <token postag="PREP" postag_regexp="yes"><exception negate_pos="yes" postag="PREP" postag_regexp="yes"></exception><exception regexp="yes">по|в|благодаря|наперекор|вопреки|согласно|навстречу</exception></token> + <and> + <token postag="PNN:.*:P3" postag_regexp="yes"><exception postag="PNN:.*:Nom:P3" postag_regexp="yes"></exception></token> + <token regexp="yes" negate="yes" >[н].*</token> + </and> + <token postag="SENT_END"></token> + </pattern> + <message>У местоимений 3 лица в косвенных падежах пишется начальная н, если эти местоимения употребляются после предлогов: <suggestion>\1 н\2</suggestion>.</message> + <short>Пропущена начальная буква “н”</short> + <example type="correct">Он пошёл к нему.</example> + <example type="correct">Дело удалось благодаря его усилиям.</example> + <example type="incorrect">Он подошёл <marker>к ему</marker>.</example> + </rule> + <rule default="on" id="PREP_K_and_Noun" name="Предлог “к” и существительное"> + <pattern> + <!-- PREP к, ко -> NN:.*:D --> + <token regexp="yes">к|ко</token> + <token postag="NN:.*:.*:.*" postag_regexp="yes"><exception postag="NN:.*:.*:D" postag_regexp="yes"></exception><exception postag="NN:.*:.*:.*" negate_pos = "yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлог “к” предполагает употребление существительного в дательном падеже: + <suggestion><match no="1"></match> <match no="2" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:D"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется дательный падеж.</short> + <example type="correct">Он подошёл к дому.</example> + <example type="incorrect">Он подошёл <marker>к дом</marker>.</example> + </rule> + <rule default="on" id="PREP_K_and_ADJ" name="Предлог “к” и прилагательное"> + <pattern> + <!-- PREP к, ко -> ADJ:.*:D --> + <token regexp="yes">к|ко</token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:.*:D" postag_regexp="yes"></exception><exception postag="ADJ:.*:.*" negate_pos="yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлог “к” предполагает употребление прилагательного в дательном падеже: + <suggestion><match no="1"></match> <match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:D"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется дательный падеж.</short> + <example type="correct">Он подошёл к зелёному дому.</example> + <example type="incorrect">Он подошёл <marker>к зелёный</marker> дому.</example> + </rule> + + <rule default="on" id="PREP_Nad_and_Noun" name="Предлоги “над”, “перед” и существительное"> + <pattern> + <!-- PREP над, перед -> NN:.*:T --> + <token regexp="yes">над|перед</token> + <token postag="NN:.*:.*:.*" postag_regexp="yes"><exception postag="NN:.*:.*:T" postag_regexp="yes"></exception><exception postag="NN:.*:.*:.*" negate_pos = "yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлоги “над” и “перед” предполагают употребление существительного в творительном падеже: + <suggestion><match no="1"></match> <match no="2" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:T"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется творительный падеж.</short> + <example type="correct">Перед закатом.</example> + <example type="incorrect"><marker>Перед закат</marker>.</example> + </rule> + <rule default="on" id="PREP_Nad_and_ADJ" name="Предлоги “над”, “перед” и прилагательное"> + <pattern> + <!-- PREP над, перед -> ADJ:.*:T --> + <token regexp="yes">над|перед</token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:.*:T" postag_regexp="yes"></exception><exception postag="ADJ:.*:.*" negate_pos="yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлоги “над” и “перед” предполагают употребление прилагательного в творительном падеже: + <suggestion><match no="1"></match> <match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:T"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется творительный падеж.</short> + <example type="correct">Перед багровым закатом.</example> + <example type="incorrect"><marker>Перед багровый</marker> закатом.</example> + </rule> + + + <rule default="on" id="PREP_cherez_and_Noun" name="Предлоги “сквозь”, “через” и существительное"> + <pattern> + <!-- PREP сквозь, через -> NN:.*:V --> + <token regexp="yes">сквозь|через</token> + <token postag="NN:.*:.*:.*" postag_regexp="yes"><exception postag="NN:.*:.*:V" postag_regexp="yes"></exception><exception postag="NN:.*:.*:.*" negate_pos = "yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлоги “сквозь” и “через” предполагают употребление существительного в винительном падеже: + <suggestion><match no="1"></match> <match no="2" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:V"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется винительный падеж.</short> + <example type="correct">Луч света попал сквозь окно в комнату.</example> + <example type="incorrect">Луч света попал <marker>сквозь окном</marker> в комнату.</example> + </rule> + <rule default="on" id="PREP_cherez_and_ADJ" name="Предлоги “сквозь”, “через” и прилагательное"> + <pattern> + <!-- PREP сквозь, через -> ADJ:.*:V --> + <token regexp="yes">сквозь|через</token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:.*:V" postag_regexp="yes"></exception><exception postag="ADJ:.*:.*" negate_pos="yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлоги “сквозь” и “через” предполагают употребление прилагательного в винительном падеже: + <suggestion><match no="1"></match> <match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:V"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется винительный падеж.</short> + <example type="correct">Луч света попал сквозь стеклянное окно в комнату.</example> + <example type="incorrect">Луч света попал <marker>сквозь стеклянному</marker> окно в комнату.</example> + </rule> + + <rule default="on" id="PREP_Pri_and_Noun" name="Предлог “при” и существительное"> + <pattern> + <!-- PREP при -> NN:.*:P --> + <token>при</token> + <token postag="NN:.*:.*:.*" postag_regexp="yes"><exception postag="NN:.*:.*:P" postag_regexp="yes"></exception><exception postag="NN:.*:.*:.*" negate_pos = "yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлог “при” предполагает употребление существительного в предложном падеже: + <suggestion><match no="1"></match> <match no="2" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:P"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется предложный падеж.</short> + <example type="correct">Лаборатория была создана при центре.</example> + <example type="incorrect">Лаборатория была создана <marker>при центр</marker>.</example> + </rule> + <rule default="on" id="PREP_Pri_and_ADJ" name="Предлог “при” и прилагательное"> + <pattern> + <!-- PREP при -> ADJ:.*:P --> + <token>при</token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:.*:P" postag_regexp="yes"></exception><exception postag="ADJ:.*:.*" negate_pos="yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлог “при” предполагает употребление прилагательного в предложном падеже: + <suggestion><match no="1"></match> <match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:P"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется предложный падеж.</short> + <example type="correct">Лаборатория была создана при исследовательском центре.</example> + <example type="incorrect">Лаборатория была создана <marker>при исследовательский</marker> центре.</example> + </rule> + + <rule default="on" id="PREP_U_and_Noun" name="Предлоги “у”, “без”,... и существительное"> + <pattern> + <!-- PREP у, без, вместо, для, до, из (изо), из-за, из-под, кроме, около, от, против, среди-> NN:.*:R --> + <token regexp="yes">у|без|вместо|для|до|из|изо|из-за|из-под|кроме|около|от|против|среди</token> + <token postag="NN:.*:.*:.*" postag_regexp="yes"><exception postag="NN:.*:.*:R" postag_regexp="yes"></exception><exception postag="NN:.*:.*:.*" negate_pos = "yes" postag_regexp="yes"></exception><exception regexp="yes" >нее|варяг|грек</exception></token> + </pattern> + <message>Предлог \1 предполагает употребление существительного в родительном падеже: + <suggestion><match no="1"></match> <match no="2" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:R"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется родительный падеж.</short> + <example type="correct">Заросший пруд у опушки леса.</example> + <example type="incorrect">Заросший пруд <marker>у опушка</marker> леса.</example> + </rule> + <rule default="on" id="PREP_U_and_ADJ" name="Предлоги “у”, “без”,... и прилагательное"> + <pattern> + <!-- PREP у, без вместо для, до, из (изо), из-за, из-под, кроме, около, от, против, среди- -> ADJ:.*:R --> + <token regexp="yes">у|без|вместо|для|до|из|изо|из-за|из-под|кроме|около|от|против|среди</token> + <token postag="ADJ:.*:.*" postag_regexp="yes"><exception postag="ADJ:.*:R" postag_regexp="yes"></exception><exception postag="ADJ:.*:.*" negate_pos="yes" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлог \1 предполагает употребление прилагательного в родительном падеже: + <suggestion><match no="1"></match> <match no="2" postag="ADJ:(.*):.*" postag_regexp="yes" postag_replace="ADJ:$1:R"></match></suggestion> или <suggestion><match no="2"/></suggestion></message> + <short>Требуется родительный падеж.</short> + <example type="correct">Заросший пруд у лесной опушки.</example> + <example type="incorrect">Заросший пруд <marker>у лесную</marker> опушки.</example> + </rule> + + + </category> + <category name="Стиль"> + + <rulegroup default="on" id="talk" name="Разговорные слова"> + <rule> + <pattern> + <token postag=".*:Talk" postag_regexp="yes"><exception negate_pos="yes" postag=".*:Talk" postag_regexp="yes"></exception></token> + </pattern> + <message>Разговорная форма слова.</message> + <short>Разговорная форма слова.</short> + <example type="correct">Иван Иванович</example> + <example type="incorrect">Иван <marker>Иваныч</marker>.</example> + </rule> + </rulegroup> + <rulegroup default="off" id="Unknown_words" name="Неизвестные слова (проверка орфографии)"> + <rule> + <pattern mark_to="-1"> + <token postag="UNKNOWN" regexp="yes">[а-я].*</token> + <token></token> + </pattern> + <message>Слова нет в словаре LanguageTool.</message> + <short>Нет в словаре.</short> + <example type="correct">Проверка текста.</example> + <example type="incorrect">Это только <marker>теест</marker> проверка.</example> + </rule> + </rulegroup> + + <rulegroup default="on" id="Prep_Soglasno" name="Предлог “согласно”"> + <rule> + <pattern> + <token>согласно</token> + <token postag="NN:.*:.*:R" postag_regexp="yes"><exception postag="NN:.*:.*:D" postag_regexp="yes"></exception></token> + </pattern> + <message>Предлог “согласно” должен употребляться с дательным падежом (согласно чему), а не с родительным (согласно чего): + <suggestion><match no="1"/> <match no="2" postag="NN:(.*):(.*):R" postag_regexp="yes" postag_replace="NN:$1:$2:D" ></match></suggestion> + </message> + <short>Требуется дательный падеж.</short> + <example type="correct">Отправление поезда согласно расписанию.</example> + <example type="incorrect">Отправление поезда <marker>согласно расписания</marker>.</example> + </rule> + </rulegroup> + <rulegroup default="on" id="Use_prep_O" name="Предлог “о”"> + <rule> + <pattern> + <token inflected = "yes" regexp="yes">понимать|изучать|выяснять|описывать|объяснить|излагать|подчеркнуть|утверждать|обсудить|подозревать</token> + <token regexp="yes">о|об</token> + </pattern> + <message>Глагол \1 с предлогом “о” не употребляется.</message> + <short>С предлогом “о” не употребляется.</short> + <example type="correct">Выяснять про событие.</example> + <example type="incorrect"><marker>Выяснять о</marker> событии.</example> + <example type="incorrect">Он <marker>выясняет о</marker> событии.</example> + </rule> + <rule> + <pattern> + <token inflected = "yes" regexp="yes">обсуждать|доказывать|отмечать|показать</token> + <token regexp="yes">о|об</token> + </pattern> + <message>Глагол \1 не употребляется с предлогами.</message> + <short>Предлог не нужен.</short> + <example type="correct">Отмечать событие.</example> + <example type="incorrect"><marker>Доказывать об</marker> этом событии.</example> + </rule> + <rule> + <pattern> + <token inflected = "yes" regexp="yes">сомневаться|упрекнуть</token> + <token regexp="yes">о|об</token> + </pattern> + <message>Глагол \1 с предлогом “о” не употребляется. Возможная замена: <suggestion>\1 в</suggestion></message> + <short>С предлогом “о” не употребляется.</short> + <example type="correct">Сомневаться в доказательстве.</example> + <example type="incorrect"><marker>Сомневаться об</marker> этом выводе.</example> + </rule> + <rule> + <pattern> + <token inflected = "yes" regexp="yes">указывать|указать</token> + <token regexp="yes">о|об</token> + <token postag="NN:.*:.*:.*" postag_regexp="yes"></token> + </pattern> + <message>Глагол \1 с предлогом “о” не употребляется. Возможная замена: + <suggestion><match no="1"/> на <match no="3" postag="NN:(.*):(.*):.*" postag_regexp="yes" postag_replace="NN:$1:$2:V" ></match></suggestion></message> + <short>С предлогом “о” не употребляется.</short> + <example type="correct">Указать на ошибку.</example> + <example type="incorrect"><marker>Указать об ошибке</marker>.</example> + </rule> + </rulegroup> + + <rulegroup default="on" id="strong_m" name="Пропуск обязательных зависимых слов"> + <rule> + <pattern> + <token inflected = "yes">содействовать</token> + <token><exception postag=".*:D" postag_regexp="yes"/><exception postag="PNN:.*" postag_regexp="yes"/><exception regexp="yes">также|тоже</exception></token> + </pattern> + <message>Не найдены обязательные зависимые слова: содействовать чему?</message> + <short>содействовать чему?</short> + <example type="correct">Содействовать выполнению задания.</example> + <example type="incorrect"><marker>Содействовать и</marker> помогать.</example> + <example type="incorrect"><marker>Содействовали и</marker> помогали.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="SENT_START" skip ="-1"><exception scope="next" postag=".*:R" postag_regexp="yes"/><exception scope="next" postag="PNN:.*:R.*" postag_regexp="yes" /></token> <!-- --> + <token inflected = "yes">интересовать</token> + <token><exception postag=".*:R" postag_regexp="yes"/><exception postag="PNN:.*" postag_regexp="yes"/></token> + </pattern> + <message>Не найдены обязательные зависимые слова: интересовать кого?</message> + <short>интересовать кого?</short> + <example type="correct">Через несколько минут мы ответим на интересующие слушателей вопросы.</example> + <example type="incorrect">Мы ответим на <marker>интересующие вопросы</marker>.</example> + </rule> + <rule> + <pattern> + <token inflected = "yes">нарушать</token> + <token><exception postag=".*:V" postag_regexp="yes"/><exception postag="PNN:.*" postag_regexp="yes"/></token> + </pattern> + <message>Не найдены обязательные зависимые слова: нарушать что?</message> + <short>нарушать что?</short> + <example type="correct">Вы нарушаете правила.</example> + <example type="incorrect">Вы <marker>нарушаете!</marker></example> + </rule> + + </rulegroup> + + + <rule default="on" id="OPREDELENIA" name="Избыточные придаточные определения"> + <pattern> + <token skip="-1" regexp="yes">который|которого|которому| + котором|которая|которой|которую|которые|которых| + которыми|которое|которым|чей|чьего|чьему| + чьим|чья|чьей|чью|чье|чьё|чьем|чьём|чьи</token> + <token regexp="yes">который|которого|которому| + котором|которая|которой|которую|которые|которых|которыми|которое| + которым|чей|чьего|чьему|чьим|чья|чьей| + чью|чье|чьё|чьем|чьём|чьи</token> + </pattern> + <message>Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.</message> + <short>Избыточные определения.</short> + <example type="correct">Они пошли к реке, по которой плавала лодка.</example> + <example type="incorrect">Они пошли к реке, по <marker>которой плавала лодка, которая</marker> была окрашена в белый цвет.</example> + </rule> + <rulegroup default="off" name="Благозвучность" id="BLAGOZVUCHNOST"> + <rule> + <pattern> + <token regexp="yes">.*[йцкнгшщзхфвпрлджчсмтб][йцкнгшщзхфвпрлджчсмтб]</token> + <token regexp="yes">[йцкнгшщзхфвпрлджчсмтб][йцкнгшщзхфвпрлджчсмтб].*</token> + </pattern> + <message>Сложно произнести подряд 4 согласных звука.</message> + <short>4 согласных подряд.</short> + <example type="correct">Гимнаст активно тренировался.</example> + <example type="incorrect"><marker>Гимнаст тренировался</marker>.</example> + </rule> + </rulegroup> + </category> + + <category name="Заглавные буквы"> + + <rule default="on" id="Cap_Letters_Name" name="Имя"> + <pattern case_sensitive="yes"> + <token postag="NNN:.*" postag_regexp="yes"><exception regexp="yes">\p{Lu}.*</exception><exception regexp="yes">е|мадам|леди|пани|ежи|шоу|обл</exception><exception negate_pos="yes" postag="NNN:.*" postag_regexp="yes"/></token> + </pattern> + <message>Имя пишется с большой буквы: <suggestion><match no="1" case_conversion ="startupper"/></suggestion></message> + <short>Заглавные буквы.</short> + <example type="correct">Он - <marker>Иван</marker>.</example> + <example type="incorrect">Он - <marker>иван</marker>.</example> + </rule> + + <rule default="on" id="Cap_Letters_SName" name="Отчество"> + <pattern case_sensitive="yes"> + <token postag="NNP:.*" postag_regexp="yes"><exception regexp="yes">\p{Lu}.*</exception><exception>e</exception><exception negate_pos="yes" postag="NNP:.*" postag_regexp="yes"/></token> + </pattern> + <message>Отчество пишется с большой буквы: <suggestion><match no="1" case_conversion ="startupper"/></suggestion></message> + <short>Заглавные буквы.</short> + <example type="correct">Он - <marker>Иванович</marker>.</example> + <example type="incorrect">Он - <marker>иванович</marker>.</example> + </rule> + + + </category> + +</rules> + diff --git a/JLanguageTool/src/rules/ru/replace.txt b/JLanguageTool/src/rules/ru/replace.txt new file mode 100644 index 0000000..9b5191b --- /dev/null +++ b/JLanguageTool/src/rules/ru/replace.txt @@ -0,0 +1,115 @@ +# @author Yakov Reztsov +# TODO: дописать список + +# Формат: ошибочная_фраза=правильная_фраза + +# слова +курей=кур +ложить=класть +покласть=положить +положь=положи +положьте=положите +покладу=положу +ляжь=ляг +ляжьте=лягте + +длинше=длиннее +ширше=шире +тончее=тоньше +тонче=тоньше +слаже=слаще +красивше=красивее + +хужее=хуже + +стригет=стрижёт +стригёт=стрижёт +стригем=стрижём +стригём=стрижём +стригешь=стрижёшь +стригёшь=стрижёшь +стригете=стрижёте +стригёте=стрижёте + +бегим=бежим +бежите=бегите +бежи=беги +длиньше=длиннее +нагинаться=нагибаться +застегать=застёгивать + +ехай=поезжай +ехайте=поезжайте +едь=поезжай +езжай=поезжай +езжайте=поезжайте + +приколон=приколот + +порват=порван +порвата=порвана +даден=дан + +толью=толем +шампунью=шампунем +повидлой=повидлом + +съемши=съев +поемши=поев +выпимши=выпив +купивши=купив +пришедши=придя + +тубаретка=табуретка +ндравится=нравится +подчерк=почерк +подскользнуться=поскользнуться +коммунизьм=коммунизм +акадэмия=академия + +жгешь=жжёшь +жгёшь=жжёшь +жгет=жжёт +жгёт=жжёт +жгем=жжём +жгём=жжём +жгете=жжёте +жгёте=жжёте + +пекешь=печёшь +пекёшь=печёшь +пекёт=печёт +пекем=печём +пекём=печём +пекёте=печёте + +хочим=хотим +хочите=хотите + +взади=сзади +назаду=сзади +взад=назад +взаду=позади +#взад назад=взад вперёд +вовнутрь=внутрь +куды=куда +туды=туда +сюды=сюда +тама=там +здеся=здесь +тута=тут +зазря=зря +зараз=сразу +сперва=сначала +перво-наперво=сначала +опосля=потом +впервой=впервые +по-новой=снова +глыбоко=глубоко +#без разницы=безразлично +#взаправду=по правде +зазря=зря +ширше=шире +длиньше=длиннее +напополам=пополам +#один за одним=один за другим
\ No newline at end of file |