Metadata-Version: 2.4
Name: pipeline_sentimento
Version: 0.2.0
Summary: Pipeline configurável de análise de sentimentos
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: pandas
Requires-Dist: scikit-learn
Requires-Dist: nltk
Requires-Dist: spacy
Requires-Dist: emoji
Requires-Dist: gensim
Requires-Dist: lightgbm
Requires-Dist: streamlit
Requires-Dist: numpy

# Pipeline configurável de análise de sentimentos em Python. 

Permite configurar pré-processamento, vetorização e seleção automática de modelo, comparando múltiplas combinações e retornando a melhor configuração.

---

## Requisitos

- Python 3.9 ou superior
- pip instalado

---

## Instalação

### 1. Instale via pip

```bash
pip install sentiment-pipeline
```

### 2. Baixe os recursos necessários

```bash
python -m spacy download pt_core_news_sm
python -c "import nltk; nltk.download('stopwords'); nltk.download('rslp'); nltk.download('punkt')"

### 3. Instale o pacote e as dependências

```bash
pip install -e .
```

### 4. Baixe os recursos necessários

```bash
python -m spacy download pt_core_news_sm
python -c "import nltk; nltk.download('stopwords'); nltk.download('rslp'); nltk.download('punkt')"
```

---

## Como rodar a interface web

```bash
streamlit run app.py
```

O navegador vai abrir automaticamente em `http://localhost:8501`.

---

## Como usar via código Python

```python
from sentiment_pipeline.pipeline import Pipeline

# 1. Configure o pré-processamento
config_pre = {
    "lowercase": True,                     # 'NÃO' → 'não'
    "remove_urls": True,                   # remove http://...
    "normalize_emojis": True,              # 😡 → ':rosto_furioso:'
    "handle_negations": True,              # 'não gostei' → 'não gostei_NEG'
    "remove_stopwords": "keep_negations",  # remove stopwords mas preserva negações
    "normalization": "stemming"            # 'correndo' → 'corr'
}

# 2. Configure a vetorização
config_vet = {
    "estrategia": "tfidf",   # bow | tfidf | tfidf_svd | word2vec
    "max_features": 10000,
    "ngram_range": (1, 2),
    "sublinear_tf": True,
}

# 3. Crie e execute o pipeline
pipeline = Pipeline(config_pre, config_vet)
pipeline.carregar_dados("dataset.csv", coluna_texto="text", coluna_label="label")
pipeline.treinar()

# 4. Avalie na validação (use para comparar configurações)
pipeline.avaliar_validacao()

# 5. Avalie no teste — use SOMENTE no final, depois de escolher a melhor configuração
pipeline.avaliar_teste()
```

---

## Como comparar múltiplas combinações automaticamente

```python
from sentiment_pipeline.pipeline import comparar_combinacoes

# Testa várias combinações de pré-processamento e vetorização
# e retorna uma tabela ordenada pelo F1-macro
resultados = comparar_combinacoes("dataset.csv", "text", "label")
print(resultados)
```

---

## Parâmetros do pré-processamento

| Parâmetro | Valores possíveis | O que faz |
|---|---|---|
| `lowercase` | `True` / `False` | Converte texto para minúsculo |
| `remove_urls` | `True` / `False` | Remove links do texto |
| `normalize_emojis` | `True` / `False` | Converte emojis em texto descritivo |
| `handle_negations` | `True` / `False` | Marca palavras após negação com `_NEG` |
| `remove_stopwords` | `True` / `False` / `"keep_negations"` | Remove palavras sem sentimento. `keep_negations` preserva "não", "nunca", "jamais", "nem" |
| `normalization` | `"stemming"` / `"lemmatization"` / `None` | Reduz palavras à forma base |

---

## Estratégias de vetorização

| Estratégia | Modelo automático | Quando usar |
|---|---|---|
| `bow` | Naive Bayes | Textos curtos e simples |
| `tfidf` | Regressão Logística | Melhor opção geral |
| `tfidf_svd` | LinearSVC | Vocabulário muito grande |
| `word2vec` | LightGBM | Quando contexto semântico importa |

---

## Estrutura do projeto

```
sentiment_pipeline/
├── preprocessamento.py   # limpeza e normalização do texto
├── vetorizacao.py        # transforma texto em vetores numéricos
├── classificador.py      # treina e avalia os modelos
└── pipeline.py           # coordena todas as etapas
app.py                    # interface web (streamlit)
pyproject.toml            # configuração do pacote
README.md                 # documentação
```

---

## Dataset

O pipeline funciona com qualquer arquivo CSV ou TSV com pelo menos duas colunas:
- Uma coluna com o texto
- Uma coluna com o rótulo (0 ou 1)

Datasets recomendados para teste:
- **HatEval 2019 PT** — detecção de discurso de ódio em tweets em português
- **B2W-Reviews01** — avaliações de e-commerce em PT-BR
- **IMDB Dataset** — reviews de filmes em inglês
