Classifica titulo+resumo de teses/dissertacoes brasileiras na grande area de avaliacao CAPES, a partir do texto (portugues).
Project description
texto2area
Biblioteca Python que classifica o título e/ou resumo de uma tese/dissertação brasileira em uma das 9 grandes áreas de avaliação CAPES, a partir do texto — ponta a ponta: recebe texto cru em português e faz normalização, lematização, n-gramas e classificação.
from texto2area import classificar
area, margens, termos = classificar(
"A atuação do enfermeiro no cuidado ao paciente idoso em saúde coletiva."
)
# area -> 'CIÊNCIAS DA SAÚDE'
# margens -> [('CIÊNCIAS DA SAÚDE', 1.28), ('CIÊNCIAS BIOLÓGICAS', -1.0), ...]
# termos -> ['saúde_coletivo', 'enfermeiro', 'paciente', 'cuidado']
Instalação
pip install texto2area
python -m spacy download pt_core_news_lg # modelo de lematização (~568 MB), obrigatório
Versão de desenvolvimento (GitHub): pip install git+https://github.com/reneveloso/texto2area
Ou, a partir de um clone: pip install .
Uso pretendido e domínio de validade
- Idioma: português. Para textos em outro idioma, traduza antes (a tradução não é embutida — exigiria um modelo pesado).
- Domínio: teses e dissertações (título/resumo), 2013–2024 (Catálogo Sucupira). Fora disso (outros gêneros, outras taxonomias) o desempenho não é garantido.
- Saída: grande área + margens (
decision_function) por classe + termos do texto que mais pesaram na decisão (interpretabilidade do modelo linear).
Como funciona (fiel ao pipeline de treino)
- Normalização (NFC, limpeza, colapso de espaços).
- Lematização com spaCy
pt_core_news_lg, mantendo POS de conteúdo (NOUN, PROPN, ADJ, VERB), lema minúsculo,len>=2. - Injeção de n-gramas: bi/trigramas adjacentes unidos por
_, mantidos os que existem no vocabulário do modelo (85% das 359.402 features são n-gramas). - TF-IDF (
sublinear_tf,min_df=50) +LinearSVC(one-vs-rest,class_weight='balanced').
Desempenho (avaliação em conjuntos retidos)
| Protocolo | Acurácia | F1-macro | Baseline (maj.) |
|---|---|---|---|
| In-distribution (split 80/20) | 0,792 | 0,791 | 0,165 |
| Out-of-time (treino ≤2023, teste 2024) | 0,729 | 0,732 | 0,170 |
F1 por área varia de Linguística/Letras/Artes 0,879 e Saúde 0,860 a Multidisciplinar 0,549 (classe difusa, sem vocabulário próprio). O artefato é treinado em 100% dos dados (1.017.727 documentos); as métricas vêm dos protocolos de avaliação.
Limitações
- Rótulo administrativo como verdade-base (parte dos "erros" é interdisciplinaridade real).
- Multidisciplinar pouco separável (F1 0,549).
- Não distingue as ~49 áreas de avaliação finas (apenas as 9 grandes áreas).
- Português apenas (sem tradução embutida).
Segurança
O modelo é carregado via joblib, que executa código ao desserializar. Use apenas
os artefatos versionados neste repositório ou de fonte confiável.
Reprodução
Ver reproduzir/REPRODUCAO.md. O treino é determinístico
(SEED=42); o corpus (Sucupira) não é redistribuído.
Como citar
Ver CITATION.cff. DOI do Zenodo a ser adicionado.
Licença
MIT © 2026 Renê R. Veloso.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file texto2area-0.1.1.tar.gz.
File metadata
- Download URL: texto2area-0.1.1.tar.gz
- Upload date:
- Size: 29.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f63d871f7026c2d858d6e1f88a9056e128d9c20ece09a3c4b421a82a536ba0a7
|
|
| MD5 |
0e43b3ab0140b72bb92ac4dcfc84fba5
|
|
| BLAKE2b-256 |
b08446510c2a9320e5fc90c3ab769089ee40004c712d5d199fdf09d024ae436b
|
Provenance
The following attestation bundles were made for texto2area-0.1.1.tar.gz:
Publisher:
publish.yml on reneveloso/texto2area
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
texto2area-0.1.1.tar.gz -
Subject digest:
f63d871f7026c2d858d6e1f88a9056e128d9c20ece09a3c4b421a82a536ba0a7 - Sigstore transparency entry: 2026964263
- Sigstore integration time:
-
Permalink:
reneveloso/texto2area@7510a1f9d82532931136155bff287df47e427a2d -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/reneveloso
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7510a1f9d82532931136155bff287df47e427a2d -
Trigger Event:
release
-
Statement type:
File details
Details for the file texto2area-0.1.1-py3-none-any.whl.
File metadata
- Download URL: texto2area-0.1.1-py3-none-any.whl
- Upload date:
- Size: 29.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d2367d4ff3227e9bde786ee0dbc5b0ac3c640442471e1b9b3e4a96db67d4fb7
|
|
| MD5 |
a42b4a800f63c5620fdd2fecd2a6ae3e
|
|
| BLAKE2b-256 |
ac322a1f37868d78f7f37fc407586b676880c75359af7fb9bc608e2fe4664759
|
Provenance
The following attestation bundles were made for texto2area-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on reneveloso/texto2area
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
texto2area-0.1.1-py3-none-any.whl -
Subject digest:
6d2367d4ff3227e9bde786ee0dbc5b0ac3c640442471e1b9b3e4a96db67d4fb7 - Sigstore transparency entry: 2026964331
- Sigstore integration time:
-
Permalink:
reneveloso/texto2area@7510a1f9d82532931136155bff287df47e427a2d -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/reneveloso
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7510a1f9d82532931136155bff287df47e427a2d -
Trigger Event:
release
-
Statement type: