import java.util.Arrays; import java.util.HashSet; /** * This file is part of PTStemmer, an open-source Java Stemming toolkit for the Portuguese language
* More information at http://code.google.com/p/ptstemmer/
*
* * Portuguese Porter Stemming algorithm as defined in:
* http://snowball.tartarus.org/algorithms/portuguese/stemmer.html * @author Pedro Oliveira (http://student.dei.uc.pt/~pcoliv) * */ public class PortuguesePorterStemmer{ public String wordStemming(String word) { return algorithm(word); } private String algorithm(String st) { st = processNasalidedVowels(st); String stem = st; String r1 = findR(stem); String r2 = findR(r1); String rv = findRV(stem); stem = step1(stem,r1,r2,rv); if(stem.compareTo(st)==0) stem = step2(stem,r1,r2,rv); else { r1 = findR(stem); r2 = findR(r1); rv = findRV(stem); } if(stem.compareTo(st)!=0) { r1 = findR(stem); r2 = findR(r1); rv = findRV(stem); stem = step3(stem,r1,r2,rv); } else stem = step4(stem,r1,r2,rv); if(stem.compareTo(st)!=0) { r1 = findR(stem); r2 = findR(r1); rv = findRV(stem); } stem = step5(stem,r1,r2,rv); stem = deprocessNasalidedVowels(stem); return stem; } private String step1(String st, String r1, String r2, String rv) { int i; for(i = 0; i2) { if(!vowels.contains(st.charAt(1))) { for(int i=2; i vowels = new HashSet(Arrays.asList('a', 'e', 'i', 'o', 'u', 'á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'ô')); private final String suffix1[] = {"amentos", "imentos", "amento", "imento", "adoras", "adores", "aço~es", "ismos", "istas", "adora", "aça~o", "antes", "ância", "ezas", "icos", "icas", "ismo", "ável", "ível", "ista", "osos", "osas", "ador", "ante", "eza", "ico", "ica", "oso", "osa"}; private final String suffix2[] ={"logías", "logía"}; private final String suffix3[] ={"uciones", "ución"}; private final String suffix4[] ={"ências", "ência"}; private final String suffix5[] ={"amente"}; private final String suffix6[] ={"mente"}; private final String suffix7[] ={"idades", "idade"}; private final String suffix8[] ={"ivas", "ivos", "iva", "ivo"}; private final String suffix9[] ={"iras", "ira"}; private final String suffixv[] = {"aríamos", "eríamos", "iríamos", "ássemos", "êssemos", "íssemos", "aríeis", "eríeis", "iríeis", "ásseis", "ésseis", "ísseis", "áramos", "éramos", "íramos", "ávamos", "aremos", "eremos", "iremos", "ariam", "eriam", "iriam", "assem", "essem", "issem", "ara~o", "era~o", "ira~o", "arias", "erias", "irias", "ardes", "erdes", "irdes", "asses", "esses", "isses", "astes", "estes", "istes", "áreis", "areis", "éreis", "ereis", "íreis", "ireis", "áveis", "íamos", "armos", "ermos", "irmos", "aria", "eria", "iria", "asse", "esse", "isse", "aste", "este", "iste", "arei", "erei", "irei", "aram", "eram", "iram", "avam", "arem", "erem", "irem", "ando", "endo", "indo", "adas", "idas", "arás", "aras", "erás", "eras", "irás", "avas", "ares", "eres", "ires", "íeis", "ados", "idos", "ámos", "amos", "emos", "imos", "iras", "ada", "ida", "ará", "ara", "erá", "era", "irá", "ava", "iam", "ado", "ido", "ias", "ais", "eis", "ira", "ia", "ei", "am", "em", "ar", "er", "ir", "as", "es", "is", "eu", "iu", "ou"}; private final String suffixr[] = {"os", "a", "i", "o", "á", "í", "ó"}; private final String suffixf[] = {"e", "é", "ê"}; }