Skip to content

Repository files navigation

API CLASSIFICAÇÃO DE TEMAS OUVIDORIA

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.

Os temas disponíveis

  • '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'.

WebApp

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.

Guia Rápido

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:

1) Cadastramento

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'))

Liberação de token

################################################################
#### 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'))

Classifiação de temas

##################################
#### 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ção de Subtemas

######################################
#### 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'.

Autenticação da API

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").

Cadastro

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'))

Solicitação do token


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'))

Bibliotecas utilizadas na API

  • 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.

Créditos

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.

logo_inova

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages