Pipeline analisarFrase
Mermaid
Ordem em vendors/conjugai-core/index.ts: tokens → (se aplicável) segmentar orações coordenadas (e, ou, mas, …) → sujeito → tempo → lema verbal →
conjugarTempo → corrigir (com normalização SVO quando aplicável). Com várias orações, o bloco central repete-se por oração antes de juntar correções.
detectarSujeito
Mermaid
Implementação em vendors/conjugai-core/sujeito.ts, invocada em analisarFrase após a
segmentação de orações (quando há). Primeiro detectarSujeitoComposto: prefixo antes do verbo com
pelo menos três tokens e conector «e» (padrão X e Y — não usa ou para este
composto). Depois detectarSujeitoSimples: pronome antes ou depois do verbo (inclui normalização
SVO), Eu + mamãe/papai, pronomes básicos estáticos, nome próprio / título, ou Eu
implícito por omissão.
X e Y antes do verbo?} -->|sim| SC1[Nós / Vocês / Eles] SC -->|não| SPres{Pronome antes do verbo?} SPres -->|sim| S1[Pessoa conforme pronome] SPres -->|não| SPost{Pronome depois do verbo?} SPost -->|sim| S2[Pessoa conforme pronome — normaliza SVO] SPost -->|não| SFam{Eu + mamãe / papai?} SFam -->|sim| SN[Nós — 1.ª plural] SFam -->|não| Basic{Pronome básico estático?} Basic -->|sim| S1 Basic -->|não| SNome{Nome próprio / título?} SNome -->|sim| S3[3.ª pessoa — normaliza se pós-verbo] SNome -->|não| SDef[Padrão: Eu implícito]
detectarTempo
Mermaid
Implementação em vendors/conjugai-core/tempo.ts. Ordem efetiva: (1) argumento
tempoManual em analisarFrase (botões Hoje / Ontem / Amanhã na demo CAA); (2) token
tempo:<chave> ou [tempo=<chave>]; (3) se existir ontem →
passado; (4) se existir amanhã e o 1.º token for presente de ir →
presente; só amanhã → futuro; (5) léxico (MorphoBr via
nlp-pt-br-lite) e combinações com já, quando, se, que,
talvez, etc.; (6) caso contrário → presente do indicativo. O que de ter que /
ter de + infinitivo não conta para o ramo subjuntivo por que isolado.
* que com valor subjuntivo ignora o que de tenho que / ter que — ver
temQueSubjuntivo e temLocucaoTerQue em tempo.ts.
extrairVerbo — lema
Mermaid
Implementação em conjugador.ts: (1) ir + infinitivo no início; (2)
detectarLocucaoVerbalHeadLemma; (3) último que (exc. ter que) → primeiro infinitivo
depois; (4) primeiro infinitivo -ar/-er/-ir/-pôr; (5)
detectarVerboPorDicionario (filtro de pronomes/partículas).
e há infinitivo à frente?"} C -->|sim| D["retorna 'ir'"] C -->|não| L{"detectarLocucaoVerbalHeadLemma?"} L -->|sim| LEM["retorna lema da locução"] L -->|não| Q{"último que não ter que + inf. depois?"} Q -->|sim| QI["retorna esse infinitivo"] Q -->|não| A{"há 1.º token infinitivo -ar/-er/-ir/-pôr?"} A -->|sim| B["retorna esse infinitivo"] A -->|não| E["detectarVerboPorDicionario
(ignora pronomes/partículas)"] E --> F{lema?} F -->|sim| G["retorna infinitivo"] F -->|não| H["null"]
Fluxo de conjugar
Mermaid
Implementação em conjugador.ts: conjugarPessoaTabela (demo raiz) e
conjugarTempo (pipeline) usam léxico VERBOS + regras/fallbacks.
corrigir — frase final
Mermaid
corretor.ts: localiza o token verbal com indiceDoVerboNaFrase e substitui
só essa forma pelo conjugado. Sujeito composto mantém os tokens à esquerda do verbo
(ex.: «Mamãe e eu iremos…»). Sujeito implícito antecede o pronome em sujeito.texto.
Pipeline visual
UIOpcional: infinitivo para atualizar lema e exemplo de 1.ª pessoa do presente.
Entrada da função
Demo paradigma: células
Mermaid
index.html (raiz) — ciclo por tempos simples/compostos e 6 pessoas
com conjugarPessoaTabela.
Demo CAA (analisarFrase)
Contexto
A demo CAA (demo/caa/index.html) usa
analisarFrase (passos tokenização, sujeito, tempo, regra) via app.js. O
index.html na raiz é só paradigma verbal (conjugar).
Diagramas Mermaid adicionais: diagrama.html na raiz.