Aula 03 - Stemming

1- O que é o Stemming?

A linguagem natural possui diversas formas para flexionar uma palavra para que ela caiba em uma frase. É claro que essas características são determinadas de acordo com a língua que você estará utilizando. 

Pense por exemplo no verbo andar:

Andei - Ande - Andarei - Andamento, Andando - Andante...

O processo de stemização (do inglês, stemming) consiste em reduzir uma palavra ao seu radical. A palavra “meninas” se reduziria a “menin”, assim como “meninos” e “menininhos”. As palavras “gato”, “gata”, “gatos” e “gatas” reduziriam-se para “gat”. A lematização reduz a palavra ao seu lema, que é a forma no masculino e singular. No caso de verbos, o lema é o infinitivo. Por exemplo, as palavras “gato”, “gata”, “gatos” e “gatas” são todas formas do mesmo lema: “gato”. Igualmente, as palavras “tiver”, “tenho”, “tinha”, “tem” são formas do mesmo lema “ter”. A vantagem de aplicar a stemização ou lematização é clara: redução de vocabulário e abstração de significado.

Esses pré-processamentos são de cunho morfossintático, que atuam em cima de itens lexicais, ou seja, palavras. 

2- História


Existem alguns stemmers criados para várias línguas, porém um dos mais utilizados é o stemmer de porter. 


O algoritmo stemming de Porter (ou ‘Porter stemmer’) é um processo para remover as terminações morfológicas e inflexionais mais comuns das palavras em inglês. Seu uso principal é como parte de um processo de normalização de termos que geralmente é feito ao configurar sistemas de Recuperação de Informações.


C.J. van Rijsbergen, S.E. Robertson and M.F. Porter, 1980. New models in probabilistic information retrieval. London: British Library. (British Library Research and Development Report, no. 5587).

M.F. Porter, 1980, An algorithm for suffix stripping, Program14(3) pp 130−137.

Karen Sparck Jones and Peter Willet, 1997, Readings in Information Retrieval, San Francisco: Morgan Kaufmann, ISBN 1-55860-454-4.

O original lematizador foi escrito em BCPL, uma língua outrora popular, mas agora extinta. Nos primeiros anos após 1980, foi distribuído em seu formato BCPL, por meio de uma fita de papel perfurada. Versões em outras línguas logo começaram a aparecer e, em 1999, estavam sendo amplamente usadas, citadas e adaptadas. Infelizmente, havia inúmeras variações na funcionalidade entre essas versões, e essa página da Web foi criada principalmente para "corrigir o problema" e estabelecer uma versão definitiva para distribuição.

3- Como realizar o Stemming usando o NLTK

import nltk
#importa o porter stemmer
from nltk.stem import PorterStemmer

# inserimos um texto aleatório
texto = """France, in Western Europe, encompasses medieval cities, alpine villages and Mediterranean beaches. Paris, its capital, is famed for its fashion houses, classical art museums including the Louvre and monuments like the Eiffel Tower. The country is also renowned for its wines and sophisticated cuisine. Lascaux’s ancient cave drawings, Lyon’s Roman theater and the vast Palace of Versailles attest to its rich history."""
sentences = nltk.sent_tokenize(texto)
wordstokenized = nltk.word_tokenize(texto)


# Para reduzirmos um termo para sua raiz realizamos o processo de stemming - Essas palavras podem ou não ter um sentido
# por exemplo: intelligently - intelligen

# instancia o porter stemmer
stemmer = PorterStemmer()

# primeira forma => output: uma string contendo tudo junto
for i in range(len(sentences)):
    words = nltk.word_tokenize(sentences[i])
    newwords = [stemmer.stem(word) for word in words]
    sentences[i] = ' '.join(newwords)

print (sentences)
['franc , in western europ , encompass mediev citi , alpin villag and mediterranean beach .', 'pari , it capit , is fame for it fashion hous , classic art museum includ the louvr and monument like the eiffel tower .', 'the countri is also renown for it wine and sophist cuisin .', 'lascaux ’ s ancient cave draw , lyon ’ s roman theater and the vast palac of versail attest to it rich histori .']


# segunda forma => output: uma lista de palavras
newd = []
for i in range(len(wordstokenized)):
    newd.append(stemmer.stem(wordstokenized[i]))





Aula 03 - Stemming Aula 03 - Stemming Reviewed by Vinicius dos Santos on 08:46:00 Rating: 5

Nenhum comentário

Escreve ai sua opinião!