import java.text.Normalizer;
import java.util.ArrayList;
import java.util.LinkedHashSet;
class Fonetica {
public static void main
(String[] args
) { Fonetica fonetica = new Fonetica();
ArrayList<String> palavras = new ArrayList<>();
palavras.add("NEUSA");
palavras.add("ÇAPO");
palavras.add("MAÇÃ");
palavras.add("MASSÃ");
palavras.add("EXCEÇÃO");
palavras.add("EXCEÇÕES");
palavras.add("ASPECTO");
palavras.add("AZPECTO");
palavras.add("LAGOZTA");
palavras.add("EREZIAH");
palavras.add("HERESIA");
palavras.add("EXIGIR");
palavras.add("EZIGIR");
palavras.add("PACTO");
palavras.add("QUANTIDADE");
palavras.add("QUERO");
palavras.add("HORIENTAR");
palavras.add("PALHA");
palavras.add("FALHA");
palavras.add("ANNA");
palavras.add("ANÃ");
palavras.add("FACULDADE");
palavras.add("ÚTIL");
palavras.add("INÚTIL");
palavras.add("CEREJA");
palavras.add("OPONENTE");
palavras.add("OPOSIÇÃO");
palavras.add("CAIXA");
palavras.add("TRAVESSEIRO");
palavras.add("ALMOÇO");
palavras.add("PASSEAR");
palavras.add("PNEU");
palavras.add("ALFACE");
palavras.add("ESPAÇO");
palavras.add("OURO");
palavras.add("PEIXE");
palavras.add("ÓLEO");
palavras.add("ALHO");
palavras.add("PESSÊGO");
palavras.add("ACENTUAÇÃO");
palavras.add("CÃO");
palavras.add("CRISTÃ");
palavras.add("AMANHÃ");
palavras.add("SÃO");
palavras.add("FAMÍLIA");
palavras.add("FAMÍLHA");
for (String palavra
: palavras
) { System.
out.
println(palavra
+ " - " + fonetica.
converter(palavra
)); }
}
LinkedHashSet<String> palavras;
palavras = this.converter(frase.split(" "));
return String.
join(" ", palavras
); }
public LinkedHashSet
<String
> converter
(String...
palavras) { LinkedHashSet<String> resultado = new LinkedHashSet<>();
for (String palavra
: palavras
) { resultado.add(this.converter(palavra));
}
return resultado;
}
palavra = palavra.toUpperCase();
palavra = palavra.replace("Ç", "SS");
palavra = palavra.replace("Y", "I");
palavra = palavra.replace("W", "V"); // "W" não tem uma regra definida, as vezes é "V", as vezes é "U"
palavra = palavra.replace("GT", "");
palavra = palavra.replace("Q", "K");
palavra = palavra.replace("SH", "X");
palavra = palavra.replace("CH", "X");
palavra = palavra.replace("PH", "F");
palavra = palavra.replace("LH", "LI");
palavra = palavra.replace("NH", "NI");
palavra = palavra.replace("H", ""); // O "H" é a única letra do nosso alfabeto sem valor fonético.
palavra = this.removerDuplicadas(palavra);
// Acentuações
palavra = palavra.replaceAll("([ÃÕ])([EO])", "$1-$2"); // Separa as sílabas
palavra = palavra.replaceAll("([ÃÕ])", "$1M");
palavra = this.removerAcentos(palavra);
palavra = palavra.replaceAll("([BDP])([^AEIOU]|$)", "$1I$2"); // "B", "D" e "P" mudos
palavra = palavra.replaceAll("C([AOUR])", "K$1"); // "CA", "CO" e "CU" viram "KA", "KO" e "KU" respectivamente
palavra = palavra.replaceAll("C([EI])", "SS$1"); // "CE" e "CI" viram "SSE" e "SSI" respecivamente
palavra = palavra.replaceAll("C([^AEIOU]|$)", "KI$1"); // "C" mudo tem som de "KI"
palavra = palavra.replaceAll("G([EI])", "J$1"); // "GE" e "GI" tem som de "JE" e "JI" respectivamente
palavra = palavra.replaceAll("L([^AEIOU]|$)", "U$1"); // Quando o "L" vem antes de consoante
palavra = palavra.replaceAll("N([^AEIOU]|$)", "M$1"); // Quando "N" for seguida de uma consoante, recebe o som fechado "M"
palavra = palavra.replaceAll("X([^AEIOU]|$)", "SS$1"); // Quando o "X" é seguido por uma vogal, tem som de "SS"
palavra = palavra.replaceAll("([AEIOU])S([AEIOU])", "$1Z$2");
palavra = palavra.replaceAll("Z([^AEIOU]|$)", "SS$1"); // "Z" seguido de vogal tem som de "SS"
palavra = palavra.replaceAll("S+", "S"); // Mais de 1 "S" vira apenas 1
palavra = palavra.replace("OU", "O"); // Quando o "U" segue o "O" não tem som
return palavra;
}
String[] letras
= "ABCDEFGHIJKLMNOPQRTUVWYXZ".
split("");
texto = texto.replaceAll(letra + "+", letra);
}
return texto;
}
texto = Normalizer.normalize(texto, Normalizer.Form.NFD);
texto = texto.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
return texto;
}
}