Ferramenta para busca de temas associados a um recurso especial
Contextualização
Como funciona?
Como o sistema está organizado?
Tecnologias Envolvidas
Manual do Usuário
Manual do Desenvolvedor (1/2) - Instalação e Execução da Interface
Manual do Desenvolvedor (2/2) - Instalação e Execução do Back-end
Extremamente relevantes para garantir o justo curso do processo legal e o direito à ampla defesa, os recursos são utilizados para contestar decisões judiciais. No contexto jurídico brasileiro, recursos especiais são uma categoria à parte desses mecanismos expressa na Constituição Federal vigente e regulamentada pelo Código de Processo Civil de 2015. São de competência do Superior Tribunal de Justiça (STJ), cuja função é tornar uniforme a interpretação da lei federal.
Emitir um recurso especial requer que a decisão contestada tenha passado, anteriormente, por todas as instâncias ordinárias, isto é, seja emitida por um tribunal de segunda instância. O tribunal de origem deve verificar – antes de encaminhar ao STJ – se o recurso é válido e atende aos requisitos; para isso, deve consultar os "temas", que representam decisões já estabelecidas pelo STJ.
Os temas são importantes consolidações da jurisprudência; as interpretações estabelecidas que representam facilitam o entendimento das leis e servem de referência para futuras decisões de todos os tribunais do país.
O analista judiciário anexa uma lista de temas e um arquivo do caso; o BuscaTema, então, retorna alguns desses temas juntamente com a probabilidade de cada um descrever a situação do caso. Para o profissional, a ferramenta representa agilidade através da automação; uma grande quantidade de tempo que seria despendida nessa tarefa pode ser direcionada a tarefas mais importantes. O recurso não anula a necessidade de avaliação humana, mas agiliza e direciona o profissional.
Em versões futuras, a ferramenta permitirá o acompanhamento do processo de análise por parte do analista e o envio de imagens do processo para posterior leitura OCR.
Dois servidores são utilizados: o primeiro gerencia os pedidos para análise e o segundo é de fato o responsável pelo processamento computacional.
A aplicação consiste em duas partes: uma Single-Page Application (SPA) escrita em React, um framework javascript, e um servidor intermediário, em Flask, uma biblioteca python. O processamento referente a casos judiciais acontece em um terceiro módulo, que ainda não faz parte desse repositório.
No momento, o servidor intermediário armazena os arquivos enviados pelo usuário e envia uma resposta hard-coded. A aplicação que de fato processa os documentos está sendo refinada e a integração está prevista para acontecer em breve. A ideia, no entanto, é manter as interfaces para que não sejam necessárias modificações adicionais.
Devem ser utilizadas as versões mais recentes do Node.JS e Python que tenham suporte ativo.
A aplicação consiste em duas partes principais: uma Single-Page Application (SPA) escrita em React, um framework javascript para a construção de interfaces de usuário, e um backend implementado em Flask, uma biblioteca python. O backend recebe dois arquivos CSV contendo casos judiciais e uma lista de temas, realiza o processamento dos dados e gera sugestões de temas relevantes para cada caso. O frontend, por sua vez, exibe essas sugestões ao usuário.
O backend Flask, neste momento, desempenha as seguintes funções:
- Recebimento de Arquivos: Ele recebe os arquivos CSV enviados pelo usuário através do frontend React, sendo um contendo casos judiciais e outro contendo uma lista de temas.
- Validação e Armazenamento: Realiza a validação dos arquivos recebidos (verificando se são do tipo CSV e se possuem conteúdo) e os armazena no sistema de arquivos local.
- Comunicação com o Módulo de Processamento: Executa o script
sugereTema.py
, passando os arquivos como argumentos. - Resposta ao Frontend: Após a execução do script de processamento, o backend envia uma resposta ao frontend, indicando sucesso ou falha na operação.
O frontend React é responsável por:
- Interface de Upload: Fornece uma interface para o usuário fazer o upload dos arquivos
- Envio dos Arquivos: Utiliza uma requisição POST para enviar os arquivos para o endpoint do backend Flask.
- Exibição de Sugestões: Após o processamento no backend, recebe e exibe as sugestões de temas na interface do usuário, ordenadas por relevância.
- Tratamento de Tempo Limite: Se o processamento no backend exceder o tempo limite de 80 segundos, exibe um texto pré-definido contendo um exemplo de sugestões de temas.
O script sugereTema.py
, por sua vez, executa as seguintes etapas principais:
- Pré-processamento dos Dados:
- Lê os arquivos 1 (casos judiciais) e 2 (lista de temas).
- Realiza a limpeza e pré-processamento dos textos, removendo pontuações, stop words e outros elementos irrelevantes.
- Aplica técnicas de processamento de linguagem natural (PLN) para preparar os dados para a próxima etapa.
- Geração de Embeddings:
- Utiliza um modelo de Sentence-BERT pré-treinado para gerar embeddings (representações vetoriais) dos textos dos casos judiciais e dos temas.
- Esses embeddings capturam o significado semântico dos textos, permitindo a comparação e identificação de similaridades entre eles.
- Criação de Resumos:
- Executa o script
createTopics.py
para criar resumos dos casos judiciais, utilizando uma estratégia baseada em LexRank guiada por uma lista de temas e com um limite de 15 sentenças.
- Executa o script
- Cálculo de Similaridade:
- Executa o script
calcSimilarity.py
para calcular a similaridade entre os resumos dos casos judiciais e os temas, utilizando o algoritmo BM25. - Gera um arquivo CSV (
CLASSIFIED_TOPICS_X15CLEAN_BM25.csv
) contendo os temas sugeridos para cada caso judicial, classificados por ordem de relevância.
- Executa o script
Com a interface gráfica e o servidor do BuscaTema já em funcionamento, você deve enviar o arquivo do caso e a lista de temas que será utilizada pela aplicação.
Após arrastar os arquivos correspondentes até os campos, ou selecioná-los entre os arquivos de seu computador, a tela ficará assim:
Clique em ENVIAR e receberá, rapidamente, a lista com alguns temas juntamente com a probabilidade de estarem relacionados ao texto do caso:
O desenvolvedor deverá seguir as etapas abaixo para executar o front-end em sua máquina. Os passos foram descritos considerando um sistema baseado em Unix 03:
-
Clonar e acessar este repositório:
git clone https://github.com/MLRG-CEFET-RJ/buscatema
cd buscatema
-
Instalar o Node.js caso não o possua. Recomenda-se a última versão LTS
-
Acessar a pasta ui:
cd ui
-
Instalar os módulos necessários:
npm i
-
Inicializar a interface:
npm start
É importante que o back-end esteja em execução na porta 5000 para que a resposta da requisição seja corretamente recebida.
O desenvolvedor deverá seguir as etapas abaixo para executar o back-end em sua máquina. Os passos foram descritos considerando um sistema baseado em Unix 03:
-
Instalar o python caso não possua
-
Acessar a pasta backend:
cd backend
-
Instalar os módulos necessários:
pip install -r requirements.txt
-
Inicializar o back-end:
py app.py
(Opcional) Utilize o módulo venv para manter o conjunto de dependências desse projeto isoladas de seu ambiente Python local:
-
Criar, antes de instalar os módulos necessários, um ambiente isolado:
python -m venv busca-env
-
Ativar o ambiente:
source busca-env/bin/activate
-
Seguir normalmente do passo 2 ao passo 4
Ainda falta, para os próximos semestres, a implementação de um módulo de autenticação e persistência, garantindo que o processamento de dados aconteça após a requisição e que o usuário não precise aguardar o tempo todo. A autenticação garantiria um acesso posterior aos resultados pelo usuário, que poderia ser notificado por um sistema de mensagens.