Esta Api foi criada para classificar em temas e subtemas denúcias na forma de textos escritos. As denúcias são provenientes da Ouvidoria do MPRJ e foram utilizadas para treinar um modelo multilabel por meio do PyTorch.
As denúcias são classificas em dezessete temas e subtemas.
- 'Ambiente',
- 'Cidadania',
- 'Civil',
- 'Consumidor',
- 'Criminal',
- 'Deficiência',
- 'Educação',
- 'Eleitoral',
- 'Execução penal',
- 'Família',
- 'Idoso',
- 'Infância infracional',
- 'Infância não infracional',
- 'Mulher',
- 'Outros',
- 'Prisional',
- 'Saúde',
- 'Urbanística'.
Esta API dispõe de um Webapp gerado no streamlink. Os códigos e mais detalhes podem ser obtidos através de sua pasta no github.
A API realiza 4 operações principais a partir de post's nas dadas url's. Essas operações são: Cadastramento, liberação de token, classifiação de temas e subtemas.
Pode-se caracterizar o fluxo de trabalho a partir do exemplo abaixo:
import requests
import pandas as pd
import json
########################################
#### Criando um registro de usuário ####
########################################
reg_url = "https://api-ouvidoria.herokuapp.com/register"
payload = '{
"username":<your-username>,
"password":<your-password>,
"acesso":2}'
headers = {'Content-Type': 'application/json'}
response = requests.request("POST", reg_url, headers=headers, data = payload)
print(response.text.encode('utf8'))
################################################################
#### Gera o token para enviar a requisição de classificação ####
################################################################
token_url = "https://api-ouvidoria.herokuapp.com/auth"
payload = '{"username": "Inova","password":"inova*mprj1"}'
response = requests.request("POST", token_url, headers=headers, data = payload)
print(response.text.encode('utf8'))
##################################
#### Classifica tema do texto ####
##################################
tema_url = "http://api-ouvidoria.herokuapp.com/ouvidoria"
headers = {
'texto': '<texto>',
'Authorization': 'JWT <token>'
}
response = requests.request("POST", tema_url, headers=headers)
print(response.text.encode('utf8'))
#Resultado no formato de Dataframe
resultado_json = json.loads(response.text)
df = pd.DataFrame({"Promotoria": resultado_json["temas"],"Probabilidade":resultado_json["p"]})
######################################
#### Classifica subtema do texto #####
######################################
url = "http://api-ouvidoria.herokuapp.com/ouvidoria/temas"
headers = {
'texto': '<texto>',
'tema': '<tema>',
'Authorization': 'JWT <token>'
}
response = requests.request("POST", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
#Resultado no formato de Dataframe
resultado_json = json.loads(response.text)
df = pd.DataFrame({"Promotoria": resultado_json["temas"],"Probabilidade":resultado_json["p"]})
É necessário solicitar um dos temas exatamente como escrito abaixo:
- 'ambiente',
- 'cidadania',
- 'civil',
- 'consumidor',
- 'criminal',
- 'deficiencia',
- 'educacao',
- 'eleitoral',
- 'exec_penal',
- 'familia',
- 'idoso',
- 'infa_infra',
- 'infa_n_infra',
- 'mulher',
- 'outros',
- 'prisional',
- 'saude',
- 'urbanistica'.
A presente API utiliza-se do Método OAuth para autenticação dos acessos. Logo, é necessário realizar um cadastro inicialmente, gerando um login e uma senha. Em seguida, é necessário fazer a requisição de um token que poderá ser utilizado por 30 minutos. Este token é gerado pelo método Flask_jwt.
Os tokens são necessários para o acesso dos métodos que geram a classificação dos temas("https://api-ouvidoria.herokuapp.com/ouvidoria") e subtemas("https://api-ouvidoria.herokuapp.com/ouvidoria/temas").
reg_url = "https://api-ouvidoria.herokuapp.com/register"
payload = '{
"username":<your-username>,
"password":<your-password>,
"acesso":2}'
headers = {'Content-Type': 'application/json'}
response = requests.request("POST", reg_url, headers=headers, data = payload)
print(response.text.encode('utf8'))
token_url = "https://api-ouvidoria.herokuapp.com/auth"
payload = '{"username":<your-username> ,"password":<your-password>}'
response = requests.request("POST", token_url, headers=headers, data = payload)
print(response.text.encode('utf8'))
- Flask,
- sentencepiece,
- ninja,
- fastai
- numpy,
- Boto3,
- Flask-JWT,
- Flask-RESTful,
- FLask-SQLAlchemy,
- DateTime,
- xlrd,
- uwsgi,
- pytorch.
As versões empregadas encontram-se no arquivo requirements.txt para facilitação da instalação.
Este protótipo foi produzido pelo laboratório de Inovação do MPRJ, o INOVA_MPRJ. A equipe de ciência de dados é constituida por: Matheus Donato que desenvolveu este projeto, Bernardo Baron, Estevan Augusto.
