Introdução ao SpaCy
SpaCy é uma biblioteca de ponta para Processamento de Linguagem Natural (NLP), projetada especificamente para uso em produção. Criada pela equipe da Explosion AI, esta biblioteca se tornou o padrão de facto para soluções industriais de NLP devido à sua alta performance, precisão e facilidade de uso.
Principais Vantagens do SpaCy
Arquitetura e Performance
SpaCy é construída na linguagem de programação Cython, o que garante uma velocidade excepcional no processamento de dados textuais. A biblioteca utiliza algoritmos e estruturas de dados otimizados, permitindo processar milhões de tokens por minuto em hardware padrão.
Suporte Multilíngue
A biblioteca suporta mais de 20 idiomas, incluindo português, inglês, espanhol, chinês, japonês, árabe e muitos outros. Cada idioma possui modelos pré-treinados especializados, otimizados para as características linguísticas específicas.
Modelos Prontos para Uso
SpaCy oferece modelos pré-treinados de diferentes tamanhos (small, medium, large), permitindo escolher o equilíbrio ideal entre velocidade e precisão para cada tarefa.
Instalação e Configuração do SpaCy
Instalação da Biblioteca Base
pip install spacy
Download dos Modelos de Idioma
Para o idioma inglês:
python -m spacy download en_core_web_sm
python -m spacy download en_core_web_md
python -m spacy download en_core_web_lg
Para o idioma português:
python -m spacy download pt_core_news_sm
python -m spacy download pt_core_news_md
python -m spacy download pt_core_news_lg
Importação e Inicialização
import spacy
# Carregar o modelo
nlp = spacy.load("pt_core_news_sm")
# Processar o texto
doc = nlp("A Apple está considerando comprar uma startup no Reino Unido.")
Componentes Principais do Pipeline do SpaCy
Tokenização
SpaCy divide automaticamente o texto em tokens, levando em conta as características do idioma, pontuação e caracteres especiais:
doc = nlp("Não se preocupe, está funcionando!")
for token in doc:
print(token.text, token.is_alpha, token.is_punct, token.like_num)
Análise Morfológica
Cada token contém informações morfológicas detalhadas:
for token in doc:
print(f"Palavra: {token.text}")
print(f"Lema: {token.lemma_}")
print(f"Classe gramatical: {token.pos_}")
print(f"Tag: {token.tag_}")
print(f"Atributos morfológicos: {token.morph}")
Análise Sintática
SpaCy constrói uma árvore de dependências para cada frase:
for token in doc:
print(f"{token.text} <- {token.dep_} <- {token.head.text}")
print(f"Filhos: {[child.text for child in token.children]}")
Lematização e Stemming
Lematização no SpaCy
SpaCy oferece lematização de alta qualidade pronta para uso:
doc = nlp("Os gatos estão correndo e pulando")
for token in doc:
print(f"{token.text} -> {token.lemma_}")
Alternativas para Stemming
Embora o SpaCy não inclua stemming diretamente, é possível integrá-lo com outras bibliotecas:
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
def add_stemming(doc):
for token in doc:
token._.stem = stemmer.stem(token.text)
return doc
# Adicionar como atributo personalizado
spacy.tokens.Token.set_extension("stem", default=None)
Reconhecimento de Classes Gramaticais
Tags POS Universais
SpaCy utiliza um sistema universal