[Algoritmos] [PLN#4] Pre-processamento de texto: Stemmer




Pré-processamento

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. 

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






[Algoritmos] [PLN#4] Pre-processamento de texto: Stemmer [Algoritmos] [PLN#4] Pre-processamento de texto: Stemmer Reviewed by Vinicius dos Santos on 11:10:00 Rating: 5

Nenhum comentário

Escreve ai sua opinião!