Metadata-Version: 2.1
Name: detect-hate-speech
Version: 0.1.8
Summary: 
Author: Amanda Nobre
Author-email: amandapnobre@gmail.com
Requires-Python: >=3.7,<4.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Description-Content-Type: text/markdown

# Trabalho individual de GCES 2023-1 - Turma Carla

Os conhecimentos de Gestão de Configuração de Software são fundamentais no ciclo de vida de um produto de software. As técnicas para a gestão vão desde o controle de versão, automação de build e de configuração de ambiente, testes automatizados, isolamento do ambiente até o deploy do sistema. Todo este ciclo nos dias de hoje são integrados em um pipeline de DevOps com as etapas de Integração Contínua (CI) e Deploy Contínuo (CD) implementadas e automatizada.

Para exercitar estes conhecimentos, neste trabalho, você deverá aplicar os conceitos estudados ao longo da disciplina no produto de software contido neste repositório.

# Resumo da aplicação 
Uma solução, que usa um modelo de classificação de texto (Text Classification Model), para indentificar discursos homofóbicos ou sexistas em tweets. 

As bases de dados de discurso de ódio que estão sendo usada são:
- https://github.com/ZeerakW/hatespeech
- https://data.world/thomasrdavidson/hate-speech-and-offensive-language

A ferramenta utilizada para subir a aplicação web é o Streamlit.

Você pode [acessar o ReadMe](https://github.com/DataforGoodIsrael/DetectHateSpeech#readme) do repositorio original.

# Etapas do Trabalho

O trabalho deve ser elaborado através de etapas. Cada uma das etapas deve ser realizada em um commit separado com o resultado funcional desta etapa.

As etapas de 1 a 3 são relacionadas ao isolamento do ambiente utilizando a ferramenta Docker e Docker Compose. Neste sentido o tutorial abaixo cobre os conceitos fundamentais para o uso destas tecnologias.

[Tutorial de Docker](https://github.com/FGA-GCES/Workshop-Docker-Entrega-01/tree/main/tutorial_docker)

As etapas de 4 e 5 são relacionadas à configuração do pipeline de CI e CD.

[Tutorial CI - Gitlab](https://github.com/FGA-GCES/Workshop-CI-Entrega-02/tree/main/gitlab-ci_tutorial)


## Containerização do Banco

Nesta aplicação a conteinerização do banco não foi feita pois julguei que não era necessário, uma vez que o modelo já está treinado.

## Containerização da aplicação 

Não utilizei um orquestrador (Docker Compose) para gerenciar comunicação entre os containers, pois apenas dockerizei a aplicação:

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/8b3b64f6-4792-467b-938e-77062918275b)

Após o dockerfile ser criado, roda-se:

```
docker build -t detect_hate_speech .
```

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/ac63df53-9707-4977-a01d-04f152731868)

Obs: O build está demorando um pouco pois o projeto roda em python 3.7, e os requirements são bastante específicos.

Após ter buildado basta dar o comando run:

```
docker run -p 8501:8501 detect_hate_speech
```
![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/77169411-2502-40a3-8a4e-30b254a685c8)

E a aplicação irá rodar na porta 8501, dessa forma, acessando o http://localhost:8501/ :

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/dc4ab663-7e77-41d2-9b8c-c30a9deff746)
![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/ae339733-350e-45e2-97d4-878b18ce61cf)
![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/9096503c-5935-4e12-afe5-e1137cc7a46c)

## Gestão de dependencias e pacotes python

O arquivo de configuração do [poetry](https://python-poetry.org/) é o pyproject.toml:

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/a489bcb6-c1d8-4f95-b2b1-bc7252aa11ab)

[Que publica o pacote pip](https://pypi.org/manage/project/detect-hate-speech/releases/) através de comandos que rodam na pipeline de CI.<br/>

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/2cb54676-d988-4cee-b0cf-194be10e2816)

## Documentação automatizada

A documentação gerada de forma automatizada com o [sphinx](https://www.sphinx-doc.org/en/master/index.html) está "rodando" no [gitlab pages](https://amandanbr.gitlab.io/trabalho-individual-gces/#indices-and-tables).

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/ada310d1-aa1c-4264-bd3c-3423cf9ebdaa)

## Integração Contínua (CI)

O GitLab-CI foi utilizado para garantir o build, os testes, deploy para o https://pypi.org e a geração da documentação.
Consiste em 4 stages: lint, tests, build-publish, pages.

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/0ded7d49-4629-40c2-82da-cc5ba3610968)

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/dfd4b593-5bc7-4305-986f-2e562a0b388e)
![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/d319b72e-ea0a-4eb1-a982-702b8b17e233)
![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/571745a3-59f2-4762-935e-85125f3659e2)

### Lint

O linter utilizado foi o [black](https://black.readthedocs.io/en/stable/index.html):

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/8158d4a0-2aab-4ae0-a7f5-83a5ee954635)

### Tests

O [pytest](https://docs.pytest.org/en/7.3.x/) foi utilizado para rodar os testes (não haviam testes no repo original, então criei um teste simples para adicionar a pipeline).

### Build-publish

#### Build-publish docker image
Essa etapa sobe a imagem do docker criada para o [dockerhub](https://hub.docker.com/r/amandanbr/detecthatespeech).

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/8b47f20a-573f-4d6c-817a-63ed9b7a2db5)

#### Build-publish package pypi
Nesse stage ocorre o build e a [publicação no pypi](https://pypi.org/manage/project/detect-hate-speech/releases/) do pacote gerado pelo poetry.

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/2cb54676-d988-4cee-b0cf-194be10e2816)

### Pages documentation - Sphinx
A ultima etapa consiste em utilizar o [sphinx](https://www.sphinx-doc.org/en/master/index.html) para gerar a documentação do projeto, e subi-la no [gitlab pages](https://amandanbr.gitlab.io/trabalho-individual-gces/).

![image](https://github.com/DataforGoodIsrael/DetectHateSpeech/assets/44625056/ada310d1-aa1c-4264-bd3c-3423cf9ebdaa)

