Skip to content

runawaydevil/algosim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔍 AlgoSim - Algoritmo de Detecção de Similaridade de Conteúdo

Python PHP Node.js License Version

Desenvolvido por Pablo Murad
Algoritmo avançado de detecção de similaridade de conteúdo que combina análise multi-dimensional para identificar documentos relacionados com alta precisão.

📋 Visão Geral

O AlgoSim é um algoritmo proprietário desenvolvido por Pablo Murad para detectar similaridade entre documentos de texto, especialmente útil para consolidação de conteúdo duplicado ou relacionado. O algoritmo combina análise de palavras-chave, temas, estrutura e tamanho para calcular uma pontuação de similaridade precisa e confiável.

🧮 Fundamentos Matemáticos

Similaridade de Palavras-chave (Jaccard + Bonus de Raridade)

A similaridade de palavras-chave utiliza a métrica de Jaccard com um bonus para palavras raras:

J(A,B) = |A ∩ B| / |A ∪ B|

Onde:

  • A e B são conjuntos de palavras-chave dos documentos
  • |A ∩ B| é a interseção (palavras em comum)
  • |A ∪ B| é a união (todas as palavras únicas)

Bonus de Raridade:

R_bonus = Σ(min(len(kw), 10) / 10) para kw ∈ (A ∩ B)

Similaridade Final:

S_keywords = min(J(A,B) + R_bonus, 1.0)

Similaridade de Temas (Cosseno)

A similaridade de temas utiliza a similaridade de cosseno entre vetores de temas:

cos(θ) = (A · B) / (||A|| × ||B||)

Onde:

  • A · B é o produto escalar dos vetores de temas
  • ||A|| e ||B|| são as normas dos vetores

Implementação:

dot_product = Σ(A[i] × B[i])
norm_A = √(Σ(A[i]²))
norm_B = √(Σ(B[i]²))
S_themes = dot_product / (norm_A × norm_B)

Similaridade Estrutural

A similaridade estrutural compara elementos de formatação:

S_structure = 1 - (Σ|diff_i| / |elements|)

Onde:

  • diff_i = |count_i_A - count_i_B| / max(count_i_A, count_i_B, 1)
  • elements inclui: headers, listas, links, imagens, blocos de código, etc.

Similaridade de Tamanho

A similaridade de tamanho considera a proporção entre documentos:

size_ratio = min(len_A, len_B) / max(len_A, len_B)
S_size = size_ratio^0.5

Cálculo Final Combinado

O algoritmo combina todas as métricas com pesos específicos:

S_final = (S_keywords × 0.4) + (S_themes × 0.6) + (S_structure × 0.15) + (S_size × 0.05)

Penalizações Anti-Falsos Positivos

Penalização por Poucas Palavras-chave:

if S_final > 0.7 and |A ∩ B| < 3:
    S_final *= 0.5

Penalização por Diferença de Tamanho:

if size_ratio < 0.3:
    S_final *= 0.6

🔧 Como Funciona

1. Pré-processamento

  • Limpeza de cabeçalhos: Remove elementos comuns que podem causar falsos positivos
  • Normalização: Converte texto para análise consistente
  • Tokenização: Divide o conteúdo em palavras e frases relevantes

2. Análise de Palavras-chave

  • Identifica termos técnicos e específicos do domínio (50+ palavras)
  • Calcula sobreposição de vocabulário entre documentos
  • Pondera palavras raras mais do que palavras comuns

3. Análise de Temas

  • Detecta 10 categorias temáticas: adult, sports, games, music, books, news, education, technology, business, health
  • Compara distribuição de temas entre documentos
  • Aplica thresholds específicos por categoria

4. Análise Estrutural

  • Compara organização do conteúdo (títulos, seções, listas)
  • Identifica padrões de formatação similares
  • Detecta estrutura de documentos

5. Cálculo Final

similarity = (keyword_similarity * 0.4) + (theme_similarity * 0.6) + 
             (structure_similarity * 0.15) + (size_similarity * 0.05)

✨ Características Principais

  • 🎯 Multi-dimensional: Combina múltiplas métricas de similaridade
  • 🔧 Adaptativo: Ajusta thresholds baseado no tipo de conteúdo
  • 🛡️ Robusto: Resistente a falsos positivos através de penalizações
  • ⚡ Escalável: Eficiente para grandes volumes de documentos
  • 🌐 Multi-linguagem: Implementado em Python, PHP e Node.js

🎯 Casos de Uso

  1. 📚 Consolidação de Documentação: Mesclar versões similares de guias
  2. 🔍 Detecção de Duplicatas: Identificar conteúdo repetido
  3. 📂 Categorização Automática: Agrupar documentos por tema
  4. 🌍 Tradução Inteligente: Consolidar documentos em diferentes idiomas
  5. 📁 Arquivo Digital: Organizar grandes coleções de documentos

💻 Implementações

  • Python - Implementação completa e robusta
  • PHP - Versão otimizada para web
  • Node.js - Implementação assíncrona para APIs

📊 Práticas Recomendadas

Thresholds Sugeridos

  • 🟢 Alta similaridade: > 0.8 (consolidação automática)
  • 🟡 Similaridade média: 0.5 - 0.8 (revisão manual)
  • 🔴 Baixa similaridade: < 0.5 (manter separado)

Otimizações

  • Use cache para documentos já processados
  • Implemente processamento em lote para grandes volumes
  • Ajuste thresholds baseado no domínio específico
  • Monitore falsos positivos e negativos

Considerações de Performance

  • Algoritmo O(n²) para comparação completa
  • Use indexação para otimizar buscas
  • Implemente paralelização para grandes datasets
  • Considere sampling para análise inicial

⚠️ Limitações

  • Requer pré-definição de palavras-chave e temas
  • Sensível à qualidade do pré-processamento
  • Pode ter dificuldade com documentos muito curtos
  • Performance degrada com muitos documentos

🚀 Futuras Melhorias

  • 🤖 Machine Learning: Detecção automática de temas
  • 🌐 Multi-idioma: Suporte a múltiplos idiomas simultâneos
  • 🧠 Análise Semântica: Usando embeddings
  • 🖥️ Interface Web: Configuração interativa

👨‍💻 Autor

Pablo Murad
Desenvolvedor e pesquisador em algoritmos de similaridade de conteúdo.

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

🤝 Contribuições

Contribuições são bem-vindas! Por favor, abra uma issue ou pull request para melhorias.

📈 Estatísticas do Projeto

GitHub stars GitHub forks GitHub issues GitHub pull requests

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published