Last active
November 21, 2016 00:54
-
-
Save TiagoSantos81/540eed4d497df22890aacda504959732 to your computer and use it in GitHub Desktop.
Portuguese missing acentuation rule
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
# Conversion from LanguageTool rule for Catalan (@created by Jaume Ortolà) with wordlist provided by Enno @Konkekt | |
.../java/org/languagetool/language/Portuguese.java | 3 +- | |
.../rules/pt/PortugueseAccentuationCheckRule.java | 370 ++++++++++++ | |
.../rules/pt/PortugueseAccentuationDataLoader.java | 61 ++ | |
.../org/languagetool/rules/pt/PortugueseRule.java | 30 + | |
.../rules/pt/verbos_sem_acento_adj_com_acento.txt | 358 +++++++++++ | |
.../pt/verbos_sem_acento_nomes_com_acento.txt | 666 +++++++++++++++++++++ | |
6 files changed, 1487 insertions(+), 1 deletion(-) | |
diff --git a/languagetool-language-modules/pt/src/main/java/org/languagetool/language/Portuguese.java b/languagetool-language-modules/pt/src/main/java/org/languagetool/language/Portuguese.java | |
index 17b4f55..3fecc83 100644 | |
--- a/languagetool-language-modules/pt/src/main/java/org/languagetool/language/Portuguese.java | |
+++ b/languagetool-language-modules/pt/src/main/java/org/languagetool/language/Portuguese.java | |
@@ -130,7 +130,8 @@ public class Portuguese extends Language { | |
//Specific to Portuguese: | |
new PostReformPortugueseCompoundRule(messages), | |
new PortugueseReplaceRule(messages), | |
- new PortugueseWordRepeatRule(messages, this) | |
+ new PortugueseWordRepeatRule(messages, this), | |
+ new PortugueseAccentuationCheckRule(messages) | |
//new PortugueseWrongWordInContextRule(messages) | |
); | |
} | |
diff --git a/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseAccentuationCheckRule.java b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseAccentuationCheckRule.java | |
new file mode 100644 | |
index 0000000..6b472f7 | |
--- /dev/null | |
+++ b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseAccentuationCheckRule.java | |
@@ -0,0 +1,370 @@ | |
+/* LanguageTool, a natural language style checker | |
+ * Copyright (C) 2012 Jaume Ortolà i Font | |
+ * | |
+ * 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 | |
+ */ | |
+package org.languagetool.rules.pt; | |
+ | |
+import java.io.IOException; | |
+import java.util.ArrayList; | |
+import java.util.List; | |
+import java.util.Map; | |
+import java.util.ResourceBundle; | |
+import java.util.regex.Matcher; | |
+import java.util.regex.Pattern; | |
+ | |
+import org.languagetool.AnalyzedSentence; | |
+import org.languagetool.AnalyzedToken; | |
+import org.languagetool.AnalyzedTokenReadings; | |
+import org.languagetool.rules.Categories; | |
+import org.languagetool.rules.ITSIssueType; | |
+import org.languagetool.rules.RuleMatch; | |
+import org.languagetool.tools.StringTools; | |
+ | |
+/** | |
+ * This rule checks if a word without graphical accent and with a verb POS tag | |
+ * should be a noun or an adjective with graphical accent. It uses two lists of | |
+ * word pairs: verb-noun and verb-adjective. | |
+ * | |
+ * @author Jaume Ortolà i Font | |
+ * l18n by Tiago F. Santos | |
+ * TODO Verify all exceptions that apply to Portuguese | |
+ * FIXME Cnverte all chunking tags to the ones used in Portuguese | |
+ */ | |
+public class PortugueseAccentuationCheckRule extends PortugueseRule { | |
+ | |
+ /** | |
+ * Patterns | |
+ */ | |
+ private static final Pattern PREPOSICAO_DE = Pattern.compile("de|d[a|o]s?"); | |
+ private static final Pattern ARTIGO_O_MS = Pattern.compile("o|O"); | |
+ private static final Pattern ARTIGO_O_FS = Pattern.compile("a|A"); | |
+ private static final Pattern ARTIGO_O_MP = Pattern.compile("as|As"); | |
+ private static final Pattern ARTIGO_O_FP = Pattern.compile("os|Os"); | |
+ private static final Pattern DETERMINANTE = Pattern.compile("D[^R].*"); | |
+ private static final Pattern DETERMINANTE_MS = Pattern.compile("D[^R].[MC][SN].*"); | |
+ private static final Pattern DETERMINANTE_FS = Pattern.compile("D[^R].[FC][SN].*"); | |
+ private static final Pattern DETERMINANTE_MP = Pattern.compile("D[^R].[MC][PN].*"); | |
+ private static final Pattern DETERMINANTE_FP = Pattern.compile("D[^R].[FC][PN].*"); | |
+ private static final Pattern NOME_MS = Pattern.compile("NC[MC][SN].*"); | |
+ private static final Pattern NOME_FS = Pattern.compile("NC[FC][SN].*"); | |
+ private static final Pattern NOME_MP = Pattern.compile("NC[MC][PN].*"); | |
+ private static final Pattern NOME_FP = Pattern.compile("NC[FC][PN].*"); | |
+ private static final Pattern ADJETIVO_MS = Pattern.compile("A..[MC][SN].*|V.P..SM.?|PX.MS.*"); | |
+ private static final Pattern ADJETIVO_FS = Pattern.compile("A..[FC][SN].*|V.P..SF.?|PX.FS.*"); | |
+ private static final Pattern ADJETIVO_MP = Pattern.compile("A..[MC][PN].*|V.P..PM.?|PX.MP.*"); | |
+ private static final Pattern ADJETIVO_FP = Pattern.compile("A..[FC][PN].*|V.P..PF.?|PX.FP.*"); | |
+ private static final Pattern INFINITIVO = Pattern.compile("V.N.*"); | |
+ private static final Pattern VERBO_CONJUGADO = Pattern.compile("V.[^NGP].*|_GV_"); | |
+ private static final Pattern PARTICIPIO_MS = Pattern.compile("V.P.*SM.?"); | |
+ private static final Pattern GRUPO_VERBAL = Pattern.compile("_GV_"); | |
+ private static final Pattern VERBO_3S = Pattern.compile("V...3S..?"); | |
+ private static final Pattern NOT_IN_PREV_TOKEN = Pattern.compile("VA.*|PP.*|P0.*|VSP.*"); | |
+ private static final Pattern BEFORE_ADJECTIVE_MS = Pattern.compile("SPS00|D[^R].[MC][SN].*|V.[^NGP].*|PX.*"); | |
+ private static final Pattern BEFORE_ADJECTIVE_FS = Pattern.compile("SPS00|D[^R].[FC][SN].*|V.[^NGP].*|PX.*"); | |
+ private static final Pattern BEFORE_ADJECTIVE_MP = Pattern.compile("SPS00|D[^R].[MC][PN].*|V.[^NGP].*|PX.*"); | |
+ private static final Pattern BEFORE_ADJECTIVE_FP = Pattern.compile("SPS00|D[^R].[FC][PN].*|V.[^NGP].*|PX.*"); | |
+ private static final Pattern GN = Pattern.compile(".*_GN_.*|<?/?N[CP].*"); | |
+ private static final Pattern EXCEPCOES_ANTES_DE = Pattern.compile("forma|manera|por|costat", Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE); | |
+/* private static final Pattern LOCOCOES = Pattern.compile(".*LOC.*");*/ | |
+ private static final Pattern PRONOME_PESSOAL = Pattern.compile("P0.{6}|PP3CN000|PP3NN000|PP3CP000|PP3CSD00"); // TODO Confirmar a exclusão de: PP3..A00 (coincidee COM articles determinats) se aplica ao português | |
+ | |
+ private static final Map<String, AnalyzedTokenReadings> relevantWords = | |
+ new PortugueseAccentuationDataLoader().loadWords("/pt/verbos_sem_acento_nomes_com_acento.txt"); | |
+ private static final Map<String, AnalyzedTokenReadings> relevantWords2 = | |
+ new PortugueseAccentuationDataLoader().loadWords("/pt/verbos_sem_acento_adj_com_acento.txt"); | |
+ | |
+ public PortugueseAccentuationCheckRule(ResourceBundle messages) throws IOException { | |
+ super.setCategory(Categories.MISC.getCategory(messages)); | |
+ setLocQualityIssueType(ITSIssueType.Misspelling); | |
+ } | |
+ | |
+ @Override | |
+ public String getId() { | |
+ return "ACCENTUATION_CHECK"; | |
+ } | |
+ | |
+ @Override | |
+ public String getDescription() { | |
+ return "Verifica se a palavra tem de levar acento gr\u00E0fico."; | |
+ } | |
+ | |
+ @Override | |
+ public RuleMatch[] match(final AnalyzedSentence sentence) { | |
+ final List<RuleMatch> ruleMatches = new ArrayList<>(); | |
+ final AnalyzedTokenReadings[] tokens = sentence.getTokensWithoutWhitespace(); | |
+ for (int i = 1; i < tokens.length; i++) { | |
+ // ignoring token 0, i.e. SENT_START | |
+ final String token; | |
+ if (i == 1) { | |
+ token = tokens[i].getToken().toLowerCase(); | |
+ } else { | |
+ token = tokens[i].getToken(); | |
+ } | |
+ final String prevToken = tokens[i - 1].getToken(); | |
+ String prevPrevToken = ""; | |
+ if (i > 2) { | |
+ prevPrevToken = tokens[i - 2].getToken(); | |
+ } | |
+ String nextToken = ""; | |
+ if (i < tokens.length - 1) { | |
+ nextToken = tokens[i + 1].getToken(); | |
+ } | |
+ String nextNextToken = ""; | |
+ if (i < tokens.length - 2) { | |
+ nextNextToken = tokens[i + 2].getToken(); | |
+ } | |
+ boolean isRelevantWord = false; | |
+ boolean isRelevantWord2 = false; | |
+ if (StringTools.isEmpty(token)) { | |
+ continue; | |
+ } | |
+ if (relevantWords.containsKey(token)) { | |
+ isRelevantWord = true; | |
+ } | |
+ if (relevantWords2.containsKey(token)) { | |
+ isRelevantWord2 = true; | |
+ } | |
+ | |
+ if (!isRelevantWord && !isRelevantWord2) { | |
+ continue; | |
+ } | |
+ | |
+ // verbo precedido de pronome reflexo | |
+ if (matchPostagRegexp(tokens[i - 1], PRONOME_PESSOAL) | |
+ && !prevToken.startsWith("-")) { | |
+ continue; | |
+ } | |
+ | |
+ | |
+ String replacement = null; | |
+ final Matcher mPreposicaoDE = PREPOSICAO_DE.matcher(nextToken); | |
+ final Matcher mExcepcoesDE = EXCEPCOES_ANTES_DE.matcher(nextNextToken); | |
+ final Matcher mArtigoOMS = ARTIGO_O_MS.matcher(prevToken); | |
+ final Matcher mArtigoOFS = ARTIGO_O_FS.matcher(prevToken); | |
+ final Matcher mArtigoOMP = ARTIGO_O_MP.matcher(prevToken); | |
+ final Matcher mArtigoOFP = ARTIGO_O_FP.matcher(prevToken); | |
+ | |
+ // VERB WITHOUT ACCENT -> NOUN WITH ACCENT | |
+ if (isRelevantWord && !matchPostagRegexp(tokens[i], GN)/* && !matchPostagRegexp(tokens[i], LOCUCOES)*/) { | |
+ // amb renuncies | |
+ if (tokens[i - 1].hasPosTag("SPS00") && !tokens[i - 1].hasPosTag("RG") | |
+ && !matchPostagRegexp(tokens[i - 1], DETERMINANTE) | |
+ && !matchPostagRegexp(tokens[i], INFINITIVO)) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // aquestes renuncies | |
+ else if (((matchPostagRegexp(tokens[i - 1], DETERMINANTE_MS) && matchPostagRegexp(relevantWords.get(token), NOME_MS) /* | |
+ && !token.equals("cantar")*/) | |
+ || (matchPostagRegexp(tokens[i - 1], DETERMINANTE_MP) && matchPostagRegexp(relevantWords.get(token), NOME_MP)) | |
+ || (matchPostagRegexp(tokens[i - 1], DETERMINANTE_FS) && matchPostagRegexp(relevantWords.get(token), NOME_FS) /* | |
+ && !token.equals("venia") && !token.equals("tenia") && !token.equals("continua") && !token.equals("genera") | |
+ && !token.equals("faria")*/) | |
+ || (matchPostagRegexp(tokens[i - 1], DETERMINANTE_FP) && matchPostagRegexp(relevantWords.get(token), NOME_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // fumaré una faria (correct: fària) | |
+ else if (i > 2 | |
+ && matchPostagRegexp(tokens[i - 2], VERBO_CONJUGADO) | |
+ && ((matchPostagRegexp(tokens[i - 1], DETERMINANTE_MS) && matchPostagRegexp(relevantWords.get(token), NOME_MS)) | |
+ || (matchPostagRegexp(tokens[i - 1], DETERMINANTE_MP) && matchPostagRegexp(relevantWords.get(token), NOME_MP)) | |
+ || (matchPostagRegexp(tokens[i - 1], DETERMINANTE_FS) && matchPostagRegexp(relevantWords.get(token), NOME_FS)) | |
+ || (matchPostagRegexp(tokens[i - 1], DETERMINANTE_FP) && matchPostagRegexp(relevantWords.get(token), NOME_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // fem la copia (correct: còpia) | |
+ else if (i > 2 | |
+ && matchPostagRegexp(tokens[i - 2], VERBO_CONJUGADO) | |
+ && ((mArtigoOMS.matches() && matchPostagRegexp(relevantWords.get(token), NOME_MS)) | |
+ || (mArtigoOMP.matches() && matchPostagRegexp(relevantWords.get(token), NOME_MP)) | |
+ || (mArtigoOFS.matches() && matchPostagRegexp(relevantWords.get(token), NOME_FS)) | |
+ || (mArtigoOFP.matches() && matchPostagRegexp(relevantWords.get(token),NOME_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // circumstancies d'una altra classe | |
+ else if (!matchPostagRegexp(tokens[i], PARTICIPIO_MS) /* | |
+ && !token.equals("venia") && !token.equals("venies") | |
+ && !token.equals("tenia") && !token.equals("tenies") | |
+ && !token.equals("faria") && !token.equals("faries") | |
+ && !token.equals("espero") && !token.equals("continua") | |
+ && !token.equals("continues") && !token.equals("cantar") | |
+ && !prevToken.equals("que") && !prevToken.equals("qui") | |
+ && !prevToken.equals("què") && mPreposicaoDE.matches() */ | |
+ && !matchPostagRegexp(tokens[i - 1], NOT_IN_PREV_TOKEN) | |
+ /* && !matchPostagRegexp(tokens[i + 1], LOCUCOES) */ | |
+ && (i < tokens.length - 2) | |
+ && !matchPostagRegexp(tokens[i + 2], INFINITIVO) | |
+ && !mExcepcoesDE.matches() | |
+ && !tokens[i - 1].hasPosTag("RG")) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // la renuncia del president. | |
+ else if (/* !token.equals("venia") | |
+ && !token.equals("venies") && !token.equals("tenia") | |
+ && !token.equals("tenies") && !token.equals("faria") | |
+ && !token.equals("faries") && !token.equals("continua") | |
+ && !token.equals("continues") && !token.equals("cantar") | |
+ && !token.equals("diferencia") && !token.equals("diferencies") | |
+ && !token.equals("distancia") && !token.equals("distancies") | |
+ && */ ((mArtigoOMS.matches() && matchPostagRegexp( | |
+ relevantWords.get(token), NOME_MS)) | |
+ || (mArtigoOFS.matches() && matchPostagRegexp( | |
+ relevantWords.get(token), NOME_FS)) | |
+ || (mArtigoOMP.matches() && matchPostagRegexp( | |
+ relevantWords.get(token), NOME_MP)) | |
+ || (mArtigoOFP.matches() && matchPostagRegexp( | |
+ relevantWords.get(token), NOME_FP))) | |
+ | |
+ && mPreposicaoDE.matches()) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // circunstancias extraordináries | |
+ else if (/*!token.equals("pronuncia") | |
+ && !token.equals("espero") && !token.equals("pronuncies") | |
+ && !token.equals("venia") && !token.equals("venies") | |
+ && !token.equals("tenia") && !token.equals("tenies") | |
+ && !token.equals("continua") && !token.equals("continues") | |
+ && !token.equals("faria") && !token.equals("faries") | |
+ && !token.equals("genera") && !token.equals("figuri") | |
+ && */ (i < tokens.length - 1) | |
+ && ((matchPostagRegexp(relevantWords.get(token), NOME_MS) && matchPostagRegexp(tokens[i + 1], ADJETIVO_MS)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FS) && matchPostagRegexp(tokens[i + 1], ADJETIVO_FS)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_MP) && matchPostagRegexp(tokens[i + 1], ADJETIVO_MP)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FP) && matchPostagRegexp(tokens[i + 1], ADJETIVO_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // les seves contraries | |
+ else if ((matchPostagRegexp(relevantWords.get(token), NOME_MS) && matchPostagRegexp(tokens[i - 1], ADJETIVO_MS) | |
+ && !matchPostagRegexp(tokens[i], VERBO_3S) && !matchPostagRegexp(tokens[i], GRUPO_VERBAL)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FS) && matchPostagRegexp(tokens[i - 1], ADJETIVO_FS) | |
+ && !matchPostagRegexp(tokens[i], VERBO_3S)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_MP) && matchPostagRegexp(tokens[i - 1], ADJETIVO_MP)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FP) && matchPostagRegexp(tokens[i - 1], ADJETIVO_FP))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ //uma nova formula que (fórmula) | |
+ else if (nextToken.equals("que") && i>2 | |
+ && ((matchPostagRegexp(relevantWords.get(token), NOME_MS) && matchPostagRegexp(tokens[i - 1], ADJETIVO_MS) | |
+ && matchPostagRegexp(tokens[i - 2], DETERMINANTE_MS)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FS) && matchPostagRegexp(tokens[i - 1], ADJETIVO_FS) | |
+ && matchPostagRegexp(tokens[i - 2], DETERMINANTE_FS)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_MP) && matchPostagRegexp(tokens[i - 1], ADJETIVO_MP) | |
+ && matchPostagRegexp(tokens[i - 2], DETERMINANTE_MP)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FP) && matchPostagRegexp(tokens[i - 1], ADJETIVO_FP) | |
+ && matchPostagRegexp(tokens[i - 2], DETERMINANTE_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // les circumstancies que ens envolten | |
+ else if (nextToken.equals("que") | |
+ && ((mArtigoOMS.matches() && matchPostagRegexp(relevantWords.get(token), NOME_MS)) | |
+ || (mArtigoOFS.matches() && matchPostagRegexp(relevantWords.get(token), NOME_FS)) | |
+ || (mArtigoOMP.matches() && matchPostagRegexp(relevantWords.get(token), NOME_MP)) | |
+ || (mArtigoOFP.matches() && matchPostagRegexp(relevantWords.get(token), NOME_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ // de positiva influencia | |
+ if (/*!token.equals("pronuncia") && !token.equals("espero") && !token.equals("pronuncies") | |
+ && !token.equals("venia") && !token.equals("venies") && !token.equals("tenia") | |
+ && !token.equals("tenies") && !token.equals("continua") && !token.equals("continues") | |
+ && !token.equals("faria") && !token.equals("faries") && !token.equals("genera") | |
+ && !token.equals("figuri") | |
+ && */ i>2 | |
+ && tokens[i - 2].hasPosTag("SPS00") && !tokens[i - 2].hasPosTag("RG") | |
+ && ((matchPostagRegexp(relevantWords.get(token), NOME_MS) && matchPostagRegexp(tokens[i - 1], ADJETIVO_MS)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FS) && matchPostagRegexp(tokens[i - 1], ADJETIVO_FS)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_MP) && matchPostagRegexp(tokens[i - 1], ADJETIVO_MP)) | |
+ || (matchPostagRegexp(relevantWords.get(token), NOME_FP) && matchPostagRegexp(tokens[i - 1], ADJETIVO_FP)))) { | |
+ replacement = relevantWords.get(token).getToken(); | |
+ } | |
+ } | |
+ | |
+ // VERB WITHOUT ACCENT -> ADJECTIVE WITH ACCENT | |
+ if (isRelevantWord2 && !matchPostagRegexp(tokens[i], GN)/* && !matchPostagRegexp(tokens[i], LOCUCOES) */ ) { | |
+ // de maneira obvia, circumstancias extraordinarias. | |
+ if ((matchPostagRegexp(relevantWords2.get(token), ADJETIVO_MS) && matchPostagRegexp(tokens[i - 1], NOME_MS) | |
+ && !tokens[i - 1].hasPosTag("_GN_FS") && matchPostagRegexp(tokens[i], VERBO_CONJUGADO) | |
+ && !matchPostagRegexp(tokens[i], VERBO_3S)) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_FS) && prevPrevToken.equalsIgnoreCase("de") | |
+ && (prevToken.equals("maneira") || prevToken.equals("forma"))) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_MP) && matchPostagRegexp(tokens[i - 1], NOME_MP)) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_FP) && matchPostagRegexp(tokens[i - 1], NOME_FP))) { | |
+ replacement = relevantWords2.get(token).getToken(); | |
+ } | |
+ // de continua disputa | |
+ else if ((i < tokens.length - 1) | |
+ && !prevToken.equals("que") | |
+ && !matchPostagRegexp(tokens[i - 1], NOT_IN_PREV_TOKEN) | |
+ && ((matchPostagRegexp(relevantWords2.get(token), ADJETIVO_MS) && matchPostagRegexp(tokens[i + 1], NOME_MS) | |
+ && matchPostagRegexp(tokens[i - 1], BEFORE_ADJECTIVE_MS)) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_FS) && matchPostagRegexp(tokens[i + 1], NOME_FS) | |
+ && matchPostagRegexp(tokens[i - 1], BEFORE_ADJECTIVE_FS)) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_MP) && matchPostagRegexp(tokens[i + 1], NOME_MP) | |
+ && matchPostagRegexp(tokens[i - 1], BEFORE_ADJECTIVE_MP)) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_FP) && matchPostagRegexp(tokens[i + 1], NOME_FP) | |
+ && matchPostagRegexp(tokens[i - 1], BEFORE_ADJECTIVE_FP)))) { | |
+ replacement = relevantWords2.get(token).getToken(); | |
+ } | |
+ // a magnifica conservação | |
+ else if ((i < tokens.length - 1) | |
+ && ((matchPostagRegexp(relevantWords2.get(token), ADJETIVO_MS) | |
+ && matchPostagRegexp(tokens[i + 1], NOME_MS) && mArtigoOMS.matches()) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_FS) | |
+ && matchPostagRegexp(tokens[i + 1], NOME_FS) && mArtigoOFS.matches()) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_MP) | |
+ && matchPostagRegexp(tokens[i + 1], NOME_MP) && mArtigoOMP.matches()) | |
+ || (matchPostagRegexp(relevantWords2.get(token), ADJETIVO_FP) | |
+ && matchPostagRegexp(tokens[i + 1], NOME_FP) && mArtigoOFP.matches()))) { | |
+ replacement = relevantWords2.get(token).getToken(); | |
+ } | |
+ | |
+ } | |
+ if (replacement != null) { | |
+ final String msg = "Se \u00E9 um nome ou um adjectivo, tem de levar acento."; | |
+ final RuleMatch ruleMatch = new RuleMatch(this, | |
+ tokens[i].getStartPos(), tokens[i].getEndPos(), | |
+ msg, "Falta um acento"); | |
+ ruleMatch.setSuggestedReplacement(replacement); | |
+ ruleMatches.add(ruleMatch); | |
+ } | |
+ } | |
+ return toRuleMatchArray(ruleMatches); | |
+ } | |
+ | |
+ /** | |
+ * Match POS tag with regular expression | |
+ */ | |
+ private boolean matchPostagRegexp(AnalyzedTokenReadings aToken, | |
+ Pattern pattern) { | |
+ boolean matches = false; | |
+ for (AnalyzedToken analyzedToken : aToken) { | |
+ final String posTag = analyzedToken.getPOSTag(); | |
+ if (posTag != null) { | |
+ final Matcher m = pattern.matcher(posTag); | |
+ if (m.matches()) { | |
+ matches = true; | |
+ break; | |
+ } | |
+ } | |
+ } | |
+ return matches; | |
+ } | |
+ | |
+ @Override | |
+ public void reset() { | |
+ // nothing | |
+ } | |
+ | |
+} | |
diff --git a/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseAccentuationDataLoader.java b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseAccentuationDataLoader.java | |
new file mode 100644 | |
index 0000000..3ddd6e8 | |
--- /dev/null | |
+++ b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseAccentuationDataLoader.java | |
@@ -0,0 +1,61 @@ | |
+/* LanguageTool, a natural language style checker | |
+ * Copyright (C) 2012 Jaume Ortolà i Font | |
+ * | |
+ * 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 | |
+ */ | |
+package org.languagetool.rules.pt; | |
+ | |
+import org.languagetool.AnalyzedToken; | |
+import org.languagetool.AnalyzedTokenReadings; | |
+import org.languagetool.JLanguageTool; | |
+ | |
+import java.io.InputStream; | |
+import java.util.HashMap; | |
+import java.util.Map; | |
+import java.util.Scanner; | |
+ | |
+/** | |
+ * Load data for {@link AccentuationCheckRule}. | |
+ * localized from Catalan version by Tiago F. Santos | |
+ * @since 3.6 | |
+ */ | |
+class PortugueseAccentuationDataLoader { | |
+ | |
+ private static final String FILE_ENCODING = "utf-8"; | |
+ | |
+ Map<String, AnalyzedTokenReadings> loadWords(String path) { | |
+ final Map<String, AnalyzedTokenReadings> map = new HashMap<>(); | |
+ final InputStream inputStream = JLanguageTool.getDataBroker().getFromRulesDirAsStream(path); | |
+ try (Scanner scanner = new Scanner(inputStream, FILE_ENCODING)) { | |
+ while (scanner.hasNextLine()) { | |
+ final String line = scanner.nextLine().trim(); | |
+ if (line.isEmpty() || line.charAt(0) == '#') { // ignore comments | |
+ continue; | |
+ } | |
+ final String[] parts = line.split(";"); | |
+ if (parts.length != 3) { | |
+ throw new RuntimeException("Format error in file " + path + ", line: " | |
+ + line + ", " + "expected 3 semicolon-separated parts, got " | |
+ + parts.length); | |
+ } | |
+ final AnalyzedToken analyzedToken = new AnalyzedToken(parts[1], parts[2], null); | |
+ map.put(parts[0], new AnalyzedTokenReadings(analyzedToken, 0)); | |
+ } | |
+ } | |
+ return map; | |
+ } | |
+ | |
+} | |
diff --git a/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseRule.java b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseRule.java | |
new file mode 100644 | |
index 0000000..fda3a63 | |
--- /dev/null | |
+++ b/languagetool-language-modules/pt/src/main/java/org/languagetool/rules/pt/PortugueseRule.java | |
@@ -0,0 +1,30 @@ | |
+/* LanguageTool, a natural language style checker | |
+ * Copyright (C) 2012 Jaume Ortolà | |
+ * | |
+ * 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 | |
+ */ | |
+package org.languagetool.rules.pt; | |
+ | |
+import org.languagetool.rules.Rule; | |
+ | |
+/** | |
+ * Abstract base class for rules for the Portuguese language. | |
+ * | |
+ * @author Tiago F. Santos | |
+ */ | |
+public abstract class PortugueseRule extends Rule { | |
+ | |
+} | |
diff --git a/languagetool-language-modules/pt/src/main/resources/org/languagetool/rules/pt/verbos_sem_acento_adj_com_acento.txt b/languagetool-language-modules/pt/src/main/resources/org/languagetool/rules/pt/verbos_sem_acento_adj_com_acento.txt | |
new file mode 100644 | |
index 0000000..0fc1476 | |
--- /dev/null | |
+++ b/languagetool-language-modules/pt/src/main/resources/org/languagetool/rules/pt/verbos_sem_acento_adj_com_acento.txt | |
@@ -0,0 +1,358 @@ | |
+# Similar words: verb without accent, adjective with accent; POS tag of the adjective. | |
+# Used by PortugueseAccentuationCheckRule. | |
+# This file must be encoded in UTF-8. | |
+# | |
+# List provided by Enno in (18-11-2016): | |
+# https://gist.githubusercontent.com/Konfekt/ec7bb1360061ca130b51776bae586fc7/raw/941fe264f88fd41eb6dcc16e83701730d7b3590c/gistfile2.txt | |
+# | |
+absona;ábsona;AQ0FS0 | |
+absono;ábsono;AQ0MS0 | |
+acarida;acárida;AQ0FS0 | |
+acarido;acárido;AQ0MS0 | |
+acera;ácera;AQ0FS0 | |
+acida;ácida;AQ0FS0 | |
+acido;ácido;AQ0MS0 | |
+acidula;acídula;AQ0FS0 | |
+acidulo;acídulo;AQ0MS0 | |
+acrostica;acróstica;AQ0FS0 | |
+adultera;adúltera;AQ0FS0 | |
+adultero;adúltero;AQ0MS0 | |
+afia;áfia;AQ0FS0 | |
+afio;áfio;AQ0MS0 | |
+africo;áfrico;AQ0MS0 | |
+agrafa;ágrafa;AQ0FS0 | |
+agrafo;ágrafo;AQ0MS0 | |
+altissona;altíssona;AQ0FS0 | |
+altissono;altíssono;AQ0MS0 | |
+anodina;anódina;AQ0FS0 | |
+anodino;anódino;AQ0MS0 | |
+apoda;ápoda;AQ0FS0 | |
+apode;ápode;AQ0CS0 | |
+apodo;ápodo;AQ0MS0 | |
+apostata;apóstata;AQ0CS0 | |
+arbitra;árbitra;AQ0FS0 | |
+arbitro;árbitro;AQ0MS0 | |
+arica;árica;AQ0FS0 | |
+arico;árico;AQ0MS0 | |
+atica;ática;AQ0FS0 | |
+atico;ático;AQ0MS0 | |
+atropa;átropa;AQ0FS0 | |
+atropo;átropo;AQ0MS0 | |
+aurifica;aurífica;AQ0FS0 | |
+aurifico;aurífico;AQ0MS0 | |
+axila;áxila;AQ0FS0 | |
+bazofia;bazófia;AQ0FS0 | |
+bazofio;bazófio;AQ0MS0 | |
+beatifica;beatífica;AQ0FS0 | |
+beatifico;beatífico;AQ0MS0 | |
+cacografo;cacógrafo;AQ0MS0 | |
+calorifica;calorífica;AQ0FS0 | |
+calorifico;calorífico;AQ0MS0 | |
+celebre;célebre;AQ0CS0 | |
+centrifuga;centrífuga;AQ0FS0 | |
+centrifugo;centrífugo;AQ0MS0 | |
+cientifica;científica;AQ0FS0 | |
+cientifico;científico;AQ0MS0 | |
+cilicio;cilício;AQ0MS0 | |
+clinica;clínica;AQ0FS0 | |
+clinico;clínico;AQ0MS0 | |
+comparticipe;compartícipe;AQ0CS0 | |
+contraria;contrária;AQ0FS0 | |
+contrario;contrário;AQ0MS0 | |
+critica;crítica;AQ0FS0 | |
+critico;crítico;AQ0MS0 | |
+cubica;cúbica;AQ0FS0 | |
+cubico;cúbico;AQ0MS0 | |
+custodia;custódia;AQ0FS0 | |
+custodio;custódio;AQ0MS0 | |
+danifica;danífica;AQ0FS0 | |
+danifico;danífico;AQ0MS0 | |
+decima;décima;AO0FS0 | |
+decimo;décimo;AO0MS0 | |
+decrepita;decrépita;AQ0FS0 | |
+decrepito;decrépito;AQ0MS0 | |
+decupla;décupla;AO0FS0 | |
+decuplo;décuplo;AO0MS0 | |
+deifica;deífica;AQ0FS0 | |
+deifico;deífico;AQ0MS0 | |
+digito;dígito;AQ0MS0 | |
+dilucida;dilúcida;AQ0FS0 | |
+dilucido;dilúcido;AQ0MS0 | |
+dissona;díssona;AQ0FS0 | |
+dissono;díssono;AQ0MS0 | |
+distrofica;distrófica;AQ0FS0 | |
+distrofico;distrófico;AQ0MS0 | |
+dizima;dízima;AQ0FS0 | |
+dizimo;dízimo;AQ0MS0 | |
+domestica;doméstica;AQ0FS0 | |
+domestico;doméstico;AQ0MS0 | |
+dulcifica;dulcífica;AQ0FS0 | |
+dulcifico;dulcífico;AQ0MS0 | |
+elicito;elícito;AQ0MS0 | |
+emula;émula;AQ0FS0 | |
+emulo;émulo;AQ0MS0 | |
+entropica;entrópica;AQ0FS0 | |
+entropico;entrópico;AQ0MS0 | |
+epigramatica;epigramática;AQ0FS0 | |
+epigramatico;epigramático;AQ0MS0 | |
+esdruxula;esdrúxula;AQ0FS0 | |
+especifica;específica;AQ0FS0 | |
+especifico;específico;AQ0MS0 | |
+espirita;espírita;AQ0CS0 | |
+estridula;estrídula;AQ0FS0 | |
+estridulo;estrídulo;AQ0MS0 | |
+estupida;estúpida;AQ0FS0 | |
+estupido;estúpido;AQ0MS0 | |
+eximia;exímia;AQ0FS0 | |
+explicita;explícita;AQ0FS0 | |
+explicito;explícito;AQ0MS0 | |
+exubere;exúbere;AQ0CS0 | |
+facundia;facúndia;AQ0FS0 | |
+falsifica;falsífica;AQ0FS0 | |
+falsifico;falsífico;AQ0MS0 | |
+filosofa;filósofa;AQ0FS0 | |
+filosofo;filósofo;AQ0MS0 | |
+formica;fórmica;AQ0FS0 | |
+formico;fórmico;AQ0MS0 | |
+frigia;frígia;AQ0FS0 | |
+frigorifica;frigorífica;AQ0FS0 | |
+frigorifico;frigorífico;AQ0MS0 | |
+fulgura;fúlgura;AQ0FS0 | |
+fulguro;fúlguro;AQ0MS0 | |
+galderia;galdéria;AQ0FS0 | |
+galderio;galdério;AQ0MS0 | |
+galica;gálica;AQ0FS0 | |
+galico;gálico;AQ0MS0 | |
+gauderio;gaudério;AQ0MS0 | |
+ginastica;ginástica;AQ0FS0 | |
+ginastico;ginástico;AQ0MS0 | |
+gramatica;gramática;AQ0FS0 | |
+gramatico;gramático;AQ0MS0 | |
+gratifica;gratífica;AQ0FS0 | |
+gratifico;gratífico;AQ0MS0 | |
+gravida;grávida;AQ0FS0 | |
+gravido;grávido;AQ0MS0 | |
+hibrida;híbrida;AQ0FS0 | |
+hilaria;hilária;AQ0FS0 | |
+hilario;hilário;AQ0MS0 | |
+hispida;híspida;AQ0FS0 | |
+hispido;híspido;AQ0MS0 | |
+holografa;hológrafa;AQ0FS0 | |
+holografo;hológrafo;AQ0MS0 | |
+homologa;homóloga;AQ0FS0 | |
+homologo;homólogo;AQ0MS0 | |
+honorifica;honorífica;AQ0FS0 | |
+honorifico;honorífico;AQ0MS0 | |
+horrifica;horrífica;AQ0FS0 | |
+horrifico;horrífico;AQ0MS0 | |
+hospede;hóspede;AQ0CS0 | |
+ideografa;ideógrafa;AQ0FS0 | |
+ideografo;ideógrafo;AQ0MS0 | |
+idolatra;idólatra;AQ0CS0 | |
+ignifuga;ignífuga;AQ0FS0 | |
+ignifugo;ignífugo;AQ0MS0 | |
+ilegitima;ilegítima;AQ0FS0 | |
+ilegitimo;ilegítimo;AQ0MS0 | |
+improba;ímproba;AQ0FS0 | |
+improbo;ímprobo;AQ0MS0 | |
+impropria;imprópria;AQ0FS0 | |
+improprio;impróprio;AQ0MS0 | |
+incuba;íncuba;AQ0FS0 | |
+indica;índica;AQ0FS0 | |
+indico;índico;AQ0MS0 | |
+individua;indivídua;AQ0FS0 | |
+individuo;indivíduo;AQ0MS0 | |
+insipida;insípida;AQ0FS0 | |
+insipido;insípido;AQ0MS0 | |
+integra;íntegra;AQ0FS0 | |
+integro;íntegro;AQ0MS0 | |
+intima;íntima;AQ0FS0 | |
+intimo;íntimo;AQ0MS0 | |
+jornalistica;jornalística;AQ0FS0 | |
+jornalistico;jornalístico;AQ0MS0 | |
+lacera;lácera;AQ0FS0 | |
+lacero;lácero;AQ0MS0 | |
+lapidifica;lapidífica;AQ0FS0 | |
+lapidifico;lapidífico;AQ0MS0 | |
+legifera;legífera;AQ0FS0 | |
+legifero;legífero;AQ0MS0 | |
+legitima;legítima;AQ0FS0 | |
+legitimo;legítimo;AQ0MS0 | |
+letifica;letífica;AQ0FS0 | |
+letifico;letífico;AQ0MS0 | |
+licita;lícita;AQ0FS0 | |
+licito;lícito;AQ0MS0 | |
+lidima;lídima;AQ0FS0 | |
+lidimo;lídimo;AQ0MS0 | |
+lirica;lírica;AQ0FS0 | |
+lirico;lírico;AQ0MS0 | |
+litica;lítica;AQ0FS0 | |
+litico;lítico;AQ0MS0 | |
+livida;lívida;AQ0FS0 | |
+livido;lívido;AQ0MS0 | |
+logica;lógica;AQ0FS0 | |
+logico;lógico;AQ0MS0 | |
+lubrica;lúbrica;AQ0FS0 | |
+lubrico;lúbrico;AQ0MS0 | |
+lucida;lúcida;AQ0FS0 | |
+lucido;lúcido;AQ0MS0 | |
+macambuzia;macambúzia;AQ0FS0 | |
+macambuzio;macambúzio;AQ0MS0 | |
+magica;mágica;AQ0FS0 | |
+magico;mágico;AQ0MS0 | |
+magnifica;magnífica;AQ0FS0 | |
+magnifico;magnífico;AQ0MS0 | |
+media;média;AQ0FS0 | |
+medica;médica;AQ0FS0 | |
+medico;médico;AQ0MS0 | |
+melifica;melífica;AQ0FS0 | |
+melifico;melífico;AQ0MS0 | |
+meretricia;meretrícia;AQ0FS0 | |
+meretricio;meretrício;AQ0MS0 | |
+metafisica;metafísica;AQ0FS0 | |
+metafisico;metafísico;AQ0MS0 | |
+mimica;mímica;AQ0FS0 | |
+mimico;mímico;AQ0MS0 | |
+minuscula;minúscula;AQ0FS0 | |
+minusculo;minúsculo;AQ0MS0 | |
+mirifica;mirífica;AQ0FS0 | |
+mirifico;mirífico;AQ0MS0 | |
+misera;mísera;AQ0FS0 | |
+misero;mísero;AQ0MS0 | |
+modica;módica;AQ0FS0 | |
+modico;módico;AQ0MS0 | |
+monografa;monógrafa;AQ0FS0 | |
+monografo;monógrafo;AQ0MS0 | |
+murmura;múrmura;AQ0FS0 | |
+murmuro;múrmuro;AQ0MS0 | |
+musica;música;AQ0FS0 | |
+musico;músico;AQ0MS0 | |
+mutua;mútua;AQ0FS0 | |
+mutuo;mútuo;AQ0MS0 | |
+obvia;óbvia;AQ0FS0 | |
+obvio;óbvio;AQ0MS0 | |
+pacifica;pacífica;AQ0FS0 | |
+pacifico;pacífico;AQ0MS0 | |
+panegirico;panegírico;AQ0MS0 | |
+paralitica;paralítica;AQ0FS0 | |
+paralitico;paralítico;AQ0MS0 | |
+participe;partícipe;AQ0CS0 | |
+perdularia;perdulária;AQ0FS0 | |
+perdulario;perdulário;AQ0MS0 | |
+perpetua;perpétua;AQ0FS0 | |
+perpetuo;perpétuo;AQ0MS0 | |
+pervia;pérvia;AQ0FS0 | |
+pestifera;pestífera;AQ0FS0 | |
+pestifero;pestífero;AQ0MS0 | |
+petrifica;petrífica;AQ0FS0 | |
+petrifico;petrífico;AQ0MS0 | |
+placida;plácida;AQ0FS0 | |
+placido;plácido;AQ0MS0 | |
+politica;política;AQ0FS0 | |
+politico;político;AQ0MS0 | |
+pratica;prática;AQ0FS0 | |
+pratico;prático;AQ0MS0 | |
+precipite;precípite;AQ0CS0 | |
+prepostera;prepóstera;AQ0FS0 | |
+prepostero;prepóstero;AQ0MS0 | |
+previa;prévia;AQ0FS0 | |
+pristina;prístina;AQ0FS0 | |
+pristino;prístino;AQ0MS0 | |
+prodiga;pródiga;AQ0FS0 | |
+prodigo;pródigo;AQ0MS0 | |
+prognostica;prognóstica;AQ0FS0 | |
+prolifica;prolífica;AQ0FS0 | |
+prolifico;prolífico;AQ0MS0 | |
+pronostica;pronóstica;AQ0FS0 | |
+pronostico;pronóstico;AQ0MS0 | |
+propicia;propícia;AQ0FS0 | |
+propicio;propício;AQ0MS0 | |
+prospera;próspera;AQ0FS0 | |
+prospero;próspero;AQ0MS0 | |
+publica;pública;AQ0FS0 | |
+publico;público;AQ0MS0 | |
+purpura;púrpura;AQ0CN0 | |
+quadrupede;quadrúpede;AQ0CS0 | |
+rabida;rábida;AQ0FS0 | |
+rabido;rábido;AQ0MS0 | |
+rabula;rábula;AQ0CS0 | |
+reciproca;recíproca;AQ0FS0 | |
+reciproco;recíproco;AQ0MS0 | |
+regia;régia;AQ0FS0 | |
+rememora;remémora;AQ0FS0 | |
+rememoro;remémoro;AQ0MS0 | |
+republica;república;AQ0FS0 | |
+republico;repúblico;AQ0MS0 | |
+retorica;retórica;AQ0FS0 | |
+retorico;retórico;AQ0MS0 | |
+retrograda;retrógrada;AQ0FS0 | |
+retrogrado;retrógrado;AQ0MS0 | |
+rustica;rústica;AQ0FS0 | |
+rustico;rústico;AQ0MS0 | |
+rutila;rútila;AQ0FS0 | |
+rutilo;rútilo;AQ0MS0 | |
+sabia;sábia;AQ0FS0 | |
+sacrifica;sacrífica;AQ0FS0 | |
+sacrifico;sacrífico;AQ0MS0 | |
+sanguifica;sanguífica;AQ0FS0 | |
+sanguifico;sanguífico;AQ0MS0 | |
+secia;sécia;AQ0FS0 | |
+secio;sécio;AQ0MS0 | |
+selvatica;selvática;AQ0FS0 | |
+selvatico;selvático;AQ0MS0 | |
+seria;séria;AQ0FS0 | |
+serio;sério;AQ0MS0 | |
+servia;sérvia;AQ0FS0 | |
+silogistica;silogística;AQ0FS0 | |
+silogistico;silogístico;AQ0MS0 | |
+sofistica;sofística;AQ0FS0 | |
+sofistico;sofístico;AQ0MS0 | |
+solida;sólida;AQ0FS0 | |
+solido;sólido;AQ0MS0 | |
+somitica;somítica;AQ0FS0 | |
+somitico;somítico;AQ0MS0 | |
+substantifica;substantífica;AQ0FS0 | |
+substantifico;substantífico;AQ0MS0 | |
+sucia;súcia;AQ0FS0 | |
+sucio;súcio;AQ0MS0 | |
+sudorifica;sudorífica;AQ0FS0 | |
+sudorifico;sudorífico;AQ0MS0 | |
+sumaria;sumária;AQ0FS0 | |
+sumario;sumário;AQ0MS0 | |
+supera;súpera;AQ0FS0 | |
+supero;súpero;AQ0MS0 | |
+terrifica;terrífica;AQ0FS0 | |
+terrifico;terrífico;AQ0MS0 | |
+tipica;típica;AQ0FS0 | |
+tipico;típico;AQ0MS0 | |
+tisica;tísica;AQ0FS0 | |
+tisico;tísico;AQ0MS0 | |
+toxica;tóxica;AQ0FS0 | |
+toxico;tóxico;AQ0MS0 | |
+translucida;translúcida;AQ0FS0 | |
+translucido;translúcido;AQ0MS0 | |
+trepida;trépida;AQ0FS0 | |
+trepido;trépido;AQ0MS0 | |
+tropica;trópica;AQ0FS0 | |
+tropico;trópico;AQ0MS0 | |
+ultima;última;AO0FS0 | |
+ultimo;último;AO0MS0 | |
+valida;válida;AQ0FS0 | |
+valido;válido;AQ0MS0 | |
+varia;vária;AQ0FS0 | |
+vario;vário;AQ0MS0 | |
+vegeta;végeta;AQ0FS0 | |
+vegeto;végeto;AQ0MS0 | |
+venefica;venéfica;AQ0FS0 | |
+venefico;venéfico;AQ0MS0 | |
+venera;vénera;AQ0FS0 | |
+venero;vénero;AQ0MS0 | |
+vermifuga;vermífuga;AQ0FS0 | |
+versifica;versífica;AQ0FS0 | |
+versifico;versífico;AQ0MS0 | |
+vitalicia;vitalícia;AQ0FS0 | |
+vitalicio;vitalício;AQ0MS0 | |
+vivifica;vivífica;AQ0FS0 | |
+vivifico;vivífico;AQ0MS0 | |
+voluntaria;voluntária;AQ0FS0 | |
+voluntario;voluntário;AQ0MS0 | |
diff --git a/languagetool-language-modules/pt/src/main/resources/org/languagetool/rules/pt/verbos_sem_acento_nomes_com_acento.txt b/languagetool-language-modules/pt/src/main/resources/org/languagetool/rules/pt/verbos_sem_acento_nomes_com_acento.txt | |
new file mode 100644 | |
index 0000000..aa34e96 | |
--- /dev/null | |
+++ b/languagetool-language-modules/pt/src/main/resources/org/languagetool/rules/pt/verbos_sem_acento_nomes_com_acento.txt | |
@@ -0,0 +1,666 @@ | |
+# Similar words: verb without accent, noun with accent; POS tag of the noun. | |
+# Used by AccentuationCheckRule. | |
+# This file must be encoded in UTF-8. | |
+# | |
+# List provided by Enno in (18-11-2016): | |
+# https://gist.githubusercontent.com/Konfekt/ec7bb1360061ca130b51776bae586fc7/raw/941fe264f88fd41eb6dcc16e83701730d7b3590c/gistfile2.txt | |
+# | |
+apostata;apóstata;NCCS000 | |
+abobada;abóbada;NCFS000 | |
+abobora;abóbora;NCFS000 | |
+abrenuncio;abrenúncio;NCMS000 | |
+absintio;absíntio;NCMS000 | |
+abundancia;abundância;NCFS000 | |
+acarido;acárido;NCMS000 | |
+acaro;ácaro;NCMS000 | |
+acedia;acédia;NCFS000 | |
+acequia;acéquia;NCFS000 | |
+acero;ácero;NCMS000 | |
+acicula;acícula;NCFS000 | |
+acido;ácido;NCMS000 | |
+acolito;acólito;NCMS000 | |
+acrostico;acróstico;NCMS000 | |
+acumulo;acúmulo;NCMS000 | |
+adagio;adágio;NCMS000 | |
+adito;ádito;NCMS000 | |
+adminiculo;adminículo;NCMS000 | |
+adultera;adúltera;NCFS000 | |
+adultero;adúltero;NCMS000 | |
+adverbio;advérbio;NCMS000 | |
+africa;áfrica;NCFS000 | |
+agencia;agência;NCFS000 | |
+agua;água;NCFS000 | |
+algalia;algália;NCFS000 | |
+alivio;alívio;NCMS000 | |
+almecega;almécega;NCFS000 | |
+alvidro;álvidro;NCMS000 | |
+amalgama;amálgama;NCFS000 | |
+amasia;amásia;NCFS000 | |
+amasio;amásio;NCMS000 | |
+amnesia;amnésia;NCFS000 | |
+analise;análise;NCFS000 | |
+angustia;angústia;NCFS000 | |
+animatografo;animatógrafo;NCMS000 | |
+aniversario;aniversário;NCMS000 | |
+antifona;antífona;NCFS000 | |
+anuncio;anúncio;NCMS000 | |
+apanagio;apanágio;NCMS000 | |
+apendiculo;apendículo;NCMS000 | |
+apocope;apócope;NCFS000 | |
+apode;ápode;NCMS000 | |
+apodo;ápodo;NCMS000 | |
+apostola;apóstola;NCFS000 | |
+apostolo;apóstolo;NCMS000 | |
+apostrofe;apóstrofe;NCFS000 | |
+apostrofo;apóstrofo;NCMS000 | |
+apozema;apózema;NCMS000 | |
+aprestamo;apréstamo;NCMS000 | |
+arbitro;árbitro;NCMS000 | |
+ardosia;ardósia;NCFS000 | |
+argucia;argúcia;NCFS000 | |
+aria;ária;NCCS000 | |
+arteriografo;arteriógrafo;NCMS000 | |
+articulo;artículo;NCMS000 | |
+artificio;artifício;NCMS000 | |
+arvore;árvore;NCFS000 | |
+ascua;áscua;NCFS000 | |
+asia;ásia;NPFSG00 | |
+assedio;assédio;NCMS000 | |
+astucia;astúcia;NCFS000 | |
+atica;ática;NCFS000 | |
+atico;ático;NCMS000 | |
+auspicio;auspício;NCMS000 | |
+autobiografa;autobiógrafa;NCFS000 | |
+autobiografo;autobiógrafo;NCMS000 | |
+autocopia;autocópia;NCFS000 | |
+autocritica;autocrítica;NCFS000 | |
+autografo;autógrafo;NCMS000 | |
+auxilio;auxílio;NCMS000 | |
+avila;ávila;NCFS000 | |
+azafama;azáfama;NCFS000 | |
+balbucie;balbúcie;NCFS000 | |
+balburdia;balbúrdia;NCFS000 | |
+balsamo;bálsamo;NCMS000 | |
+bascula;báscula;NCFS000 | |
+basculo;básculo;NCMS000 | |
+batega;bátega;NCFS000 | |
+bazofia;bazófia;NCCS000 | |
+beneficio;benefício;NCMS000 | |
+bibliografa;bibliógrafa;NCFS000 | |
+bibliografo;bibliógrafo;NCMS000 | |
+binoculo;binóculo;NCMS000 | |
+biografa;biógrafa;NCFS000 | |
+biografo;biógrafo;NCMS000 | |
+biopsia;biópsia;NCFS000 | |
+bussola;bússola;NCFS000 | |
+buzio;búzio;NCMS000 | |
+cabula;cábula;NCCS000 | |
+cacografo;cacógrafo;NCMS000 | |
+cadencia;cadência;NCFS000 | |
+cadmio;cádmio;NCMS000 | |
+calamo;cálamo;NCMS000 | |
+calcografo;calcógrafo;NCMS000 | |
+calculo;cálculo;NCMS000 | |
+caliculo;calículo;NCMS000 | |
+caligrafo;calígrafo;NCMS000 | |
+calorifico;calorífico;NCMS000 | |
+calunia;calúnia;NCFS000 | |
+cantarida;cantárida;NCFS000 | |
+cantaride;cantáride;NCFS000 | |
+capitula;capítula;NCFS000 | |
+capitulo;capítulo;NCMS000 | |
+capsula;cápsula;NCFS000 | |
+carcere;cárcere;NCMS000 | |
+cardia;cárdia;NCFS000 | |
+caricia;carícia;NCFS000 | |
+carie;cárie;NCFS000 | |
+cartografa;cartógrafa;NCFS000 | |
+cartografo;cartógrafo;NCMS000 | |
+catalise;catálise;NCFS000 | |
+catalogo;catálogo;NCMS000 | |
+cilicio;cilício;NCMS000 | |
+cinematografo;cinematógrafo;NCMS000 | |
+cingulo;cíngulo;NCMS000 | |
+circio;círcio;NCMS000 | |
+circulo;círculo;NCMS000 | |
+circunstancia;circunstância;NCFS000 | |
+citola;cítola;NCFS000 | |
+clemencia;clemência;NCFS000 | |
+clinica;clínica;NCFS000 | |
+clinico;clínico;NCMS000 | |
+cocega;cócega;NCFS000 | |
+coloquio;colóquio;NCMS000 | |
+comedia;comédia;NCFS000 | |
+comercio;comércio;NCMS000 | |
+comissaria;comissária;NCFS000 | |
+comissario;comissário;NCMS000 | |
+comparticipe;compartícipe;NCCS000 | |
+compendio;compêndio;NCMS000 | |
+concilio;concílio;NCMS000 | |
+conferencia;conferência;NCFS000 | |
+confidencia;confidência;NCFS000 | |
+consocio;consócio;NCMS000 | |
+consorcio;consórcio;NCMS000 | |
+contagio;contágio;NCMS000 | |
+contingencia;contingência;NCFS000 | |
+contraria;contrária;NCFS000 | |
+contrario;contrário;NCMS000 | |
+conventiculo;conventículo;NCMS000 | |
+copia;cópia;NCFS000 | |
+copiografo;copiógrafo;NCMS000 | |
+copula;cópula;NCFS000 | |
+coreografa;coreógrafa;NCFS000 | |
+coreografo;coreógrafo;NCMS000 | |
+corografo;corógrafo;NCMS000 | |
+craticula;cratícula;NCFS000 | |
+credencia;credência;NCFS000 | |
+credito;crédito;NCMS000 | |
+criptografa;criptógrafa;NCFS000 | |
+criptografo;criptógrafo;NCMS000 | |
+critica;crítica;NCFS000 | |
+critico;crítico;NCMS000 | |
+cumulo;cúmulo;NCMS000 | |
+curia;cúria;NCFS000 | |
+curio;cúrio;NCMS000 | |
+custodia;custódia;NCFS000 | |
+custodio;custódio;NCMS000 | |
+dactilografa;dactilógrafa;NCFS000 | |
+dactilografo;dactilógrafo;NCMS000 | |
+dadiva;dádiva;NCFS000 | |
+daguerreotipo;daguerreótipo;NCMS000 | |
+debito;débito;NCMS000 | |
+decima;décima;NCFS000 | |
+decuria;decúria;NCFS000 | |
+delicia;delícia;NCFS000 | |
+demografa;demógrafa;NCFS000 | |
+demografo;demógrafo;NCMS000 | |
+denticulo;dentículo;NCMS000 | |
+denuncia;denúncia;NCFS000 | |
+deposito;depósito;NCMS000 | |
+descredito;descrédito;NCMS000 | |
+desmemoria;desmemória;NCFS000 | |
+desprestigio;desprestígio;NCMS000 | |
+despronuncia;despronúncia;NCFS000 | |
+desproposito;despropósito;NCMS000 | |
+diagnostico;diagnóstico;NCMS000 | |
+dialise;diálise;NCFS000 | |
+dicionario;dicionário;NCMS000 | |
+diferencia;diferença;NCFS000 | |
+diligencia;diligência;NCFS000 | |
+diluvio;dilúvio;NCMS000 | |
+dissidio;dissídio;NCMS000 | |
+distancia;distância;NCFS000 | |
+divorcio;divórcio;NCMS000 | |
+dizima;dízima;NCFS000 | |
+dizimo;dízimo;NCMS000 | |
+domestica;doméstica;NCFS000 | |
+domestico;doméstico;NCMS000 | |
+domicilio;domicílio;NCMS000 | |
+duvida;dúvida;NCFS000 | |
+edicula;edícula;NCFS000 | |
+edito;édito;NCMS000 | |
+eficacia;eficácia;NCFS000 | |
+efigie;efígie;NCFS000 | |
+electrolise;electrólise;NCFS000 | |
+eminencia;eminência;NCFS000 | |
+empresaria;empresária;NCFS000 | |
+empresario;empresário;NCMS000 | |
+emula;émula;NCFS000 | |
+emulo;émulo;NCMS000 | |
+enxarcia;enxárcia;NCFS000 | |
+enxundia;enxúndia;NCFS000 | |
+epigrafe;epígrafe;NCFS000 | |
+epilogo;epílogo;NCMS000 | |
+episodio;episódio;NCMS000 | |
+epistola;epístola;NCFS000 | |
+epiteto;epíteto;NCMS000 | |
+epitome;epítome;NCMS000 | |
+escolio;escólio;NCMS000 | |
+escoria;escória;NCFS000 | |
+esdruxulo;esdrúxulo;NCMS000 | |
+especie;espécie;NCFS000 | |
+especulo;espéculo;NCMS000 | |
+esperancia;esperança;NCFS000 | |
+espicula;espícula;NCFS000 | |
+espiculo;espículo;NCMS000 | |
+espirita;espírita;NCCS000 | |
+espirito;espírito;NCMS000 | |
+espolio;espólio;NCMS000 | |
+esportula;espórtula;NCFS000 | |
+esporulo;espórulo;NCMS000 | |
+estadio;estádio;NCMS000 | |
+estagio;estágio;NCMS000 | |
+estancia;estância;NCFS000 | |
+estenografa;estenógrafa;NCFS000 | |
+estenografo;estenógrafo;NCMS000 | |
+estereotipo;estereótipo;NCMS000 | |
+estimulo;estímulo;NCMS000 | |
+estipendio;estipêndio;NCMS000 | |
+estipula;estípula;NCFS000 | |
+estoria;estória;NCFS000 | |
+estrategia;estratégia;NCFS000 | |
+estrepito;estrépito;NCMS000 | |
+estupida;estúpida;NCFS000 | |
+estupido;estúpido;NCMS000 | |
+esturdia;estúrdia;NCFS000 | |
+evidencia;evidência;NCFS000 | |
+exercito;exército;NCMS000 | |
+exilio;exílio;NCMS000 | |
+exordio;exórdio;NCMS000 | |
+experiencia;experiência;NCFS000 | |
+extravagancia;extravagância;NCFS000 | |
+fabrica;fábrica;NCFS000 | |
+fabula;fábula;NCFS000 | |
+facecia;facécia;NCFS000 | |
+facundia;facúndia;NCFS000 | |
+falacia;falácia;NCFS000 | |
+falporria;falpórria;NCCS000 | |
+fanfurria;fanfúrria;NCFS000 | |
+farofia;farófia;NCFS000 | |
+fastigio;fastígio;NCMS000 | |
+feria;féria;NCFS000 | |
+filosofa;filósofa;NCFS000 | |
+filosofo;filósofo;NCMS000 | |
+fimbria;fímbria;NCFS000 | |
+financia;finança;NCFS000 | |
+fistula;fístula;NCFS000 | |
+flagicio;flagício;NCMS000 | |
+floculo;flóculo;NCMS000 | |
+folio;fólio;NCMS000 | |
+fonografo;fonógrafo;NCMS000 | |
+formica;fórmica;NCFS000 | |
+formula;fórmula;NCFS000 | |
+fosforo;fósforo;NCMS000 | |
+fotocopia;fotocópia;NCFS000 | |
+fotografa;fotógrafa;NCFS000 | |
+fotografo;fotógrafo;NCMS000 | |
+fototipo;fotótipo;NCMS000 | |
+frigia;frígia;NCFS000 | |
+frigorifico;frigorífico;NCMS000 | |
+gabia;gábia;NCFS000 | |
+galderia;galdéria;NCFS000 | |
+galderio;galdério;NCMS000 | |
+ganancia;ganância;NCFS000 | |
+garrulo;gárrulo;NCMS000 | |
+gastrula;gástrula;NCFS000 | |
+gauderio;gaudério;NCMS000 | |
+gazua;gázua;NCFS000 | |
+gemula;gémula;NCFS000 | |
+geografa;geógrafa;NCFS000 | |
+geografo;geógrafo;NCMS000 | |
+gerencia;gerência;NCFS000 | |
+ginastica;ginástica;NCFS000 | |
+gladio;gládio;NCMS000 | |
+gloria;glória;NCFS000 | |
+gramatica;gramática;NCFS000 | |
+gramatico;gramático;NCMS000 | |
+gravida;grávida;NCFS000 | |
+habito;hábito;NCMS000 | |
+halito;hálito;NCMS000 | |
+hemodialise;hemodiálise;NCFS000 | |
+hemolise;hemólise;NCFS000 | |
+hernia;hérnia;NCFS000 | |
+hibrido;híbrido;NCMS000 | |
+hidrolise;hidrólise;NCFS000 | |
+hilaria;hilária;NCFS000 | |
+historia;história;NCFS000 | |
+homicidio;homicídio;NCMS000 | |
+homilia;homília;NCFS000 | |
+horoscopo;horóscopo;NCMS000 | |
+hospede;hóspede;NCCS000 | |
+ictericia;icterícia;NCFS000 | |
+ideografa;ideógrafa;NCFS000 | |
+ideografo;ideógrafo;NCMS000 | |
+idolatra;idólatra;NCCS000 | |
+ignominia;ignomínia;NCFS000 | |
+impertinencia;impertinência;NCFS000 | |
+impeto;ímpeto;NCMS000 | |
+incubo;íncubo;NCMS000 | |
+indicio;indício;NCMS000 | |
+individua;indivídua;NCFS000 | |
+individuo;indivíduo;NCMS000 | |
+indulgencia;indulgência;NCFS000 | |
+industria;indústria;NCFS000 | |
+inercia;inércia;NCFS000 | |
+influencia;influência;NCFS000 | |
+inicio;início;NCMS000 | |
+injuria;injúria;NCFS000 | |
+insidia;insídia;NCFS000 | |
+insignia;insígnia;NCFS000 | |
+instancia;instância;NCFS000 | |
+insula;ínsula;NCFS000 | |
+integra;íntegra;NCFS000 | |
+inteligencia;inteligência;NCFS000 | |
+intimo;íntimo;NCMS000 | |
+inventario;inventário;NCMS000 | |
+invidia;invídia;NCFS000 | |
+involucro;invólucro;NCMS000 | |
+iridio;irídio;NCMS000 | |
+irreverencia;irreverência;NCFS000 | |
+jactancia;jactância;NCFS000 | |
+jaculo;jáculo;NCMS000 | |
+jubilo;júbilo;NCMS000 | |
+lagrima;lágrima;NCFS000 | |
+lamuria;lamúria;NCFS000 | |
+lapida;lápida;NCFS000 | |
+lapide;lápide;NCFS000 | |
+larapia;larápia;NCFS000 | |
+larapio;larápio;NCMS000 | |
+lastima;lástima;NCFS000 | |
+latego;látego;NCMS000 | |
+lazara;lázara;NCFS000 | |
+lazaro;lázaro;NCMS000 | |
+legifera;legífera;NCFS000 | |
+legifero;legífero;NCMS000 | |
+legitima;legítima;NCFS000 | |
+leria;léria;NCCS000 | |
+lexicografa;lexicógrafa;NCFS000 | |
+lexicografo;lexicógrafo;NCMS000 | |
+licencia;licença;NCFS000 | |
+ligula;lígula;NCFS000 | |
+ligulo;lígulo;NCMS000 | |
+linotipo;linótipo;NCMS000 | |
+lipolise;lipólise;NCMS000 | |
+lirica;lírica;NCFS000 | |
+lirico;lírico;NCMS000 | |
+litigio;litígio;NCMS000 | |
+litografa;litógrafa;NCFS000 | |
+litografo;litógrafo;NCMS000 | |
+lixivia;lixívia;NCFS000 | |
+logica;lógica;NCFS000 | |
+logico;lógico;NCMS000 | |
+lunula;lúnula;NCFS000 | |
+luxuria;luxúria;NCFS000 | |
+macambuzia;macambúzia;NCFS000 | |
+macambuzio;macambúzio;NCMS000 | |
+macula;mácula;NCFS000 | |
+mafia;máfia;NCFS000 | |
+magica;mágica;NCFS000 | |
+magnifica;magnífica;NCFS000 | |
+magnifico;magnífico;NCMS000 | |
+magoa;mágoa;NCFS000 | |
+maleficio;malefício;NCMS000 | |
+malicia;malícia;NCFS000 | |
+manigancia;manigância;NCFS000 | |
+mascara;máscara;NCFS000 | |
+matico;mático;NCMS000 | |
+matria;mátria;NCFS000 | |
+matricula;matrícula;NCFS000 | |
+mecanografa;mecanógrafa;NCFS000 | |
+mecanografo;mecanógrafo;NCMS000 | |
+media;média;NCFS000 | |
+medica;médica;NCFS000 | |
+medico;médico;NCMS000 | |
+memoria;memória;NCFS000 | |
+meretricio;meretrício;NCMS000 | |
+metafisica;metafísica;NCFS000 | |
+metafisico;metafísico;NCMS000 | |
+microbio;micróbio;NCMS000 | |
+micrografo;micrógrafo;NCMS000 | |
+milicia;milícia;NCFS000 | |
+milimetro;milímetro;NCMS000 | |
+milite;mílite;NCMS000 | |
+mimeografo;mimeógrafo;NCMS000 | |
+mimica;mímica;NCFS000 | |
+mimico;mímico;NCMS000 | |
+mingua;míngua;NCFS000 | |
+minio;mínio;NCMS000 | |
+minucia;minúcia;NCFS000 | |
+minudencia;minudência;NCFS000 | |
+minuscula;minúscula;NCFS000 | |
+mobile;móbile;NCMS000 | |
+modulo;módulo;NCMS000 | |
+monodia;monódia;NCFS000 | |
+monografa;monógrafa;NCFS000 | |
+monografo;monógrafo;NCMS000 | |
+monologo;monólogo;NCMS000 | |
+monotipo;monótipo;NCMS000 | |
+municio;munício;NCMS000 | |
+murmurio;murmúrio;NCMS000 | |
+musica;música;NCFS000 | |
+musico;músico;NCMS000 | |
+mutua;mútua;NCFS000 | |
+mutuo;mútuo;NCMS000 | |
+necrologio;necrológio;NCMS000 | |
+negligencia;negligência;NCFS000 | |
+negocio;negócio;NCMS000 | |
+nevoa;névoa;NCFS000 | |
+nodoa;nódoa;NCFS000 | |
+noticia;notícia;NCFS000 | |
+numero;número;NCMS000 | |
+nuncio;núncio;NCMS000 | |
+oficio;ofício;NCMS000 | |
+opera;ópera;NCFS000 | |
+opio;ópio;NCMS000 | |
+orbita;órbita;NCFS000 | |
+orografa;orógrafa;NCFS000 | |
+orografo;orógrafo;NCMS000 | |
+ortografa;ortógrafa;NCFS000 | |
+ortografo;ortógrafo;NCMS000 | |
+osculo;ósculo;NCMS000 | |
+ovalo;óvalo;NCMS000 | |
+ovulo;óvulo;NCMS000 | |
+oxido;óxido;NCMS000 | |
+pabulo;pábulo;NCMS000 | |
+pagina;página;NCFS000 | |
+paleografa;paleógrafa;NCFS000 | |
+paleografo;paleógrafo;NCMS000 | |
+palio;pálio;NCMS000 | |
+palmatoria;palmatória;NCFS000 | |
+panegirico;panegírico;NCMS000 | |
+panria;pânria;NCCS000 | |
+pantografo;pantógrafo;NCMS000 | |
+paragrafo;parágrafo;NCMS000 | |
+paralise;parálise;NCFS000 | |
+paralitica;paralítica;NCFS000 | |
+paralitico;paralítico;NCMS000 | |
+paria;pária;NCCS000 | |
+parodia;paródia;NCFS000 | |
+paroquia;paróquia;NCFS000 | |
+participe;partícipe;NCCS000 | |
+pascoa;páscoa;NCFS000 | |
+patina;pátina;NCFS000 | |
+patio;pátio;NCMS000 | |
+pendencia;pendência;NCFS000 | |
+penitencia;penitência;NCFS000 | |
+perdularia;perdulária;NCFS000 | |
+perdulario;perdulário;NCMS000 | |
+pericia;perícia;NCFS000 | |
+perola;pérola;NCFS000 | |
+peroxido;peróxido;NCMS000 | |
+pestilencia;pestilência;NCFS000 | |
+pilheria;pilhéria;NCFS000 | |
+pilula;pílula;NCFS000 | |
+pirografo;pirógrafo;NCMS000 | |
+pirolise;pirólise;NCFS000 | |
+placito;plácito;NCMS000 | |
+plagio;plágio;NCMS000 | |
+planimetro;planímetro;NCMS000 | |
+plasmolise;plasmólise;NCFS000 | |
+policia;polícia;NCCS000 | |
+politica;política;NCFS000 | |
+politico;político;NCMS000 | |
+pornografo;pornógrafo;NCMS000 | |
+posfacio;posfácio;NCMS000 | |
+potencia;potência;NCFS000 | |
+povoa;póvoa;NCFS000 | |
+pratica;prática;NCFS000 | |
+pratico;prático;NCMS000 | |
+predica;prédica;NCFS000 | |
+prefacio;prefácio;NCMS000 | |
+preferencia;preferência;NCFS000 | |
+prelio;prélio;NCMS000 | |
+preludio;prelúdio;NCMS000 | |
+prenuncio;prenúncio;NCMS000 | |
+presencia;presença;NCFS000 | |
+presidio;presídio;NCMS000 | |
+pressagio;presságio;NCMS000 | |
+prestigio;prestígio;NCMS000 | |
+principio;princípio;NCMS000 | |
+privilegio;privilégio;NCMS000 | |
+prodigo;pródigo;NCMS000 | |
+prognostico;prognóstico;NCMS000 | |
+prologo;prólogo;NCMS000 | |
+pronostico;pronóstico;NCMS000 | |
+prontuario;prontuário;NCMS000 | |
+pronuncia;pronúncia;NCFS000 | |
+pronuncio;pronúncio;NCMS000 | |
+proposito;propósito;NCMS000 | |
+providencia;providência;NCFS000 | |
+prudencia;prudência;NCFS000 | |
+psicanalise;psicanálise;NCFS000 | |
+psicografo;psicógrafo;NCMS000 | |
+psicologa;psicóloga;NCFS000 | |
+psicologo;psicólogo;NCMS000 | |
+publico;público;NCMS000 | |
+purpura;púrpura;NCFS000 | |
+quadricula;quadrícula;NCFS000 | |
+quadriculo;quadrículo;NCMS000 | |
+quadrupede;quadrúpede;NCCS000 | |
+querencia;querência;NCFS000 | |
+questiuncula;questiúncula;NCFS000 | |
+quintessencia;quintessência;NCFS000 | |
+quirografo;quirógrafo;NCMS000 | |
+rabano;rábano;NCMS000 | |
+rabia;rábia;NCFS000 | |
+rabida;rábida;NCFS000 | |
+rabula;rábula;NCCS000 | |
+radio;rádio;NCFS000 | |
+radiodiagnostico;radiodiagnóstico;NCMS000 | |
+rafia;ráfia;NCFS000 | |
+reciproca;recíproca;NCFS000 | |
+recita;récita;NCFS000 | |
+recova;récova;NCFS000 | |
+referencia;referência;NCFS000 | |
+refugio;refúgio;NCMS000 | |
+regulo;régulo;NCMS000 | |
+reinicio;reinício;NCMS000 | |
+rejubilo;rejúbilo;NCMS000 | |
+remigio;remígio;NCMS000 | |
+reminiscencia;reminiscência;NCFS000 | |
+remora;rémora;NCFS000 | |
+renuncia;renúncia;NCFS000 | |
+repertorio;repertório;NCMS000 | |
+replica;réplica;NCFS000 | |
+republica;república;NCFS000 | |
+republico;repúblico;NCMS000 | |
+repudio;repúdio;NCMS000 | |
+residencia;residência;NCFS000 | |
+ressabio;ressábio;NCMS000 | |
+reticencia;reticência;NCFS000 | |
+retorica;retórica;NCFS000 | |
+retorico;retórico;NCMS000 | |
+retrograda;retrógrada;NCFS000 | |
+retrogrado;retrógrado;NCMS000 | |
+reverbero;revérbero;NCMS000 | |
+reverencia;reverência;NCFS000 | |
+rocio;rócio;NCMS000 | |
+rodizio;rodízio;NCMS000 | |
+rotula;rótula;NCFS000 | |
+rotulo;rótulo;NCMS000 | |
+rufio;rúfio;NCMS000 | |
+ruido;ruído;NCMS000 | |
+ruina;ruína;NCFS000 | |
+rustica;rústica;NCFS000 | |
+rustico;rústico;NCMS000 | |
+rutilo;rútilo;NCMS000 | |
+sabia;sábia;NCFS000 | |
+sacrifica;sacrífica;NCFS000 | |
+sacrifico;sacrífico;NCMS000 | |
+saculo;sáculo;NCMS000 | |
+salario;salário;NCMS000 | |
+satura;sátura;NCFS000 | |
+secia;sécia;NCFS000 | |
+secio;sécio;NCMS000 | |
+secretaria;secretária;NCFS000 | |
+secretario;secretário;NCMS000 | |
+seculo;século;NCMS000 | |
+semitono;semítono;NCMS000 | |
+sentencia;sentença;NCFS000 | |
+serie;série;NCFS000 | |
+serio;sério;NCMS000 | |
+servia;sérvia;NCFS000 | |
+sevicia;sevícia;NCFS000 | |
+sibilo;síbilo;NCMS000 | |
+silaba;sílaba;NCFS000 | |
+silabo;sílabo;NCMS000 | |
+silencio;silêncio;NCMS000 | |
+simbolo;símbolo;NCMS000 | |
+sincopa;síncopa;NCFS000 | |
+sincope;síncope;NCFS000 | |
+sindico;síndico;NCMS000 | |
+sistole;sístole;NCFS000 | |
+sitio;sítio;NCMS000 | |
+sofistica;sofística;NCFS000 | |
+solido;sólido;NCMS000 | |
+soliloquio;solilóquio;NCMS000 | |
+somitica;somítica;NCFS000 | |
+somitico;somítico;NCMS000 | |
+subsecretaria;subsecretária;NCFS000 | |
+subsecretario;subsecretário;NCMS000 | |
+subsidio;subsídio;NCMS000 | |
+substancia;substância;NCFS000 | |
+sucia;súcia;NCFS000 | |
+sucio;súcio;NCMS000 | |
+sumario;sumário;NCMS000 | |
+sumula;súmula;NCFS000 | |
+suplica;súplica;NCFS000 | |
+suplicio;suplício;NCMS000 | |
+tabula;tábula;NCFS000 | |
+tangencia;tangência;NCFS000 | |
+telefotografa;telefotógrafa;NCFS000 | |
+telefotografo;telefotógrafo;NCMS000 | |
+telegrafo;telégrafo;NCMS000 | |
+tendencia;tendência;NCFS000 | |
+tercia;tércia;NCFS000 | |
+tercio;tércio;NCMS000 | |
+terebra;térebra;NCFS000 | |
+termino;término;NCMS000 | |
+tipografa;tipógrafa;NCFS000 | |
+tipografo;tipógrafo;NCMS000 | |
+tisica;tísica;NCFS000 | |
+tisico;tísico;NCMS000 | |
+titulo;título;NCMS000 | |
+topia;tópia;NCFS000 | |
+topografa;topógrafa;NCFS000 | |
+topografo;topógrafo;NCMS000 | |
+torculo;tórculo;NCMS000 | |
+toxico;tóxico;NCMS000 | |
+trafega;tráfega;NCFS000 | |
+trafego;tráfego;NCMS000 | |
+trafico;tráfico;NCMS000 | |
+tragedia;tragédia;NCFS000 | |
+trepano;trépano;NCMS000 | |
+treplica;tréplica;NCFS000 | |
+tribulo;tríbulo;NCMS000 | |
+tripudio;tripúdio;NCMS000 | |
+tropico;trópico;NCMS000 | |
+tumulo;túmulo;NCMS000 | |
+ulcera;úlcera;NCFS000 | |
+ultima;última;NCFS000 | |
+ultimo;último;NCMS000 | |
+utensilio;utensílio;NCMS000 | |
+vangloria;vanglória;NCFS000 | |
+varia;vária;NCFS000 | |
+veiculo;veículo;NCMS000 | |
+veneficio;venefício;NCMS000 | |
+vermiculo;vermículo;NCMS000 | |
+vermifugo;vermífugo;NCMS000 | |
+vermina;vérmina;NCFS000 | |
+vestia;véstia;NCFS000 | |
+viatico;viático;NCMS000 | |
+vicio;vício;NCMS000 | |
+vilipendio;vilipêndio;NCMS000 | |
+vinculo;vínculo;NCMS000 | |
+virgula;vírgula;NCFS000 | |
+vispora;víspora;NCFS000 | |
+vitima;vítima;NCFS000 | |
+vitoria;vitória;NCFS000 | |
+vivencia;vivência;NCFS000 | |
+voluntaria;voluntária;NCFS000 | |
+voluntario;voluntário;NCMS000 | |
+xilografo;xilógrafo;NCMS000 | |
+zincografa;zincógrafa;NCFS000 | |
+zincografo;zincógrafo;NCMS000 | |
+zinia;zínia;NCFS000 | |
+zoografo;zoógrafo;NCMS000 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment