Antes que o conhecimento seja extraído, é necessário que a qualidade do texto seja melhorada, uma vez que, os textos podem conter caracteres ou termos que não são importantes para análise. Essa etapa se chama de Pré-processamento. Para realizá-la precisamos fazer uso das técnicas de Processamento de Linguagem Natural (PLN) que segundo Liddy (2001, p.1, tradução livre) “é um conjunto
de técnicas computacionais para analisar e representar ocorrências naturais de
texto em um ou mais níveis de análise linguística, com o objetivo de se
alcançar um processamento de linguagem similar ao humano para uma série de
tarefas ou aplicações”.
Linguagem de Programação?
Para o esse exemplo utilizei a linguagem Python por ser gratuita, multiplataforma e de fácil aprendizado e bastante usada na área de Inteligência Artificial e também a biblioteca NLTK oferece recursos fáceis de usar para processamento de textos em tarefas de classificação, "tokenização", "stopwords" "stemming".
Tokenização: É a divisão do texto em partes menores. Cada parte é chamada de token e os delimitadores tanto dos tokens, como os grupos de caracteres seguem algum critério como espaço (“ “), virgulas, ponto etc.
#coding=utf-8
import nltk
texto = 'Eu tenho o meu notebook faz um ano. estou gostando muito dele até agora nenhum problema'
frases = nltk.tokenize.sent_tokenize(texto, language='portuguese')
print(frases)
>> ['Eu tenho o meu notebook faz um ano.', 'estou gostando muito dele até agora nenhum problema']
No primeiro código a separação é feita com encontrar o um ponto. O mesmo separou em duas frases.
print(texto.split(" "))
>> ['Eu', 'tenho', 'o', 'meu', 'notebook', 'faz', 'um', 'ano.', 'estou', 'gostando', 'muito', 'dele', 'até', 'agora', 'nenhum', 'problema']
Já o segundo código é mais interessante, pois pode tokenizar de acordo com os critérios citados anteriormente. A separação de frases pode nos ajudar a identificar quais palavras realmente importam nos conjuntos de textos.
Stopwords: São palavras que mais aparecem no texto sendo consideradas irrelevantes no processo de descoberta de conhecimento servindo apenas como função sintática na compreensão do assunto. Artigos, preposições, conjunções, pronomes e alguns verbos não necessitam ser indexados por possuírem frequência elevada.
A biblioteca NLTN já traz com sigo um conjunto desta palavras chamada de stoplist. Para que seja identificado as stopwords é necessário fazer a separação das palavras e depois remove-las.
stopwords = nltk.corpus.stopwords.words('portuguese')
for w in texto:
filtrado = [e for e in texto.split() if e not in stopwords]
print(filtrado)
>> ['Eu', 'notebook', 'faz', 'ano.', 'gostando', 'ate', 'agora', 'nenhum', 'problema']
No código acima foi feita a remoção das stopword com o intuito de reduzir o número de palavras deixando apenas o conteúdo relevante para ser processado na etapa de mineração.
Stemming: É a técnica que tem como objetivo reduzir palavras que se encontram em formas derivadas para sua base (radical). Um bom exemplo disso é a alteração das formas "comeremos" e "comeram" para sua base comer.
Mas se tratando do algoritmo de stemming que usa um processo heurístico que simplesmente corta as extremidades das palavras na tentativa de alcançar o radical, o algoritmo em geral não se preocupa com semântica das palavras.
stopwords = nltk.corpus.stopwords.words('portuguese')
stemmer = nltk.stem.RSLPStemmer()
for w in texto:
filtrado = [str(stemmer.stem(e)) for e in texto.split() if e not in stopwords]
print(filtrado)
>> ['eu', 'notebook', 'faz', 'ano.', 'gost', 'ate', 'agor', 'nenhum', 'problem']
Esse é o produto final após aplicação do algoritmo stemming, onde o mesmo faz um recorte nas palavras na tentativa de alcançar na maioria das vezes a forma base.
O texto já está pronto para a próxima etapa no processo de mineração de texto.