Executando verificação de segurança...
7

Recriando o sistema de buscas do Google do zero

Criar um sistema de sistemas de busca é muito trabalhoso, o nosso “Google” vai ser bem simplificado apenas entendermos como ocorre processo de uma busca, e nesse post você vai acompanhar apenas as ideias por trás, se você quiser ver a implementação está no meu repositório do github: https://github.com/grilario/search-engine.

As principais funcionalidades que precisamos implementar no nosso código são:

  1. Analisar uma página web.
  2. Pré-processar os textos para serem melhores de serem buscados.
  3. Armazenar esses dados.
  4. Criar um algoritmo para buscar e ordenar os resultados por relevância.

Analisando uma paǵina web

Analisar um página web o famoso web scraping é técnica bem conhecida, a primeira parte é decidir o que eu quero buscar na página, na minha implantação estou buscando o título da página, e todos parágrafos que estão dentro da tag principal da paǵina, no caso específico do site da Wikipedia uma tag com o id “content” e classe “mw-parser-output”, e as demais paǵinas analiso a tag “body”. Essa é uma parte bem importante que pode ser muito melhorada, um exemplo seria analisar tags de títulos e usar para serem mais relevantes durante a busca.

Pré-processando textos

Essa etapa de pré-processamento é a que garante uma melhor qualidade de busca, e também responsável consideravelmente pela performance. Existem algumas técnicas que o sistemas de busca usam que é a tokenização e o text embeddings, resumindo de forma simples a tokenização é dividir um texto em pedaços menores, por exemplo dividir uma frase em palavras, já text embeddings é conversão de textos em vetores numéricos eles são bastante usados em machine learning, para um exemplo temos array de uma casa que representa o sexo, com um número de pode variar de -1 representado o sexo masculino, e 1 representando o sexo feminino, dado a palavra “rei” esse numero ficaria mais proximo do -1, já com a palavra “rainha” do 1.

PalvraSexo
Rei-1
Rainha1

No nosso caso usamos somente a tokenização de palavras, existem outras formas de tokenização que são usadas no Elasticsearch ou no Postgresql. Além dessas outras técnicas mencionadas anteriormente existe a normalização dos caracteres, sabemos que existem muitos caracteres estranhos e também os caracteres com acentuação que no nosso caso não são muito relevantes, então estamos movendo todos esses caracteres Unicodes para representações ASCII equivalentes.

Armazenando dados

Essa etapa foi a que eu menos dei importância no sistema que fiz, estou armazenando tudo em banco de dados sqlite3, para esse simples caso funciona mas para um sistema maior é necessário outros métodos de armazenamento.

O algoritmo de buscas

E finalmente a parte mais importante, a primeira etapa que faço é filtrar todas as páginas que tem alguma das palavras presente na query de busca com isso já tenho todas as paǵinas que correspondem simplificadamente com a busca. A segunda etapa é organizar esses resultados por relevância para isso calculei a similaridade do texto de cada página com o texto da query, usando o método de frequências de palavras e um cálculo de similaridade de cosseno, se quiser saber mais do sobre esse método e porque da similaridade de cosseno veja esse artigo.

E é isso se você quiser ter um sistema de busca completo no site ou sistema recomendo o da uma olhada no ElasticSearch e no MeiliSearch, e para casos simples o Sonic ou até mesmo seu banco de dados: Criando um sistema de busca usando PostgreSQL.

Carregando publicação patrocinada...