Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pt] Improve compound rules #9179

Merged
merged 9 commits into from
Aug 25, 2023
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public String getShort() {

@Override
public String getMessage() {
return "'$match' é um arcaísmo. É preferível dizer $suggestions.";
return "\"$match\" é um arcaísmo. É preferível dizer $suggestions.";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public String getShort() {

@Override
public String getMessage() {
return "'$match' é um estrangeirismo. É preferível dizer $suggestions.";
return "\"$match\" é um estrangeirismo. É preferível dizer $suggestions.";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public String getShort() {

@Override
public String getMessage() {
return "'$match' é uma frase-feita. É preferível dizer $suggestions.";
return "\"$match\" é uma frase-feita. É preferível dizer $suggestions.";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public String getShort() {

@Override
public String getMessage() {
return "'$match' é um pleonasmo. É preferível dizer $suggestions";
return "\"$match\" é um pleonasmo. É preferível dizer $suggestions";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public String getShort() {

@Override
public String getMessage() {
return "'$match' é um erro. Considere utilizar $suggestions";
return "Possível erro em \"$match\". Prefira $suggestions";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public String getShort() {

@Override
public String getMessage() {
return "'$match' é uma expressão prolixa. É preferível dizer $suggestions.";
return "\"$match\" é uma expressão prolixa. É preferível dizer $suggestions.";
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/
package org.languagetool.rules.pt;

import org.apache.commons.lang3.StringUtils;
import org.languagetool.Language;
import org.languagetool.UserConfig;
import org.languagetool.rules.*;
Expand Down Expand Up @@ -74,4 +75,25 @@ public CompoundRuleData getCompoundRuleData() {

return data;
}

// This override is here to account for Portuguese transformations required as per the latest orthography:
// ultra + som => ultrassom (with <s> turned into <ss> to keep the sound).
@Override
public String mergeCompound(String str, boolean uncapitalizeMidWords) {
String[] stringParts = str.replaceAll("-", " ").split(" ");
StringBuilder sb = new StringBuilder();
for (int k = 0; k < stringParts.length; k++) {
if (k == 0) {
sb.append(stringParts[0]);
} else {
// if previous element ends in vowel and current one starts with <r> or <s>, we need to double the letter into
// a digraph that creates the sound we want
if (stringParts[k-1].matches("(?i).+[aeiou]$") && stringParts[k].matches("(?i)^[rs].+")) {
stringParts[k] = stringParts[k].charAt(0) + stringParts[k];
}
sb.append(uncapitalizeMidWords ? StringUtils.uncapitalize(stringParts[k]) : stringParts[k]);
}
}
return sb.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37526,3 +37526,109 @@ ultra-elevado?
ultra-elevada?
ultra-elevados?
ultra-elevadas?

# moved from the wikipedia.txt file
boas-vindas*
capitão-mor*
célula-tronco*
células-tronco*
anti-aéreo?
anti-depressivo?
governador-geral*
Grã-Bretanha*
médico-cirurgião*
neo-darwinismo?
neo-liberais?
neo-liberal?
neo-liberalismo?
neo-zelandês?
neo-zelandeses?
neo-zelandesa?
neo-zelandesas?
primeiro-ministro*
semi-círculo?
semi-círculos?
semi-finais?
semi-final?
semi-precioso?
semi-preciosos?
semi-preciosa?
semi-preciosas?
semi-presidencialismo?
semi-presidencialismos?
semi-presidencialista?
semi-presidencialistas?
trem-bala*
vice-governador*
vice-governadores*
vice-prefeito*
vice-prefeitos*
vice-prefeita*
vice-prefeitas*
vice-presidente*
vice-presidentes*
video-game?
ultra-som?
ultra-sons?
ultra-sonografia?
ultra-sonografias?
ultra-realismo?
ultra-realismos?
ultra-realista?
ultra-realistas?
anti-semita?
anti-semitas?
anti-semitismo?
anti-semitismos?
anti-religioso?
anti-religiosa?
anti-religiosos?
anti-religiosas?
arqui-rival?
arqui-rivais?
arqui-rivalidade?
arqui-rivalidades?
auto-retrato?
auto-retratos?
contra-regra?
contra-regras?
contra-senso?
contra-sensos?
extra-seco?
extra-seca?
extra-secos?
extra-secas?
infra-som?
infra-sons?
eletro-siderurgia?
eletro-siderurgias?
eletro-siderúrgico?
eletro-siderúrgica?
eletro-siderúrgicos?
eletro-siderúrgicas?
neo-realismo?
neo-realismos?
neo-realista?
neo-realistas?
supra-renal?
supra-renais?
contra-razão?
contra-razões?
anti-social?
anti-sociais?
auto-sustentável?
auto-sustentáveis?
mini-reforma?
mini-reformas?
mini-saia?
mini-saias?
micro-saia?
micro-saias?
micro-sistema?
micro-sistemas?
anti-ruga?
anti-rugas?
extra-regular?
extra-regulares?
extra-regularidade?
extra-regularidades?
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,10 @@ a nível de=em nível de|ao nível de
# à uma=a uma
# à uns=a uns
à vapor=a vapor
anti aéreo=antiaéreo
anti depressivo=antidepressivo
ao meu ver=a meu ver
as sua=as suas
bem vindo=bem-vindo
Bertold Brecht=Bertolt Brecht
boas vindas=Boas-vindas
Capitão Mor=capitão-mor
Castanheira de Pêra=Castanheira de Pera
célula tronco=célula-tronco
células tronco=células-tronco
cujo o=cujo
cuja a=cuja
cujos os=cujos
Expand All @@ -84,39 +77,26 @@ encima dos=em cima dos
# former group is 'encima d' but it is not well recognized
# em uma=numa
# possible exceptions verify
Governador Geral=governador-geral
Grã Bretanha=Grã-Bretanha
grau centigrado=grau Celsius
grau centígrado=grau Celsius
grau centígrados=grau Celsius
grau kelvin=Kelvin
haviam muitos=havia muitos
haviam poucos=havia poucos
haviam vários=havia vários
infra vermelho=infravermelho
infra vermelhos=infravermelhos
Joana d´Arc=Joana d'Arc
mais também=mas também
mau estar=mal-estar
médico cirurgião=médico-cirurgião
meio-dia e meio=meio-dia e meia
melhores classificados=mais bem classificados
melhores colocados=mais bem colocados
neo darwinismo=neodarwinismo
neo liberais=neoliberais
neo liberal=neoliberal
neo liberalismo=neoliberalismo
neo zelandês=neozelandês
neo zelandesa=neozelandesa
número de Avogadro=constante de Avogadro
número de moles=quantidade de matéria
número de mols=quantidade de matéria
o síndrome=a síndrome
os seu=os seus
per capta=per capita
peso molecular=massa molecular
primeiro ministro=primeiro-ministro
Rosa dos Ventos=Rosa-dos-ventos
séc. I=século I
séc. II=século II
séc. III=século III
Expand Down Expand Up @@ -170,22 +150,6 @@ século 6=século VI
século 7=século VII
século 8=século VIII
século 9=século IX
semi círculo=semicírculo
semi círculos=semicírculos
semi finais=semifinais
semi final=semifinal
semi precioso=semiprecioso
semi preciosos=semipreciosos
semi presidencialismos=semipresidencialismos
semi presidencialistas=semipresidencialistas
trem bala=trem-bala
# um síndrome=uma síndrome
# Gender varies in pt-BR and pt-PT
vez enquando=vez em quando
vice governador=vice-governador
vice governadores=vice-governadores
vice prefeito=vice-prefeito
vice prefeitos=vice-prefeitos
vice presidente=vice-presidente
vice presidentes=vice-presidentes
video game=videogame
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,29 @@ public void test() throws IOException {
assertThat(checkCompound("super herói").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("super herói").get(0).getSuggestedReplacements().get(0), is("super-herói"));
// in the compounds TXT as "super-estrela?"
assertThat(checkCompound("super estrela").size(), is(1));
assertThat(checkCompound("super estrela").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("super estrela").get(0).getSuggestedReplacements().get(0), is("superestrela"));
assertThat(checkCompound("Super estrela").size(), is(1));
assertThat(checkCompound("Super estrela").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("Super estrela").get(0).getSuggestedReplacements().get(0), is("Superestrela"));
// in the compounds TXT as "web-site+"
assertThat(checkCompound("web-site").size(), is(1));
assertThat(checkCompound("web-site").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("web-site").get(0).getSuggestedReplacements().get(0), is("website"));
// in the compounds TXT as "Grã-Bretanha*"
assertThat(checkCompound("Grã Bretanha").size(), is(1));
assertThat(checkCompound("Grã Bretanha").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("Grã Bretanha").get(0).getSuggestedReplacements().get(0), is("Grã-Bretanha"));
// in the compounds TXT as "ultra-som?"
assertThat(checkCompound("ultra-som").size(), is(1));
assertThat(checkCompound("ultra-som").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("ultra-som").get(0).getSuggestedReplacements().get(0), is("ultrassom"));
// in the compounds TXT as "ultra-realismo?"
assertThat(checkCompound("ultra-realismo").size(), is(1));
assertThat(checkCompound("ultra-realismo").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("ultra-realismo").get(0).getSuggestedReplacements().get(0), is("ultrarrealismo"));
// in the compounds TXT as "anti-semita?"
assertThat(checkCompound("anti semita").size(), is(1));
assertThat(checkCompound("anti semita").get(0).getSuggestedReplacements().size(), is(1));
assertThat(checkCompound("anti semita").get(0).getSuggestedReplacements().get(0), is("antissemita"));
}

private List<RuleMatch> checkCompound(String text) throws IOException {
Expand Down