Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
languagetool/languagetool-language-modules/gl/src/main/resources/org/languagetool/rules/gl/grammar.xml
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
5263 lines (5021 sloc)
276 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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" ?> | |
<!-- | |
Galician Grammar and Typo Rules for LanguageTool | |
Copyright (C) 2006 Marcin Miłkowski | |
Copyright (C) 2009 Susana Sotelo Docío | |
Copyright (C) 2021 Xosé Calvo | |
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 | |
--> | |
<!-- | |
=============================================================================================================== | |
Categories of rules for Galician | |
=============================================================================================================== | |
ID Name Type Area covered | |
=============================================================================================================== | |
TYPOGRAPHY Tipografía typographical Números, espazos, aspas, símbolos | |
CAT0 Gramática: Concordancia grammar Concordancia | |
CAT1 Gramática: Verbo grammar Verbo | |
CAT2 Gramática: Outros uncategorized fóra,quenes, apócopes, qué, senón, ambos | |
CAT3 Léxico: Estranxeirismos untranslated Estranxeirismos léxicos | |
CAT4 Léxico: Falsos homónimos untranslated Homónimos | |
CAT5 Léxico: Arcaísmos style Arcaísmos | |
CAT6 Léxico: Barbarismos untranslated Barbarismos (just 'adicar' so far) | |
CAT7 Ortografía misspelling | |
CAT8 Fraseoloxía untranslated Locucións | |
REPETITIONS Repeticións duplication | |
PUNCTUATION Puntuación typographical (Just 'Puntuación final ausente' so far) | |
CREATIVE_WRITING Escrita creativa style E-Prime | |
DEVELOPMENT Desenvolvemento grammar (Just Palabra sen POS) | |
=============================================================================================================== | |
--> | |
<!DOCTYPE rules [ | |
<!ENTITY meses_ano_abrev "(?:xan|feb|mar|abr|mai|xu[lnñ]|ago|set|out|nov|dec)"> | |
<!ENTITY meses_ano "(?:x(?:aneiro|u(?:ñ|ll)o)|febreiro|marzo|abril|maio|agosto|setembro|outubro|novembro|decembro)"> | |
<!ENTITY dias_semana_abrev "(?:seg|ter|cua|qui|sex|lun|mar|mér|xov|ven|sáb|dom)"> | |
<!ENTITY dias_semana "(?:segunda|terza|cuarta|quinta|sexta|luns|martes|mércores|xoves|venres|sábado|domingo)"> | |
<!ENTITY partes_do_dia "(?:mañá|matina|tarde|noite)"> | |
<!ENTITY expressoes_de_tempo "(?:segundo|minuto|hora|día|semana|(?:bi|tri|cuadri|se)mestre|ano|década|decenio|milenio|tempo|temporada|época)s?|mes|meses"> | |
<!ENTITY puntos_cardeais "(?:n(?:acente|or(?:te|[do]este))|su(?:r|(?:ro)este)|este|o(?:este|ccidente|riente)|poñente)"> | |
<!ENTITY adverbios_de_intensidade "bastante|ben|demasiado|moitísimo|máis|menos|moi|nada|pouco|canto|case|tanto|tan|todo"><!-- XXX untranslated assaz|demais|*«quão --> | |
<!ENTITY adverbios_de_lugar "abaixo|enriba|dentro|adiante|fóra|aí|aquí|alén|aquén|atrás|acá|acó|dentro|embaixo|externamente|alí|lonxe|preto"><!-- XXX *algures|*alhures|*nenhures --> | |
<!ENTITY codigos_de_pais "(?:A(?:[DEFGIMNOQRSTUWZ]|LS?)|M[ACDGHKLMNOPQRSTUVWXYZ]|S[ACDEGHIJKLMNORTUVYZb]|B[ABDEFGHIJMNORSTVWYZ]|C[ACFGHIKLMNORSUVXYZ]|G[ABDEFHILMNPQRSTUWY]|T[CDFGHJKMNOPRTVWZ]|N[ACEFGILOPRTUZ]|P[AEFGHKLMNRTWY]|K[EGHIMNPRWYZ]|L[ABCIKRSTUVY]|I[DELNOQRST]|E[CEGHNRST]|F[IJKMORX]|U[AGKMSYZ]|V[ACEGINU]|D[EJKMOZ]|H[KMNRTU]|R[EOUW]|J[MOP]|Y[ETU]|Z[AMR]|W[FS]|OM|QA)"> | |
<!ENTITY divisas "(?:euros|dólares|francos|pesos|libras|rublos|rupias|iuans|iens|[€£¥$₽])"> | |
<!ENTITY separadores_de_oracoes "(?:[,;:…–—\(«“]|\-|\[)"> | |
<!ENTITY hifen "(?:[-‑])"> | |
<!ENTITY tracos_de_separacao "(?:[-‑]|–|—)"> | |
<!ENTITY unidades_de_medida "(?:(?:[khdcmnµfYZEPTGM]|da)?(?:[gmlsJNWCVSFTHΩ]|Hz|cd|lm|mol|Pa|Wb|rad|sr|lx|Bq|Gy|Sv|kat|Np|eV)(?:⁻)?[23¹²³]?|°[CFK]|cv|k?cal|mmHg|atm|ton|kWh|GWa|MWd|MWh|mAh|min|ha)"> | |
<!ENTITY unidades_de_medida_por_extenso "(?:quil[oó]|dec[ií]|cent[ií]|mil[ií]|micr[oó])?(grama|metro|litro|segundo)s?|hectár(eas)?|(grau|(quilo)?tonelada)s?"> | |
<!ENTITY tabela_periodica "(?:[UVW]|C[adeflmnorsu]?|N[abdehiop]?|P[abdmortu]?|S[bcegimnr]?|T[abcehilms]|A[cglmrstu]|R[abefghnu]|B[aehikr]?|H[efgos]?|M[cdgnot]|F[elmr]?|L[airuv]|D[bsy]|E[rsu]|G[ade]|I[nr]?|O[gs]?|Z[nr]|Kr?|Yb?|Xe|[₁₂₃₄₅₆₇₈₉₀])"> | |
<!ENTITY pronomes_ambiguos "(?:[ao]s?|mas|nos|se)"> | |
<!ENTITY pronomes_nao_ambiguos "(?:m(?:a|e|os?)|t(?:a|e|o)s?|ll?[aeo]s?|vos|che)"> | |
<!ENTITY pronomes_atonos "me|te|che|lle|nos|vos|lles|o|a|os|as|lo|la|los|las|mo|ma|mos|mas|cho|cha|chos|chas|llo|lla|llos|llas|nolo|nola|nolos|nolas|volo|vola|volos|volas|llelo|llela|llelos|llelas"> | |
<!ENTITY pronomes_atonos_simples "me|te|che|lle|nos|vos|lles|o|a|os|as|lo|la|los|las"> | |
<!ENTITY pronomes_atonos_contractos "mo|ma|mos|mas|cho|cha|chos|chas|llo|lla|llos|llas|nolo|nola|nolos|nolas|volo|vola|volos|volas|llelo|llela|llelos|llelas"> | |
<!ENTITY precede_nome_proprio "(asociación|avenida|balneario|parella?|coalición|colección|cometa|concurso|copa|curso|designación|designado|distribución|escola|estación|estilo|filme|fundación|galardón|xeración|illa|imperio|iniciativa|instituto|titulado|lagoa?|lei|libro|monte|museo|navío|novela|obra|orquestra|praza|premio|programa|proxecto|quinta|rexistro|reino|informe|revista|río|rúa|serra|teatro|tema|tipo|universidade|versión)"> | |
<!ENTITY contraccions_MS "(?:ao|d(?:o|un|el|est?e|aquel|ist?o|aquilo|outro|algún)|n(?:o|un|el|est?e|aquel|ist?o|aquilo|outro|algún)|algún|polo)"><!-- XXX lost 'me+o|che+o|lle+o'--> | |
<!ENTITY contraccions_FS "(?:á|d(?:a|unha|ela|est?a|aquela|outra|algunha)|n(?:a|unha|ela|nest?a|aquela|outra|algunha)|algunha|pola)"><!-- XXX lost 'me+a|che+a|lle+a'--> | |
<!ENTITY contraccions_MP "(?:aos|d(?:os|uns|eles|est?es|aqueles|outros|algúns)|n(?:os|uns|eles|est?es|aqueles|outros|algúns)|algúns|polos)"><!-- XXX lost 'me+o|che+o|lle+o'+s--> | |
<!ENTITY contraccions_FP "(?:ás|d(?:as|unhas|elas|est?as|aquelas|outras|algunhas)|n(?:as|unhas|elas|est?as|aquelas|outras|algunhas)|algunhas|polas)"><!-- XXX lost 'me+a|che+a|lle+a'+s--> | |
<!ENTITY verbos_auxiliares_part_pasado "(?:ser|estar|ter|haber|ficar)"> | |
<!ENTITY verbos_non_reflexivos "a(?:brandar|cedar|cougar|dormecer|frouxar|grelar|lmorzar|podrecer|purar|trasar)|baixar|c(?:a(?:er|lar|rgar|sar)|icatrizar|oller|omer|urar)|d(?:eixar|emorar|esfondar|esinchar|islocar)|e(?:nfermar|scapar|scordar|sperar|spertar|streitar)|fracturar|inchar|incrementar|m(?:archar|erendar|erar|orrer|urchar)|parar|quedar|rachar|rebentar|recordar|rir|romper|sentar|sorrir|terminar|tropezar"> | |
<!ENTITY abreviaturas "(?:s(?:[eé]c)?|[Ee]tc\.|(?:m[aá]x|m[ií]n|[aA]prox)|(?:[aA]pt?do|[aA]sdo|[aA]vd?a?|[Cc]ód|[Dd]e?pto|[Ff]ac|[Ii]nst)|(?:[Aa]fm[oa]s?|Emcia|Ilt?m[ao]s?|Iltres?|MM|Exc?m[ao]s?|Magf[oa]|D(?:na)?|Sra?|Sr[ea]s|Srta|Dra?|Dr[ea]s?|Rm[ao]|Rev|Revm[ao]|Mons|Emmo|Rv?d[ao]|[Ll]icd[oa]|[Ll]ic|[Ll]d[oa]|[pP]rofs?)|(?:[Nn][úu]ms?|[fF]igs?|[Pp][aá]xs?|pp?|cc?a)|(?:[Vv]ols?|[Cc]aps?)|(?:[Aa]dmóns?|[aA]d(?:mt)?v[oa]s?)|(?:[pP]pal|[Vv]des?|[Ii]b[íi]d|[Rr]efs?|[Cc]it|[Aa]brevs?|[Aa]bl|[Aa]dx|[Aa]dv|[Aa]cr|[Cc]onx|[Ll]oc|[Pp]rep|[Ss]ubst)|(?:[vV]id|[Cc]fr?)|(?:[Cc]oord|[Ee]d)s?|(?:[Cc]t[ae]|[Tt]e?lf|[Tt]fno|[Tt]el[eé]f|[Tt]el)s|(?:[oO]p|[lL]oc)|cit|[aá]l|vs)"><!-- XXX retrieved from segment.srx, Galician section --> | |
<!ENTITY MSG_ECV "Posíbel erro de concordancia verbal."> | |
<!ENTITY MSG_ECX "Posíbel erro de concordancia de xénero."> | |
<!ENTITY MSG_ECN "Posíbel erro de concordancia de número."> | |
]> | |
<rules lang="gl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../../../languagetool-core/src/main/resources/org/languagetool/rules/rules.xsd"> | |
<unification feature="number"> | |
<equivalence type="singular"> | |
<token postag="(?:[NZ]..|[ADP]...|V....)[NS].+" postag_regexp="yes"/> | |
</equivalence> | |
<equivalence type="plural"> | |
<token postag="(?:[NZ]..|[ADP]...|V....)[NP].+" postag_regexp="yes"/> | |
</equivalence> | |
</unification> | |
<unification feature="gender"> | |
<equivalence type="masc"> | |
<token postag="(?:[NZ].|[ADP]..|V.....)[MC].+" postag_regexp="yes"/> | |
</equivalence> | |
<equivalence type="fem"> | |
<token postag="(?:[NZ].|[ADP]..|V.....)[FC].+" postag_regexp="yes"/> | |
</equivalence> | |
</unification> | |
<unification feature="person"> | |
<equivalence type="first"> | |
<token postag="(?:V...|PP)1.+" postag_regexp="yes"/> | |
</equivalence> | |
<equivalence type="second"> | |
<token postag="(?:V...|PP)2.+" postag_regexp="yes"/> | |
</equivalence> | |
<equivalence type="third"> | |
<token postag="(?:V...|PP)3.+" postag_regexp="yes"/> | |
</equivalence> | |
</unification> | |
<category id='TYPOGRAPHY' name="Tipografía" type="typographical"> | |
<rulegroup id='GENERAL_NUMBER_FORMAT' name="Números: Formato (10 341 330)"> | |
<!-- Created by Tiago F. Santos, 2017-03-05 --> | |
<!--url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/2500-2-500-ou-2500/12873</url TODO localize --> | |
<short>Erro tipográfico</short> | |
<rule> | |
<antipattern> | |
<token spacebefore='no'>,</token> | |
<token regexp="yes" spacebefore='no'>\d+</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">\d{4}</token> | |
<token> | |
<exception regexp="yes">\d+</exception></token> | |
</antipattern> | |
<antipattern> | |
<token> | |
<exception regexp="yes">\d+</exception></token> | |
<token postag='SENT_END' regexp="yes">\d{4}</token> | |
</antipattern> | |
<antipattern> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp="yes">\d+</token> | |
<token regexp='yes'>&hifen;</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token regexp="yes">\d+\d{3}(?:,\d+)?</token> | |
</marker> | |
</pattern> | |
<message>Se non é un ano, os algarismos deben ser escritos en grupos de 3.</message> | |
<suggestion><match no="2" regexp_match="(\d+)(\d{3})(,\d+)?" regexp_replace="$1 $2$3"/></suggestion> | |
<url>https://wikidog.xunta.gal/index.php/Escrita_dos_n%C3%BAmeros</url> | |
<example correction='1 034'>A poboación no ano 2020 era de <marker>1034</marker> 133 habitantes.</example> | |
<example>O ano ten exactamente 365,24219858156 días.</example> | |
<example>É o ano de <marker>1989</marker>.</example> | |
<example>ISBN 0-522-85317-X.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">\d+\,\d{3}\d+</token> | |
</pattern> | |
<message>Os algarismos deben ser escritos en grupos de 3.</message> | |
<suggestion><match no="3" regexp_match="(\d+,\d{3})(\d+)" regexp_replace="$1 $2"/></suggestion> | |
<example correction='17,103 41'>A media exacta é de <marker>17,10341</marker> valores.</example> | |
<example correction='365,242 19858156'>O ano ten exactamente <marker>365,24219858156</marker> días.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="NO_SPACE_CLOSING_QUOTE" name="Espazos: comiñas de peche"> | |
<rule> | |
<!-- Localized from English by Tiago F. Santos, 2019-02-10 --> | |
<pattern> | |
<token>”</token> | |
<token regexp='yes' spacebefore='no'>\w+</token> | |
</pattern> | |
<message>Debe haber un espazo despois das aspas de peche.</message> | |
<suggestion>\1 \2</suggestion> | |
<example correction="” dixo">“Bo día, Frank,<marker>”dixo</marker> Hal.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="UNITS_OF_MEASURE_SPACING" name="Espazos en unidades de medida"> | |
<!-- Localized from German by Tiago F. Santos, Portuguese rule, 2017-09-29 --> | |
<!--url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/simbolos-de-unidades/11572</url TODO localize --> | |
<rule> | |
<regexp case_sensitive='yes'>(\-?[0-9]+[0-9,\.]{0,10}(°C|°F|°De?|°R[éeøa]?|(Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)?m|(Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)?N|[kKMGTPEZY]i?B|[kmµnp]g|[Mk]t|kWh|GWa|MWd|MWh))\b</regexp> | |
<message>Debe dar un espazo entre o valor e a unidade de medida: <suggestion><match no="1" regexp_match="((\-)?[0-9]+[0-9,.]*{1,})" regexp_replace="$1 "/></suggestion></message> | |
<!-- url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/simbolos-de-unidades/11572</url TODO localize --> | |
<example correction="25 °C">A temperatura é de <marker>25°C</marker>.</example> | |
<example correction="-25 °C">A temperatura é de <marker>-25°C</marker>.</example> | |
<example correction="25,5 °F">A temperatura é de <marker>25,5°F</marker>.</example> | |
<example>A temperatura é de <marker>25,5 °C</marker>.</example> | |
<example>A temperatura é de <marker>25,5 °Ra</marker>.</example> | |
<example>Son <marker>5 km</marker> de distancia.</example> | |
<example correction="5 km">Son <marker>5km</marker> de distancia.</example> | |
<example>Son <marker>5 ZiB</marker> de datos.</example> | |
<example correction="5 ZiB">Son <marker>5ZiB</marker> de datos.</example> | |
<example>Son <marker>5 kB</marker> de datos.</example> | |
<example correction="5 kB">Son <marker>5kB</marker> de datos.</example> | |
<example correction="5 kg">Pesa <marker>5kg</marker>.</example> | |
<example correction="5 Mt">Pesa <marker>5Mt</marker>.</example> | |
<example>Pesa <marker>5 µg</marker>.</example> | |
<example>Isótopo 241Am</example> | |
<example>(AsCH3)2n</example> | |
<example>Bd. 1b</example> | |
<example>Primeiro lanzamento do Saturno 1B</example> | |
<example correction="2.000 kWh">Consumíronse <marker>2.000kWh</marker></example> | |
<example>Os xuros son de 5 <marker>%</marker>.</example> | |
<example>jbo:1901moi</example> | |
</rule> | |
<rule> | |
<regexp>((\-)?[0-9]+[0-9.,]{1,10}) (°[^CFK])</regexp> | |
<message>Entre o valor numérico e o símbolo de grao debe haber un espazo. Utilice <suggestion>\1°</suggestion> ou engada a unidade de medida térmica (p.ex. <suggestion>\1 °C</suggestion>).</message> | |
<example correction="25°|25 °C">O ángulo é de <marker>25 ° </marker></example> | |
<example correction="-25,5°|-25,5 °C">Fan <marker>-25,5 ° </marker>de temperatura.</example> | |
<example correction="-25°|-25 °C">Fan <marker>-25 ° </marker>de temperatura.</example> | |
<example correction="25°|25 °C">O ángulo é de <marker>25 ° </marker>de abertura.</example> | |
<example correction="-25°|-25 °C">Fan <marker>-25 ° </marker>de temperatura.</example> | |
</rule> | |
<rule> | |
<regexp>((\-)?[0-9]+[0-9.,]{1,10}) (″)</regexp> | |
<message>Debe haber un espazo antes do símbolo de segundos (\2).</message> | |
<suggestion>\1\2\3</suggestion> | |
<example>3°14′ 45,54″</example> | |
<example correction="45″"><marker>45 ″</marker> E</example> | |
<example correction="45,54″"><marker>45,54 ″</marker> E</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='SI_UNITS_EXPONENT' name="Números: Unidades do Sistema Internacional: km2/km²"> | |
<!-- Created by Tiago F. Santos, 2017-05-12 --> | |
<url>https://gl.wikipedia.org/wiki/Funci%C3%B3n_exponencial</url> | |
<short>Erro tipográfico</short> | |
<!--rule> XXX disambiguate numbers Z.+ and uncomment | |
<pattern case_sensitive="yes"> | |
<token postag_regexp='yes' postag='Z.+' skip='3'/> | |
<marker> | |
<token regexp="yes">(?:[khdcmnµfYZEPTGM]|da)?[gmlsJNWCVSFTH](\^)?⁻?2 | |
<exception regexp='yes'>(?:TV|GT)2</exception></token> | |
</marker> | |
</pattern> | |
<message>Os expoentes deben estar en superíndice.</message> | |
<suggestion><match no="2" regexp_match='(.+?)((\^)?)(⁻?)2' regexp_replace='$1$4²'/></suggestion> | |
<example correction="km²">..estado o ano de 2010, foi de 4,68 habitantes por <marker>km2</marker>, sendo a vixésima cuarta maior do Brasil e a quin…</example> | |
<example correction="km²">..estado o ano de 2010, foi de 4,68 habitantes por <marker>km^2</marker>, sendo a vixésima cuarta maior do Brasil e a quin…</example> | |
<example correction="s⁻²">g = 9,8 m.<marker>s⁻2</marker></example> | |
</rule> | |
<rule> XXX disambiguate numbers Z.+ and uncomment | |
<pattern case_sensitive="yes"> | |
<token postag_regexp='yes' postag='Z.+' skip='3'/> | |
<marker> | |
<token regexp="yes">(?:[khdcmnµfYZEPTGM]|da)?[gmlsJNWCVSFTH](\^)?⁻?3 | |
<exception regexp='yes'>(?:TV|GT)3</exception></token> | |
</marker> | |
</pattern> | |
<message>Os expoentes deben estar en superíndice.</message> | |
<suggestion><match no="2" regexp_match='(.+?)((\^)?)(⁻?)3' regexp_replace='$1$4³'/></suggestion> | |
<example correction="m³">A banheira tiña 2 <marker>m3</marker>.</example> | |
<example correction="m³">A banheira tiña 2 <marker>m^3</marker>.</example> | |
<example correction="s⁻³">g.t = 9,8 m.<marker>s⁻3</marker></example> | |
</rule--> | |
<rule> | |
<pattern case_sensitive="yes"> | |
<token>/</token> | |
<marker> | |
<token regexp="yes">(?:[khdcmnµfYZEPTGM]|da)?[gmlsJNWCVSFTH](\^)?2</token> | |
</marker> | |
</pattern> | |
<message>Os expoñentes deben estar en superíndice.</message> | |
<suggestion><match no="2" regexp_match='(.+?)((\^)?)2' regexp_replace='$1²'/></suggestion> | |
<example correction="s²">g = 9,8 m/<marker>s2</marker></example> | |
<example correction="s²">g = 9,8 m/<marker>s^2</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive="yes"> | |
<token>/</token> | |
<marker> | |
<token regexp="yes">(?:[khdcmnµfYZEPTGM]|da)?[gmlsJNWCVSFTH](\^)?3</token> | |
</marker> | |
</pattern> | |
<message>Os expoñentes deben estar en superíndice.</message> | |
<suggestion><match no="2" regexp_match='(.+?)((\^)?)3' regexp_replace='$1³'/></suggestion> | |
<example correction="cm³">ρ[H₂O]≈1,0 g/<marker>cm3</marker>.</example> | |
<example correction="cm³">ρ[H₂O]≈1,0 g/<marker>cm^3</marker>.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="kWh" name="kW/h → kWh"> | |
<!-- Localized from French grammar.xml by Tiago F. Santos, 2017-06-28 --> | |
<url>https://gl.wikipedia.org/wiki/Ordes_de_magnitude_(enerx%C3%ADa)</url> | |
<rule> | |
<pattern> | |
<token regexp="yes">[KMGT]?W|(kilo|mega|giga|tera)?watt</token> | |
<token spacebefore="no">/</token> | |
<token spacebefore="no" regexp="yes">h|hora</token> | |
</pattern> | |
<message>Se se refire á unidade de consumo de enerxía, debe escribir <suggestion>\1\3</suggestion>.</message> | |
<example correction="kWh">O aparello consume 5 <marker>kW/h</marker>.</example> | |
<example>O aparello consume 5 kW.h.</example> | |
<example>O aparello consume 5 kWh.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">(?-i)KW</token> | |
<token spacebefore="no" regexp='yes'>[·.]</token> | |
<token spacebefore="no">h</token> | |
</pattern> | |
<message>O prefixo kilo debe ser escrito en minúsculas.</message> | |
<suggestion><match no="1" case_conversion="startlower"/>h</suggestion> | |
<suggestion><match no="1" case_conversion="startlower"/>.h</suggestion> | |
<example correction="kWh|kW.h">O aparello consume 5 <marker>KW.h</marker>.</example> | |
<example>O aparello consume 5 kWh.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive="yes"> | |
<token>KWh</token> | |
</pattern> | |
<message>O prefixo kilo debe ser escrito en minúsculas.</message> | |
<suggestion><match no="1" case_conversion="startlower"/></suggestion> | |
<example correction="kWh">O aparello consume 5 <marker>KWh</marker>.</example> | |
<example>O aparello consume 5 kW·h.</example> | |
<example>O aparello consume 5 kWh.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="SPACES_BETWEEN_OPERATORS" name="Números: Espazo entre operadores"> | |
<rule> | |
<!-- Localized from German grammar.xml, by Tiago F. Santos, 2017-07-09 --> | |
<antipattern> <!-- time exception: --> | |
<token regexp="yes">(?:[01]?[0-9]|2[0-4])[0-9]?</token> | |
<token>:</token> | |
<token regexp="yes">[0-5][0-9]</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token regexp="yes">(?:[0-9]+[a-z]*) | |
<exception scope="previous" regexp="yes">escalas?</exception> | |
<exception scope="previous" regexp="yes">\d\d\d\d-\d\d-\d\d</exception> | |
</token> | |
<token spacebefore="no" regexp="yes">[\*×∗·\+÷:=]</token> | |
<token spacebefore="no" regexp="yes">((?:[0-9]+[a-z]*))+ | |
<exception regexp="yes">\d\dh</exception></token> | |
</marker> | |
<token negate="yes">h</token> | |
</pattern> | |
<message>Separe as fórmulas con espazos (protexidos).</message> | |
<suggestion>\1 \2 \3</suggestion> | |
<short>Separe as fórmulas con espazos</short> | |
<example correction="5 * 5"><marker>5*5</marker>.</example> | |
<example correction="3a = 2"><marker>3a=2</marker>.</example> | |
<example>a = 2 · x² + 5</example> | |
<example>Un mapa na escala 1:80000.</example> | |
<example>Teño unha reunión ás 7:00 h.</example> | |
<example>Teño unha reunión ás 7:00h.</example> | |
<example>Enviado a 2014-01-23 10:32 :</example> | |
<example>4,5 × 2,5</example> | |
<example>Entre as 9:00 e as 16:45.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='MULTIPLICATION_SIGN' name="Números: Multiplicación: x - × " tags="picky"> | |
<!-- Created by Tiago F. Santos, 2017-03-27 --> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>x|\*</token> | |
<token regexp='yes'>[,;e]</token> | |
</antipattern> | |
<antipattern> | |
<token regexp='yes'>[,;o]</token> | |
<token regexp='yes'>x|\*</token> | |
</antipattern> | |
<antipattern> | |
<token regexp='yes' skip='2'>versión(?:es)?|series?|v</token> | |
<token regexp='yes'>\d+</token> | |
<token spacebefore='no'>.</token> | |
<token spacebefore='no'>x</token> | |
</antipattern> | |
<antipattern> | |
<token regexp='yes'>\p{Lu}</token> | |
<token spacebefore='no'>.</token> | |
<token regexp='yes' spacebefore='yes'>\p{Lu}</token> | |
</antipattern> | |
<pattern> | |
<token regexp="yes">[a-z]|[\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?[a-z]{0,1}</token> | |
<marker> | |
<token regexp='yes'>[x\*]</token> | |
</marker> | |
<token regexp="yes">[a-z]|[\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?[a-z]{0,1}</token> | |
</pattern> | |
<message>O símbolo de multiplicación é máis claro.</message> | |
<suggestion>×</suggestion> | |
<suggestion>·</suggestion> | |
<example correction="×|·">h = 6,626 <marker>x</marker> 10⁻³⁴ J.s</example> | |
<example correction="×|·">h = 6.626 <marker>x</marker> 10⁻³⁴ J.s</example> | |
<example correction="×|·">5 <marker>*</marker> 2 = 10</example> | |
<example correction="×|·">a = 5 <marker>*</marker> x + 7</example> | |
<example correction="×|·">a = 5x <marker>*</marker> 5 + 7</example> | |
<example correction="×|·">a <marker>*</marker> b</example> | |
<example>a = 2 · x² + 5</example> | |
<example>4,5 × 2,5 = 11,25</example> | |
<example>Consideremos <marker>que x é</marker> a coordenada horizontal, e y é a coordenada vertical.</example> | |
<example>Regueira Fernández, X. L.</example> | |
</rule> | |
<rule> | |
<regexp>(?<!([a-vyz]|[a-vyz]\d|[a-vyz]\d{2}|[a-vyz]\d{3}|[a-vyz]\d{4}|[a-vyz]\d{5}))((?!(?:[,;\(\.][x\*]([\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?)|(?:[\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?)[x\*][,;\.\)\!\?]))([\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?)[x\*]([\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+))</regexp> | |
<message>O símbolo de multiplicación é máis claro.</message> | |
<suggestion>\4×\5</suggestion> | |
<suggestion>\4·\5</suggestion> | |
<example correction='2,998×10⁸|2,998·10⁸'>c=<marker>2,998x10⁸</marker> m/s</example> | |
<example correction="6.626×10⁻³⁴|6.626·10⁻³⁴">h = <marker>6.626x10⁻³⁴</marker> J.s</example> | |
<example correction="5×2|5·2"><marker>5*2</marker> = 10</example> | |
<example>a=2·x²+5</example> | |
<example>4,5×2,5=11,25</example> | |
<example>Oxihalídeos do Americio en forma de AmVIO2X2, AmVO2X, AmIVOX2 e AmIIIOX...</example> | |
<example>Número 1Z1141X30370035113</example> | |
</rule> | |
<rule> | |
<regexp>([a-z]|[\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?[a-z]{0,1})\*([a-z]|[\d\.,⁻¹²³⁴⁵⁶⁷⁸⁹⁰]+?[a-z]{0,1})</regexp> | |
<message>O símbolo de multiplicación é máis claro.</message> | |
<suggestion>\1×\2</suggestion> | |
<suggestion>\1·\2</suggestion> | |
<example correction="5×x|5·x">a=<marker>5*x</marker>+7</example> | |
<example correction="5x×5|5x·5">a=<marker>5x*5</marker>+7</example> | |
<example correction="5x×5|5x·5">a=7+<marker>5x*5</marker></example> | |
<example correction="a×b|a·b"><marker>a*b</marker></example> | |
<example>a=2·x²+5</example> | |
<example>4,5×2,5=11,25</example> | |
<!-- <example>Number 1Z1141X30370035113</example> --> | |
</rule> | |
</rulegroup> | |
<rulegroup id='PLUS_MINUS' name="Números: +- - ± "> | |
<!-- Created by Tiago F. Santos, 2017-03-28 --> | |
<rule> | |
<pattern> | |
<token>+</token> | |
<token regexp='yes' spacebefore='no'>&hifen;</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>±</suggestion> | |
<short>Prefire un carácter tipográfico?</short> | |
<example correction='±'>m = 75,5 <marker>+-</marker> 0,1 g</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp='yes'>&hifen;</token> | |
<token spacebefore='no'>+</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>±</suggestion> | |
<short>Prefire un carácter tipográfico?</short> | |
<example correction='±'>m = 75,5 <marker>-+</marker> 0,1 g</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="EQUAL_OR_X" name="Números: >= (≥)"> | |
<!-- Localized from German grammar.xml, by Tiago F. Santos, 2017-07-07 --> | |
<rule> | |
<regexp>>=</regexp> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>≥</suggestion> | |
<suggestion>≧</suggestion> | |
<short>Prefire un carácter tipográfico?</short> | |
<example>1 ≥ 1</example> | |
<example correction="≥|≧">1 <marker>>=</marker> 0</example> | |
</rule> | |
<rule> | |
<pattern> | |
<marker> | |
<token><</token> | |
<token spacebefore="no">=</token> | |
</marker> | |
<token negate="yes">></token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>≤</suggestion> | |
<suggestion>≦</suggestion> | |
<short>Prefire un carácter tipográfico?</short> | |
<example>1 ≤ 3</example> | |
<example correction="≤|≦">1 <marker><=</marker> 3</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="ARROWS" name="-> (→)"> | |
<!-- Localized from German grammar.xml, by Tiago F. Santos, 2017-07-07 --> | |
<rule> | |
<pattern> | |
<token negate="yes"><</token> | |
<marker> | |
<token regexp="yes">(?:\-|=){1,2}</token> | |
<token>></token> | |
</marker> | |
</pattern> | |
<message>As frechas tipográficas acrecentan a claridade dun texto.</message> | |
<suggestion>→</suggestion> | |
<suggestion>⇾</suggestion> | |
<suggestion>⇉</suggestion> | |
<suggestion>⇒</suggestion> | |
<suggestion>⇨</suggestion> | |
<suggestion>⇛</suggestion> | |
<suggestion>≥</suggestion> | |
<short>Pretende empregar unha frecha?</short> | |
<example correction="→|⇾|⇉|⇒|⇨|⇛|≥"><marker>-></marker> Punto 1</example> | |
</rule> | |
<rule> | |
<pattern> | |
<marker> | |
<token><</token> | |
<token spacebefore="no" regexp="yes">(?:\-|=){1,2}</token> | |
</marker> | |
<token negate="yes">></token> | |
</pattern> | |
<message>As frechas tipográficas acrecentan a claridade dun texto</message> | |
<suggestion>←</suggestion> | |
<suggestion>⇽</suggestion> | |
<suggestion>⇇</suggestion> | |
<suggestion>⇐</suggestion> | |
<suggestion>⇦</suggestion> | |
<suggestion>⇚</suggestion> | |
<suggestion>≤</suggestion> | |
<short>Pretende empregar unha frecha?</short> | |
<example correction="←|⇽|⇇|⇐|⇦|⇚|≤">A <marker><-</marker> B</example> | |
<example>A ← B</example> | |
<example>-128 < -127 < -126</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token><</token> | |
<token regexp="yes">\-|=</token> | |
<token>></token> | |
</pattern> | |
<message>As frechas tipográficas acrecentan a claridade dun texto</message> | |
<suggestion>↔</suggestion> | |
<suggestion>⇿</suggestion> | |
<suggestion>⇄</suggestion> | |
<suggestion>⇆</suggestion> | |
<suggestion>⇋</suggestion> | |
<suggestion>⇌</suggestion> | |
<suggestion>⇔</suggestion> | |
<short>Pretende empregar unha frecha?</short> | |
<example correction="↔|⇿|⇄|⇆|⇋|⇌|⇔">A <marker><=></marker> B</example> | |
<example>A ⇔ B</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='YEAR_NUMBER_FORMAT' name="Formato de números: anos"> | |
<!-- Localized and improved by Tiago F. Santos, Portuguese rule, 2017-03-05 --> | |
<!--url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/2500-2-500-ou-2500/12873</url TODO localize --> | |
<rule> | |
<pattern> | |
<token regexp="yes" skip='1'>anos?</token> | |
<marker> | |
<token regexp="yes">\d\.\d{3}</token> | |
</marker> | |
</pattern> | |
<message>Nos anos os números non deben estar separados.</message> | |
<suggestion><match no='2' regexp_match='(\d)(.)(\d{3})' regexp_replace='$1$3'/></suggestion> | |
<short>Os anos escríbense sen espazos</short> | |
<example correction="1989">Naceu no ano <marker>1.989</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">&meses_ano;</token> | |
<token skip="1">de</token> | |
<marker> | |
<token regexp="yes">\d{1,2}\.\d{3}</token> | |
</marker> | |
</pattern> | |
<message>Nos anos os números non deben estar separados.</message> | |
<suggestion><match no='3' regexp_match='(\d{1,2})(.)(\d{3})' regexp_replace='$1$3'/></suggestion> | |
<short>Os anos escríbense sen espazos</short> | |
<example correction="1989">É decembro de <marker>1.989</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<marker> | |
<token regexp="yes">\d{1,3}\.\d{3}</token> | |
</marker> | |
<token regexp="yes">aC|dC</token> | |
</pattern> | |
<message>Nos anos os números non deben estar separados.</message> | |
<suggestion><match no='1' regexp_match='(\d{1,3})(.)(\d{3})' regexp_replace='$1$3'/></suggestion> | |
<short>Os anos escríbense sen espazos</short> | |
<example correction="1989">Estamos a <marker>1.989</marker> aC.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='AVOID_DECIMAL_APOSTROPHE' name="Números: Evitar apóstrofo en decimais"> | |
<rule> | |
<!-- Based on Catalan version, by Tiago F. Santos, 2017-02-27 --> | |
<antipattern> | |
<token regexp="yes">\d{1,2}\,\d+</token> | |
<token spacebefore="no" regexp="yes">['`’‘]</token> | |
<token spacebefore="no" regexp="yes">\d+(?:%|&unidades_de_medida;)?</token> | |
<token spacebefore="no" regexp="yes">[”"]</token> | |
</antipattern> | |
<pattern> | |
<token regexp="yes">\d+|\d{1,3}(?:[\.   ]\d\d\d)+ | |
<exception regexp="yes">\d{1,2}\,\d+</exception> | |
<exception scope="previous" regexp="yes">.*[º°h]</exception></token> | |
<token spacebefore="no" regexp="yes">['`’‘]</token> | |
<token spacebefore="no" regexp="yes">\d+(?:%|&unidades_de_medida;)?</token> | |
</pattern> | |
<message>Utilice antes unha vírgula para separar os decimais.</message> | |
<suggestion>\1,\3</suggestion> | |
<example correction="9,5"><marker>9'5</marker></example> | |
<example correction="9,5%"><marker>9'5%</marker></example> | |
<example correction="9.349,5"><marker>9.349'5</marker></example> | |
<example correction="1.999.349,5"><marker>1.999.349'5</marker></example> | |
<example correction="349,5">1 999 <marker>349'5</marker></example> | |
<example>1,23'2</example> | |
<example>41° 22'44.</example> | |
<example>41° 12’12” N.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='PERCENT' name="Números: Espazo en porcentaxes" default="on"> | |
<!-- TODO Find out which one is recommended for Galician--> | |
<rule id='PERCENT_WITHOUT_SPACE' name="Números: Retirar espazo en porcentaxes (3%)" default="on"> | |
<!-- Localized and improved from Catalan, by Tiago F. Santos, 2017-02-27 --> | |
<pattern> | |
<token regexp="yes">[\d.,]+ | |
<exception regexp="yes">[.,]</exception></token> | |
<token spacebefore="yes" regexp="yes">[%‰‱]</token> | |
</pattern> | |
<message>Escriba a porcentaxe sen espazos (estilo estándar).</message> | |
<suggestion>\1\2</suggestion> | |
<!--url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/centigrados-porcentagem/18011</url TODO localize --> | |
<example correction="23,5%">A taxa é de <marker>23,5 %</marker>.</example> | |
<example correction="23,5‰">Paga <marker>23,5 ‰</marker>.</example> | |
<example>Neste caso a % é de 1 a 2.</example> | |
<example>Paga 25%.</example> | |
</rule> | |
<rule id='PERCENT_WITH_SPACE' name="Números: Acrecentar espazo en porcentaxes (3 %)" default="off"> | |
<!-- Localized and improved from Catalan, by Tiago F. Santos, 2017-02-27 --> | |
<pattern> | |
<token regexp="yes">[\d.,]+[%‰‱]</token> | |
</pattern> | |
<message>Escolleu a opción de inserción de espazo.</message> | |
<suggestion><match no="1" regexp_match="(.+)([%‰‱])" regexp_replace="$1 $2"/></suggestion> | |
<!--url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/centigrados-porcentaxe/18011</url TODO localize --> | |
<example correction="23,5 %">A taxa é do <marker>23,5%</marker>.</example> | |
<example correction="23,5 ‰">Paga <marker>23,5‰</marker>.</example> | |
<example>Paga 25 %.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="SPACE_INDENTATION" name="Libreoffice: Sangría con espazos" default='off'> | |
<rule> | |
<!-- Localized from German grammar.xml by Tiago F. Santos, 2017-08-19 --> | |
<regexp>^ +</regexp> | |
<message>No LibreOffice, o sangrado é máis preciso se utilizar as ferramentas específicas.</message> | |
<suggestion/> | |
<example correction=""><marker> </marker>El saíu de casa.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='DASH_RULE' name='Guión e raia'> | |
<!-- Created by Tiago F. Santos, 2017-01-23 --> | |
<url>https://gl.wikipedia.org/wiki/Raia_(puntuaci%C3%B3n)</url> | |
<antipattern> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
</antipattern> | |
<rule> | |
<pattern> | |
<token postag='SENT_START'/> | |
<token min='0' regexp='yes'>["'«»“”]</token> | |
<marker> | |
<token regexp='yes'>-|–</token> | |
</marker> | |
</pattern> | |
<message>En diálogos e enumeracións debe utilizar trazo longo.</message> | |
<suggestion>—</suggestion> | |
<short>Aquí utilice o trazo longo</short> | |
<example correction='—'><marker>-</marker> Que é iso, mamá?</example> | |
<example correction='—'>« <marker>-</marker> Que é iso, mamá?</example> | |
<example>— É o teu presente de aniversario, miña filla.</example> | |
<example>1466–1469 — Gran Guerra Irmandiña</example> | |
<example>2560-657 TORRES VEDRAS</example> | |
<example>---------------------------------------</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>-</token> | |
<token regexp='yes'>-</token> | |
<token regexp='yes'>-</token> | |
<token regexp='yes'>,</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token regexp='yes' spacebefore='yes'>-|–</token> | |
</marker> | |
<token spacebefore="no">,</token> | |
</pattern> | |
<message>Termine a frase parentética cun trazo longo.</message> | |
<suggestion>—</suggestion> | |
<short>Aquí utilice o trazo longo</short> | |
<example correction='—'>como dixen <marker>-</marker>,…</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
<token regexp='yes'>-|–</token> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token spacebefore="yes" regexp='yes'>-|–</token> | |
</marker> | |
<token spacebefore="yes"/> | |
</pattern> | |
<message>Se non pretende unir dúas palabras, debe utilizar trazo longo.</message> | |
<suggestion>—</suggestion> | |
<short>Aquí debería utilizar un trazo longo</short> | |
<example correction='—'>Neses establecementos de ensino existían matrículas <marker>-</marker> a maioría de ensino fundamental — e un total de docentes.</example> | |
<example correction='—'>Instituto Ricci de Macau <marker>-</marker> Asociación de promoción cultural da Compañía de Xesús en Macau</example> | |
<example>Na porción centro-oeste e noroeste presentan maiores elevacións, podendo atinxir 500 metros por enriba do nivel do mar, destacándose a Serra do Tumucumaque e a Serra Lombarda.</example> | |
<example>1466–1469 — Gran Guerra Irmandiña</example> | |
<example>2560-657 TORRES VEDRAS</example> | |
<example>---------------------------------------</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token>Estrada</token> | |
<token>Nacional</token> | |
<token regexp="yes">\d{3}</token> | |
<token regexp="yes">–|&hifen;</token> | |
<token regexp="yes">\d</token> | |
</antipattern> | |
<antipattern><!-- XXX Postal codes --> | |
<token regexp="yes">\d{4}</token> | |
<token regexp="yes">–|&hifen;</token> | |
<token regexp="yes">\d{3}</token> | |
<token> | |
<exception case_sensitive='yes'>a</exception></token> | |
</antipattern> | |
<antipattern><!-- XXX YYYY-XX-XX date formats and XX-XX-YYYY --> | |
<token regexp="yes">\d{2}|\d{4}</token> | |
<token regexp="yes" spacebefore='no'>–|&hifen;</token> | |
<token regexp="yes" spacebefore='no'>\d{2}</token> | |
<token regexp="yes" spacebefore='no'>–|&hifen;</token> | |
<token regexp="yes" spacebefore='no'>\d{2}|\d{4}</token> | |
</antipattern> | |
<pattern> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
<token regexp="yes">—|&hifen;</token> | |
<token regexp='yes'>\d+%?|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
</pattern> | |
<message>Se pretende indicar un intervalo temporal ou numérico, debe utilizar o medio-trazo.</message> | |
<suggestion>\1 – \3</suggestion> | |
<suggestion>\1–\3</suggestion> | |
<short>En intervalos numéricos/temporais, debe utilizar o medio-trazo</short> | |
<example correction='1812 – 1888|1812–1888'>Antonio Casares Rodríguez (<marker>1812 - 1888</marker>) — primeiro catedrático de Química da USC.</example> | |
<!--example correction='10 – 20%|10–20%'><marker>10-20%</marker></example--> <!-- XXX add half dash to tokenizer split characters and uncomment --> | |
<example>1466–1469 — Gran Guerra Irmandiña</example> | |
<example>2560-657 TORRES VEDRAS</example> | |
<example>---------------------------------------</example> | |
<example>10-10-10 — Data</example> | |
<example>10-10-2010 — Data</example> | |
<example>2010-10-10 — Data</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='DASH_SPACE_RULES' name="Trazo longo en enumeracións" default="on" tags="picky"> | |
<!-- Localized and improved from Catalan by Tiago F. Santos, 2017-05-16 --> | |
<url>https://gl.wikipedia.org/wiki/Raia_(puntuaci%C3%B3n)</url> | |
<antipattern> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
</antipattern> | |
<rule> | |
<pattern> | |
<token postag="SENT_START"/> | |
<marker> | |
<token regexp="yes">\d+|\w</token> | |
<token regexp="yes">[–‒—]|&hifen;</token> | |
<token spacebefore="no"> | |
<exception regexp="yes">\d+</exception></token> | |
</marker> | |
</pattern> | |
<message>En enumeracións, debe dar un espazo despois do trazo longo.</message> | |
<suggestion>\2 — \4</suggestion> | |
<short>Erro tipográfico</short> | |
<example correction="1 — Influencia"><marker>1—Influencia</marker> artística.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='DASH_ENUMERATION_NO_SPACE_RULE' name="Trazo longo en diálogos: Sen espazo" default="off"> | |
<rule> | |
<!-- Localized and improved from Catalan by Tiago F. Santos, 2017-05-16 --> | |
<antipattern> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
</antipattern> | |
<pattern> | |
<token postag="SENT_START"/> | |
<marker> | |
<token regexp="yes">[–‒—]|&hifen;</token> | |
<token spacebefore="yes"/> | |
</marker> | |
</pattern> | |
<message>En diálogos, debe retirar o espazo despois do trazo longo.</message> | |
<suggestion>—\3</suggestion> | |
<example correction="—Corre"><marker>— Corre</marker>! Vaia!</example> | |
<example>1466–1469 — Gran Guerra Irmandiña</example> | |
<example>—Saltar</example> | |
<example>—Correr</example> | |
<example>—Rastrear</example> | |
<example>---------------------------------------</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='DASH_ENUMERATION_SPACE_RULE' name="Trazo longo en diálogos: Espazo despois" default="on"> | |
<rule> | |
<!-- Based on Catalan version by Tiago F. Santos, 2017-05-16 --> | |
<antipattern> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
</antipattern> | |
<pattern> | |
<token postag="SENT_START"/> | |
<marker> | |
<token regexp="yes">[–‒—]|&hifen;</token> | |
<token spacebefore="no"/> | |
</marker> | |
</pattern> | |
<message>En diálogos, debe dar espazo despois do trazo longo.</message> | |
<suggestion>— \3</suggestion> | |
<!--url>https://ciberduvidas.iscte-iul.pt/consultorio/preguntas/o-uso-do-hifen-e-do-travessao/31251</url TODO localize --> | |
<example correction="— Corre"><marker>—Corre</marker>! Vaia!</example> | |
<example>1466–1469 — Gran Guerra Irmandiña</example> | |
<example>— Saltar</example> | |
<example>— Correr</example> | |
<example>— Rastrear</example> | |
<example>---------------------------------------</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='HIPHEN_SPACE_RULES' name="Espazamento en guións e trazos" default="on" tags="picky"> | |
<!-- Created by Tiago F. Santos, 2017-XX-XX --> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
<token regexp='yes'>–|&hifen;</token> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
</antipattern> | |
<pattern> | |
<token regexp='yes'>\p{L}+</token> | |
<token spacebefore="yes" regexp='yes'>&tracos_de_separacao;</token> | |
<token spacebefore="no" regexp='yes'>\p{L}+</token> | |
</pattern> | |
<message>Se pretende unir dúas palabras, non debe espazar e debe utilizar o guión. En caso contrario, utilice espazos e un trazo longo.</message> | |
<suggestion>\1-\3</suggestion> | |
<suggestion>\1 — \3</suggestion> | |
<short>Erro tipográfico</short> | |
<example correction='Tras-os|Tras — os'>Alfándega da Fe fica en <marker>Tras -os</marker>-Montes.</example> | |
<example>Ayer, A. J.— As Ideas de Bertrand Russel.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
<token regexp='yes'>&hifen;</token> | |
</antipattern> | |
<antipattern> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
<token regexp='yes'>–|&hifen;</token> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
</antipattern> | |
<pattern> | |
<token/> | |
<token spacebefore="no" regexp='yes'>&tracos_de_separacao;</token> | |
<token spacebefore="yes"/> | |
</pattern> | |
<message>Se pretende unir dúas palabras, non debe espazar e debe utilizar o guión. En caso contrario, utilice espazos e un trazo longo.</message> | |
<suggestion>\1-\3</suggestion> | |
<suggestion>\1 — \3</suggestion> | |
<short>Erro tipográfico</short> | |
<example correction='Tras-os|Tras — os'>Alfándega da Fe fica en <marker>Tras- os</marker>-Montes.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='ENUMERATION_AND_DASHES' name="Enumeracións con trazos: 1.2.-"> | |
<rule> | |
<!-- Localized and improved from Catalan by Tiago F. Santos, 2016-10-27 --> | |
<antipattern> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
<token regexp='yes'>–|&hifen;</token> | |
<token regexp='yes'>\d+|&meses_ano;|&meses_ano_abrev;|&dias_semana;|&dias_semana_abrev;</token> | |
</antipattern> | |
<pattern> | |
<token postag='SENT_START'/> | |
<marker> | |
<token regexp="yes">\d+(?:\.\d+)?</token> | |
<token>.</token> | |
<token regexp="yes" min="1" max="3">[—–‒-]</token> | |
</marker> | |
</pattern> | |
<message>Os trazos longos son innecesarios en enumeracións.</message> | |
<suggestion>\2.</suggestion> | |
<example correction="1."><marker>1.-</marker> Introdución</example> | |
<example correction="1."><marker>1.--</marker> Introdución</example> | |
<example correction="1.3."><marker>1.3.—</marker> Introdución</example> | |
<example>1466–1469 — Gran Guerra Irmandiña</example> | |
<example>50-30</example> | |
<example>…cunha pedra…—, penso que…</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='HYPOTHESIS_TYPOGRAPHY' name='Tipografia de Hipóteses'> | |
<!-- Created by Tiago F. Santos, 2017-09-01 --> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H0</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₀</suggestion> | |
<example correction='H₀'><marker>H0</marker>: Non existen efectos significativos.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H1</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₁</suggestion> | |
<example correction='H₁'><marker>H1</marker>: Existen efectos significativos co composto A.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H2</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₂</suggestion> | |
<example correction='H₂'><marker>H2</marker>: Existen efectos significativos co composto B.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H3</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₃</suggestion> | |
<example correction='H₃'><marker>H3</marker>: Existen efectos significativos cos compostos A e B combinados.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H4</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₄</suggestion> | |
<example correction='H₄'><marker>H4</marker>: Existen efectos significativos na ausencia do composto C.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H5</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₅</suggestion> | |
<example correction='H₅'><marker>H5</marker>: Existen efectos significativos do composto C.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H6</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₆</suggestion> | |
<example correction='H₆'><marker>H6</marker>: Existen efectos significativos do composto D.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H7</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₇</suggestion> | |
<example correction='H₇'><marker>H7</marker>: Existen efectos significativos do composto E.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H8</token> | |
</pattern> | |
<message>Prefira o símbolo tipográfico.</message> | |
<suggestion>H₈</suggestion> | |
<example correction='H₈'><marker>H8</marker>: Existen efectos significativos do composto F.</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token>H9</token> | |
</pattern> | |
<message>O símbolo tipográfico é máis claro.</message> | |
<suggestion>H₉</suggestion> | |
<example correction='H₉'><marker>H9</marker>: Existen efectos significativos do composto G.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='CHEMICAL_FORMULAS_TYPOGRAPHY' name='Fórmulas químicas'> | |
<!-- Created by Tiago F. Santos, 2017-02-12 --> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)(?:&tabela_periodica;)+(?:[₁₂₃₄₅₆₇₈₉]+)((&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os multiplicadores deben ir separados.</message> | |
<suggestion><match no='1' regexp_match='(\d+)((&tabela_periodica;)+)([₁₂₃₄₅₆₇₈₉₀]+)(((&tabela_periodica;)+)?)' regexp_replace='$1 $2$4$5'/></suggestion> | |
<example correction='4 H₂O'><marker>4H₂O</marker></example> | |
</rule> | |
<!-- Created by Tiago F. Santos, 2017-01-18 --> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+2((?:&tabela_periodica;)+)? | |
<exception regexp='yes'>I[CP]2</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)2(((&tabela_periodica;)+)?)' regexp_replace='$1₂$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='O₂'><marker>O2</marker></example> | |
<example correction='4H₂O'><marker>4H2O</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+3((?:&tabela_periodica;)+)? | |
<exception regexp='yes'>I[CP]3</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)3(((&tabela_periodica;)+)?)' regexp_replace='$1₃$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='2S₃'><marker>2S3</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+4((?:&tabela_periodica;)+)? | |
<exception regexp='yes'>I[CP]4</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)4(((&tabela_periodica;)+)?)' regexp_replace='$1₄$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='CH₄'><marker>CH4</marker></example> | |
<example correction='H₄Si'><marker>H4Si</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+2((?:&tabela_periodica;)+)?2((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)2(((&tabela_periodica;)+)?)2(((&tabela_periodica;)+)?)' regexp_replace='$1₂$3₂$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='H₂O₂'><marker>H2O2</marker></example> | |
<example correction='H₂NO₂Al'><marker>H2NO2Al</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+2((?:&tabela_periodica;)+)?3((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)2(((&tabela_periodica;)+)?)3(((&tabela_periodica;)+)?)' regexp_replace='$1₂$3₃$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='K₂HPO₃'><marker>K2HPO3</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+3((?:&tabela_periodica;)+)?2((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)3(((&tabela_periodica;)+)?)2(((&tabela_periodica;)+)?)' regexp_replace='$1₃$3₂$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='CH₃CH₂OH'><marker>CH3CH2OH</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+3((?:&tabela_periodica;)+)?3((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)3(((&tabela_periodica;)+)?)3(((&tabela_periodica;)+)?)' regexp_replace='$1₃$3₃$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='CH₃CH₃'><marker>CH3CH3</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+2((?:&tabela_periodica;)+)?4((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)2(((&tabela_periodica;)+)?)4(((&tabela_periodica;)+)?)' regexp_replace='$1₂$3₄$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='H₂SO₄'><marker>H2SO4</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+2((?:&tabela_periodica;)+)?5((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)2(((&tabela_periodica;)+)?)5(((&tabela_periodica;)+)?)' regexp_replace='$1₂$3₅$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='C₂H₅OH'><marker>C2H5OH</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+2((?:&tabela_periodica;)+)?6((?:&tabela_periodica;)+)?</token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)2(((&tabela_periodica;)+)?)6(((&tabela_periodica;)+)?)' regexp_replace='$1₂$3₆$6'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='C₂H₆'><marker>C2H6</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+7((?:&tabela_periodica;)+)? | |
<exception regexp='yes'>I[CP]7</exception> | |
<exception>V7</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)7(((&tabela_periodica;)+)?)' regexp_replace='$1₇$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='C₇H₁₆'><marker>C7H₁₆</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+8((?:&tabela_periodica;)+)? | |
<exception regexp='yes'>I[CP]8</exception> | |
<exception>V8</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)8(((&tabela_periodica;)+)?)' regexp_replace='$1₈$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='C₈H₁₈'><marker>C8H₁₈</marker></example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+9((?:&tabela_periodica;)+)? | |
<exception regexp='yes'>I[CP]9</exception> | |
<exception>V9</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)9(((&tabela_periodica;)+)?)' regexp_replace='$1₉$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='C₉H₂₀'><marker>C9H₂₀</marker></example> | |
<example>Lola T70 Chevy V8</example> | |
</rule> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>(?:\d+)?(?:&tabela_periodica;)+0((?:&tabela_periodica;)+)? | |
<exception>V0</exception></token> | |
</pattern> | |
<message>Nas fórmulas químicas os números deben estar en subíndice.</message> | |
<suggestion><match no='1' regexp_match='((&tabela_periodica;)+)0(((&tabela_periodica;)+)?)' regexp_replace='$1₀$3'/></suggestion> | |
<short>Empregue subíndices</short> | |
<example correction='C₉H₂₀'><marker>C₉H₂0</marker></example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='DEGREE_SYMBOL' name="Números: Símbolo de grao (°)"> | |
<rule> | |
<!-- Localized from Catalan grammar.xml, by Tiago F. Santos, 2017-02-27 --> | |
<regexp>(?-i)\s?º\s?([CFNSEW])\b</regexp> | |
<message>Se está a indicar graos, utilice o símbolo <suggestion> °\1</suggestion>.</message> | |
<example correction=" °C">Fai 25<marker>º C</marker> á sombra.</example> | |
<example correction=" °C">Fai 25<marker>ºC</marker> á sombra.</example> | |
<example correction=" °C">Fai 25<marker> º C</marker> á sombra.</example> | |
<example correction=" °C">Fai 25<marker> ºC</marker> á sombra.</example> | |
<example>Fai 25°.</example> | |
<example>…o da Unión, conforme estabelecido nos artigos 349.º e 355.º do Tratado sobre o Funcionamento da Unión E…</example> | |
<example>…que puxo fin á República Vella, depondo seu 13º e último presidente Washington Luís e impedindo a…</example> | |
<!-- <example>…tua-se no nordeste do Oceano Atlântico entre os 36º e os 43º de latitude Norte e os 25º e os 31º de longitude… XXX False negative </example>--> | |
</rule> | |
</rulegroup> | |
<rulegroup id='PLURAL_IN_UNITS_OF_MEASURE' name="Números: Abreviaturas de unidades de medida"> | |
<rule> | |
<!-- Based on the Catalan version, by Tiago F. Santos, 2017-02-22 --> | |
<pattern> | |
<token regexp="yes">\d+</token> | |
<marker> | |
<token regexp="yes">(?:&unidades_de_medida;)s</token> | |
</marker> | |
</pattern> | |
<message>As abreviaturas de unidades de medida estándar non teñen plural.</message> | |
<suggestion><match no='2' regexp_match='(&unidades_de_medida;)s' regexp_replace='$1'/></suggestion> | |
<example correction="kg">Son 2 <marker>kgs</marker> de mazás.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='KELVIN' name="Números: Kelvin (sen graos)"> | |
<rule> | |
<!-- Localized and improved by Tiago F. Santos, Portuguese rule, 2017-02-27 --> | |
<regexp>\s*[º°]\s*K\b</regexp> | |
<message>Kelvin non utiliza o sinal de grao.</message> | |
<suggestion> K</suggestion> | |
<url>https://gl.wikipedia.org/wiki/Kelvin</url> | |
<example correction=" K">A 30<marker> ºK</marker>.</example> | |
<example correction=" K">A 30<marker>ºK</marker>.</example> | |
<example correction=" K">A 30<marker> º K</marker>.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='DEGREE_MINUTES_SECONDS' name="Números: Graos, minutos e segundos: 50°45′ 20″"> | |
<!-- Localized and improved by Tiago F. Santos, Portuguese rule, 2016-10-27 --> | |
<rule> | |
<regexp>\b([\d., ]*\d)\s*[º°]\s*([\d., ]*\d)\s*[”"'’′`]\s*([\d., ]*\d)\s*[”"'’′`]</regexp> | |
<message>Utilice os símbolos de graos, minutos e segundos.</message> | |
<suggestion>\1° \2′ \3″</suggestion> | |
<example correction="25° 29,1′ 49″"><marker>25º 29,1' 49"</marker>.</example> | |
<example correction="25° 29′ 49″"><marker>25º 29' 49'</marker>.</example> | |
<example correction="25° 29,1′ 49″"><marker>25 º 29,1' 49"</marker>.</example> | |
<example correction="25° 29′ 49″"><marker>25 º 29' 49'</marker>.</example> | |
<example correction="25° 29′ 49″"><marker>25º29’49”</marker> N.</example> | |
<example>25° 29′ 34″</example> | |
</rule> | |
<rule> | |
<regexp>\b([\d., ]*\d)\s*[º°]\s*([\d., ]*\d)\s*[”"'’`]</regexp> | |
<message>Utilice os símbolos de graos e minutos.</message> | |
<suggestion>\1° \2′</suggestion> | |
<example correction="25° 29,1′"><marker>25º 29,1'</marker>.</example> | |
<example correction="25° 29′"><marker>25º 29 '</marker>.</example> | |
<example correction="25° 29,1′"><marker>25 º 29,1'</marker>.</example> | |
<example correction="25° 29′"><marker>25 º29'</marker>.</example> | |
<example correction="25° 29′"><marker>25º29’</marker> N.</example> | |
<example>25° 29′</example> | |
</rule> | |
<rule> | |
<regexp>\b([\d., ]*\d)\s*[”"'’′`]\s*([\d., ]*\d)\s*[”"'’′`]</regexp> | |
<message>Utilice os símbolos de minutos e segundos.</message> | |
<suggestion>\1′ \2″</suggestion> | |
<example correction="29,1′ 49″"><marker>29,1' 49"</marker>.</example> | |
<example correction="29′ 49″"><marker>29' 49 '</marker>.</example> | |
<example correction="29,1′ 49″"><marker>29,1' 49 "</marker>.</example> | |
<example correction="29′ 49″"><marker>29 ' 49'</marker>.</example> | |
<example correction="29′ 49″"><marker>29’49”</marker> N.</example> | |
<example>29′ 34″</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='LOOSE_ACCENTS' name="Acentos soltos"> | |
<rule> | |
<!-- Based on Catalan grammar.xml, by Tiago F. Santos on 11-02-2017 --> | |
<regexp>[`´]</regexp> | |
<message>Carácter incorrecto. Utilice antes o apóstrofo ou revise a acentuación.</message> | |
<suggestion>’</suggestion> | |
<suggestion/> | |
<short>Carácter incorrecto</short> | |
<example correction="’|">Non e<marker>´</marker> común encontrar erros deste tipo.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="DE_APOSTROPHE_SPACE" name="Tipografia: apóstrofo sen espazo"> | |
<rule> | |
<!-- Created by Tiago F. Santos, 2017-10-06 --> | |
<pattern> | |
<token regexp="yes">d|n|x</token> | |
<token spacebefore='no' regexp='yes'>['’]</token> | |
<token spacebefore='yes'/> | |
</pattern> | |
<message>O apóstrofo non debe separarse con espazos.</message> | |
<suggestion>\1\2\3</suggestion> | |
<short>Non separe o apóstrofo cun espazo</short> | |
<example correction="n'A">Unha nova <marker>n' A</marker> Nosa Terra.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='PRIORITIZE_QUOTES' name="Comiñas: Prioridade do tipo: «“‘...’”»." default="off"> | |
<!-- Created by Tiago F. Santos, 2017-05-31 --> | |
<rule> | |
<pattern> | |
<token skip='-1'>‘ | |
<exception scope="next">’</exception></token> | |
<token regexp='yes'>[«“]</token> | |
</pattern> | |
<message>Utilice primeiro comiñas angulares.</message> | |
<suggestion><match no='1' regexp_match='‘' regexp_replace='“' include_skipped='all'/> ‘</suggestion> | |
<example correction="“Dixen que ‘"><marker>‘Dixen que “</marker>si”.</example> | |
<example>“Dixen que ‘si’”.</example> | |
<example>«Dixen que “si”».</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token skip='-1' regexp='yes'>[”»] | |
<exception regexp='yes' scope="next">[«“‘]</exception></token> | |
<token>’</token> | |
</pattern> | |
<message>Utilice primeiro comiñas dobres.</message> | |
<suggestion><match no='1' regexp_match='[”»]' regexp_replace='’' include_skipped='all'/>”</suggestion> | |
<example correction="’.”">Dixen que “si<marker>”.’</marker></example> | |
<example>“Dixen que ‘si’”.</example> | |
<example>«Dixen que “si”».</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token skip='-1'>“ | |
<exception scope="next">”</exception></token> | |
<token>«</token> | |
</pattern> | |
<message>Utilice primeiro unha comiña baixa.</message> | |
<suggestion><match no='1' regexp_match='“' regexp_replace='«' include_skipped='all'/> “</suggestion> | |
<example correction="«Dixen que “"><marker>“Dixen que «</marker>si»”.</example> | |
<example>“Dixen que ‘si’”.</example> | |
<example>«Dixen que “si”».</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token skip='-1'>» | |
<exception regexp='yes' scope="next">[«“]</exception></token> | |
<token>”</token> | |
</pattern> | |
<message>Utilice primeiro unha comiña baixa.</message> | |
<suggestion><match no='1' regexp_match='»' regexp_replace='”' include_skipped='all'/>»</suggestion> | |
<example correction="”»">“Dixen que «si<marker>»”</marker>.</example> | |
<example>“Dixen que ‘si’”.</example> | |
<example>«Dixen que “si”».</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='UNPAIRED_BRACKET_SUGGESTIONS' name='Tipografia: Corrección de comiñas intelixentes repetidas'> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2017-08-25 --> | |
<rule> | |
<pattern> | |
<token skip='-1'>‘ | |
<exception scope="next">’</exception></token> | |
<marker> | |
<token>‘</token> | |
</marker> | |
</pattern> | |
<message>Utilice unha comiña de peche.</message> | |
<suggestion>’</suggestion> | |
<example correction="’">Dixen que ‘si<marker>‘</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token skip='-1'>“ | |
<exception scope="next">”</exception></token> | |
<marker> | |
<token>“</token> | |
</marker> | |
</pattern> | |
<message>Utilice unha comiña de peche.</message> | |
<suggestion>”</suggestion> | |
<example correction="”">Dixen que “si<marker>“</marker>.</example> | |
</rule> | |
</rulegroup> | |
<!-- Typography rules from English grammar.xml - START--> | |
<!-- Localized and improved by Tiago F. Santos, Portuguese rule, 2016-10-27 --> | |
<rulegroup id='TRADEMARK' name="Tipografia: Trademark - ™"> | |
<rule> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>\p{Lu}.*</token> | |
<marker> | |
<token>(</token> | |
<token>TM</token> | |
<token>)</token> | |
</marker> | |
</pattern> | |
<message>Quería escribir <suggestion>™</suggestion>?</message> | |
<short>Símbolo estándar de ™</short> | |
<example correction='™'>O novo produto é de Escolla Executiva<marker>(TM)</marker> Plus.</example> | |
</rule> | |
<rule id='SERVICEMARK' name="Tipografia: Servicemark - ℠"> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>\p{Lu}.*</token> | |
<marker> | |
<token>(</token> | |
<token>SM</token> | |
<token>)</token> | |
</marker> | |
</pattern> | |
<message>Quería escribir <suggestion>℠</suggestion>?</message> | |
<short>Símbolo estándar de ℠</short> | |
<example correction='℠'>O novo produto é de Escolla Executiva<marker>(SM)</marker> Plus.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='R_SYMBOL' name="Tipografia: Marca Rexistrada - ®"> | |
<rule> | |
<antipattern case_sensitive="yes"> | |
<marker> | |
<token>(</token> | |
<token>R</token> | |
<token skip="-1">)</token> | |
</marker> | |
<token regexp="yes">[\p{Lu}^R] | |
<exception scope="previous" negate="yes">(</exception></token> | |
<token skip="-1">)</token> | |
</antipattern> | |
<antipattern case_sensitive="yes"> | |
<token>(</token> | |
<token regexp="yes">[\p{Lu}^R]</token> | |
<token skip="-1">)</token> | |
<marker> | |
<token>R | |
<exception scope="previous" negate="yes">(</exception></token> | |
<token skip="-1">)</token> | |
</marker> | |
</antipattern> | |
<pattern case_sensitive='yes'> | |
<token regexp='yes'>\p{Lu}.*</token> | |
<marker> | |
<token>(</token> | |
<token>R</token> | |
<token>)</token> | |
</marker> | |
</pattern> | |
<message>Quería escribir <suggestion>®</suggestion>?</message> | |
<short>Símbolo estándar de ®</short> | |
<example correction='®'>Windows <marker>(R)</marker></example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='COPYRIGHT' name="Tipografia: Copyright - ©" type="typographical"> | |
<rule> | |
<antipattern> | |
<token>(</token> | |
<token>a</token> | |
<token skip="-1">)</token> | |
<token>b | |
<exception scope="previous" negate="yes">(</exception></token> | |
<token skip="-1">)</token> | |
<marker> | |
<token>c | |
<exception scope="previous" negate="yes">(</exception></token> | |
<token>)</token> | |
</marker> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token>(</token> | |
<token>c</token> | |
<token>)</token> | |
</marker> | |
<token regexp="yes">\d{4}|\p{Lu}\p{Ll}+</token> | |
</pattern> | |
<message>Posibelmente sexa máis claro usar o símbolo: <suggestion>©</suggestion></message> | |
<short>Símbolo estándar de ©</short> | |
<example correction="©">Copyright <marker>(C)</marker> Joanna Bator, 2012</example> | |
<example correction="©">Copyright <marker>(C)</marker> 2010 O Estado da Gramática</example> | |
<example>Isto é unha lista: (a) elemento, (b) 2 elementos, (c) 2014 elementos.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup type="locale-violation" id='CURRENCY' name="Posición dos símbolos de moeda: «100£» (£100)"> | |
<rule> | |
<pattern> | |
<token regexp="yes">[\d\,\.]+[$£¥\u8371]</token> | |
</pattern> | |
<message>O símbolo desta divisa colócase por norma antes do valor: <suggestion><match no="1" regexp_match="([\d\,\.]+)([$€£¥\u8371])" regexp_replace="$2$1"/></suggestion>.</message> | |
<short>Coloque a divisa no inicio</short> | |
<example correction="£100">Debe <marker>100£</marker>.</example> | |
<example correction="£100.00">Debe <marker>100.00£</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">[\d\,\.]+</token> | |
<token regexp="yes">[$£¥\u8371]</token> | |
</pattern> | |
<message>O símbolo desta divisa colócase por norma antes do valor: <suggestion>\2\1</suggestion>.</message> | |
<short>Coloque a divisa no inicio</short> | |
<example correction="£100">Debe <marker>100 £</marker>.</example> | |
<example correction="£100.00">Debe <marker>100.00 £</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">[€\u8371]</token> | |
<token regexp="yes">\d+(?:[\,\.]\d+)?</token> | |
</pattern> | |
<message>O símbolos de euro colócase despois do valor: <suggestion>\2 \1</suggestion>.</message> | |
<url>https://gl.wikipedia.org/wiki/Euro</url> | |
<short>Coloque a divisa no fin</short> | |
<example correction="100 €">Debe <marker>€ 100</marker>.</example> | |
<example correction="100,00 €">Debe <marker>€ 100,00</marker>.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup type="whitespace" id='CURRENCY_SPACE' name="Símbolos monetarios: Sen espazo en branco: «$ 100» ($100)"> | |
<rule> | |
<pattern> | |
<token regexp="yes">[$£¥\u8371]</token> | |
<token regexp="yes" spacebefore="yes">\d+(?:[\,\.]\d+)?</token> | |
</pattern> | |
<message>Os símbolos monetarios internacionais sepáranse cun espazo: <suggestion>\1\2</suggestion>.</message> | |
<url>https://gl.wikipedia.org/wiki/Euro</url> | |
<short>Espazo incorrecto</short> | |
<example correction="$100">Débese <marker>$ 100</marker>.</example> | |
</rule> | |
<rule type="whitespace" id='CURRENCY_SPACE_2' name="Símbolos monetarios: Con espazo en branco: «100,00€» (100,00 €)"> | |
<pattern> | |
<token regexp="yes">\d+(?:[\,\.]\d+)?[€]</token> | |
</pattern> | |
<message>Os símbolos monetarios do euro (€) sepáranse cun espazo<suggestion><match no="1" regexp_match="(\d+)([€\u8371])" regexp_replace="$1 $2"/></suggestion>.</message> | |
<url>https://gl.wikipedia.org/wiki/Euro</url> | |
<short>Espazo incorrecto</short> | |
<example correction="100 €">Débese <marker>100€</marker>.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='SMART_QUOTES' name="Comiñas intelixentes (“”)" tags="picky"> | |
<rule> | |
<pattern> | |
<token postag="``"/> | |
</pattern> | |
<message>Utilice aquí comiñas intelixentes: <suggestion>“</suggestion>.</message> | |
<url>https://gl.wikipedia.org/wiki/Comiñas</url> | |
<short>Utilice comiñas intelixentes</short> | |
<example correction="“">Isto é unha (<marker>"</marker>proba").</example> | |
<example correction="“"><marker>"</marker>Proba"!</example> | |
<example>“Proba”!</example> | |
<example correction="“">Isto é outra proba <marker>"</marker>proba".</example> | |
</rule> | |
<rule> | |
<antipattern> <!-- não embelezar polegadas --> | |
<token postag_regexp="yes" postag="''|SENT_START" skip="-1"> | |
<exception scope="next" postag="``"/></token> | |
<token regexp="yes">\d{1,2}</token> | |
<token regexp='yes' min='0' spacebefore='no'>[-\.]</token> | |
<token regexp='yes' min='0' spacebefore='no'>\d{1,2}</token> | |
<marker><token postag="''"/></marker> | |
</antipattern> | |
<pattern> | |
<token postag="''"/> | |
</pattern> | |
<message>Utilice unha comiña de peche aquí: <suggestion>”</suggestion>.</message> | |
<url>https://gl.wikipedia.org/wiki/Comiñas</url> | |
<short>Utilice comiñas intelixentes</short> | |
<example correction="”">Isto é unha proba ("proba<marker>"</marker>)</example> | |
<example correction="”">Use as comiñas "aquí<marker>"</marker> para dicir algo.</example> | |
<example correction="”">Isto é outra proba "proba<marker>"</marker>.</example> | |
<example correction="”">"O Aradiño<marker>"</marker> aparece no primeiro álbum de Fuxan os Ventos.</example> | |
<example>“Proba”!</example> | |
<!-- FIXME Clash with paired pontuation. Re-enable when fixed. --> | |
<example>Os asentos da clase económica teñen unha profundidade de 31-33"</example> | |
<example correction="”">O xogador de fútbol apelidado do "Animal<marker>"</marker></example> | |
</rule> | |
<rule> | |
<pattern> | |
<token>`</token> | |
<token spacebefore="no">`</token> | |
</pattern> | |
<message>Utilice unha comiñas intelixente de apertura aquí: <suggestion>“</suggestion>.</message> | |
<url>https://gl.wikipedia.org/wiki/Comiñas</url> | |
<short>Utilice comiñas intelixentes</short> | |
<example correction="“"><marker>``</marker>Proba”.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token>„</token> | |
</pattern> | |
<message>Apertura de comiñas posibelmente errada: <suggestion>“</suggestion>.</message> | |
<url>https://en.wikipedia.org/wiki/„</url> | |
<example correction="“"><marker>„</marker>Proba”.</example> | |
</rule> | |
</rulegroup> | |
<!-- does not work due to sentence splitting | |
<rule id='ELLIPSIS' name="Reticências inteligentes (…)"> | |
<antipattern> | |
<token>.</token> | |
<token>.</token> | |
<token>.</token> | |
<token>.</token> | |
<token>.</token> | |
</antipattern> | |
<pattern> | |
<token>.</token> | |
<token>.</token> | |
<token>.</token> | |
</pattern> | |
<message>Utilice o caractér tipográfico de reticências en vez de: <suggestion>…</suggestion>.</message> | |
<example correction="…">Isto é importante <marker>. . .</marker> tanto canto sei.</example> | |
<example>Isto é importante – tanto canto sei.</example> | |
<example correction="…">Isto é importante<marker>...</marker> tanto canto sei.</example> | |
<example>1. Introdución .................................... 3</example> | |
</rule> | |
--> | |
<rulegroup id='TIME_FORMAT' name="Tipografia de horas: 22.30 h -> 22:30h"> | |
<!-- Localized from Catalan, by Tiago F. Santos, 2017-05-15 --> | |
<!--url>https://ciberduvidas.iscte-iul.pt/artigos/rúbricas/idioma/sóbrea-escrita-dos-numeros-das-horas-e-de-outras-representacoes/3267</url--> | |
<!-- TODO Padded hours --> | |
<rule> | |
<pattern> | |
<token regexp="yes">[012]?\d[,\.][012345]\d[,\.][012345]\d([,.]\d+)?</token> | |
</pattern> | |
<message>A norma ISO 8601 indica que as horas sepáranse dos minutos e dos segundos por dous puntos e que teñen sempre dúas cifras.</message> | |
<suggestion><match no='1' regexp_match='(\d+)[,\.](\d+)[,\.](.+)' regexp_replace='$1:$2:$3'/></suggestion> | |
<suggestion><match no='1' regexp_match='(\d+)[,\.](\d+)[,\.](.+)' regexp_replace='$1 h $2 min $3 s'/></suggestion> | |
<short>Para expresar horas e minutos, utilice dous puntos.</short> | |
<example correction="10:00:43|10 h 00 min 43 s">Ás <marker>10.00.43</marker>.</example> | |
<example correction="10:00:43,5|10 h 00 min 43,5 s">Ás <marker>10.00.43,5</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">[012]?\d[,\.][012345]\d</token> | |
<token regexp="yes">h|horas|hrs|hs|hora</token> | |
</pattern> | |
<message>A norma ISO 8601 indica que as horas sepáranse dos minutos e dos segundos por dous puntos e que teñen sempre dúas cifras.</message> | |
<suggestion><match no='1' regexp_match='(\d+)[,\.](\d+)' regexp_replace='$1:$2'/> \4</suggestion> | |
<short>Para expresar horas e minutos, utilice dous puntos.</short> | |
<example correction="22:50 h">Ás <marker>22.50 h</marker>.</example> | |
<example correction="6:05 h">Ás <marker>6,05 h</marker>.</example> | |
<example>Ás 22:30 h.</example> | |
<example>A subida demora 8, 10 horas.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp='yes'>ás?|das?</token> | |
<token regexp="yes">[012]?\d[,\.][012345]\d</token> | |
</pattern> | |
<message>A norma ISO 8601 indica que as horas sepáranse dos minutos e dos segundos por dous puntos e que teñen sempre dúas cifras.</message> | |
<suggestion>\1 <match no='2' regexp_match='(\d+)[,\.](\d+)' regexp_replace='$1:$2'/></suggestion> | |
<short>Para expresar horas e minutos, utilice dous puntos.</short> | |
<example correction="Ás 10:00"><marker>Ás 10.00</marker>.</example> | |
<example correction="Da 01:00"><marker>Da 01.00</marker> a as… </example> | |
<example correction="ás 10:50">Das 10:00 <marker>ás 10.50</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes" skip="2">[012]?\d[,\.][012345]\d</token> | |
<token regexp="yes" inflected="yes">&partes_do_dia;</token> | |
</pattern> | |
<message>A norma ISO 8601 indica que as horas sepáranse dos minutos e dos segundos por dous puntos e que teñen sempre dúas cifras.</message> | |
<suggestion><match no='1' include_skipped='all' regexp_match='(\d+)[,\.](\d+)' regexp_replace='$1:$2'/> <match no='2' include_skipped='all'/></suggestion> | |
<short>Para expresar horas e minutos, utilice dous puntos.</short> | |
<example correction="5:00 da mañá">Ás <marker>5.00 da mañá</marker>.</example> | |
<example correction="6:05 da tarde">Ás <marker>6.05 da tarde</marker>.</example> | |
<example correction="6:05 da noite">Ás <marker>6.05 da noite</marker>.</example> | |
<example>Ás 22:30 h.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id='APOSTROPHE_IN_DATES' name="Apóstrofo en datas"> | |
<rule> | |
<pattern> | |
<token spacebefore="yes" regexp='yes'>(?::?[1-2]\d)?\d0 | |
<exception regexp='yes'>2[1-9]\d0</exception></token> | |
<token regexp="yes">['’]</token> | |
<token>s</token> | |
</pattern> | |
<message>Os apóstrofos non son necesarios en décadas: <suggestion><match no="1"/><match no="3"/></suggestion>.</message> | |
<url>http://www.monash.edu/about/editorialstyle/editing/apostrophes</url> | |
<short>Apóstrofo innecesario</short> | |
<example correction='1970s'>O Diácono Remedios preguntou onde estabas nos <marker>1970's</marker>.</example> | |
<example correction='70s'>O Diácono Remedios preguntou onde estabas nos <marker>70's</marker>.</example> | |
<example correction='1990s'>Onde estabas nos <marker>1990’s</marker>?</example> | |
<example>Discos de freo da <marker>Alvis 12/70</marker> adaptados para rodas máis grandes.</example> | |
</rule> | |
</rulegroup> | |
<!-- Localized by Tiago F. Santos, Portuguese rule, 2016-10-27 --> | |
<!-- Localization of rules from the English grammar.xml - END --> | |
<rulegroup id='SPACE_AFTER_PUNCTUATION' name='Espazos despois de puntuación'> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2017-01-01 --> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>[.]</token> | |
<token regexp='yes'>[.]</token> | |
<token regexp='yes'>[.]</token> | |
<token regexp='yes'>[.]</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token regexp='yes'>[.]</token> | |
<token regexp='yes'>[.]</token> | |
<token regexp='yes'>[.]</token> | |
</marker> | |
<token spacebefore='no'> | |
<exception regexp="yes">[,;:!?…”»()\[\]‒–—―\-]</exception> | |
<exception postag='SENT_END'/></token> | |
</pattern> | |
<message>Coloque un espazo despois dos puntos suspensivos</message> | |
<suggestion>… </suggestion> | |
<example correction='… '>Pegue aquí o seu texto<marker>...</marker>ou comprobe este texto.</example> | |
<example correction='… '><marker>...</marker>e os votos de Bo Aninovo.</example> | |
<example>Peque aquí o seu texto<marker>...</marker></example> | |
</rule> | |
<rule> | |
<pattern> | |
<marker> | |
<token regexp='yes'>… | |
<exception postag='SENT_END'/></token> | |
</marker> | |
<token spacebefore='no'> | |
<exception regexp="yes">[,;:!?…”»()\[\]‒–—―\-"“]</exception> | |
<exception postag='SENT_END'/></token> | |
</pattern> | |
<message>Coloque un espazo despois dos puntos suspensivos</message> | |
<suggestion>… </suggestion> | |
<example correction='… '>Cole aquí o seu texto<marker>…</marker>ou comprobe este texto.</example> | |
<example correction='… '><marker>…</marker>e os votos de Bo Aninovo.</example> | |
<example>Pegue aquí o seu texto<marker>…</marker></example> | |
<example>Alén diso<marker>…</marker> </example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="SPACE_BEFORE_PUNCTUATION" name="Espazos antes de puntuación"> | |
<!-- Based on German grammar.xml, by Tiago F. Santos, 2017-07-08 --> | |
<rule> | |
<regexp>\b([\p{L}\d]+) ([!?»”’,….])</regexp> | |
<message>Retire o espazo antes deste sinal de puntuación.</message> | |
<suggestion>\1\2</suggestion> | |
<example correction="escapou!">Como <marker>escapou !</marker></example> | |
<!--example correction="escapou!">Como é que isto me <marker>escapou !</marker></example--> | |
<example correction="roda.">Existen dúas estratexias posíbeis: aproveitar o que existe ou reinventar a <marker>roda .</marker></example> | |
</rule> | |
<rule> | |
<regexp>\b([\p{L}\d]+) ([:;])(?!-?[()/D])</regexp> | |
<message>Retire o espazo antes deste sinal de puntuación.</message> | |
<suggestion>\1\2</suggestion> | |
<example correction="posíbeis:">Existen dúas estratexias <marker>posíbeis :</marker> aproveitar o que existe ou reinventar a roda.</example> | |
<example>Un sorriso :-)</example> | |
<example>Un sorriso :)</example> | |
<example>Un sorriso :(</example> | |
<example>Un sorriso :-/</example> | |
<example>Un sorriso :/</example> | |
<example>Un sorriso :D</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="SEMICOLON_AND_QUOTES" name="Punto e vírgula antes de comiñas"> | |
<rule> | |
<!-- Localized from German grammar.xml by Tiago F. Santos, 2017-08-17 --> | |
<antipattern> | |
<token regexp="yes">„|“|»|«|"</token> | |
<token>;</token> | |
<token regexp="yes">»|«|"|”|‘|‹|›|'> | |
</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token>;</token> | |
<token spacebefore="no" regexp="yes">“|»|«|"|”|‘|‹|›|'</token> | |
</marker> | |
<token spacebefore="yes"/> | |
</pattern> | |
<message>Xeralmente, non se coloca punto e vírgula antes de comiñas.</message> | |
<example type="incorrect">«Non me incomode con súa leria infantil<marker>;»</marker> dixen Maria; «eu escribo versos inmortais.»</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="PARENTESESE_AND_QUOTES_SPACING" name="Espazamento en volta de comiñas ou parénteses"> | |
<!-- Localized from German grammar.xml by Tiago F. Santos, 2017-08-17 --> | |
<rule> | |
<antipattern> | |
<token>,</token> | |
<token spacebefore="no" regexp="yes">»|«|"</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">„|»|«|"|\(|\{</token> | |
<token regexp="yes">:|,|;</token> | |
<token regexp="yes">“|»|«|"|\)|\}</token> | |
</antipattern> | |
<pattern> | |
<or> | |
<token postag="SENT_START"/> | |
<token regexp="yes">:|,|;</token> | |
</or> | |
<marker> | |
<token regexp="yes">„|“|«|"|\(|\{</token> | |
<token spacebefore="yes"/> | |
</marker> | |
</pattern> | |
<message>Espazamento incorrecto.</message> | |
<suggestion>\2\3</suggestion> | |
<example correction="«O"><marker>« O</marker> xardín é verdadeiramente bonito», dixo ela.</example> | |
<example correction="«O">Ela dixo: <marker>« O</marker> xardín é verdadeiramente bonito.»</example> | |
<example correction="«é">«O xardín», dixo ela, <marker>« é</marker> verdadeiramente bonito.»</example> | |
<example>A galiña di «Quiquiriquiqui» o porco di «Oinc, Oinc», o pato di «Cuá, Cuá» e o gato «Miau».</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp='yes'>&abreviaturas;|ex</token> | |
<token spacebefore='no'>.</token> | |
<token regexp="yes">“|»|«|"|\)|\}</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">[a-z]</token> | |
<token>.</token> | |
<token regexp="yes">“|»|«|"|\)|\}</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">„|»|«|"|\(|\{</token> | |
<token regexp="yes">\.|\?|!</token> | |
<token regexp="yes">“|»|«|"|\)|\}</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token regexp="yes">\.|\?|!</token> | |
<token spacebefore="yes" regexp="yes">“|»|«|"|\)|\}</token> | |
</marker> | |
</pattern> | |
<message>Espazamento incorrecto.</message> | |
<suggestion>\1\2</suggestion> | |
<example correction=".»">«O xardín é verdadeiramente bonito<marker>. »</marker></example> | |
<example correction=".»">«O xardín», dixo el, «xardín é verdadeiramente bonito<marker>. »</marker></example> | |
<example>Algunhas palabras inglesas teñen dúas grafías, p.ex. "gray" e "grey".</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes">„|»|«|"|\(|\{</token> | |
<token>,</token> | |
<token regexp="yes">“|»|«|"|\)|\}</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token/> | |
<token spacebefore="yes" regexp="yes">“|»|«|"|\)|\}</token> | |
</marker> | |
<token>,</token> | |
</pattern> | |
<message>Espazamento incorrecto.</message> | |
<suggestion>\1\2</suggestion> | |
<example correction="bonito»">«O xardín é verdadeiramente <marker>bonito »</marker>, dixo ela.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token spacebefore="yes" regexp="yes">“|‚|\(|\{</token> | |
<token spacebefore="yes"/> | |
</pattern> | |
<message>Espazamento incorrecto.</message> | |
<suggestion>\1\2</suggestion> | |
<example correction="“O">Ela dixo: <marker>“ O</marker> xardín é verdadeiramente bonito.”</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token/> | |
<token spacebefore="yes" regexp="yes">»|«|"|“|”|‹|›|‘|’|'</token> | |
<token spacebefore="yes"/> | |
</pattern> | |
<message>Un dos espazos é innecesario. Debe excluílo.</message> | |
<suggestion>\1\2 \3</suggestion> | |
<suggestion>\1 \2\3</suggestion> | |
<example correction="é' verdadeiramente|é 'verdadeiramente">O xardín <marker>é ' verdadeiramente</marker>' bonito.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="SEMICOLON_COLON_SPACING" name="Espazos ausentes: «:» e «;»"> | |
<rule> | |
<!-- Localized from German grammar.xml by Tiago F. Santos, 2017-08-17 --> | |
<antipattern> | |
<token regexp="yes">“|«|"|\(</token> | |
<token regexp="yes">:|;</token> | |
<token regexp="yes">”|»|"|\)</token> | |
</antipattern> | |
<antipattern><!-- XXX Wikipedia lists and time formats --> | |
<token>:</token> | |
<token spacebefore="no"/> | |
<token spacebefore="no">:</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">&codigos_de_pais;</token> | |
<token spacebefore="no">:</token> | |
</antipattern> | |
<antipattern> | |
<token>;</token> | |
<token regexp="yes">“|»|«|"|”</token> | |
<token spacebefore="yes"/> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">.*[0-9]</token> | |
<token>:</token> | |
<token regexp="yes">[0-9].*</token> | |
</antipattern> | |
<antipattern> | |
<!-- smiley --> | |
<token regexp="yes">[:;]</token> | |
<token spacebefore="no">-</token> | |
<token spacebefore="no" regexp="yes">[()]</token> | |
</antipattern> | |
<pattern> | |
<marker> | |
<token regexp="yes">:|;</token> | |
<token spacebefore="no"> | |
<exception postag="SENT_END"/></token> | |
</marker> | |
</pattern> | |
<message>Debe colocar un espazo despois de «\1».</message> | |
<suggestion>\1 \2</suggestion> | |
<example correction=": «">El dixo<marker>:«</marker>O xardín é verdadeiramente bonito.»</example> | |
<example>A cea estará lista ás 18:30.</example> | |
</rule> | |
</rulegroup> | |
</category> | |
<category id="CAT0" name="Gramática: Concordancia" type="grammar"> | |
<rulegroup id="GENERAL_GENDER_AGREEMENT_ERRORS" name="Concordancia de xénero: Xeral"> | |
<!-- General gender concordance errors --> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2016-10-21 --> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<antipattern case_sensitive="yes"><!-- XXX Proper names exception --> | |
<unify negate="yes"> | |
<feature id="gender" /><feature id="number" /> | |
<token postag_regexp="yes" postag="(?:N|A).+|UNKNOWN" regexp="yes">\p{Lu}.+</token> | |
<token regexp="yes">\p{Lu}.+</token> | |
</unify> | |
</antipattern> | |
<rule> | |
<antipattern> | |
<unify> | |
<feature id="gender" /><feature id="number" /> | |
<token /> | |
<token regexp="yes">(?:&precede_nome_proprio;)e?s?</token> | |
</unify> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)MS.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CF]S.+|V.[CSIG].+|(C|R).+|SPS00" postag_regexp="yes" /> | |
<exception>ás</exception><!-- XXX Dealt by HOMOPHONE_AS_CARD --> | |
<exception regexp="yes">e|ser|son|termo|nome</exception></token> | |
<token min="0" postag="(?:A..|Z.)C[SN].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[SN].+" /></token> | |
<token postag="(?:[NZ].|A..)F.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CM].+|V.[CSI].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">unha|mas</exception> | |
</token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)MS(.+)" postag_replace="$1FS$2" postag_regexp="yes" include_skipped="all" /> <match no="3" include_skipped="all" /> \4</suggestion> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..)F.(.+)" postag_replace="$1MS$2" postag_regexp="yes" /></suggestion> | |
<example correction="Unha vaca|Un (vaca)"><marker>Un vaca</marker> está no prado.</example> | |
<example correction="unha tortilla|un (tortilla)">Queres que fagamos <marker>un tortilla</marker> para cearmos?</example> | |
<example>O Un tórnase Dous, o Dous tórnase Tres.</example> | |
<!--example>Dise que a cada día nace un trouxa, e diso o vigarista sabe.</example--><!-- XXX solved after disambiguation rules are converted --> | |
<!--example correction='unha sándwich|un (sándwich)'>Están comendo <marker>un sándwich</marker>.</example--> | |
<!--example correction="unha espantosa dor|un espantosa (dor)">Teño <marker>un espantosa dor</marker> na cabeza.</example--><!-- XXX make example with neutral adjective instead of espantosa> | |
<example correction="unha gran erupción|un gran (erupción)">Por exemplo, <marker>un gran erupción</marker> volcánica causa maior reflexión da luz solar de vo…</example--> | |
<example>O monte Fariña é unha montaña do distrito de Vila Real.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_MS; | |
<exception postag_regexp="yes" postag="RG|NP.+" /></token> | |
<token min="0" postag="(?:A..|Z.)C[SN].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[SN].+" /></token> | |
<token postag="(?:[NZ].|A..|DP.)F.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..|DP.)[CM].+|V.[CSI].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">unha|mas</exception> | |
</token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..)F.(.+)" postag_replace="$1MS$2" postag_regexp="yes" /></suggestion> | |
<example correction="no (hora)">Foi resolto <marker>no hora</marker> correcta.</example> | |
<example type="correct">Foi resolto <marker>na hora</marker> correcta.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<unify> | |
<feature id="gender" /><feature id="number" /> | |
<token /> | |
<token regexp="yes">(?:&precede_nome_proprio;)s</token> | |
</unify> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)MP.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CF]P.+|V.[CSIG].+|(C|R).+|SPS00" postag_regexp="yes" /> | |
<exception regexp="yes">as|termos|nomes</exception></token> | |
<token min="0" postag="(?:A..|Z.)C[NP].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[NP].+" /></token> | |
<token postag="(?:[NZ].|A..)F.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CM].+|V.[CSI].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">unha|media</exception> | |
</token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)MP(.+)" postag_replace="$1FP$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> \4</suggestion> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)F.(.+)" postag_replace="$1MP$2" postag_regexp="yes" /></suggestion> | |
<example correction="As invasoras|Os invasores"><marker>Os invasoras</marker> holandeses decidiron ir en dirección ao Río Grande do Norte…</example> | |
<example correction="As frases|Os (frases)"><marker>Os frases</marker> están erradas.</example> | |
<example correction="Unhas cadelas|Uns cans"><marker>Uns cadelas</marker> están na rúa.</example> | |
<example type="correct"><marker>Os bois</marker> están no prado.</example> | |
<!--example correction="unhas espantosas dores|uns espantosas (dores)">Teño <marker>uns espantosas dores</marker> na cabeza.</example--><!-- XXX adapt example with neutral adjective --> | |
<example>Existe cada vez máis presión sobre os medios de comunicación para que presenten contidos de calidade.</example> | |
<example>Os ríos Camba, Navea e Xares son afluentes do Bibei.</example> | |
<example correction="As escolas|Os (escolas)"><marker>Os escolas</marker> de ferrado recibían o seu nome pola forma na que se pagaban.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_MP; | |
<exception postag_regexp="yes" postag="RG|NP.+" /></token> | |
<token min="0" postag="(?:A..|Z.)C[NP].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[NP].+" /></token> | |
<token postag="(?:[NZ].|A..|DP.)F.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..|DP.)[CM].+|V.[CSI].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">unha|mas</exception> | |
</token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..)F.(.+)" postag_replace="$1MP$2" postag_regexp="yes" /></suggestion> | |
<example correction="Algúns (frases)"><marker>Algúns frases</marker> ten erros gramaticais.</example> | |
<example type="correct"><marker>Algunhas frases</marker> ten erros gramaticais.</example> | |
<example correction="Nos (mil)"><marker>Nos mil</marker> e unha noites.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token>industria</token> | |
<token>automóbil</token> | |
</antipattern> | |
<antipattern> | |
<unify> | |
<feature id="gender" /><feature id="number" /> | |
<token /> | |
<token regexp="yes">(?:&precede_nome_proprio;)e?s?</token> | |
</unify> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">zonas?</token> | |
<token>euro</token> | |
</antipattern> | |
<antipattern> | |
<token>alínea</token> | |
<token regexp="yes">\w|\d</token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)FS.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CM]S.+|V.[CSI].+|(C|R).+|SPS00" postag_regexp="yes" /> | |
<exception regexp="yes">e|ser|a|palabra|letra|comunidade</exception></token> | |
<token min="0" postag="(?:A..|Z.)C[NS].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[NS].+" /></token> | |
<token postag="(?:[NZ].|A..)M.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CF].+|V.[CSIG].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">un|uns|ser|&puntos_cardeais;|números?|son</exception></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)FS(.+)" postag_replace="$1MS$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> \4</suggestion> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)M.(.+)" postag_replace="$1FS$2" postag_regexp="yes" /></suggestion> | |
<example correction="Un boi|Unha (boi)"><marker>Unha boi</marker> está no prado.</example> | |
<example>Á comunidade Mozilla (Firefox, Thunderbird e SeaMonkey).</example> | |
<example>Unha vaca está no prado.</example> | |
<!--example correction="un espantosa inchazo|unha espantosa (inchazo)">Teño <marker>unha espantoso inchazo</marker> na cabeza.</example XXX enable after disambiguation improvements. Also tests 'espantoso' as neutral --> | |
<example>Alemaña perdeu a Primeira Guerra Mundial debido á Revolución alemá.</example> | |
<example>Unha rúa Roberto Duarte Silva, tantas memorias.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_FS; | |
<exception postag_regexp="yes" postag="RG|NP.+" /></token> | |
<token min="0" postag="(?:A..|Z.)C[NS].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[NS].+" /></token> | |
<token postag="(?:[NZ].|A..|DP.)M.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..|DP.)[CF].+|V.[CSIG].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">un|uns|ser|&puntos_cardeais;|números?|son</exception></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)M.(.+)" postag_replace="$1FS$2" postag_regexp="yes" /></suggestion> | |
<example correction="Algunha (boi)"><marker>Algunha boi</marker> está no prado.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<unify> | |
<feature id="gender" /><feature id="number" /> | |
<token /> | |
<token regexp="yes">(?:&precede_nome_proprio;)s</token> | |
</unify> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<antipattern> | |
<token>alíneas</token> | |
<token regexp="yes">\w|\d</token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)FP.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CM]P.+|V.[CSI].+|(C|R).+|SPS00" postag_regexp="yes" /> | |
<exception regexp="yes">e|palabras|letras|rúas|illas</exception></token> | |
<token min="0" postag="(?:A..|Z.)C[NP].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[NP].+" /></token> | |
<token postag="(?:[NZ].|A..)M.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)[CF].+|V.[CSIG].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">un|uns|ser|&puntos_cardeais;|números?|son</exception></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)FP(.+)" postag_replace="$1MP$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> \4</suggestion> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)M.(.+)" postag_replace="$1FP$2" postag_regexp="yes" /></suggestion> | |
<example correction="Uns bois|Unhas (bois)"><marker>Unhas bois</marker> están no prado.</example> | |
<example type="correct"><marker>Unhas vacas</marker> están no prado.</example> | |
<!-- example correction="uns terríveis inchaços|unhas terríveis (inchaços)">Teño <marker>unhas espantosas inchaços</marker> na cabeza.</example XXX enable after disambiguation improvements. Also tests 'espantoso' as neutral --> | |
<example correction="os millóns|as (millóns)">Vexan <marker>as millóns</marker> de mulleres.</example> | |
<!--example>Isso é nas escolas Álvaro de Campos, José Rodrigues dos Santos e Fernando Pessoa.</example--><!-- TODO Tokenize conjunctions --> | |
<example>Isto é, as escolas Álvaro de Campos, José Rodrigues dos Santos e Fernando Persoa.</example> | |
<example correction="Os ríos|As (ríos)"><marker>As ríos</marker> Camba, Navea e Xares son afluentes do Bibei..</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_FP; | |
<exception postag_regexp="yes" postag="RG|NP.+" /></token> | |
<token min="0" postag="(?:A..|Z.)C[NP].+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:[NZ].|A..)C[NP].+" /></token> | |
<token postag="(?:[NZ].|A..|DP.)M.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..|DP.)[CF].+|V.[CSIG].+|(C|R).+|SPS00.*" postag_regexp="yes" /> | |
<exception regexp="yes">un|uns|ser|&puntos_cardeais;|números?|son</exception></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)M.(.+)" postag_replace="$1FP$2" postag_regexp="yes" /></suggestion> | |
<!--example correction="das grandes descubertas">A maioría <marker>das grandes descubertos</marker> científicas son nada menos que o descubrimento do ób…</example XXX add after disambiguation sync --> | |
<example correction="Algunhas (bois)"><marker>Algunhas bois</marker> están no prado.</example> | |
</rule> | |
</rulegroup> | |
<!-- Specific gender concordance errors - A > Masculine Noun --> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2016-10-24 --> | |
<rulegroup default="off" id="ERRO_DE_CONCORDNCIA_DO_GÉNERO_FEMININO_A" name="Concordancia de xénero: a + Masculino"> | |
<rule> | |
<pattern> | |
<marker> | |
<token>a</token> | |
<token postag="(?:[NZ].|A..)MS.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)MS.+" postag_regexp="yes" negate_pos="yes" /> | |
<exception regexp="yes">un|uns|ser|&puntos_cardeais;|números?|exemplo|fin|favor|serio|tempo|lado|uso|dereito</exception></token> | |
</marker> | |
<token negate="yes" regexp="yes">&hifen;</token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>o \2</suggestion> | |
<suggestion>a <match no="2" postag="(A..|N.|Z.)MS(.+)" postag_replace="$1FS$2" postag_regexp="yes" /></suggestion> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<example correction="O boi|A (boi)"><marker>A boi</marker> está no prado.</example> | |
<example type="correct">A vaca está no prado.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup default="off" id="A_WORD_A" name="Concordancia de xénero: a + palabra terminada en -a"> | |
<rule> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2016-10-28 --> | |
<pattern> | |
<token regexp="yes">a</token> | |
<token postag="(?:[NZ].|A..)M.+" postag_regexp="yes" regexp="yes">.+a$ | |
<exception regexp="yes">palabra|letra</exception></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>o \2</suggestion> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<example correction="O dogma"><marker>A dogma</marker> de quen sabe moito.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="SER_ADJECTIVE_AGREEMENT" name="Erro de concordancia: SER + adxectivo + nome"> | |
<!-- Created by Tiago F. Santos, 2017-09-06 --> | |
<rule> | |
<pattern> | |
<token inflected="yes">ser</token> | |
<token postag_regexp="yes" postag="A..MS.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:A..|N.)MS.+" /></token> | |
<token postag_regexp="yes" postag="(?:Z|D..)[CF][SN].+" /> | |
<token postag_regexp="yes" postag="A..[CF][SN].+" min="0" max="2" /> | |
<token postag="N.FS.+" postag_regexp="yes"> | |
<exception postag_regexp="yes" postag="(?:A..|[PN].)[CM]S.+" /></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>\1 <match no="2" postag="(A..|N.|Z.)MS(.+)" postag_replace="$1FS$2" postag_regexp="yes" /> \3 <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" /></suggestion> | |
<example correction="É necesaria unha festa"><marker>É necesario unha festa</marker>.</example> | |
<example correction="É necesaria unha gran festa"><marker>É necesario unha gran festa</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token inflected="yes">ser</token> | |
<token postag_regexp="yes" postag="A..FS.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:A..|N.)FS.+" /></token> | |
<token postag_regexp="yes" postag="(?:Z|D..)[CM][SN].+" /> | |
<token postag_regexp="yes" postag="A..[CM][SN].+" min="0" max="2" /> | |
<token postag="N.MS.+" postag_regexp="yes"> | |
<exception postag_regexp="yes" postag="(?:A..|[PN].)[CF]S.+" /></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>\1 <match no="2" postag="(A..|N.|Z.)FS(.+)" postag_replace="$1MS$2" postag_regexp="yes" /> \3 <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" /></suggestion> | |
<example correction="É necesario un acordo"><marker>É necesaria un acordo</marker>.</example> | |
<example correction="É necesario un gran acordo"><marker>É necesaria un gran acordo</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token inflected="yes">ser</token> | |
<token postag_regexp="yes" postag="A..MP.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:A..|N.)MP.+" /></token> | |
<token postag_regexp="yes" postag="(?:Z|D..)[CF][PN].+" /> | |
<token postag_regexp="yes" postag="A..[CF][PN].+" min="0" max="2" /> | |
<token postag="N.FP.+" postag_regexp="yes"> | |
<exception postag_regexp="yes" postag="(?:A..|[PN].)[CM]P.+" /></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>\1 <match no="2" postag="(A..|N.|Z.)MP(.+)" postag_replace="$1FP$2" postag_regexp="yes" /> \3 <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" /></suggestion> | |
<example correction="Son necesarias unhas festas"><marker>Son necesarios unhas festas</marker>.</example> | |
<example correction="Son necesarias unhas grandes festas"><marker>Son necesarios unhas grandes festas</marker>.</example> | |
</rule> | |
<rule> | |
<pattern> | |
<token inflected="yes">ser</token> | |
<token postag_regexp="yes" postag="A..FP.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:A..|N.)FP.+" /></token> | |
<token postag_regexp="yes" postag="(?:Z|D..)[CM][PN].+" /> | |
<token postag_regexp="yes" postag="A..[CM][PN].+" min="0" max="2" /> | |
<token postag="N.MP.+" postag_regexp="yes"> | |
<exception postag_regexp="yes" postag="(?:A..|[PN].)[CF]P.+" /></token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>\1 <match no="2" postag="(A..|N.|Z.)FP(.+)" postag_replace="$1MP$2" postag_regexp="yes" /> \3 <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" /></suggestion> | |
<example correction="Son necesarios uns acordos"><marker>Son necesarias uns acordos</marker>.</example> | |
<example correction="Son necesarios uns grandes acordos"><marker>Son necesarias uns grandes acordos</marker>.</example> | |
</rule> | |
</rulegroup> | |
<!-- Specific gender concordance errors - O > Feminine Noun --> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2016-10-24 --> | |
<rulegroup id="ERRO_DE_CONCORDNCIA_DO_GÉNERO_MASCULINO_O" name="Concordancia de xénero: o + Feminino"> | |
<rule> | |
<pattern> | |
<marker> | |
<token>o</token> | |
<token postag="(?:[NZ].|A..)F.+" postag_regexp="yes"> | |
<exception postag="(?:[NZ].|A..)F.+" postag_regexp="yes" negate_pos="yes" /> | |
<exception regexp="yes">unha|unhas|e|ser|nome|termo</exception></token> | |
</marker> | |
<token negate="yes" regexp="yes">&hifen;</token> | |
</pattern> | |
<message>&MSG_ECX;</message> | |
<suggestion>a \2</suggestion> | |
<suggestion>o <match no="2" postag="(A..|N.|Z.)FS(.+)" postag_replace="$1MS$2" postag_regexp="yes" /></suggestion> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<example correction="A cadela|O can"><marker>O cadela</marker> está no prado.</example> | |
<example type="correct">A cadela está no prado.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="GENERAL_NUMBER_AGREEMENT_ERRORS" name="Concordancia de número: Xeral"> | |
<!-- General number concordance errors --> | |
<!-- Created by Tiago F. Santos, Portuguese rule, 2016-10-19 --> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<antipattern case_sensitive="yes"> | |
<unify negate="yes"><!-- XXX Proper names exception --> | |
<feature id="gender" /><feature id="number" /> | |
<token postag_regexp="yes" postag="(?:N|A).+|UNKNOWN" regexp="yes">\p{Lu}.+</token> | |
<token regexp="yes">\p{Lu}.+</token> | |
</unify> | |
</antipattern> | |
<antipattern> | |
<unify negate="yes"> | |
<feature id="number" /> | |
<token postag_regexp="yes" postag="N.+" /> | |
<token postag_regexp="yes" postag="Z.+" /> | |
</unify> | |
</antipattern> | |
<rule> | |
<antipattern> | |
<token regexp="yes">(?:&precede_nome_proprio;)s</token> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<antipattern> | |
<token>os</token> | |
<token regexp="yes">máis|menores|maiores|mellores|peores</token> | |
<token postag="(?:D[ADIP].|NC|A..|Z.)[MC]P.+" postag_regexp="yes" /> | |
</antipattern> | |
<antipattern> | |
<token postag="(?:D[ADIP].|NC|A..|Z.).S.+" postag_regexp="yes" /> | |
<token regexp="yes">d[eao]s?</token> | |
<token postag="(?:D[ADIP].|NC|A..|Z.)[MC]P.+" postag_regexp="yes" /> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)[MC]P.+" postag_regexp="yes"> | |
<exception postag="(?:D[ADIP].|NC|A..|P..|Z.)[MC]S.+|(C|R).+|SPS00" postag_regexp="yes" /> | |
<exception regexp="yes">.+[°′″]</exception></token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|Z.)[MC]S.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|Z.)[MC]P.+|P[ID].[CFM].+|(C|R).+|SPS00.*|VMG0000" postag_regexp="yes" /> | |
<exception regexp="yes">hai|son|ser|deber|van|serán</exception></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)[MC]P(.+)" postag_replace="$1[MC]S$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /></suggestion> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[MC]S(.+)" postag_replace="$1[MC]P$2" postag_regexp="yes" /></suggestion> | |
<example correction="O can|Os cans"><marker>Os can</marker> está no prado.</example> | |
<example correction="pai natal|pais natais">Había <marker>pais natal</marker> na festa.</example> | |
<example correction="todo litoral|todos litorais">Posúe unha extensión aproximada de 378 km, o que representa 3,8% de <marker>todos litoral</marker> do México.</example> | |
<example correction="Caso máis preocupante|Casos máis preocupantes"><marker>Casos máis preocupante</marker> son estas.</example> | |
<example>Conforme máis datos van sendo acumulados de persoas de todas as idades.</example> | |
<example>Os rinocerontes serán anestesiados, antes de se remover o chifre.</example> | |
<example>Pantalóns, os máis estragados posíbel!</example> | |
<example>Os montes Everest, K2 e Kanchenjunga son os máis altos do mundo.</example> | |
<example>As cores son: Ás de Copas vermello, Ás de Ouros vermello, Ás de Bastos negro e Ás de Espadas negro.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token postag_regexp="yes" regexp="yes" postag="R.+">&contraccions_MP; | |
<exception postag_regexp="yes" negate_pos="yes" postag="R.+" /></token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_MP;</token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|DP.|Z.)[MC]S.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|DP.|Z.)[MC]P.+|NPMS.+|P[ID].[CFM].+|(C|R).+|SPS00|VMG0000" postag_regexp="yes" /> | |
<exception regexp="yes">[dlv]ê|hai|son|ser|deber|media|mídia</exception></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[MC]S(.+)" postag_replace="$1[MC]P$2" postag_regexp="yes" /></suggestion> | |
<example correction="dos pais">É o orgullo <marker>dos pai</marker>.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes">&precede_nome_proprio;</token> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">tod[oa]</token> | |
<token>ouvidos</token> | |
</antipattern> | |
<antipattern> | |
<token>o</token> | |
<token regexp="yes">máis|menor|maior|peor|mellor</token> | |
<token postag="(?:D[ADIP].|NC|A..|Z.)[MC]S.+" postag_regexp="yes" /> | |
</antipattern> | |
<antipattern> | |
<token postag="(?:D[ADIP].|NC|A..|Z.).P.+" postag_regexp="yes" /> | |
<token regexp="yes">d[eao]</token> | |
<token postag="(?:D[ADIP].|NC|A..|Z.)[MC]S.+" postag_regexp="yes" /> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|ou|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)[MC]S.+" postag_regexp="yes"> | |
<exception postag="(?:D[ADIP].|N.|A..|Z.)[MC]P.+|(C|R).+|SPS00|VMG0000" postag_regexp="yes" /> | |
<exception>ás</exception><!-- XXX Dealt by HOMOPHONE_AS_CARD --> | |
<exception regexp="yes">hai|son|ser|haber|serán|van|uso|cero</exception> | |
<exception regexp="yes">.+[°′″]</exception></token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|Z.)[MC]P.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|Z.)[MC]S.+|P[ID].[CFM].+|(C|R).+|SPS00.*" postag_regexp="yes" /></token> | |
</marker> | |
<token negate="yes" regexp="yes">&hifen;</token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[MC]P(.+)" postag_replace="$1[MC]S$2" postag_regexp="yes" /></suggestion> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)[MC]S(.+)" postag_replace="$1[MC]P$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /></suggestion> | |
<example correction="Este gato|Estes gatos"><marker>Este gatos</marker> están no prado.</example> | |
<example>Son todo oídos</example> | |
<example>Uso lentes desde os 6 anos,</example> | |
<example>Pantalóns, o máis posíbel estragados.</example> | |
<example>O Monte Camerún é o volcán máis activo do oeste africano, tendo numerosas erupcións rexistradas.</example> | |
<example>O número nove.</example> | |
<example>Alí fóra están a cero graos.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes">tod[oa]</token> | |
<token>ouvidos</token> | |
</antipattern> | |
<antipattern> | |
<token postag_regexp="yes" regexp="yes" postag="R.+">&contraccions_MS; | |
<exception postag_regexp="yes" negate_pos="yes" postag="R.+" /></token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|ou|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_MS;</token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|DP.|Z.)[MC]P.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|DP.|Z.)[MC]S.+|P[ID].[CFM].+|(C|R).+|SPS00.*" postag_regexp="yes" /></token> | |
</marker> | |
<token negate="yes" regexp="yes">&hifen;</token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[MC]P(.+)" postag_replace="$1[MC]S$2" postag_regexp="yes" /></suggestion> | |
<suggestion>\2s <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /></suggestion> | |
<example correction="do pai|dos pais">É o orgullo <marker>do pais</marker>.</example> | |
<example correction="polo medio|polos medios">Conseguiron combater o lume <marker>polo medios</marker> de todos os reveses.</example> | |
<example>Polo menos nós terminamos o traballo pesado.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes">&precede_nome_proprio;</token> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<antipattern> | |
<token>a</token> <!-- FIXME Improve disambiguator for a as SP cases --> | |
<token>docentes</token> | |
</antipattern> | |
<antipattern> | |
<token>unha</token> | |
<token>vez</token> | |
</antipattern> | |
<antipattern> | |
<token postag="(?:D[ADIP].|NC|A..|Z.).P.+" postag_regexp="yes" /> | |
<token regexp="yes">d[eao]</token> | |
<token postag="(?:D[ADIP].|NC|A..|Z.)[FC]S.+" postag_regexp="yes" /> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)[FC]S.+" postag_regexp="yes"> | |
<exception postag="(?:D[ADIP].|N.|A..|Z.)[FC]P.+|C.|R." postag_regexp="yes" /> | |
<exception regexp="yes">a|.+[°′″]</exception></token><!-- TODO improve 'a' as preposition disambiguation --> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|Z.)[FC]P.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|Z.)[FC]S.+|P[ID].[CFM].+|(C|R).+|SPS00.*" postag_regexp="yes" /></token> | |
</marker> | |
<token negate="yes" regexp="yes">&hifen;</token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..)[FC]P(.+)" postag_replace="$1[FC]S$2" postag_regexp="yes" /></suggestion> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..)[FC]S(.+)" postag_replace="$1[FC]P$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /></suggestion> | |
<example correction="Unha vaca|Unhas vacas"><marker>Unha vacas</marker> son cachenas, outras non.</example> | |
<example>O programa Lendas do Futuro é bo?</example> | |
<example>Unha vez acordadas as novas condicións, será feito o abastecemento eléctrico.</example> | |
<!--example correction='unión empobrecida|unións empobrecidas'>As rexións na <marker>unión empobrecidas</marker> acabaron por ser culpabilizadas.</example XXX uncomment after better tagging of VMPs --> | |
<example>As rexións da <marker>unión empobrecidas</marker> acabaron por ser culpabilizados.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token postag_regexp="yes" regexp="yes" postag="R.+">&contraccions_FS; | |
<exception postag_regexp="yes" negate_pos="yes" postag="R.+" /></token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_FS;</token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|DP.|Z.)[FC]P.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|DP.|Z.)[FC]S.+|P[ID].[CFM].+|(C|R).+|SPS00.*" postag_regexp="yes" /></token><!-- FIXME Review patterns to include passive without crippling detection --> | |
</marker> | |
<token negate="yes" regexp="yes">&hifen;</token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[FC]P(.+)" postag_replace="$1[FC]S$2" postag_regexp="yes" /></suggestion> | |
<suggestion>\2s <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /></suggestion> | |
<example correction="nunha especie|nunhas especies">Valor contido <marker>nunha especies</marker> por descubrir.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes">(?:&precede_nome_proprio;)s</token> | |
<token regexp="yes" case_sensitive="yes">\p{Lu}.+</token> | |
</antipattern> | |
<antipattern> | |
<token postag="(?:D[ADIP].|NC|A..|Z.).S.+" postag_regexp="yes" /> | |
<token regexp="yes">d[eao]s?</token> | |
<token postag="(?:D[ADIP].|NC|A..|Z.)[FC]P.+" postag_regexp="yes" /> | |
</antipattern> | |
<antipattern> | |
<token>distribucións</token> | |
<token>Linux</token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|&hifen;</token> | |
<marker> | |
<token postag="(?:D[ADIP].|NC|A..|P[^IDP].|Z.)[FC]P.+" postag_regexp="yes"> | |
<exception postag="(?:D[ADIP].|N.|A..|Z.)[FC]S.+|(C|R).+|SPS00" postag_regexp="yes" /> | |
<exception regexp="yes">.+[°′″]</exception></token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|Z.)[FC]S.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|Z.)[FC]P.+|P[ID].[CFM].+|(C|R).+|SPS00.*" postag_regexp="yes" /></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" postag="(D[ADIP].|NC|A..|P[^IDP].|Z.)[FC]P(.+)" postag_replace="$1[FC]S$2" postag_regexp="yes" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /></suggestion> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[FC]S(.+)" postag_replace="$1[FC]P$2" postag_regexp="yes" /></suggestion> | |
<example correction="A vaca|As vacas"><marker>As vaca</marker> son cachenas.</example> | |
<example>Presentou os programas Xornal do Mundo, Internacional Patati e Plus Berlin.</example> | |
<example correction="fechadura grande|fechaduras grandes">Coloca esa chave nas <marker>fechaduras grande</marker>.</example> | |
<example correction="situación máis preocupante|situacións máis preocupantes">A <marker>situacións máis preocupante</marker> é esta.</example> | |
<example>Conforme máis datos van sendo acumulados de persoas de todas as idades.</example> | |
<example>Colle a chave das <marker>fechaduras grande</marker>.</example> | |
</rule> | |
<rule> | |
<antipattern> | |
<token postag_regexp="yes" regexp="yes" postag="R.+">&contraccions_FP; | |
<exception postag_regexp="yes" negate_pos="yes" postag="R.+" /></token> | |
</antipattern> | |
<pattern> | |
<token negate="yes" regexp="yes">e|de|&hifen;</token> | |
<marker> | |
<token regexp="yes">&contraccions_FP;</token> | |
<token regexp="yes" min="0">&adverbios_de_intensidade;</token><!-- XXX use POS after disambiguation improvements --> | |
<token postag="(?:N.|A..|DP.|Z.)[FC]S.+" postag_regexp="yes"> | |
<exception postag="(?:N.|A..|DP.|Z.)[FC]P.+|P[ID].[CFM].+|(C|R).+|SPS00.*" postag_regexp="yes" /></token> | |
</marker> | |
<token> | |
<exception postag_regexp="yes" postag="[^Z].+" regexp="yes">e|&hifen;</exception></token> | |
</pattern> | |
<message>&MSG_ECN;</message> | |
<suggestion><match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" postag="(N.|[AD]..|Z.)[FC]S(.+)" postag_replace="$1[FC]P$2" postag_regexp="yes" /></suggestion> | |
<example correction="nunhas especies">Valor contido <marker>nunhas especie</marker> por descubrir.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="GENERAL_VERB_AGREEMENT_ERRORS" name="Concordancia verbal: Xeral"> | |
<!-- Localized from Portuguese rule by Tiago F. Santos, 2019-04-06 --> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<antipattern> | |
<token postag="VMN0000" /><!-- Mesóclises são consideradas como compostas --> | |
<token spacebefore="no" regexp="yes">&hifen;</token> | |
<token spacebefore="no" regexp="yes">&pronomes_nao_ambiguos;|&pronomes_ambiguos;</token> | |
<token spacebefore="no" regexp="yes">&hifen;</token> | |
</antipattern> | |
<!--antipattern> | |
<token>há</token> | |
<token/> | |
<token regexp='yes'>&expressoes_de_tempo;</token> | |
</antipattern> | |
<antipattern>< https://ciberduvidas.iscte-iul.pt/consultorio/perguntas/e-que/3319 > | |
<token>é</token> | |
<token>que</token> | |
</antipattern--> | |
<rule> | |
<antipattern> | |
<token regexp="yes" case_sensitive="yes">e|ou</token> | |
<token>eu</token> | |
</antipattern> | |
<pattern> | |
<token>eu</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([23]S|[123]P)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].1S0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\1S$2" postag_regexp="yes" /></suggestion> | |
<example correction="Eu ando"><marker>Eu andan</marker> pola praia.</example> | |
<!--example>Eu preocupar-me-ia, talvez, com esta manifestação de ignorância.</example> | |
<example>Eu é que fiz.</example--> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes" case_sensitive="yes">e|ou</token> | |
<token>ti</token> | |
</antipattern> | |
<pattern> | |
<token>ti</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([13]S|[123]P)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].2S0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\2S$2" postag_regexp="yes" /></suggestion> | |
<example correction="Ti andas"><marker>Ti andan</marker> pola praia.</example> | |
<!--example>Tu preocupar-te-ias, talvez, com esta manifestação de ignorância.</example--> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes" case_sensitive="yes">e|ou</token> | |
<token regexp="yes">ela?|vostede</token> | |
</antipattern> | |
<pattern> | |
<token regexp="yes">ela?|vostede</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([12]S|[123]P)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].3S0" postag_regexp="yes" /> | |
<exception>como</exception></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\3S$2" postag_regexp="yes" /></suggestion> | |
<example correction="El non anda"><marker>El non andan</marker> pola praia.</example> | |
<!--example>Ele preocupar-se-ia, talvez, com esta manifestação de ignorância.</example--> | |
</rule> | |
<rule> | |
<!--antipattern> | |
<token regexp='yes'>(?:alg|n|nenh)?uma?|maioria|ninguém|nada|tudo</token> | |
<token regexp='yes'>de|entre</token> | |
<token>nós</token> | |
<token min="0" max="3" postag='R.+' postag_regexp='yes'> | |
<exception scope='next'>,</exception></token> | |
<token postag='V.[CIS].3S0' postag_regexp='yes'/> | |
</antipattern--> | |
<pattern> | |
<token>nós</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([23]P|[123]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].1P0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\1P$2" postag_regexp="yes" /></suggestion> | |
<example correction="Nós non andamos"><marker>Nós non andan</marker> pola praia.</example> | |
<!-- TODO 'Nós não passeamo' is a inflection for reflexive forms. Find a way to remove it from suggestions > | |
<example type="correct"><marker>Nós ainda não passeamos</marker> na praia.</example> | |
<example>Nós preocupar-nos-iamos, talvez, com esta manifestação de ignorância.</example> | |
<example>Um de nós passeia na praia.</example--> | |
</rule> | |
<rule> | |
<pattern> | |
<token>eu</token> | |
<token regexp="yes">e|ou</token> | |
<token min="0" postag="DA0[MF].0" postag_regexp="yes" /> | |
<token /> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([23]P|[123]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].1P0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion>\1 <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" /> <match no="6" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\1P$2" postag_regexp="yes" /></suggestion> | |
<example correction="Eu e Rita andamos"><marker>Eu e Rita andan</marker> pola praia.</example> | |
<!--example type="correct"><marker>Eu e Rita passeiamos</marker> na praia.</example> | |
<example>Eu e a Rita preocupar-nos-iamos, talvez, com esta manifestação de ignorância.</example--> | |
</rule> | |
<rule> | |
<pattern> | |
<token regexp="yes">ti|vostedes?|vós|el[ea]?s?</token> | |
<token regexp="yes">e|ou</token> | |
<token>eu</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([23]P|[123]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].1P0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion>\1 \2 <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\1P$2" postag_regexp="yes" /></suggestion> | |
<example correction="Ti e eu andamos"><marker>Ti e eu andan</marker> pola praia.</example> | |
<!--example type="correct">Tu e eu passeamos na praia.</example> | |
<example type="correct">Vós passeais na praia.</example> | |
<example>Tu e eu preocupar-nos-iamos, talvez, com esta manifestação de ignorância.</example--> | |
</rule> | |
<rule> | |
<!--antipattern> | |
<token regexp='yes'>(?:alg|n|nenh)?uma?|maioria|ninguém|nada|tudo</token> | |
<token regexp='yes'>de|entre</token> | |
<token>vós</token> | |
<token min="0" max="3" postag='R.+' postag_regexp='yes'> | |
<exception scope='next'>,</exception></token> | |
<token postag='V.[CIS].3S0' postag_regexp='yes'/> | |
</antipattern--> | |
<pattern> | |
<token>vós</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([13]P|[123]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].2P0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\2P$2" postag_regexp="yes" /></suggestion> | |
<example correction="Vós andades"><marker>Vós andan</marker> pola praia.</example> | |
<!--example type="correct">Vós passeais na praia.</example> | |
<example>A maioria de vós passeia na praia.</example--> | |
</rule> | |
<rule> | |
<antipattern> | |
<token>eu</token> | |
<token regexp="yes" case_sensitive="yes">e|ou</token> | |
<token regexp="yes">el[ea]?s|vostedes</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].1P0" postag_regexp="yes" /> | |
</antipattern> | |
<!--antipattern> | |
<token regexp='yes'>(?:alg|n|nenh)?uma?|maioria|ninguém|nada|tudo</token> | |
<token regexp='yes'>de|entre</token> | |
<token regexp='yes'>el[ea]s|vocês</token> | |
</antipattern--> | |
<pattern> | |
<token regexp="yes">el[ea]s|vostedes</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception scope="next">,</exception></token> | |
<token postag="V.[CIS].([12]P|[123]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].3P0" postag_regexp="yes" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" postag="(V.[CIS].)..(.)" postag_replace="$1\3P$2" postag_regexp="yes" /></suggestion> | |
<example correction="elas andan|elas andaron">Eles e <marker>elas andamos</marker> pola praia.</example> | |
<!--example correction='Vocês não leram'><marker>Vocês não leu</marker> as notícias?</example> | |
<example>Um de vocês não leu as notícias.</example> | |
<example type="correct">Eles e elas passeiam na praia.</example> | |
<example type="correct">Eu e elas vamos ao parque</example> | |
<example>Pobres e ricos preocupar-se-iam, talvez, com esta manifestação de ignorância.</example> | |
<example>Vocês preocupar-se-iam, talvez, com esta manifestação de ignorância.</example> | |
<example>Um de vocês não leu as notícias.</example> | |
<example>Alguns colegas meus são noobs totais; eles não sabem nada de ciência da computação.</example--> | |
</rule> | |
<rule> | |
<!--antipattern> | |
<token regexp='yes'>(?:alg|n|nenh)?uma?|maioria|ninguém|nada|tudo</token> | |
<token regexp='yes'>[dn][eao]s?</token> | |
<token postag_regexp='yes' postag='D...P.+'> | |
<exception negate_pos='yes' postag_regexp='yes' postag='D...P.+'/></token> | |
</antipattern> | |
<antipattern> | |
<token regexp='yes'>&haver_impessoal;</token> | |
<token> | |
<exception postag_regexp='yes' postag='V.P.+'/></token> | |
</antipattern--> | |
<pattern> | |
<token postag_regexp="yes" postag="D...P.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="D...P.+" /></token> | |
<token max="3" postag_regexp="yes" postag="(?:N..|A...)P.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:N..|A...)P.+" /></token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="R.+" /></token> | |
<token postag="V.[CIS].([12]P|[123]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].3P." postag_regexp="yes" /> | |
<exception negate_pos="yes" postag_regexp="yes" postag="V.+" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" postag="(V.[CIS].).S(.)" postag_replace="$1\3P$2" postag_regexp="yes" /></suggestion> | |
<example correction="Os médicos saíran"><marker>Os médicos saíra</marker> sen saber como romper a noticia.</example> | |
<!--example correction='meus amigos não bebem'>Os <marker>meus amigos não bebe</marker> café.</example> | |
<example correction='meus amigos ainda não bebem'>Os <marker>meus amigos ainda não bebe</marker> café.</example> | |
<example>Nenhum dos meus amigos bebe café.</example> | |
<example>Sem os grandes primatas, ficamos sem os nossos parentes mais próximos no reino animal.</example> | |
<example>Outros governos preocupar-se-iam, talvez, com esta manifestação de ignorância.</example> | |
<example>Este trabalho deu os primeiros passos há um ano.</example> | |
<example>Cada um dos seus alunos expressou a sua opinião.</example> | |
<example>Entre os resíduos há substâncias perigosas.</example> | |
<example correction='Os médicos haviam'><marker>Os médicos havia</marker> saído sem saber como dar a notícia.</example> | |
<example>Os venezuelanos não conseguem ingerir três refeições por dia a horas certas.</example--> | |
</rule> | |
<rule> | |
<antipattern> | |
<token regexp="yes" case_sensitive="yes">el[ea]s?</token> | |
<token regexp="yes" case_sensitive="yes">e|ou</token> | |
<token max="2" postag_regexp="yes" postag="D...S.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="D...S.+" /></token> | |
</antipattern> | |
<antipattern> | |
<token postag_regexp="yes" postag="[AN].+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="[AN].+" /></token> | |
<token regexp="yes" case_sensitive="yes">e|ou</token> | |
<token max="2" postag_regexp="yes" postag="D...S.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="D...S.+" /></token> | |
</antipattern> | |
<pattern> | |
<token postag_regexp="yes" postag="D...S.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="D...S.+" /></token> | |
<token max="3" postag_regexp="yes" postag="(?:N..|A...)S.+"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="(?:N..|A...)S.+" /></token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="R.+" /></token> | |
<token postag="V.[CIS].([123]P|[12]S)." postag_regexp="yes"> | |
<exception regexp="yes">acerca|como|tarde</exception> | |
<exception postag="V.[CIS].3S." postag_regexp="yes" /> | |
<exception negate_pos="yes" postag_regexp="yes" postag="V.+" /></token> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion><match no="1" include_skipped="all" /> <match no="2" include_skipped="all" /> <match no="3" include_skipped="all" /> <match no="4" include_skipped="all" postag="(V.[CIS].).P(.)" postag_replace="$1\3S$2" postag_regexp="yes" /></suggestion> | |
<example correction="O médico novo saíra"><marker>O médico novo saíran</marker> sen saber como romper a noticia.</example> | |
<!--example>A sua polidez e o seu empenho fizeram com que todos o admirassem.</example> | |
<example>O amor ou o ódio estão presentes.</example> | |
<example>Outro governo preocupar-se-ia, talvez, com esta manifestação de ignorância.</example> | |
<example>Dizem que ela e o marido não concordam em nada.</example--> | |
</rule> | |
</rulegroup> | |
<!-- General verbal concordance errors - They + Verb --> | |
<!-- Localized from Portuguese by Tiago F. Santos, Portuguese rule, 2019-04-18 --> | |
<!-- FIXME Disambiguate verbs better and then set as default='on' --> | |
<rulegroup default="off" id="ERRO_DE_CONCORDNCIA_DO_NMERO_DO_VERBO_3P-2" name="Concordancia verbal: Terceira persoa do composto Plural"> | |
<rule> | |
<antipattern> | |
<token>há</token> | |
<token /> | |
<token regexp="yes">&expressoes_de_tempo;</token> | |
</antipattern> | |
<pattern> | |
<token negate="yes">entre</token> | |
<marker> | |
<token postag_regexp="yes" postag="N.+"> | |
<exception postag_regexp="yes" postag="SPS00.+" /></token> | |
<token regexp="yes">e|nin</token> | |
<token min="0" postag="DA0[MF].0" postag_regexp="yes" /> | |
<token postag_regexp="yes" postag="N.+"> | |
<exception postag_regexp="yes" postag="SPS00.+" /> | |
<exception regexp="yes">unh?a?s|[ao]s?|non</exception> | |
</token> | |
<token min="0" max="3" postag="R.+" postag_regexp="yes"> | |
<exception negate_pos="yes" postag_regexp="yes" postag="R.+" /></token> | |
<token postag="V.[CIS].([12]P|[123]S)." postag_regexp="yes"> | |
<exception postag="V.[CIS].3P0|[AN].+" postag_regexp="yes" /><!-- TODO remove [AN] and add stricter regexp as the following --> | |
<!--exception regexp='yes'>quentes|marinhas|silva|militares|para|como|recordes|pires|seguro|vida|vales|formas|sua|humanas|internas|ambiente|entre|individuais|sobre|pelo|penas</exception--> | |
</token> | |
</marker> | |
</pattern> | |
<message>&MSG_ECV;</message> | |
<suggestion>\2 \3 <match no="4" include_skipped="all" /> <match no="5" include_skipped="all" /> <match no="6" include_skipped="all" /> <match no="7" include_skipped="all" postag="(V.[CIS].)([12]P|[123]S)." postag_replace="$13P0" postag_regexp="yes" /></suggestion> | |
<url>http://www.lingua.gal/c/document_library/get_file?file_path=/portal-lingua/celga/celga-1/material-alumno/Manual_Aula_de_Galego_1_resumo_gramatical.pdf</url> | |
<example correction="Can e gato son"><marker>Can e gato é</marker> animais.</example> | |
<example correction="can e o gato son">O <marker>can e o gato é</marker> animais.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="NO_CACOPHONY" name="Sen cacofonía" default="on"> | |
<rule> | |
<!-- Created by Susana Sotelo Docío, modified by Xosé Calvo --> | |
<antipattern> | |
<token regexp="yes">[ndc]?un|[nd]?algún|ningún</token> | |
<token regexp="yes" postag="NCMS000">h?[aá].*</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">[ndc]?un|[nd]?algún|ningún</token> | |
<token case_sensitive="yes">AVE</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">[ndc]?un|[nd]?algún|ningún</token> <!-- un á beira do outro --> | |
<token>á </token> | |
<token>beira</token> | |
</antipattern> | |
<antipattern> <!-- ela non o ama --> | |
<token>o</token> | |
<token>ama</token> | |
</antipattern> | |
<pattern> | |
<token regexp="yes">[ndc]?un|[nd]?algún|ningún</token> | |
<token regexp="yes" postag="NCFS000">h?[aá].*</token> | |
</pattern> | |
<message>Posíbel erro: os substantivos femininos que comezan por «a-» inicial tónico non implican modificacións no determinante que os precede. Quería vostede dicir <suggestion><match no="1" regexp_match="(?iu)(.*)[úu]n" regexp_replace="$1unha" /> \2</suggestion>?</message> | |
<short>Posíbel erro de concordancia de xénero</short> | |
<example correction="dunha ave">É unha cría <marker>dun ave</marker> rapaz.</example> | |
<example>É unha cría <marker>dunha ave</marker> rapaz.</example> | |
</rule> | |
<rule> | |
<!-- Created by Susana Sotelo Docío, modified by Xosé Calvo --> | |
<antipattern> | |
<token regexp="yes">[ndc]?o</token> | |
<token regexp="yes" postag="NCMS000">h?[aá].*</token> | |
</antipattern> | |
<antipattern> | |
<token regexp="yes">[ndc]?o</token> | |
<token case_sensitive="yes">AVE</token> | |
</antipattern> | |
<pattern> | |
<token regexp="yes">[nd]?o</token> | |
<token regexp="yes" postag="NCFS000">h?[aá].*</token> | |
</pattern> | |
<message>Posíbel erro: os substantivos femininos que comezan por «a-» inicial tónico non implican modificacións no determinante que os precede. Quería vostede dicir <suggestion><match no="1" regexp_match="(?iu)([ndc])?o" regexp_replace="$1a" /> \2</suggestion>?</message> | |
<short>Posíbel erro de concordancia de xénero</short> | |
<example correction="da arma">Rozouna coa empuñadura <marker>do arma</marker>.</example> | |
<example>Rozouna coa empuñadura <marker>da arma</marker>.</example> | |
</rule> | |
<rule> | |
<!-- Created by Susana Sotelo Docío, modified by Xosé Calvo --> | |
<antipattern> | |
<token>co</token> | |
<token regexp="yes" postag="NCMS000">h?[aá].*</token> | |
</antipattern> | |
<antipattern> | |
<token>co</token> | |
<token case_sensitive="yes">AVE</token> | |
</antipattern> | |
<pattern> | |
<token>co</token> | |
<token regexp="yes" postag="NCFS000">h?[aá].*</token> | |
</pattern> | |
<message>Posíbel erro: os substantivos femininos que comezan por «a-» inicial tónico non implican modificacións no determinante que os precede. Quería vostede dicir <suggestion><match no="1" regexp_match="(?iu)([ndc])?o" regexp_replace="$1oa" /> \2</suggestion>?</message> | |
<short>Posíbel erro de concordancia de xénero</short> | |
<example correction="coa arte">A súa obra rompeu <marker>co arte</marker> anterior.</example> | |
<example>A súa obra rompeu <marker>coa arte</marker> anterior.</example> | |
</rule> | |
</rulegroup> | |
</category> | |
<category id="CAT1" name="Gramática: Verbo" type="grammar"> | |
<rulegroup id="IR_A_INF" name="ir + infinitivo"> | |
<rule> | |
<!-- Created by Susana Sotelo Docío --> | |
<!-- Added by Xosé Calvo: False positives with 'a partir de' and 'a pesar de', v.g. 'Irá a partir desta mañá..' --> | |
<antipattern> | |
<token inflected="yes">ir</token> | |
<token>a</token> | |
<token regexp="yes">partir|pesar</token> | |
<token regexp="yes">d(?:algúns?|algunhas?|aquel(es)?|aquelas?|outr[oa]s?|est?as?|est?es?|ist?o|elas?|el(es)?|as?|os?|e|uns?|unha)</token> | |
</antipattern> | |
<pattern> | |
<token inflected="yes">ir</token> | |
<token>a</token> | |
<token postag="(VMN0000|VSN0000).*" postag_regexp="yes"/> | |
</pattern> | |
<message>A perífrase formada polo verbo «ir» máis un infinitivo constrúese sempre sen preposición: <suggestion>\1 \3</suggestion></message> | |
<url>https://gl.wikibooks.org/wiki/Curso_de_lingua_galega/O_verbo/As_per%C3%ADfrases_verbais#Ir_+_infinitivo</url> | |
<short>Perífrase «ir + infinitivo»</short> | |
<example correction="Vou saltar"><marker>Vou a saltar</marker> con ela.</example> | |
</rule> | |
</rulegroup> | |
<!-- FIXME it offers VéN as correction when source is uppercase: VEN --> | |
<!-- FIXME false positive when "ven" is imperative --> | |
<rulegroup id="VEN_VEN" name="vén vs. ven"> | |
<rule name="vén + xerundio (vén brincando)"> | |
<!-- Created by Susana Sotelo Docío --> | |
<pattern> | |
<marker> | |
<token regexp="yes">ven|ves</token> | |
</marker> | |
<token postag="VMN.*|VSN.*|VMP.*|VSP.*|VMG.*|VSG.*" postag_regexp="yes"/> | |
</pattern> | |
<message>A palabra «<match no="1"/>» seguida dunha forma non temporal adoita ser do verbo «vir» e, polo tanto, leva acento diacrítico para diferenciala da forma homónima do verbo «ver». Quería vostede dicir <suggestion><match no="1" regexp_match="(?iu)e" regexp_replace="é"/></suggestion>?</message> | |
<url>http://www.aprendogalego.com/APRENDO/5-Verbofin/verbos_regulares.html</url> | |
<short>Problema cun acento</short> | |
<example correction="vén">O neno <marker>ven</marker> saltando polo camiño.</example> | |
</rule> | |
<rule name="vén de + infinitivo (vén de adquirir)"> | |
<!-- Created by Susana Sotelo Docío --> | |
<pattern> | |
<marker> | |
<token>ven</token> | |
</marker> | |
<token>de</token> | |
<token postag="(VMN0000|VSN0000).*" postag_regexp="yes"/> | |
</pattern> | |
<message>A forma «<match no="1"/>» seguida de infinitivo adoita ser do verbo «vir» e, polo tanto, leva acento diacrítico para diferenciala da forma homónima do verbo «ver». Quería vostede dicir <suggestion>vén</suggestion>?</message> | |
<url>http://www.aprendogalego.com/APRENDO/5-Verbofin/verbos_regulares.html</url> | |
<short>Problema cun acento</short> | |
<example correction="vén">A caixa <marker>ven</marker> de sanear a carteira de créditos.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="COMPRE" name="cómpre vs. compre"> | |
<!-- compre + (até 3 adverbios) + VINF (cómpre ademais agora non ignorar a provocación) --> | |
<rule> | |
<!-- Created by Susana Sotelo Docío --> | |
<!-- Fixed by Xosé --> | |
<pattern> | |
<marker> | |
<token>compre</token> | |
</marker> | |
<token postag="RG|RN" postag_regexp="yes" min="0" max="3"/> | |
<token postag="(VMN0000|VSN0000).*" postag_regexp="yes"/> | |
</pattern> | |
<message>A forma «compre», cando é do verbo «cumprir» (ser necesario), leva acento para distinguila do verbo «comprar». Quería vostede dicir <suggestion>cómpre</suggestion>?</message> | |
<url>https://ciberdubidas.blogspot.com/2010/11/cumpre-compre.html</url> | |
<short>Problema cun acento</short> | |
<example correction="Cómpre"><marker>Compre</marker> agora analizar o proceso de constitución das listas.</example> | |
</rule> | |
<!-- compre + que --> | |
<rule> | |
<!-- Created by Susana Sotelo Docío --> | |
<pattern> | |
<marker> | |
<token>compre</token> | |
</marker> | |
<token>que</token> | |
</pattern> | |
<message>A forma «compre», cando é do verbo «cumprir» (ser necesario), leva acento para distinguila do verbo «comprar». Quería vostede dicir <suggestion>cómpre</suggestion>?</message> | |
<url>https://ciberdubidas.blogspot.com/2010/11/cumpre-compre.html</url> | |
<short>Problema cun acento</short> | |
<example correction="Cómpre"><marker>Compre</marker> que a arquitectura das Nacións Unidas se axuste a ese concepto.</example> | |
</rule> | |
</rulegroup> | |
<rulegroup id="CLITICS" name="colocación dos clíticos"> | |
<!-- Created by Susana Sotelo Docío, modified by Xosé Calvo --> | |
<rule id="CLITICS_01" name="Clíticos en inicio de oración"> | |
<antipattern> | |
<token postag="SENT_START" /> | |
<token>si</token> | |
<token postag="V.*" postag_regexp="yes" /> | |
</antipattern> | |
<antipattern> | |
<token postag="SENT_START" /> | |
<token>nos</token> | |
<token postag="V.P.*" postag_regexp="yes" /> | |
</antipattern> | |
<pattern> | |
<token postag='SENT_START'></token> | |
<marker> | |
<token postag='PP.[MFC][SP].00(:PP.[MFC][SP].00)*' postag_regexp='yes'><exception postag='PP.[MF]S000|PP1CSN00|PP1CPO00|PP2CSO00|PP3.P[A0]00|PP3CSO00|PPC[PS]000|DA0.S0' postag_regexp='yes'></exception></token> | |
<token postag='V.*' postag_regexp='yes'></token> | |
</marker> | |
</pattern> | |
<filter class="org.languagetool.rules.gl.AdvancedSynthesizerFilter" args="lemmaFrom:3 lemmaSelect:V(.*) postagFrom:2 postagSelect:(PP.*) postagReplace:V\a1:\b1"/> | |
<message>Os pronomes clíticos non poden ir no inicio da oración. Por regra xeral, o pronome átono vai colocado detrás do verbo.</message> | |
<!--<suggestion><match no="3" case_conversion="startupper" /><match no="2" case_conversion="startlower" /></suggestion>--> | |
<suggestion>{suggestion}</suggestion> | |
<url>https://gl.wikipedia.org/wiki/Colocaci%C3%B3n_do_pronome_%C3%A1tono_en_galego</url> | |