NLTK vs. SpaCy

NLTK vs. SpaCy
Igor Nascimento Alves
Igor Nascimento Alves

Compartilhe

Para trabalhar com texto no âmbito computacional precisamos fazer diversos tratamentos nos dados. Isso ocorre porque para utilizarmos os dados em modelos e para extrairmos informações precisamos transformá-los. Para facilitar esses processos temos algumas bibliotecas que vão simplificar a aplicação de diversas técnicas e facilitar seu uso. Hoje iremos conhecer as duas principais do mundo do Processamento de Linguagem Natural (PLN ou NLP em inglês), a SpaCy e a NLTK.

Balança romana, com um ponto de interrogação em cada um de seus lados. Ela está pendendo para o lado direito.

NLTK significa Natural Language Toolkit, que é algo como uma caixa de ferramentas para linguagem natural. Essa biblioteca foi desenvolvida na universidade da Pennsylvania e é totalmente voltada para o contexto acadêmico. Ela contém vários algoritmos já implementados para resolver os mais diversos tipos de tratamento. Uma característica da NLTK é que ela foi construída como um manipulador de listas e strings, isso quer dizer que, ela recebe uma string ou lista, faz transformações e depois retorna também os mesmo tipos.

Já o SpaCy foi desenvolvido pensando em aplicações reais, mas o que isso quer dizer?

Bom, ele não vai te fornecer 10 algoritmos diferentes para resolver o mesmo problema, sendo que já foi demonstrado em estudos qual é o mais eficaz. Outro ponto é que o SpaCy faz uso das melhores práticas de engenharia de software visando entregar a performance mais adequada para o ambiente de produção.

O SpaCy trabalha com a abordagem de orientação a objetos, isso quer dizer que você vai criar um objeto com seu texto e a partir dele poderá chamar os métodos de transformação dos seus dados.

Um procedimento bastante utilizado quando trabalhamos com dados textuais é a tokenização. A tokenização é o processo de separação de um trecho de texto em unidades menores chamadas tokens. Para exemplificar, vamos utilizar a técnica de tokenização para verificar as diferenças e semelhanças de se utilizar as bibliotecas SpaCy e NLTK. Vamos lá!?

SpaCy

Primeiro vamos salvar uma frase na variável text.

text = '"You only live once, but if you do it right, once is enough."'

Agora vamos utilizar o SpaCy, para isso devemos importar o pacote spacy e carregar o pipeline em inglês.

import spacy
nlp = spacy.load("en_core_web_sm")

Depois vamos criar o objeto Doc, que tem como valor de construtor o texto da variável text.

doc = nlp(text)

Por fim, já podemos iterar sobre o objeto Doc e passar por cada **token* criado, acessando seu valor pelo atributo .text**.

lst = []
for token in doc:
    lst.append(token.text)
print(lst)

Saída:

['"', 'You', 'only', 'live', 'once', ',', 'but', 'if', 'you', 'do', 'it', 'right', ',', 'once', 'is', 'enough', '.', '"']
Banner da Alura em fundo dinâmico azul, sugerindo tecnologia e modernidade para o Quizz Jornada Tech. À esquerda, em letras grandes, 'Quizz Jornada Tech' seguido por 'Teste seus conhecimentos em tecnologia e prepare-se para o próximo nível da sua carreira'. À direita, conectados por uma linha azul suave representando uma trilha, os tópicos: programação, front-end, inteligência artificial, ciência de dados, inovação e gestão. No final da trilha, um botão azul convidando a 'começar agora'. No canto superior direito, o logo da Alura. Clique e inscreva-se já!

NLTK

Agora vamos fazer a mesma coisa utilizando a NLTK:

Primeiro importamos a NLTK e fazemos o download do punkt o modelo de tokenização.

import nltk
nltk.download('punkt')

Depois importamos a função word_tokenize.

from nltk.tokenize import word_tokenize

Por fim, utilizamos a função enviando a frase que estão na variável text.

print(word_tokenize(text))

Saída:

['``', 'You', 'only', 'live', 'once', ',', 'but', 'if', 'you', 'do', 'it', 'right', ',', 'once', 'is', 'enough', '.', "''"]

Obtivemos os mesmos resultados nesse caso. Vale notar que em ambos os casos houve a necessidade de fazer download de uma parte específica da toolbox, isso porque ambas têm a preocupação de não baixar diversos modelos que não serão utilizados no seu projeto, então você pode escolher quais baixar.

Uma diferença que podemos destacar é em como as bibliotecas interagem com seu texto. Na NLTK o usuário fica com a responsabilidade de fornecer o texto e guardar seu retorno. Já no SpaCy, com sua abordagem OO, depois de receber o texto, o usuário pode só se preocupar em utilizar os diversos recursos contidos no objeto.

Para ver mais sobre as diferenças na aplicação destas bibliotecas recomendo o artigo Lemmatization vs. stemming: quando usar cada uma? onde temos outro exemplo aplicando ambas as bibliotecas.

Então, embora a NLTK possua uma infinidade de implementações de soluções, a estratégia do SpaCy de ter apenas as melhores soluções para cada problema traz uma facilidade para o desenvolvedor e para o ambiente de prototipação e produção. Avaliando as bibliotecas e suas propostas, fica claro que a melhor aplicação da NLTK fica para o ambiente acadêmico e de pesquisa no campo do NLP, enquanto o SpaCy deve ser usado quando estivermos construindo protótipos e visando uma aplicação real e em escala.

Para verificar o que estudamos nesse artigo, você pode consultar o notebook que exemplifica o explicado aqui.

Igor Nascimento Alves
Igor Nascimento Alves

Sou graduado em Ciência da Computação. Atuo como instrutor de Data Science e Machine Learning no Grupo Alura, tendo como principais interesses na tecnologia: criação de modelos e análise de dados. Nas horas vagas assisto e analiso dados de basquete e adoro ouvir podcasts de humor como Nerdcast e Jujubacast.

Veja outros artigos sobre Data Science