Skip to content

Instantly share code, notes, and snippets.

@franklinjavier
Last active August 29, 2015 14:25
Show Gist options
  • Select an option

  • Save franklinjavier/865d8e2df6cac8a667e4 to your computer and use it in GitHub Desktop.

Select an option

Save franklinjavier/865d8e2df6cac8a667e4 to your computer and use it in GitHub Desktop.
import org.apache.commons.lang3.StringUtils;
final public class BuscaBr {
final static String vogais = "aaaaaeeeeiiiiooooouuuu";
final static String vogaisAcentuadas = "áâàãäéêèëíîìïóõòôöúùûü";
final static String[] lista01 = {"y","br","bl","ph","gr","gl","mg","ng","rg","ge","gi","rj","mj","nj","q","ca","co","cu","ck","c","lh","n","rm","gm","md","sm"};
final static String[] lista01Troca = {"i","b","b","f","g","g","g","g","g","j","j","j","j","j","k","k","k","k","k","k","l","m","m","m","m","m"};
final static String[] lista02 = {"nh","pr","ç","ce","ci","ch","x","ts","cs","c","z","rs","lt","tr","ct","rt","st","w","l"};
final static String[] lista02Troca = {"n","p","s","s","s","s","s","s","s","s","s","s","t","t","t","t","t","v","r"};
final static String[] lista03 = {"h","aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp","qq","rr","ss","tt","uu","vv","ww","xx","yy","zz"};
final static String[] lista03Troca = {"","a","","","","e","","","","i","","","l","m","n","","p","","r","s","t","","","","","",""};
//lista03Troca original
//final static String[] lista03Troca = {"","","","","","","","","","","","","","","","","","","","","","","","","","",""};
final static String[] lista04 = {"a","e","i","o","u"};
final static String[] lista04Troca = {"","","","",""};
public static String buscaBr(String entrada){
entrada = entrada.toLowerCase();
entrada = entrada.trim();
String textoBuilder = entrada;
StringBuilder stringFinal = new StringBuilder();
String[] frase = StringUtils.split(textoBuilder);
for (int i = 0; i < frase.length; i++) {
textoBuilder = frase[i].trim();
textoBuilder = StringUtils.replaceChars(textoBuilder, vogaisAcentuadas, vogais);
textoBuilder = StringUtils.replaceEach(textoBuilder, lista01, lista01Troca);
textoBuilder = StringUtils.replaceEach(textoBuilder, lista02, lista02Troca);
if (StringUtils.substring(textoBuilder, -1).equals("s"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -1);
if (StringUtils.substring(textoBuilder, -1).equals("z"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -1);
if (StringUtils.substring(textoBuilder, -1).equals("r"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -1);
if (StringUtils.substring(textoBuilder, -1).equals("m"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -1);
if (StringUtils.substring(textoBuilder, -1).equals("n"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -1);
if (StringUtils.substring(textoBuilder, -2).equals("ao"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -2);
if (StringUtils.substring(textoBuilder, -1).equals("l"))
textoBuilder = StringUtils.substring(textoBuilder, 0, -1);
textoBuilder = StringUtils.replaceEach(textoBuilder, lista03, lista03Troca);
//Neste ponto é possivel retirar todas as vogais, simplinficando ainda mais o codigo fonético.
textoBuilder = StringUtils.replaceEach(textoBuilder, lista04, lista04Troca);
stringFinal.append(textoBuilder+" ");
}
return stringFinal.toString().trim();
}
}
import java.text.Normalizer
object BuscaBR {
def buscaBR(string:String) :String = {
Normalizer.normalize(string, Normalizer.Form.NFD)
.replaceAll("[^\\p{ASCII}]", "")
.toLowerCase()
.replaceAll("[^a-z ]","")
.replaceAll("[ ]+"," ")
.replaceAll("^ ","")
.replaceAll(" $","")
.replaceAll("y","i")
.replaceAll("w","v")
.replaceAll("[szprmnl] "," ")
.replaceAll("[szprmnl]$","")
.replaceAll("que","ke")
.replaceAll("qui","ki")
.replaceAll("q","k")
.replaceAll("ge", "je")
.replaceAll("gi", "ji")
.replaceAll("gue", "ge")
.replaceAll("gui", "gi")
.replaceAll("ce", "se")
.replaceAll("ci", "si")
.replaceAll("ck", "k")
.replaceAll("ca", "ka")
.replaceAll("co", "ko")
.replaceAll("cu", "ku")
.replaceAll("pr", "p")
.replaceAll("pl", "p")
.replaceAll("br", "b")
.replaceAll("bl", "b")
.replaceAll("lh", "l")
.replaceAll("nh", "n")
.replaceAll("ch", "s")
.replaceAll("ct", "t")
.replaceAll("pt", "t")
.replaceAll("st", "t")
.replaceAll("rt", "p")
.replaceAll("lt", "t")
.replaceAll("tr", "t")
.replaceAll("tl", "t")
.replaceAll("mg", "g")
.replaceAll("ng", "g")
.replaceAll("rg", "g")
.replaceAll("lg", "g")
.replaceAll("gr", "g")
.replaceAll("gl", "g")
.replaceAll("md", "d")
.replaceAll("nd", "d")
.replaceAll("rd", "d")
.replaceAll("ld", "d")
.replaceAll("dr", "d")
.replaceAll("dl", "d")
.replaceAll("mc", "k")
.replaceAll("nc", "k")
.replaceAll("rc", "k")
.replaceAll("lc", "k")
.replaceAll("cr", "k")
.replaceAll("cl", "k")
.replaceAll("rj", "j")
.replaceAll("lj", "j")
.replaceAll("mj", "j")
.replaceAll("nj", "j")
.replaceAll("rm", "m")
.replaceAll("lm", "m")
.replaceAll("gm", "m")
.replaceAll("sm", "m")
.replaceAll("rn", "n")
.replaceAll("ln", "n")
.replaceAll("gn", "n")
.replaceAll("sn", "n")
.replaceAll("ph", "f")
.replaceAll("fr", "f")
.replaceAll("fl", "f")
.replaceAll("rl", "l")
.replaceAll("sl", "l")
.replaceAll("rs", "s")
.replaceAll("ts", "s")
.replaceAll("[xzc]", "s")
.replaceAll("[aeiou]","")
.replaceAll("^h","")
.replaceAll(" ","")
}
}
create function dbo.foneticalize(@word varchar(255))
returns varchar(255) as
BEGIN
DECLARE @i int
DECLARE @foneticalized varchar(255)
DECLARE @letter char(1)
DECLARE @specials varchar(38)
DECLARE @non_specials varchar(38)
set @i = 1
set @foneticalized = ''
set @letter = ''
set @specials = 'ÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÜÇáàãâéèêíìîóòôõúùûüç'
set @non_specials = 'AAAAEEEIIIOOOOUUUUSAAAAEEEIIIOOOOUUUUS'
-- removing especial chars
set @i = 1
while @i <= len(@specials)
begin
set @word = replace(@word, substring(@specials, @i, 2), substring(@non_specials, @i / 2, 1))
set @i = @i + 2
end
-- uppering word
set @word = upper(@word)
-- replace chars
set @word = replace(@word, 'BL', 'B')
set @word = replace(@word, 'BR', 'B')
set @word = replace(@word, 'PH', 'F')
set @word = replace(@word, 'GL', 'G')
set @word = replace(@word, 'GR', 'G')
set @word = replace(@word, 'MG', 'G')
set @word = replace(@word, 'NG', 'G')
set @word = replace(@word, 'RG', 'G')
set @word = replace(@word, 'Y', 'I')
set @word = replace(@word, 'GE', 'J')
set @word = replace(@word, 'GI', 'J')
set @word = replace(@word, 'RJ', 'J')
set @word = replace(@word, 'MJ', 'J')
set @word = replace(@word, 'CA', 'K')
set @word = replace(@word, 'CO', 'K')
set @word = replace(@word, 'CU', 'K')
set @word = replace(@word, 'CK', 'K')
set @word = replace(@word, 'Q', 'K')
set @word = replace(@word, 'N', 'M')
set @word = replace(@word, 'AO', 'M')
set @word = replace(@word, 'AUM', 'M')
set @word = replace(@word, 'GM', 'M')
set @word = replace(@word, 'MD', 'M')
set @word = replace(@word, 'OM', 'M')
set @word = replace(@word, 'ON', 'M')
set @word = replace(@word, 'PR', 'P')
set @word = replace(@word, 'L', 'R')
set @word = replace(@word, 'CE', 'S')
set @word = replace(@word, 'CI', 'S')
set @word = replace(@word, 'CH', 'S')
set @word = replace(@word, 'CS', 'S')
set @word = replace(@word, 'RS', 'S')
set @word = replace(@word, 'TS', 'S')
set @word = replace(@word, 'X', 'S')
set @word = replace(@word, 'Z', 'S')
set @word = replace(@word, 'TR', 'T')
set @word = replace(@word, 'TL', 'T')
set @word = replace(@word, 'CT', 'T')
set @word = replace(@word, 'RT', 'T')
set @word = replace(@word, 'ST', 'T')
set @word = replace(@word, 'PT', 'T')
set @word = replace(@word, 'RM', 'SM')
set @word = replace(@word, 'A', '')
set @word = replace(@word, 'E', '')
set @word = replace(@word, 'I', '')
set @word = replace(@word, 'O', '')
set @word = replace(@word, 'U', '')
set @word = replace(@word, 'H', '')
-- replacing chars with regular expression: "\b[UW]" e "[MRS]\b"
set @i = 1
while @i <= len(@word)
begin
set @letter = substring(@word, @i, 1)
if @letter = ' '
set @foneticalized = @foneticalized + ' '
else if (@i = 1 or substring(@word, @i-1, 1) = ' ') and (@letter = 'W' or @letter = 'U')
set @foneticalized = @foneticalized + 'V'
else if (@i = len(@word) or substring(@word, @i+1, 1) = ' ') and (@letter = 'M' or @letter = 'R' or @letter = 'S')
set @foneticalized = @foneticalized + ''
else
set @foneticalized = @foneticalized + @letter
set @i = @i + 1
end
-- removing repeated letters
set @i = 1;
set @word = @foneticalized;
set @foneticalized = '';
while @i <= len(@word)
begin
set @letter = substring(@word, @i, 1)
if @letter = ' '
set @foneticalized = @foneticalized + ' '
else if @i > 1 and @letter <> substring(@word, @i-1, 1)
set @foneticalized = @foneticalized + @letter
else if @i = 1
set @foneticalized = @foneticalized + @letter
set @i = @i + 1
end
return @foneticalized
END
DROP FUNCTION IF EXISTS foneticalize;
DELIMITER //
CREATE FUNCTION foneticalize(word VARCHAR(255) charset utf8)
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
DECLARE i int default 1;
DECLARE foneticalized varchar(255) default '';
DECLARE letter char(1) default '';
DECLARE specials varchar(76) default 'ÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÜÇáàãâéèêíìîóòôõúùûüç';
DECLARE non_specials varchar(38) default 'AAAAEEEIIIOOOOUUUUSAAAAEEEIIIOOOOUUUUS';
-- removing especial chars
set i = 1;
while i <= length(specials) do
set word = replace(word, substring(specials, i, 2), substring(non_specials, i / 2, 1));
set i = i + 2;
end while;
-- uppering word
set word = upper(word);
-- replace chars
set word = replace(word, 'BL', 'B');
set word = replace(word, 'BR', 'B');
set word = replace(word, 'PH', 'F');
set word = replace(word, 'GL', 'G');
set word = replace(word, 'GR', 'G');
set word = replace(word, 'MG', 'G');
set word = replace(word, 'NG', 'G');
set word = replace(word, 'RG', 'G');
set word = replace(word, 'Y', 'I');
set word = replace(word, 'GE', 'J');
set word = replace(word, 'GI', 'J');
set word = replace(word, 'RJ', 'J');
set word = replace(word, 'MJ', 'J');
set word = replace(word, 'CA', 'K');
set word = replace(word, 'CO', 'K');
set word = replace(word, 'CU', 'K');
set word = replace(word, 'CK', 'K');
set word = replace(word, 'Q', 'K');
set word = replace(word, 'N', 'M');
set word = replace(word, 'AO', 'M');
set word = replace(word, 'AUM', 'M');
set word = replace(word, 'GM', 'M');
set word = replace(word, 'MD', 'M');
set word = replace(word, 'OM', 'M');
set word = replace(word, 'ON', 'M');
set word = replace(word, 'PR', 'P');
set word = replace(word, 'L', 'R');
set word = replace(word, 'CE', 'S');
set word = replace(word, 'CI', 'S');
set word = replace(word, 'CH', 'S');
set word = replace(word, 'CS', 'S');
set word = replace(word, 'RS', 'S');
set word = replace(word, 'TS', 'S');
set word = replace(word, 'X', 'S');
set word = replace(word, 'Z', 'S');
set word = replace(word, 'TR', 'T');
set word = replace(word, 'TL', 'T');
set word = replace(word, 'CT', 'T');
set word = replace(word, 'RT', 'T');
set word = replace(word, 'ST', 'T');
set word = replace(word, 'PT', 'T');
set word = replace(word, 'RM', 'SM');
set word = replace(word, 'A', '');
set word = replace(word, 'E', '');
set word = replace(word, 'I', '');
set word = replace(word, 'O', '');
set word = replace(word, 'U', '');
set word = replace(word, 'H', '');
-- replacing chars with regular expression: "\b[UW]" e "[MRS]\b"
set i = 1;
while i <= length(word) do
set letter = substring(word, i, 1);
if letter = ' ' then
set foneticalized = concat(foneticalized, ' ');
elseif (i = 1 or substring(word, i-1, 1) = " ") and (letter = 'W' or letter = 'U') then
set foneticalized = concat(foneticalized, 'V');
elseif (i = length(word) or substring(word, i+1, 1) = " ") and (letter = 'M' or letter = 'R' or letter = 'S') then
set foneticalized = concat(foneticalized, '');
else
set foneticalized = concat(foneticalized, letter);
end if;
set i = i + 1;
end while;
-- removing repeated letters
set i = 1;
set word = foneticalized;
set foneticalized = '';
while i <= length(word) do
set letter = substring(word, i, 1);
if letter = ' ' then
set foneticalized = concat(foneticalized, ' ');
elseif i > 1 and letter <> substring(word, i-1, 1) then
set foneticalized = concat(foneticalized, letter);
elseif i = 1 then
set foneticalized = concat(foneticalized, letter);
end if;
set i = i + 1;
end while;
RETURN foneticalized;
END
//
DELIMITER ;
CREATE OR REPLACE FUNCTION foneticalize(v_word IN VARCHAR2)
RETURN VARCHAR AS
i INTEGER;
foneticalized VARCHAR2(255);
letter CHAR;
specials VARCHAR2(38);
non_specials VARCHAR2(38);
word VARCHAR2(255);
BEGIN
-- Converting letter to uppercase
word := UPPER(v_word);
i := 1;
foneticalized := '';
letter := '';
specials := 'ÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÜÇ';
non_specials := 'AAAAEEEIIIOOOOUUUUS';
-- Removing especial chars
WHILE i < LENGTH(specials) LOOP
word := REPLACE(word, SUBSTR(specials, i, 1), SUBSTR(non_specials, i, 1));
i := i + 1;
END LOOP;
-- Replace chars
word := REPLACE(word, 'Y', 'I');
word := REPLACE(word, 'BL', 'B');
word := REPLACE(word, 'BR', 'B');
word := REPLACE(word, 'PH', 'F');
word := REPLACE(word, 'GL', 'G');
word := REPLACE(word, 'GR', 'G');
word := REPLACE(word, 'MG', 'G');
word := REPLACE(word, 'NG', 'G');
word := REPLACE(word, 'RG', 'G');
word := REPLACE(word, 'GE', 'J');
word := REPLACE(word, 'GI', 'J');
word := REPLACE(word, 'RJ', 'J');
word := REPLACE(word, 'MJ', 'J');
word := REPLACE(word, 'NJ', 'J');
word := REPLACE(word, 'Q', 'K');
word := REPLACE(word, 'C', 'K');
word := REPLACE(word, 'CA', 'K');
word := REPLACE(word, 'CO', 'K');
word := REPLACE(word, 'CU', 'K');
word := REPLACE(word, 'LH', 'L');
word := REPLACE(word, 'N', 'M');
word := REPLACE(word, 'RM', 'M');
word := REPLACE(word, 'GM', 'M');
word := REPLACE(word, 'MD', 'M');
word := REPLACE(word, 'SM', 'M');
word := REPLACE(word, 'NH', 'N');
word := REPLACE(word, 'PR', 'P');
word := REPLACE(word, 'Ç', 'S');
word := REPLACE(word, 'X', 'S');
word := REPLACE(word, 'TS', 'S');
word := REPLACE(word, 'C', 'S');
word := REPLACE(word, 'Z', 'S');
word := REPLACE(word, 'RS', 'S');
word := REPLACE(word, 'LT', 'T');
word := REPLACE(word, 'TR', 'T');
word := REPLACE(word, 'CT', 'T');
word := REPLACE(word, 'RT', 'T');
word := REPLACE(word, 'ST', 'T');
word := REPLACE(word, 'W', 'V');
-- Remove ending chars
i := LENGTH(word) - 1;
letter := SUBSTR(word, i, 1);
IF (letter = 'S' OR letter = 'Z' OR letter = 'R' OR letter = 'M' OR letter = 'N' OR letter = 'L') THEN
word := substr(word, 0, i);
ELSIF substr(word, (i - 1), 2) = 'AO' THEN
word := substr(word, 0, (i - 1));
END IF;
word := REPLACE(word, 'R', 'L');
word := REPLACE(word, 'A', '');
word := REPLACE(word, 'E', '');
word := REPLACE(word, 'I', '');
word := REPLACE(word, 'O', '');
word := REPLACE(word, 'U', '');
word := REPLACE(word, 'H', '');
-- Removing repeated letters
i := 1;
WHILE i < LENGTH(word) LOOP
letter := SUBSTR(word, i, 1);
IF letter = ' ' THEN
foneticalized := foneticalized || ' ';
ELSIF i > 1 AND letter <> SUBSTR(word, i - 1, 1) THEN
foneticalized := foneticalized || letter;
ELSIF i = 1 THEN
foneticalized := foneticalized || letter;
END IF;
i := i + 1;
END LOOP;
RETURN foneticalized;
EXCEPTION
WHEN OTHERS THEN
RETURN '';
END;
CREATE OR REPLACE FUNCTION foneticalize(word VARCHAR(255))
RETURNS VARCHAR(255) AS $$
DECLARE
i int default 1;
foneticalized varchar(255) default '';
letter char(1) default '';
specials varchar(76) default 'ÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÜÇáàãâéèêíìîóòôõúùûüç';
non_specials varchar(38) default 'AAAAEEEIIIOOOOUUUUSAAAAEEEIIIOOOOUUUUS';
BEGIN
-- removing especial chars
word := translate(word, specials, non_specials);
-- uppering word
word := upper(word);
-- replace chars
word := regexp_replace(word, e'BL|BR', 'B', 'g');
word := replace(word, 'PH', 'F');
word := regexp_replace(word, e'GL|GR|MG|NG|RG', 'G', 'g');
word := replace(word, 'Y', 'I');
word := regexp_replace(word, e'GE|GI|RJ|MJ', 'J', 'g');
word := regexp_replace(word, e'CA|CO|CU|CK|Q', 'K', 'g');
word := replace(word, 'N', 'M');
word := regexp_replace(word, e'AO|AUM|GM|MD|OM|ON', 'M', 'g');
word := replace(word, 'PR', 'P');
word := replace(word, 'L', 'R');
word := regexp_replace(word, e'CE|CI|CH|CS|RS|TS|X|Z', 'S', 'g');
word := regexp_replace(word, e'TR|TL', 'T', 'g');
word := regexp_replace(word, e'CT|RT|ST|PT', 'T', 'g');
word := regexp_replace(word, e'\\y[UW]', 'V', 'g');
word := replace(word, 'RM', 'SM');
word := regexp_replace(word, e'[MRS]\\y', '', 'g');
word := regexp_replace(word, e'[AEIOU]', '', 'g');
-- removing repeated letters
i := 1;
while i <= length(word) loop
letter := substring(word, i, 1);
if letter = ' ' then
foneticalized := concat(foneticalized, ' ');
elseif i > 1 and letter <> substring(word, i-1, 1) then
foneticalized := concat(foneticalized, letter);
elseif i = 1 then
foneticalized := concat(foneticalized, letter);
end if;
i := i + 1;
end loop;
RETURN foneticalized;
END;
$$ LANGUAGE plpgsql;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment