Curso de Processamento de Linguagem Natural usando Java

Como usar um stemmer

O Stemmer em java é uma aplicação que ajuda a reduzir a variação linguística das palavras e melhorar o desempenho dos seus algoritmos. Antes de utilizar qualquer algoritmo de PLN é importante considerar que o texto possui diversos recursos linguísticos que podem alterar a forma da escrita de uma palavra.   

Um exemplo muito simples são os verbos:   

Verbo falar: Eu falo, Tu falas, Ele fala, Nós Falamos, Vós Falais, Eles Falam.   

Gosta de aprender sobre processamento de linguagem natural? Clique aqui para ver mais.

Pré-processamento  

Já podemos perceber que o tempo verbal e a pessoa na qual ele está sendo conjugado influenciam em sua escrita. Porém existem muitos outros conceitos que influenciam na escrita, por exemplo, singular e plural, etc.   Outro aspecto muito importante é que estas regras variam de acordo com a língua utilizada. Em línguas descendentes do Latim como o Português e Espanhol as regras podem se assemelhar bastante. Considerando todo este contexto fica a seguinte pergunta: como lidar com todas estas variações para trabalhar com as Linguagem Natural?  

O uso de um Stemmer  

O recurso mais utilizado para lidar com estas diferenças na Linguagem Natural é a redução de uma palavra para sua raiz. Este é um recurso já conhecido na área da linguística que foi aplicado para ajudar no processamento de dados. Observe o exemplo:   Falando, falar, falamos, falais, falam, falei, falarão 

Todos estas palavras podem ser reduzidas ao radical fala;

Conhecendo esta possibilidade os desenvolvedores construíram um método capaz de reduzir qualquer palavra para o seu radical. A este algoritmo damos o nome de Stemmer. 

Usando um Stemmer   Uma implementação muito interessante de um Stemmer é aquela chamada de Porter Stemmer. Este algoritmo foi proposto por Martin Porter no artigo escrito em 1980 em seu artigo “An algorithm for suffix stripping“. Este artigo já foi citado mais de 8000 vezes de acordo com o Google Scholar.  

Para entender seu funcionamento a fundo recomendamos a leitura do artigo original.   A seguir temos um trecho de código Java que invoca o Porter Stemmer:    

public String performStemming(String words) {
     ArrayList<String> retorno = new ArrayList<>();
     ArrayList<String> cWords = stringToArrayOfWords(words);
     for (String s : cWords) {
          retorno.add(stem(s));
     }
       return StringUtils.arrayOfWordsToString(retorno);

}


//Metodos auxiliares
public static ArrayList<String> stringToArrayOfWords(String contentToConvert) {
      ArrayList<String> words = new ArrayList<>();
      if (contentToConvert != null) {
          for (String s : contentToConvert.split(" ")) {
              words.add(s);
          }
      }
        return words;

}

O código completo de Porter e outros algoritmos de PLN você pode encontrar no nosso GitHub!  

Acesse clicando na imagem abaixo

Esse post foi modificado em 29 de dezembro de 2021 13:41

This website uses cookies.