Pré-processamento de textos
Este é o processo padrão usado em praticamente todas as anotações relacionadas à NLP:
- limpar o texto:
- remover pontuação, acentos, e stop-words [1]
- colocar tudo em minúsculas
- converter numa lista de termos usados.
A única excessão é com o TF-IDF e LSA e comparo quando o processamento é feito dividindo em parágrafos e com o texto inteiro de uma vez.
Sempre usarei textos da wikipédia, pelo simples motivo de ser muito prático e inteiramente legal.
bibliotecas usadas
%pylab inline import nltk import gensim import wikipedia
No Jupyter notebook o comando %pylab importa o matplotlib e numpy e configura o modo como os gráficos serão apresentados, ocasionalmente também usarei o Altair junto com o Pandas para visualizar os dados.
Pré-processamento
Explicando as etapas do código acima:
linhas 6 e 7: | lista de stop-words, como no texto há termos em inglês, juntei as duas listas (termos em português e em inglês) numa só. |
---|---|
for: | splitlines vai dividir o texto em parágrafod e a função simple_preprocess() do Gensim remove pontuação e converte tudo para minúsculas, em seguida removo as stop words e por último adiciono o parágrafo à lista de sentenças usadas no texto. |
Facilitando as coisas
Para dar maior foco ao que importa, salvei a lista de termos usando o pickle:
import pickle # salvando em arquivo with open("sentences.pickle", "wb") as f: pickle.dump(sentences, f) f.close() # lendo do arquivo sentences = pickle.load( open("sentences.pickle", "rb") )
footnotes
[1] | stop words são as palavras sem valor semântico ao que pretendemos fazer, são palavras como "eu", "está", "era", "têm", etc. São palavras de uso tão comum e frequente que acabaria por ofuscar a presença de palavras mais relevantes no processo de classificação de textos por exemplo, afinal para saber o sentido de frases como "Alan Turing é o pai da ciência da computação" basta apenas as palavras ["Alan", "Turing", "pai", "ciência", "computação"], isso é o que basta para uma máquina. |
Nota
link para o código
Comentários
Comments powered by Disqus