acR 0.3.3
Nova funcionalidade
ac_qual_report_full()(novo) – relatorio consolidado multi-variavel. Aceita uma lista nomeada de resultados (coded+codebook+reliabilityopcional) e gera um unico arquivo (Markdown ou HTML) com uma secao por variavel, tabela sumaria no topo (k categorias, n docs, multilabel por variavel), mesmo idioma (pt/en) e formato consistente com [ac_qual_report()]. Atende ao caso de uso comum de analise de conteudo com N variaveis, que antes exigia consolidador ad hoc.Campo
labelopcional em cada categoria do codebook. Cada entrada decategoriesem [ac_qual_codebook()] agora aceitalabel = "..."como rotulo humano para exibicao (paralelo adefinition,examples_pos, etc.). Se ausente, o rotulo defaults para o proprio slug (chave da lista). A saida de [ac_qual_code()] ganha coluna novacategoria_labelcom o rotulo traduzido; em multilabel, os labels vem unidos por" | "(espaco dos dois lados), enquanto a colunacategoriamantem"|"sem espaco como chave estavel de comparacao. Preservado tambem emac_qual_save_codebook()/ac_qual_load_codebook()(YAML).
Bug fixes – modulo qualitativo (pipeline LLM)
Tres bugs encontrados no ac_qual_code() e funcoes internas durante uso em producao (Gemini/Groq/OpenAI) foram corrigidos:
live = "terminal"travava no primeiro documento com “Cannot find progress bar” (R/ac_qual_live.R). Acli::cli_progress_bar()era criada sem.envir, amarrando o ciclo de vida da barra ao frame de.ac_live_start()– que retorna imediatamente.clidestruia a barra antes deac_qual_code()conseguir chamarcli_progress_update(). Fix:.ac_live_start()(e.ac_live_finish()) agora aceita argumento.envir(padraoparent.frame()), amarrando a barra ao frame do chamador – tipicamenteac_qual_code().temperaturedeac_qual_code()era aceito mas nunca usado (R/ac_qual_code.R,.ac_classify_one()). O parametro formal era ignorado no corpo, entao ask_consistencyrodadas de self-consistency (Wang et al., 2023) usavam sempre a temperatura padrao do provedor – variacao estocastica esperada nao acontecia, inflandoconfidence_scoreespuriamente. Fix:temperatureagora e injetada viaellmer::params(temperature = ...)no argumentoparamsdo chat (respeitaparamsexplicitos passados pelo usuario via...). Para o caminhochat = <Chat pre-configurado>, o Chat e reconstruido com o novoparamsviaget_provider()+get_model(), com fallback graceful para o clone antigo se a reconstrucao falhar.ac_qual_report(path = <relativo>)falhava com “The directory ‘X’ does not exist” mesmo com a pasta criada, e derrubava loops semtryCatch. Causa:rmarkdown::render()muda o cwd durante o knit, enormalizePath(path, mustWork = FALSE)nao converte confiavelmente paths relativos inexistentes em absolutos. Fix:.ac_report_absolute_path()resolve para absoluto contra o cwd atual antes de qualquerrender(), e a pasta destino e criada comdir.create(recursive = TRUE)se necessario.multilabel = TRUEquebrava com “Result must be length 1, not N” quando o modelo devolvia array JSON (R/ac_qual_code.R,.ac_build_system_prompt()+.ac_build_result_tibble()). O prompt nao instruia explicitamente que"categoria"deve ser sempre uma string (mesmo em multilabel), e o parser assumia quemain$categoriaera escalar. Um documento com array["a","b"]quebrava apurrr::map()inteira, derrubando a classificacao de TODOS os documentos daquela variavel. Fix: (a) prompt multilabel agora instrui a devolver “tecnica|politica” (string pipe-separada) e proibe explicitamente array JSON; (b) parser defensivo faz semprepaste(as.character(main$categoria), collapse = "|"), absorvendo arrays quando o modelo ignora a instrucao.
acR 0.3.2
Novidades
-
ac_cluster_documents()(novo) — clustering nao supervisionado de documentos com hierarquico (Ward.D2), k-means ou PAM. Features configuraveis (TF-IDF ou contagens), distanciascosine/euclidean, escolha automatica dekpor silhueta (usaclusterdeSuggests). Retorna S3ac_clustercom metodoprint. -
ac_plot_cluster()(novo) — tres tipos de visualizacao para objetosac_cluster:dendrogram(default para hclust),scatter(projecao PCA 2D com labels) eheatmap(matriz de dissimilaridade ordenada pelo dendrograma). -
Nova vignette —
vignette("cluster"): “Agrupamento nao supervisionado de documentos”. Explica as tres familias (hard/soft clustering e LDA) com tabela de quando usar cada uma, apresenta seis visualizacoes complementares (dendrograma, PCA, heatmap, top termos por cluster, curva de silhueta e comparacao lado-a-lado hard vs. LDA/gamma), valida a particao contra umtema_realmantido fora do modelo e integra o clustering ao pipeline qualitativo. -
Documentacao — README,
_pkgdown.yml(menu de vignettes e secao “Pipeline quantitativo”) apontam para a nova vignette; acentos corrigidos nas entradas visiveis do menu. -
ac_plot_wordcloud_comparative()agora aceita N grupos (>= 2) em vez de somente 2. Cada grupo vira uma faceta; nas duas implementacoes (backend = "ggwordcloud"ebackend = "ggplot") o layout usafacet_wrap(). Cores padrao passam a vir deac_palette(N). A validacao antiga (length(grupos) != 2L) foi substituida porlength(grupos) < 2L. -
Polimento de documentacao — reescrita de
qualitativo-llm.Rmd(nova secao “Quando usar LLM (e quando NAO usar)” com tabela decisoria, tabela de custo por modelo e “Diagnosticando problemas comuns” com 4 modos de falha);quantitativo.Rmd(nova secao “Qual metrica responde qual pergunta”);lda.Rmd(comparativo LDA vs. clustering vs. LLM e heatmap gamma com referencia cruzada ao cluster). Roxygen deac_qual_codebook(),ac_qual_code(),ac_qual_reliability(),ac_import(),ac_qual_report(),ac_qual_irr(),ac_tokenize()eac_count()expandidos com framing teorico e faixas interpretativas.@examplesmais realistas emac_keyness(),ac_tf_idf(),ac_cooccurrence()eac_sentiment(). -
Generalizacao do keyness — README, vignette
quantitativoe roxygen deac_keyness()descrevem grupos genericamente (qualquer variavel categorica: partido, periodo, tema, regiao, condicao experimental) em vez do exemplo “governo x oposicao” que havia ossificado como canonico. -
Cobertura de testes subiu de ~55% (0.3.1) para ~66%. Testes novos em
ac_cluster.R(67% -> 91%),ac_qual_codebook.R(43% -> 48%) eac_qual_reliability.R.
Adequacao CRAN (correcoes de resubmissao)
-
ac_wordcloud(),ac_plot_wordcloud_comparative()eac_qual_sample()agora expoem argumentoseed(padrao42L;NULLusa o RNG corrente). A semente e escopada viawithr::with_seed()– nao altera o.Random.seeddo usuario apos o retorno. - Removido uso de
<<-em.ac_report_build_md()(ac_qual_report.R): o buffer de linhas agora vive em umenvironment()local. - Removidas escritas ao
.GlobalEnvemac_plot_wordcloud_comparative(); RNG passa a ser escopado exclusivamente viawithr::with_seed(). -
withrmovido deSuggestsparaImports(usado em codigo principal).
acR 0.3.1
Ajustes
-
ac_plot_wordcloud_comparative()— layout reproduzivel via novo argumentoseed(padrao42L), com salvaguarda do RNG global; cores padrao agora vem deac_palette(2L)em vez de codigos fixos. Novo argumentobackend("auto"/"ggwordcloud"/"ggplot"): quandoggwordcloudesta instalado, usageom_text_wordcloudcom facets lado a lado; caso contrario, mantem o layout jitter original. -
ac_plot_xray()— corrigido caso de divisao por zero em documentos com apenas 1 token (posicao passa a ser0.5); warning agora identifica quais termos ficaram sem ocorrencia, nao apenas o caso extremo de nenhum encontrado. -
ac_import()— a ordem dos documentos no corpus resultante agora preserva a ordem de entrada empath, mesmo misturando arquivos OCR e texto;doc_idduplicados sao desambiguados automaticamente com sufixos (_2,_3, …) e um aviso; erros migrados paracli::cli_abort(padrao do pacote). Loop de OCR ganhou barra de progresso viacli::cli_progress_bar().
Testes
- Nova cobertura para
ac_export(),ac_qual_irr(),theme_ac(),ac_palette()eis_ac_corpus().
acR 0.3.0
Novas funcionalidades — Visualização e Tema
theme_ac()— temaggplot2minimalista e consistente, usado por todos osac_plot_*(). Deriva detheme_minimal()com ajustes editoriais: títulos em negrito, gridlines suaves, tipografia compacta.ac_palette()— paleta categórica de 8 cores (adaptada de Okabe-Ito para compatibilidade WCAG AA e daltonismo).ac_wordcloud(backend = ...)— reescrita para preferirggwordcloud(retornaggplot, layout mais agradável, tipografia editorial), com fallback parawordcloudclássico. Novos argumentosbackendetitle.ac_plot_xray()— refinada comtheme_ac()+ac_palette(), facet_grid com label do documento à esquerda, barras verticais mais espessas e arredondadas.
Menu e navegação
Vignettes do site pkgdown reorganizadas em 3 blocos (“Comece por aqui”, “Pipeline qualitativo (LLMs)”, “Pipeline quantitativo”). “Análise de proposições” agora aparece como sub-item de “Codificação com LLMs”, esclarecendo a relação entre guia e estudo de caso.
Diagrama SVG do pipeline redesenhado: Etapas 5 e 6 em layout de duas linhas (título + funções empilhados) resolvendo vazamento de texto.
Testes e cobertura
- +87 assertions em 4 arquivos novos (
test-ac_ellmer_chat,test-ac_qual_report,test-ac_qual_live,test-ac_qual_code-live). - Cobertura global: 55% → ~64%.
- Total agora: 741+ testes pass, 5 skips justificados.
Documentação
Nova vignette
replicabilidade.Rmd— pipeline completo em 6 etapas (corpus → codebook → code + live → sample → reliability → report), com exemplo executável deac_qual_report().Todas as vignettes usam
ac_clean(remove_stopwords = "pt")— antes top-terms e keyness apareciam poluídos por artigos e preposições.Vignettes
lda.Rmdesentimento.Rmdreescritas com corpus real e chunks 100% executáveis (antes usavameval=FALSE+ outputs falsos).
Bug fixes
ac_plot_sentiment(type = "line"): conflito de escala de cor resolvido (linha em cinza neutro, pontos coloridos por sentimento)..ac_ellmer_chat(): sempre usa dispatch direto ao invés de delegar aellmer::chat(), garantindo resolução consistente de aliases (gemini → chat_google_gemini,claude → chat_anthropic,azure → chat_azure_openai,bedrock → chat_aws_bedrock).
acR 0.2.2
Novas funcionalidades — Replicabilidade e transparência
ac_qual_report()— gera relatório de replicabilidade em Markdown ou HTML autocontido (bilíngue PT/EN), documentando codebook completo, histórico de modificações, configuração da LLM, distribuição de resultados, métricas de confiabilidade (opcional) e referências metodológicas. Pronto para colar em artigo/relatório.-
ac_qual_code(live = ...)— novo argumento com três modos:-
"off"(padrão): sem live view; -
"terminal": barra de progresso com doc atual, categoria, confiança e início do raciocínio a cada iteração (viacli::cli_progress_bar); -
"shiny": janela Shiny em background com tabela atualizando em tempo real (requershinyecallremSuggests).
-
Compatibilidade
Migrado o acesso ao
ellmerpara a nova API baseada emchat_<provider>()(chat_anthropic(),chat_groq(),chat_openai(), etc.). A funçãoellmer::chat()foi removida em versões recentes doellmer; o novo helper interno.ac_ellmer_chat()roteia strings no formato"provider/model"para o dispatcher correto, mantendo fallback paraellmer::chat()quando disponível (retrocompatível).ellmermovido deImportsparaSuggests: o pacote agora carrega oellmerapenas quando o usuário chama uma função qualitativa, reduzindo a superfície de dependência para quem usa apenas os módulos quantitativos.
Preparação para CRAN
-
Language: en-USadicionado aoDESCRIPTION. -
inst/WORDLISTsemeado com termos técnicos e nomes próprios; teste de ortografia não-bloqueante emtests/spelling.R. - Vinhetas voltam a ser empacotadas no tarball (
^vignettes$removido do.Rbuildignore); as 6 vinhetas compilam sem rede/LLM (chunks LLM comeval=FALSE). -
vignettes/introducao-acR.Rmdreescrita como tutorial offline completo. - Removida a linha inválida
Additional_repositories(apontava para URLgithub.com, não aceita pela CRAN).
Testes
+16 testes cobrindo I/O Excel (
ac_qual_export_for_review,ac_qual_import_human, roundtrip comtempfile()) e helpers internos de modelos (.ac_models_db,.ac_score_models,.ac_model_justification,.ac_list_models_live).Testes online de
ac_qual_codebook_translate()eac_qual_codebook_hybrid()ganhamskip_if()defensivo para versões doellmersemchat().Total: 688 pass, 4 skips justificados.
R CMD check: 0 errors, 0 warnings, 1 note inofensiva (clock).
acR 0.2.1
Novas funções
ac_qual_codebook_hybrid()— enriquece definições de categorias com referências bibliográficas buscadas via LLM, combinando fundamento manual com ancora teórica induzida da literatura.ac_qual_codebook_merge()— funde dois objetosac_codebookem um único, com controle de conflitos de nomes (error,keep_first,keep_second,rename_second).ac_qual_codebook_translate()— traduz instruções, definições e exemplos de um codebook para outro idioma via LLM ("pt"↔︎"en").ac_qual_codebook_history()— retorna o histórico de modificações de umac_codebook(adições, remoções, merges, traduções, enriquecimentos).as_prompt()/as_prompt.ac_codebook()— converte umac_codebookem system prompt formatado para uso direto com objetosChatdoellmer, com suporte a raciocínio estruturado (reasoning_length).as_prompt.default()— método default com mensagem de erro informativa para objetos que não sãoac_codebook.
Correções
Corrigido warning
non-ASCII charactersemR/ac_qual_codebook.R: escapes\uXXXXagora usados no código R; UTF-8 real mantido nos blocos roxygen.Corrigido warning
missing documentation entries: todas as 5 novas funções do Bloco B agora têm blocos roxygen completos com título,@parame@return.Corrigido mismatch de documentação:
check_overlapadicionado ao.Rddeac_qual_codebook().Corrigido
vignettes/sentimento.Rmd:eval=FALSEadicionado a todos os chunks que faziam download externo, prevenindo falha no CI sem internet.
Testes
- 63 testes passando em
tests/testthat/test-ac_qual_codebook.R, cobrindo todas as funções do Bloco B. Testes com LLM real usamskip_if_offline()eskip_on_cran().
Documentação
README.mdatualizado com tabela de funções de gestão de codebook, referências completas (12 entradas) e bloco de citação com ORCID e afiliação CEM-Cepid/USP.vignettes/qualitativo-llm.Rmdreescrita com pipeline completo do Bloco B: criação, enriquecimento, fusão, tradução, histórico e geração de system prompt.vignettes/analise-proposicoes.Rmdatualizada com seção 3b demonstrando refinamento iterativo do codebook com as novas funções._pkgdown.ymlatualizado: seção “Codificacao qualitativa via LLM” agora lista todas as 12 funções do módulo qualitativo.
