Como classificar palavras como substantivo, adjetivo ou verbo em português
Classe grammatical é uma das tarefas mais básicas em processamento de língua natural, mas também uma das que mais gera dor de cabeça quando você sai do padrão. A maioria das ferramentas que eu vi sendo usadas na prática falham feio em construções como "a compra foi rápida", onde compra é substantivo mas parece verbo, e rápida é adjetivo mas funciona como predicativo. Eu passei tarde da noite em 2019 depurando exatamente esse problema num pipeline de PLN para um projeto de análise de reviews de produtos.
substantivo adjetivo e verbo no dia a dia do PLN
A diferença entre essas três classes não é só teórica. Em português especificamente, a fronteira é ainda mais porosa porque temos derivação verbal abundante, nomes de ação que se confundem com substantivos, e adjetivos que podem ser usados como advérbios. Um tokenizador simples vai tratar correr, corrida e corredor como coisas completamente separadas, mas para muitos sistemas de busca e extração de entidades, fazer o mapeamento entre elas é essencial. O que eu recomendo na prática é usar um POS tagger específico para português, como o Stanford Parser com modelo treinado em treebanks brasileiros, ou o spaCy com o modelo pt_core_news_sm. A diferença de precisão entre um tagger genérico e um treinado em corpus lusófono pode variar de 96% para algo em torno de 82% em domínios como direito ou medicina, onde a terminologia foge do padrão jornalístico em que a maioria dos modelos é treinada.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Meu workaround para o problema do compra/comprar foi criar um dicionário de casos ambíguos mapeados manualmente por domínio. Eu mantive um arquivo CSV com cerca de 340 formas nominais de verbos muito frequentes em cada domínio que eu trabalhava, e rodava uma verificação pós-tagger que sobrepunha a classificação baseada no contexto imediato. O ganho foi de aproximadamente 7 pontos percentuais em F1-score em testes com dados reais, num processo que levou cerca de duas semanas para implementar e calibrar. O problema é que essa técnica não escala bem. Se você tiver cinquenta domínios diferentes, manter esses dicionários torna-se impraticável. Para problemas maiores, eu recomendo fine-tunar um modelo de linguagem pequeno, como um BERT treinado em portuguÃs, com um dataset anotado do domínio alvo. O custo computacional sobe, mas a precisão em casos ambíguos melhora consistentemente, especialmente quando o contexto sintático é o que determina a classe e não apenas a morfologia da palavra isolada.
Outro erro comum que eu vejo bastante é tentar classificar apenas pelo sufixo. A regra de que palavras terminadas em -ção são substantivos funciona na maior parte das vezes, mas falha miseravelmente em casos como atuação (substantivo), avaliação (substantivo) e construções nominais where o substantivo é derivado de verbo com suffixo diferente. Também não funciona para adjetivos que terminam em -vel ou para verbos no infinitivo que podem funcionar como substantivos, coisa extremamente comum em português. Se você está começando do zero com essa tarefa, comece com o spacy em Python. Baixe o modelo com python -m spacy download pt_core_news_sm, rode um teste com textos do domínio que você vai trabalhar, e veja onde os erros estão concentrados. Na minha experiência, cerca de 80% dos erros de POS tagging em português acontecem em três situações: verbos no infinitivo usati como substantivo, adjetivos que funcionam como advérbios, e palavras com múltiplas classes dependendo da estrutura frasica. Foque em resolver essas três first antes de tentar otimizar o resto.
A desvantagem mais importante de depender apenas de um POS tagger estatístico é que ele ignora completamente a estrutura semântica. O rápido carro versus o carro correu rápido — a palavra rápido é adjetivo na primeira e advérbio na segunda, mas alguns taggers mais simples podem marcar ambas como adjetivo porque não consideram a posição na frase e a relação com o verbo. Para resolver isso de forma mais robusta, você precisa de um analisador sintático que produza uma árvore de dependência, e aí sim você pode usar a estrutura para refinar as classes. Em resumo, classificar substantivo, adjetivo e verbo em português exige mais do que um modelo genérico aplicado cegamente. O conhecimento do domínio, o tratamento de casos ambíguos via dicionário ou fine-tuning, e o uso de análise sintática complementar são o que fazem a diferença entre um sistema que funciona em textos limpos e um que quebra na primeira frase com ambiguidade real. O trabalho extra é considerável, mas é o único jeito de chegar em números aceitáveis para uso em produção.