O que é o estamos felizes e como realmente funciona
Estamos felizes é um framework de análise de sentimento voltado para textos em português, especialmente útil para quem trabalha com atendimento ao cliente, monitoramento de redes sociais e pesquisas de satisfação. Ele funciona através de modelos de machine learning treinados especificamente para capturar nuances da língua portuguesa — ironia, gírias regionais, expressões idiomáticas — que ferramentas genéricas costumam perder. Não é exatamente complicado de começar a usar. Você faz o download do pacote no GitHub oficial, instala as dependências com pip e já consegue rodar uma análise básica em menos de dez minutos. O problema é que a primeira versão que lancei tinha um bug de tokenização que classficava qualquer ocorrência de "não é não" como sentimento negativo, quando na verdade é uma afirmação positiva muito brasileira. Gastei umas três horasdebuggando antes de encontrar a solução — que basicamente era adicionar regras específicas para duplas negativas no pré-processamento do texto.
Como instalar e começar a usar estamos felizes
A instalação é direta. Roda o comando abaixo no seu terminal: pip install estamos-felizes
Depois de instalado, você carrega o modelo e faz a primeira análise assim: from estamos_felizes import Analyzer
analyzer = Analyzer(lang='pt_BR') resultado = analyzer.analyze('Estou muito feliz com o resultado, realmente estamos felizes!')
print(resultado) Isso vai devolver um dicionário com score de sentimento (positivo, negativo ou neutro), confiança e as palavras que mais contribuíram para aquela classificação. A parte prática é que você pode integrar isso em scripts Python sem muita dor de cabeça. Funciona bem com dados vindos do Twitter, comentários do Instagram, reviews de produtos e até transcrições de atendimentos.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O que muita gente não sabe é que o padrão do framework só reconhece três classificações. Se você precisa de algo mais granular — como separar frustração de raiva, ou euforia de satisfação — precisa treinar seu próprio modelo por cima do existente. Aí o processo fica mais trabalhoso. Você precisa de pelo menos dois mil exemplos rotulados manualmente, o que em geral consome uns dois ou três dias de trabalho para uma equipe pequena. No meu caso, precisei disso quando estava analisando feedback de um produto de fintech. O modelo padrão classificava reclamações sobre taxas como "neutro" porque o texto vinha em tom educado. A solução foi sobrescrever a camada de features com ponderadores específicos para termos financeiros como "tarifa", "juros" e "encargos".
Pegadinhas que você precisa saber antes de usar
Primeiro: o modelo não lida bem com textos misturados. Se o usuário escreve metade em português e metade em inglês, a precisão cai pra cerca de 40%. Achei isso num projeto real quando analisei reviews de um app de entrega — os usuários iam e vinham entre idiomas sem aviso. A solução que encontrei foi fazer a detecção de idioma antes da análise e separar os textos antes de enviar pro modelo. Segundo: emoji contam, mas não da forma que você espera. O framework tem um peso fixo pra emoji de sorriso e choro, mas se você usar emoji mais obscuros — tipo aqueles de animal ou comida — ele simplesmente ignora. Pode parecer bobo, mas num teste meu com mensagens de WhatsApp de clientes idosos, isso fez diferença de 15% na precisão porque eles usavam muitos emojis que o modelo não conhecia.
Terceiro: existe um limite de tamanho de input. Textos maiores que 500 palavras são cortados. Isso acontece porque o modelo foi treinado com exemplos curtos. Se você precisa analisar transcripts longos de call center, precisa dividir em chunks menores com sobreposição. Eu faço isso com uma janela de 200 palavras e step de 100. Funciona, mas consume uns 30% a mais de memória do que o normal.
Quando não usar estamos felizes
Se você precisa de análise em tempo real com latência abaixo de 50 milissegundos por requisição, esse framework não é ideal. O processamento padrão leva entre 120 e 300ms por texto, dependendo do tamanho. Para aplicações que precisam de resposta instantânea, como chatbots ao vivo, eu recomendo usar uma API terceirizada em vez de rodar o modelo localmente. A diferença de preço é pequena se você não tiver volume alto, mas a velocidade compensa. Também não é adequado para textos muito formais ou jurídicos. O modelo foi treinado majoritariamente com linguagem coloquial de redes sociais e atendimento. Quando aparece um texto com estrutura formal, tipo um e-mail corporativo ou um documento legal, a taxa de erro sobe consideravelmente. Já vi casos onde um e-mail de reprobiação técnica foi classificado como "forte positivo" só porque continha a palavra "ótimo" no meio do texto. Aí não tem regra que conserte — o modelo simplesmente não foi feito para esse tipo de registro.
A links úteis
O repositório oficial com documentação completa, exemplos prontos e issues abertas está em github.com/estamosfelizes/framework. Lá você acha o changelog, a lista de bugs conhecidos e instruções para Contribuir com treinamento de modelos customizados. Tem também um notebook no repositório chamado "exemplos_basicos.ipynb" que mostra o uso passo a passo e já vem com um dataset de testes incluído. Se você quiser uma versão mais leve, sem as dependências pesadas de deep learning, tem um branch chamado "lite" que usa um classificador baseado em regras com precisão de cerca de 70%. Roda em qualquer máquina, não precisa de GPU e é suficiente para projetos pequenos ou protótipos rápidos. Eu mesmo usei essa versão num projeto de final de semana quando não queria configurar ambiente CUDA só pra rodar uma análise pontual.
A versão mais recente é a 2.3.1 e traz melhorias no reconhecimento de sotaques regionais brasileiros, especialmente nordestino e sulista, que antes eram classificados erroneamente com frequência. Se você trabalha com dados dessas regiões, atualize antes de começar qualquer projeto.