NLTK Tutorial

Lady Aurora
7 min readJan 17, 2020

--

Sejam bem vindos, esperamos que esse tutorial consiga resumir os principais tópicos sobre NLTK e esclarecer quaisquer possíveis dúvidas que venham a surgir durante o exercício final. Caso ainda estejam com problemas na resolução sintam-se à vontade para entrar em contato com o grupo por email.

O QUE É?

NLTK (Natural Language ToolKit) é uma biblioteca de Python utilizada para natural language processing (NLP), que é, de forma resumida, o processo para desenvolver algoritmos capazes de “entender” a linguagem humana. Atividades simples para nós, como resumir um texto, associar palavras que têm alguma relação, como pássaro e ninho, ou dizer quem é que está praticando a ação descrita pelo verbo tornam-se muito mais complicadas quando pretendemos passar essas tarefas para uma máquina.

Para facilitar esse trabalho foram desenvolvidas plataformas como a NLTK que tem como objetivo proporcionar as ferramentas necessárias para estudos e pesquisas na área, além de ser utilizada para ensinar NLP e temas relacionados.

Mais detalhes:

Desenvolvido por: Steven Bird, Edward Loper e Ewan Klein

Ano de lançamento: 2001

Disponível para Windows, Mac OS X e Linux. É um projeto gratuito e de código aberto (open source). Site oficial https://www.nltk.org/

COMO INSTALAR?

Iremos dar uma pequena explicação sobre como instalar o NLTK no Python antes de começarmos a demonstrar o que pode ser feito com o auxílio dessa biblioteca.

  • Primeiramente certifique-se de ter o Python instalado e em alguma dessas versões: 2.7, 3.5, 3.6 ou 3.7 com o pacote pip (você pode procurar o arquivo na pasta Scripts para se certificar ou escrever o comando pip — version)
  • Se você estiver usando Mac ou Linux talvez tenha que baixar o pip por fora, mais informações em: https://packaging.python.org/tutorials/installing-packages/
  • Se não tiver o Python baixado vá no site https://www.python.org/downloads/, baixe o Python em alguma das versões acima escolha a instalação customizada e selecione todas as opções, se desejar vá em opções avançadas e modifique o local de download.
fonte: https://www.guru99.com/download-install-nltk.html
  • Posteriormente procure o endereço onde o arquivo pip foi salvo (pasta Scripts) e o copie
fonte: https://www.guru99.com/download-install-nltk.html
  • Depois abra o terminal, escreva o endereço da pasta Scripts e decida qual das alternativas se encaixa na sua situação:

(No lugar de pip usar pip2 para Python 2 e pip3 para o Python 3)

  1. Ubuntu

Para instalar no Ubuntu escreva no terminal:

>>> sudo pip install -U nltk

2. Windows

Para instalar no Windows baixe diretamente pelo site https://pypi.org/project/nltk/#files ou escreva no terminal:

>>> pip install nltk

3. Mac

Para instalar no Mac escreva no terminal:

>>> pip install — user -U nltk

Observação:

Versões mais antigas de Python podem necessitar de mais etapas para instalação, caso se encontre com esse problema ou deseje mais informações sobre o processo de instalação você pode acessar: https://www.nltk.org/install.html

fonte: https://www.guru99.com/download-install-nltk.html
  • Outra opção disponível é instalar através do anaconda digitando no prompt:

>>> conda install -c anaconda nltk

  • Para verificar sua instalação e ir para o próximo passo importe o nltk usando o comando:

>>> import nltk

  • Para abrir opções de download digite:

>>> nltk.download()

  • Escolha uma das opções, se desejar baixar todos os dados escolha a primeira opção. O popular normalmente é o suficiente para atividades iniciais. Baixe-o também com o comando nltk.download(‘popular’). Para mais informações acesse: http://www.nltk.org/data.html
fonte: https://data-flair.training/blogs/nltk-python-tutorial/

APLICAÇÕES

O NLTK fornece classes básicas para representar dados relevantes ao processamento de texto; interfaces padrão para executar tarefas, análise sintática e classificação textual.

Algumas funções que você pode usar nesta biblioteca são:

fonte: https://devopedia.org/images/article/230/7883.1572189822.png

PRIMEIROS PASSOS

  • Primeiramente vamos aprender a tokenize, ou seja, separar seu texto em partes menores.

Aqui está um passo a passo de como separar por frases:

>>> text=”Estamos aprendendo a usar essa biblioteca. Esperamos sair deste tutorial sabendo o básico. Bons estudos a todos!”

>>> from nltk.tokenize import sent_tokenize

>>> print(sent_tokenize(text, “portuguese”))

Resultado: {“Estamos aprendendo a usar essa biblioteca.”; “ Esperamos sair deste tutorial sabendo o básico.”;”Bons estudos a todos!”}

Você não deve ter problemas com vírgulas, pontos ou pronomes de tratamento como Sr. e Sra nem em dividir sentenças de outras línguas que o NLTK é capaz de interpretar, contanto que especifique como no exemplo ou modifique o padrão. O que pode ocorrer são erros em abreviações.

Vamos ver a separação por palavras:

>>> print(nltk.word_tokenize(text, “portuguese”))

Resultado: {“Estamos”; “aprendendo”; “a”; “usar”; “essa”; “biblioteca”;”.”; “Esperamos”; “sair”; “deste”; “tutorial”; “sabendo”; “o”; “básico”; “.” ; ”Bons”; “estudos”; “a”; “todos”; “!” }

  • Podemos também achar sinônimos e suas definições

>>> from nltk.corpus import wordnet

>>> sin = wordnet.synsets(‘love’)

>>> print(sin)

O resultado será uma lista de palavras sinônimas a que você escolheu. Para buscar a definição determine a posição do sinônimo que quer saber a definição e escreva

>>> print(sin[posição].definition())

Para ter acesso a exemplos de aplicação dessa palavra coloque

>>> print(sin[posição].examples())

  • Stemming é remover os afixos da palavra, a reduzindo a uma forma mais simples. O stem (tronco) não precisa ser idêntico à raiz morfológica da palavra.
fonte:https://sites.google.com/a/campus.ul.pt/palavras-lidas/o-continuo-sonoro/a-palavras-simples-e-palavras-complexas

>>> from nltk.stem import PorterStemmer

>>> stemmer = PorterStemmer()

>>> print(stemmer.stem(‘loving’))

Resultado: {love}

Para usar essa ferramenta para outras línguas faça:

>>> SnowballStemmer.languages

disponiveis: (‘arabic’, ‘danish’, ‘dutch’, ‘english’, ‘finnish’, ‘french’, ‘german’, ‘hungarian’, ‘italian’, ‘norwegian’, ‘porter’, ‘portuguese’, ‘romanian’, ‘russian’, ‘spanish’, ‘swedish’)

>>> rom_stemmer = SnowballStemmer(‘portuguese’)

>>> print(rom_stemmer.stem(‘dançando’))

Resultado: {danç}

Esse método, contudo, pode devolver palavras incorretas, como no exemplo acima, portanto se usa mais lemmatizing para fazer a mesma função

>>> from nltk.stem import WordNetLemmatizer

>>> lem = WordNetLemmatizer()

>>> print(lem.lemmatize(‘believes’))

Resultado: {belief}

  • Outro processo muito utilizado no análise de texto é a identificação e, normalmente, separação das stopwords que são termos que não agregam assunto ao texto, como pronomes, conectivos, etc.

Lista de stopwords:

>>> from nltk.corpus import stopwords

>>> stopwords.words(‘portuguese’)

Retirando-as de um textos:

>>> stw = set(stopwords.words(‘portuguese’))

>>> from nltk.tokenize import word_tokenize

>>>palav = word_tokenize(text)

>>>filtro = [ ]

>>> for p in palav:

if p not in stw:

filtro.append(p)

>>> print(filtro)

  • Classificar de palavras nas seguintes categorias pode ser feito desse modo:
fonte: https://data-flair.training/blogs/nltk-python-tutorial/

>>> from nltk.tokenize import PunktSentenceTokenizer

Armazene seu texto em uma variável para facilitar o processo, a separe em palavras usando a lógica já explicada nos tópicos anteriores e guarde essas palavras em uma lista desse modo:

>>> palavras = nltk.sent_tokenize(texto)

Depois navegue nessa lista imprimindo na tela cada palavra seguido por sua classificação

>>> for palav in palavras:

print(nltk.pos_tag(nltk.word_tokenize(palav)))

Resultado: Deve mostrar cada palavra da seguinte forma {(‘I’, ‘PRP’)}

ATIVIDADE RESOLVIDA

Vamos demonstrar mais funcionalidades dessa ferramenta com esse exercício resolvido

  1. Utilize um texto do nltk ou oriundo da internet e realize o pré processamento, posteriormente use a ferramenta para resumir o texto escolhido.

Para essa atividade é necessário instalar outra ferramenta:

pip install beautifulsoup4

# importando texto de site online :

from urllib.request import Request, urlopen

link = Request(‘http://ultimosegundo.ig.com.br/politica/2017-04-25/reforma-da-previdencia.html',headers={'User-Agent': ‘Mozilla/5.0’})

pagina = urlopen(link).read().decode(‘utf-8’, ‘ignore’)

from bs4 import BeautifulSoup

soup = BeautifulSoup(pagina, “lxml”)

texto = soup.find(id=”noticia”).text

from nltk.tokenize import word_tokenize

from nltk.tokenize import sent_tokenize

# separando nosso texto em frases e em palavras

sentencas = sent_tokenize(texto)

palavras = word_tokenize(texto.lower())

# texto.lower() para mudar todas as palavras para minúsculas (útil na contagem de frequência)

# Importando stopwords e pontuações

from nltk.corpus import stopwords

from string import punctuation

# Fazendo uma lista com as stopwords e pontuações:

stopwords = set(stopwords.words(‘portuguese’) + list(punctuation))

# Tirando as stopwords e pontuações ao criar uma lista sem os elementos da lista anterior:

palavras_sem_stopwords = [palavra for palavra in palavras if palavra not in stopwords]

# Importando ferramenta para calcular frequência

from nltk.probability import FreqDist

# Fazendo um dicionário com cada palavra da lista e sua frequência

frequencia = FreqDist(palavras_sem_stopwords)

# Importando dicionário

from collections import defaultdict

# Criando um dicionário com o número inteiro 0 como padrão para as chaves não existentes (se solicitada retorna 0, ou seja se buscar a frequência de uma palavra que não está no texto a resposta é 0)

sentencas_importantes = defaultdict(int)

# Preenchendo dicionário:

#Para cada uma das frases do texto (onde cada frase está sendo numerada) dividimos essa frase em palavras (como feito no início)

for i, sentenca in enumerate(sentencas):

for palavra in word_tokenize(sentenca.lower()):

# Se esta palavra estiver em frequência (ou seja se ela não for stopwords ou pontuação)

if palavra in frequencia:

# Adicionamos a sentencas_importantes na posição i o valor da frequência da palavra

sentencas_importantes[i] += frequencia[palavra]

# Importando ferramenta para separar os maiores valores

from heapq import nlargest

# Separando as 4 palavras mais frequentes (posição na lista)

idx_sentencas_importantes = nlargest(4, sentencas_importantes, sentencas_importantes.get)

# Imprimindo em ordem crescente (sorted) a aparição das palavras mais frequentes criando assim um resumo do texto

for i in sorted(idx_sentencas_importantes):

print(sentencas[i])

FAÇA VOCÊ MESMO

Utilize um texto do nltk ou oriundo da internet, realize o pré processamento do texto, remova stopword e retorne uma lista com as palavras mais importantes e a frequência delas.

Dica: Utilize o cálculo de frequência explicado acima a seu favor. Boa atividade!

EQUIPE E FORMAS DE CONTATO

ERICO ANDRE SILVA, ericoandresilva@gmail.com

JEN HORNG LIU, liujenhorng@gmail.com

JOÃO UCHOA, joaopcu@gmail.com

MAELY SOUZA COUTINHO, maelyalways@gmail.com

VIVIANE ARAÚJO, viviane.baraujo1997@gmail.com

Fontes:

http://www.nltk.org/

https://data-flair.training/blogs/nltk-python-tutorial/

http://www.nltk.org/howto/portuguese_en.html

https://kite.com/python/docs/nltk.FreqDist

https://medium.com/@viniljf/utilizando-processamento-de-linguagem-natural-para-criar-um-sumariza%C3%A7%C3%A3o-autom%C3%A1tica-de-textos-775cb428c84e

https://www.guru99.com/download-install-nltk.html

https://www.geeksforgeeks.org/python-pandas-dataframe-nlargest/

https://data-flair.training/blogs/python-stemming/

https://www.programiz.com/python-programming/methods/built-in/sorted

--

--