Quando você usa a ferramenta Análise Quantitativa das bases mescladas na Xplore Dados e gera um mapa com o HySCo-KC, o que acontece do começo ao fim é a execução de um pipeline algorítmico. Não existe ajuste manual escondido, nem alguém “arrumando” o mapa nos bastidores. O resultado é consequência direta dos seus dados e das regras do método.
Este post existe por um motivo bem objetivo: quase todo mundo já viu mapas bibliométricos bonitos e, ao mesmo tempo, já se perguntou “mas o que foi calculado para chegar nisso?”. A proposta aqui é abrir a caixa-preta. Vou descrever cada fase de forma que uma pessoa sem programação entenda o que está acontecendo, mas também vou incluir termos técnicos e trechos de lógica em Python simplificado para deixar o processo auditável.
O HySCo-KC trabalha sobre bases já mescladas (por exemplo, Scopus e Web of Science). Se você ainda não passou pela etapa de unificação, vale começar por aqui: Como mesclar as bases Scopus e Web of Science com a ferramenta da Xplore Dados.
A partir da base unificada, o algoritmo usa três tipos de informação.
As palavras-chave dizem quais conceitos os próprios autores e indexadores associaram aos artigos. Os títulos e resumos dão o contexto, ou seja, mostram como os conceitos são usados no texto. E o conjunto inteiro de textos permite estimar padrões temáticos latentes.
O que o algoritmo entrega no final é uma rede: cada palavra-chave vira um nó, a força de ligação entre duas palavras vira uma aresta, e os nós são agrupados em temas (clusters). A diferença do HySCo-KC em relação a mapas puramente tradicionais é que ele não depende de uma única visão de proximidade. Ele combina coocorrência, semântica e tópicos.
A ideia por trás do método
Mapas clássicos de coocorrência funcionam assim: duas palavras estão relacionadas porque aparecem juntas no mesmo artigo. Isso é útil, mas tem limitações. Duas palavras podem aparecer juntas por hábito de indexação, não por relação conceitual profunda. E duas palavras podem ser conceitualmente muito próximas mesmo sem aparecerem no mesmo artigo, especialmente em campos grandes.
O HySCo-KC tenta reduzir esse problema combinando três lentes.
A primeira lente mede proximidade por coocorrência. A segunda mede proximidade por semântica, olhando como os termos aparecem em títulos e resumos via TF-IDF e similaridade por cosseno. A terceira mede proximidade por tópicos, estimando temas latentes com LDA.
Essas três lentes são combinadas em uma única matriz híbrida, que depois é usada para clusterizar e desenhar o layout.
Fase 0: preparação e normalização das palavras-chave
A primeira coisa que o algoritmo precisa resolver é simples e, ao mesmo tempo, crítica: metadados bibliográficos são inconsistentes. O mesmo conceito pode aparecer como “machine learning”, “Machine-Learning”, “machine-learning”, “Machine learning”. Se isso não for tratado, o mapa fica fragmentado, com várias bolhas representando a mesma coisa.
Nesta fase, há duas camadas.
A primeira é uma limpeza determinística. O algoritmo converte para minúsculas, remove espaços extras e padroniza hífens. Essa etapa é totalmente reprodutível: mesma entrada, mesma saída.
A segunda etapa consiste na normalização assistida por IA, com um cuidado explícito para ser conservadora. O modelo utilizado é o GPT-4.1 Nano (gpt-4.1-nano-2025-04-14), escolhido por sua aderência estrita a instruções diretas e pelo baixo risco de comportamento criativo ou inferências semânticas indevidas. O algoritmo envia apenas a lista de palavras-chave, sem títulos, resumos ou texto completo, restringindo o processo à correção de variações sintáticas. O retorno esperado é um dicionário no formato “original → normalizada”.
Por questões de performance, o algoritmo não envia todas as palavras-chave para o LLM. Ele pré-seleciona as 500 mais frequentes (5 vezes o número final desejado) e normaliza apenas essas. Isso economiza tokens e acelera o processo, já que palavras raras raramente afetam o mapa final. Após a normalização, o algoritmo seleciona as 100 mais frequentes para o mapa.
O algoritmo aceita apenas normalizações de baixo risco, como capitalização, hífen, plural simples e variações ortográficas leves. Em caso de dúvida conceitual, ele mantém a palavra como está. Se essa etapa não puder rodar (por exemplo, indisponibilidade do serviço), o pipeline segue com a limpeza determinística e o mapa é gerado do mesmo jeito.
Lógica interna simplificada:
# limpeza determinística
limpas = [limpar_basico(k) for k in palavras_chave]
# normalização assistida por IA (conservadora)
# o modelo retorna um dicionário: {"original": "normalizada"}
mapa = gpt_normalizar_conservador(limpas, model="gpt-4.1-nano-2025-04-14")
# aplicar o mapeamento
normalizadas = [mapa.get(k, k) for k in limpas]
Em linguagem humana: o algoritmo tenta fazer com que “mesma ideia” vire um único termo, sem misturar conceitos diferentes.
Fase 1: seleção das palavras que entram no mapa
Depois de normalizar, o algoritmo precisa decidir o que é “mapa desenhável”. Bases grandes podem ter milhares de palavras-chave, e muitas aparecem só uma vez. Se todas entrarem, o gráfico vira ruído.
O algoritmo conta a frequência de cada palavra e mantém apenas as mais frequentes. Por padrão, ele usa as 100 palavras mais recorrentes, porque esse é um ponto de equilíbrio entre representar o campo e manter legibilidade. Esse número é um parâmetro explícito: aumentar dá mais detalhe e mais bagunça; reduzir dá menos detalhe e mais clareza.
Lógica interna simplificada:
frequencias = {}
for artigo in artigos:
for palavra in artigo.palavras:
frequencias[palavra] = frequencias.get(palavra, 0) + 1
palavras_selecionadas = ordenar_por_frequencia(frequencias)[:TOP_N]
Fase 2: coocorrência e a visão de rede
Nesta fase, o algoritmo mede proximidade por uso conjunto. Ele cria uma matriz em que linhas e colunas são palavras-chave selecionadas. Para cada artigo, ele pega as palavras daquele artigo e incrementa as combinações possíveis. Isso gera contagens de coocorrência.
Depois, o algoritmo transforma essas contagens em uma similaridade proporcional (por exemplo, via normalização tipo Jaccard), para evitar que palavras muito frequentes fiquem “coladas” em tudo por puro volume.
Ele também aplica um limite mínimo de coocorrência: pares que aparecem juntos raramente são descartados para reduzir ruído.
Lógica interna simplificada:
matriz = criar_matriz(palavras_selecionadas)
for artigo in artigos:
p = intersecao(artigo.palavras, palavras_selecionadas)
for a, b in combinacoes(p):
matriz[a][b] += 1
similaridade_rede = normalizar_matriz(matriz)
Em linguagem humana: o algoritmo cria uma tabela invisível de “quem anda com quem” e depois transforma isso em uma medida comparável.
Fase 3: semântica por TF-IDF e similaridade
Coocorrência diz quem aparece junto. Semântica tenta responder outra pergunta: duas palavras são usadas em contextos parecidos, mesmo quando não aparecem juntas?
O algoritmo pega títulos e resumos e aplica TF-IDF. TF-IDF transforma texto em números e dá mais peso para termos que são importantes em um documento, mas não são triviais no corpus inteiro.
Depois disso, o algoritmo cria um perfil semântico para cada palavra-chave. Ele olha quais artigos contêm aquela palavra e faz a média dos vetores TF-IDF desses artigos. Esse vetor médio representa o “contexto típico” da palavra.
Para medir proximidade entre duas palavras, o algoritmo calcula a similaridade por cosseno entre esses perfis médios.
Há ainda um reforço: se duas palavras aparecem no mesmo artigo, o algoritmo dá um pequeno aumento na similaridade semântica delas. Isso alinha a semântica com evidência bibliográfica direta.
Lógica interna simplificada:
vetores = tfidf(titulos_resumos)
perfil = {}
for palavra in palavras_selecionadas:
idx = indices_de_artigos_que_contem(palavra)
perfil[palavra] = media(vetores[idx])
similaridade_semantica = similaridade_cosseno(perfil)
# boost por coocorrência
similaridade_semantica = aplicar_boost(similaridade_semantica, matriz_coocorrencia)
Fase 4: tópicos latentes por LDA
Mesmo com semântica, ainda existe uma estrutura mais abstrata: tópicos. O algoritmo utiliza LDA (Latent Dirichlet Allocation) para estimar tópicos latentes a partir do corpus.
Em termos simples, LDA tenta descobrir conjuntos de palavras que costumam aparecer juntos nos textos, formando “assuntos”. Cada artigo vira uma mistura de tópicos em diferentes proporções.
A partir disso, o algoritmo cria um perfil temático para cada palavra-chave. Ele pega os artigos em que a palavra aparece e calcula a média das distribuições de tópicos desses artigos. Duas palavras ficam próximas se seus perfis de tópicos forem parecidos.
Essa fase é uma lente adicional. O peso dela é controlável e pode ser reduzido se você quiser um mapa menos influenciado por tópicos.
Lógica interna simplificada:
topicos_por_artigo = treinar_lda(titulos_resumos)
perfil_topicos = {}
for palavra in palavras_selecionadas:
idx = indices_de_artigos_que_contem(palavra)
perfil_topicos[palavra] = media(topicos_por_artigo[idx])
similaridade_topicos = similaridade_cosseno(perfil_topicos)
Fase 5: fusão híbrida das três visões
Aqui o algoritmo faz o que define o HySCo-KC. Ele combina as três matrizes de similaridade em uma única matriz híbrida. Cada componente recebe um peso explícito. Por padrão, os pesos são α=0.25 (rede), β=0.50 (semântica) e γ=0.25 (tópicos). Isso significa que a visão semântica tem o dobro do peso das outras duas.
Quando o peso de rede (alpha) é maior, o mapa tende a se parecer com uma análise clássica de coocorrência. Quando o peso semântico (beta) aumenta, o mapa passa a refletir mais o contexto de títulos e resumos. Quando o peso de tópicos (gamma) aumenta, os agrupamentos temáticos latentes ganham influência.
Depois de combinar, o algoritmo aplica um corte para remover conexões muito fracas. Isso é necessário porque, sem esse corte, mapas com muitos termos ficam visualmente ilegíveis.
Lógica interna simplificada:
similaridade_hibrida = (
alpha * similaridade_rede +
beta * similaridade_semantica +
gamma * similaridade_topicos
)
similaridade_hibrida = aplicar_threshold(similaridade_hibrida)
Fase 6: formação de temas por K-means
Com a matriz híbrida pronta, o algoritmo precisa dividir o mapa em temas, isto é, clusters.
Ele usa K-means, um algoritmo clássico de agrupamento. Em termos simples, K-means tenta posicionar “centros” de clusters e associar cada palavra ao centro mais próximo. Isso é feito iterativamente até estabilizar.
O número de clusters pode ser sugerido automaticamente ou definido como parâmetro. Após a clusterização inicial, o algoritmo avalia clusters muito pequenos. Grupos minúsculos tendem a ser frágeis e pouco interpretáveis, então o algoritmo realoca palavras desses grupos para clusters maiores e mais próximos, com base na matriz híbrida.
É importante mencionar que clusters muito pequenos (com menos de 3 palavras) são automaticamente mesclados com o cluster vizinho mais conectado, para evitar fragmentação visual.
Lógica interna simplificada:
clusters = kmeans(similaridade_hibrida, k)
for c in clusters:
if tamanho(c) < LIMIAR_MINIMO:
realocar_para_cluster_mais_proximo(c, clusters, similaridade_hibrida)
Fase 7: layout do mapa por simulação de forças
Nesta fase, o algoritmo não decide mais nada sobre relações ou temas. Ele apenas transforma o que já foi calculado em uma posição (x, y) para cada palavra, de modo que o mapa seja legível.
O layout é hierárquico: o cluster que contém a palavra-chave mais frequente fica no centro do mapa, e os demais clusters se distribuem radialmente conforme a força de conexão com o cluster central.
O HySCo-KC utiliza um layout do tipo force-directed, baseado em simulação de forças físicas.
- Existe uma força de atração: palavras com ligação forte se aproximam.
- Existe uma força de repulsão: palavras se afastam para não sobrepor.
- Existe uma força de coesão por cluster: palavras do mesmo tema são puxadas para um centro do cluster, criando regiões visuais bem definidas.
O algoritmo atualiza posições iterativamente. A cada iteração, ele aplica forças, limita deslocamentos extremos e reduz gradualmente a energia do sistema até estabilizar.
Quando existem coordenadas previamente calculadas no backend, o algoritmo pode reaproveitar essas posições e apenas ajustar para a área de visualização. Quando não existem, ele inicializa posições e executa a simulação completa.
Lógica interna simplificada:
pos = inicializar_posicoes(palavras_selecionadas)
for _ in range(MAX_ITER):
aplicar_forca_atracao(pos, similaridade_hibrida)
aplicar_forca_repulsao(pos)
aplicar_gravidade_cluster(pos, clusters)
estabilizar(pos)
Em linguagem humana: o algoritmo usa uma “física” controlada para fazer o mapa ficar legível e para que proximidade espacial signifique proximidade conceitual.
Limitações e uso responsável
O HySCo-KC não substitui leitura, não cria teoria e não corrige problemas estruturais das bases. Ele organiza padrões a partir de metadados e texto, e padrões não são verdades absolutas.
A qualidade do mapa depende diretamente da qualidade dos dados de entrada. Se as palavras-chave estão pobres ou inconsistentes, o mapa vai refletir isso. Se títulos e resumos estão vazios, a parte semântica perde força.
O melhor uso do mapa é como uma ferramenta de orientação: identificar núcleos, subáreas, termos ponte e temas prováveis. A validação conceitual e a interpretação final continuam sendo tarefa do pesquisador.
Onde isso acontece na plataforma
O HySCo-KC roda dentro da ferramenta Análise Quantitativa das bases mescladas, na Xplore Dados. É ali que o pipeline é executado após a etapa de mesclagem.
Créditos e acesso
A execução do HySCo-KC, incluindo a normalização assistida por inteligência artificial, utiliza créditos da plataforma. O gerenciamento e a compra de créditos podem ser feitos aqui: Painel de créditos da Xplore Dados
Por que essa transparência importa
Quando o algoritmo é explicado com clareza, o mapa deixa de ser uma figura bonita e passa a ser um resultado metodológico que pode ser defendido. Entender o pipeline significa saber o que o mapa está dizendo e, principalmente, o que ele não está dizendo.
Observação: texto desenvolvido com auxílio da IA.