# MODO `--auto` — Algoritmo de Extração Automática em 10 Passos

Quando a mentorada não consegue (ou não quer) sentar 1h pra entrevista, o modo `--auto` extrai voz analisando 5+ textos próprios dela.

**Pré-requisito:** mentorada cola 5+ textos crus (não passados por IA) de canais variados — Instagram, e-mail, WhatsApp, stories transcritos, áudios transcritos, posts de blog. Quanto mais variedade, melhor a extração.

---

## Algoritmo em 10 passos

### Passo 1 — Coleta e validação de input

A skill pede:

> "Cola aqui pelo menos 5 textos seus, separados por `---`. Quanto mais textos e mais canais diferentes, mais precisa a extração. Aceito post de feed, e-mail pra base, mensagem WhatsApp, story transcrito, legenda, áudio transcrito, post de blog. NÃO aceito texto que passou por ChatGPT/Claude/Gemini — esses contaminam a base."

Validação:

- Mínimo 5 textos
- Mínimo 2 canais diferentes
- Total mínimo de 1.500 palavras somadas
- Cada texto com 50+ palavras
- Mentorada confirma explicitamente que NENHUM passou por IA

Se input falha em qualquer item → skill recusa e pede mais textos.

### Passo 2 — Tokenização e segmentação

Para cada texto:

1. Separar em **frases** (split em `.!?` respeitando reticências e abreviações)
2. Separar em **parágrafos** (split em quebra dupla de linha)
3. Separar em **tokens/palavras** (split em espaço, removendo pontuação para análise lexical mas preservando original pra análise estilística)
4. Manter associação: cada token sabe qual frase, qual parágrafo, qual texto, qual canal

### Passo 3 — Análise de frequência lexical (palavras-âncora candidatas)

1. Contar frequência de cada palavra única em todos os textos
2. Remover stopwords PT-BR (artigos, preposições, conjunções, pronomes, verbos auxiliares)
3. Remover palavras que aparecem em apenas 1 texto (não são âncoras de fato)
4. Ranquear top 30 palavras restantes por frequência
5. Filtrar contra **lista de chavão** (`sucesso`, `transformação`, `jornada`, `propósito`, `mindset`, `vibração`, `energia` — chavão genérico de coach)
6. Se palavra é chavão E aparece com frequência baixa-média → cortar
7. Se palavra é chavão E aparece com frequência muito alta → MANTER mas alertar mentorada ("essa palavra é chavão de mercado, você quer mesmo ela como âncora?")
8. Devolver top 15 palavras-âncora candidatas

### Passo 4 — Análise de palavras-marcadoras-de-identidade

Buscar palavras que indicam fronteira de identidade:

- Substantivos abstratos com uso recorrente E proprietário (ex: "soberania", "ofício", "estratégia", "presença", "raiz")
- Termos técnicos do nicho usados como gíria (ex: "ROI", "high ticket", "performance", "ofício", "casa")
- Apelidos de audiência (ex: "amada", "mentorada", "imperatriz", "minhas meninas", "você")

Cruzar com Passo 3 → palavras que aparecem nos dois rankings têm peso DUPLO de âncora.

### Passo 5 — Detecção de palavras-banidas (por ausência relativa)

Algoritmo:

1. Carregar lista-pivô de **palavras de mercado** (palavras comuns em coaching/copy/empreendedorismo BR — `guerreira`, `mindset`, `abundância`, `boss lady`, `fofa`, `delicada`, `imperatriz`, `soberania`, `nicho`, `escala`, `funil`, `lead`, `conversão`, etc.)
2. Verificar quais dessas palavras NÃO aparecem em nenhum dos textos da mentorada
3. Se palavra é COMUM no mercado (>70% das mentoras usam) E mentorada NÃO usa → forte candidata a banida
4. Devolver top 20 candidatas a banidas

A skill devolve a lista pra mentorada confirmar:

> "Detectei que você nunca usa estas palavras nos seus textos. São conscientes ou foi acaso? Marque 'BANIR' nas que você ativamente rejeita: [lista]"

Mentorada confirma → entram em `palavras_banidas`. Se foi acaso → não entra (aparecerá em texto futuro e tudo bem).

### Passo 6 — Análise de ritmo (quantitativa)

Para cada texto:

1. Calcular **palavras por frase** — média, mediana, desvio padrão, mínimo, máximo
2. Calcular **frases por parágrafo** — média
3. Detectar padrão de comprimento:
   - Se desvio padrão < 4 → padrão `curtas` ou `longas` (uniforme)
   - Se desvio padrão 4-7 → padrão `alternado`
   - Se desvio padrão > 7 → padrão `alternado-com-quebra-curta` ou `alternado-com-quebra-longa`
4. Agregar entre os 5+ textos pra média geral

### Passo 7 — Análise de pontuação característica

Contar ocorrência de cada marca de pontuação por 1.000 palavras:

- Travessão (`—`)
- Reticências (`…` ou `...`)
- Ponto-vírgula (`;`)
- Dois-pontos (`:`)
- Parênteses (`(`, `)`)
- Caixa alta (palavras inteiras em maiúscula)
- Negrito (marcadores `**` ou `__` em markdown, ou indícios em texto)
- Linha em branco entre parágrafos curtos (estilo stories)
- Emoji

Se a marca aparece > 3x por 1.000 palavras → entra em `pontuacao_caracteristica`.

### Passo 8 — Análise de aberturas e fechamentos

1. Para cada parágrafo de cada texto, capturar:
   - Primeiras 5 palavras (abertura)
   - Últimas 5 palavras (fechamento)
2. Para cada texto inteiro, capturar:
   - Primeira frase completa (abertura de texto)
   - Última frase completa (fechamento de texto)
3. Identificar padrões repetidos:
   - Aberturas que aparecem 2+ vezes → forte candidato a `abertura_padrao`
   - Fechamentos que aparecem 2+ vezes → forte candidato a `fechamento_padrao`
4. Devolver top 5 aberturas e top 5 fechamentos por canal

### Passo 9 — Classificação de tom (heurística + mentorada confirma)

Aplicar heurísticas pra classificar tom:

| Indicador | Aponta para |
|-----------|-------------|
| Frase média curta + dois-pontos + ponto-vírgula + sem gíria | `tecnico` ou `formal` |
| Apelido íntimo + reticências + frase longa + linha em branco | `intimo` ou `acolhedor` |
| Caixa alta + travessão + frase de 1 palavra + verbo imperativo | `empoderado` ou `agressivo` |
| Metáfora + adjetivo abundante + ritmo flutuante | `poetico` |
| Tratamento "você" + sem apelido + tom neutro | `formal` |
| Tratamento "amada/gente/cara" + gíria PT-BR | `informal` ou `intimo` |

Skill devolve diagnóstico provisório:

> "Pelos seus textos, sua voz parece ser **[tom_principal_provisorio]** com tons secundários de **[tons_secundarios_provisorios]**. Bate? Quer ajustar?"

Mentorada confirma ou ajusta. Resultado vira `tom_principal` e `tons_secundarios`.

### Passo 10 — Geração de JSON RASCUNHO + auditoria humana

A skill NUNCA finaliza modo `--auto` sozinha. Sempre:

1. Gera JSON rascunho com todos os campos preenchidos pelo algoritmo
2. Devolve resumo em prosa pra mentorada (mesmo formato do encerramento da entrevista)
3. Permite ajuste de campo por campo
4. Salva versão final em `~/imperio/mentoradas/[nome]/03-voz-de-marca.json` com `modo_captura: "auto"` (ou `"hibrido"` se houve ajuste manual)

---

## Pseudo-código do algoritmo

```python
def modo_auto_extracao(textos: list[dict], mentorada_slug: str) -> dict:
    # textos: [{"canal": "instagram-feed", "texto": "..."}]

    # Passo 1: validação
    assert len(textos) >= 5
    assert len(set(t["canal"] for t in textos)) >= 2
    assert sum(len(t["texto"].split()) for t in textos) >= 1500

    # Passo 2: tokenização
    frases = []
    paragrafos = []
    tokens = []
    for texto in textos:
        frases += split_frases(texto["texto"])
        paragrafos += split_paragrafos(texto["texto"])
        tokens += tokenize(texto["texto"])

    # Passo 3: frequência lexical
    freq = Counter(t.lower() for t in tokens if t.lower() not in STOPWORDS_PTBR)
    candidatas_ancora = [w for w, c in freq.most_common(30)
                         if w not in CHAVAO_GENERICO]
    candidatas_ancora = candidatas_ancora[:15]

    # Passo 4: marcadoras de identidade
    marcadoras = detect_marcadoras(tokens, candidatas_ancora)

    # Passo 5: banidas (por ausência)
    candidatas_banidas = [w for w in PALAVRAS_DE_MERCADO
                          if w.lower() not in {t.lower() for t in tokens}]
    # mentorada confirma quais são conscientes

    # Passo 6: ritmo
    tamanhos = [len(f.split()) for f in frases]
    ritmo = {
        "tamanho_medio_frase": mean(tamanhos),
        "desvio_padrao_frase": stdev(tamanhos),
        "frase_mais_curta_observada": min(tamanhos),
        "frase_mais_longa_observada": max(tamanhos),
        "padrao": classificar_padrao(stdev(tamanhos))
    }

    # Passo 7: pontuação
    pontuacao = analisar_pontuacao(textos)

    # Passo 8: aberturas/fechamentos
    aberturas = top_padroes_abertura(textos)
    fechamentos = top_padroes_fechamento(textos)

    # Passo 9: tom (heurística)
    tom = classificar_tom(ritmo, pontuacao, candidatas_ancora)

    # Passo 10: gerar rascunho + auditoria humana
    rascunho = montar_json(
        mentorada=mentorada_slug,
        tom_principal=tom["principal"],
        tons_secundarios=tom["secundarios"],
        palavras_ancora=candidatas_ancora,
        palavras_banidas=candidatas_banidas,  # depois filtrado pela mentorada
        ritmo=ritmo,
        pontuacao=pontuacao,
        aberturas=aberturas,
        fechamentos=fechamentos,
        modo_captura="auto"
    )

    return apresentar_pra_auditoria_humana(rascunho)
```

---

## Quando preferir `--auto` vs `--entrevista`

| Cenário | Modo recomendado |
|---------|------------------|
| Mentorada nova, 0 textos públicos | `--entrevista` |
| Mentorada com 1-4 textos | `--entrevista` (amostra insuficiente pra `--auto`) |
| Mentorada com 5-15 textos | Híbrido — roda `--auto` e completa com perguntas dirigidas onde algoritmo ficou inseguro |
| Mentorada com 20+ textos públicos | `--auto` puro (depois auditoria) |
| Mentorada não tem 1h disponível | `--auto` (precisa só de 15 min de auditoria) |
| Mentorada quer captura "consciente" | `--entrevista` (processo de descoberta junto) |
| Tata captura voz de mentorada à distância | `--auto` com textos enviados |

---

## Limitações conhecidas do `--auto`

1. **Não captura tom emocional bem.** Algoritmo é frequência + estrutura. Tom de raiva vs tom de ternura passa despercebido. Sempre validar com mentorada.
2. **Não distingue voz por canal.** Mentorada pode falar diferente em e-mail vs WhatsApp. `--auto` agrega tudo. Pra captura por canal, usar `--entrevista`.
3. **Vulnerável a contaminação por IA.** Se 1 dos textos passou por ChatGPT mesmo que parcialmente, contamina toda a base. Validação humana é crítica.
4. **Não detecta palavras-banidas que ela usa raramente mas deveria banir.** Se a mentorada usa "guerreira" 1x em 5 textos, algoritmo NÃO detecta como banida. Só `--entrevista` captura isso.
5. **Tende a inflar palavras-âncora.** Frequência alta nem sempre = âncora. Pode ser só repetição por preguiça lexical. Auditoria filtra.

---

## Output do modo `--auto`

JSON gerado tem `modo_captura: "auto"` ou `"hibrido"` (se houve ajuste humano após geração algorítmica).

Adiciona campo extra `observacoes_da_skill`:

```
"observacoes_da_skill": "Captura via modo --auto a partir de [N] textos
de [M] canais ([lista de canais]). Total de [X] palavras analisadas.
Confiança alta em: ritmo, pontuação, aberturas. Confiança média em:
palavras-âncora (validadas pela mentorada). Confiança baixa em: tom
emocional (forçada validação humana). Recomendar revisar voz após
30 dias e considerar `--versionar` se mentorada tiver subido de fase."
```

---

**Modo `--auto` — propriedade intelectual Tata Gonçalves.**
