Skip to main content

A simple BK-Tree implementation for finding similar words

Project description

topicos-especiais-sd

Correção Ortográfica Automática de Palavras Baseada em Dicionário

Foi feito um estudo dos possíveis algoritmos que poderiam ser implementados para este projeto. Por conseguinte, foi escolhido o melhor algoritmo para implementação.

Distância de Levenshtein

A distância de Levenshtein é a parte principal desse projeto, pois todos os algoritmos usados derivam-se dele. É possível perceber que ela foi utilizada em quase todos os algoritmos pesquisados. Ela mede o número mínimo de edições necessárias para transformar uma string em outra. Estas edições incluem inserções, deleções e substituições de caracteres.

BK-Tree

A BK-Tree consiste em botar as palavras em uma árvore com pesos (distância de Levenshtein) e pecorrer a árvore pegando todas as distâncias menores ou iguais a distância limite estipulada.

Para descobrir a distância entre duas palavras, é criada a matriz dp. A matriz dp[m][n] representa a distância total (Levenshtein) entre duas strings(a e b). A matriz dp tem dimensões (m+1)x(n+1), sendo m o comprimento da string a e n o comprimento da string b. Cada célula dp[i][j] armazena a distância de edição mínima entre as substrings a[0:i] e b[0:j]. A matriz é inicializada com dp[i][0] = i e dp[0][j] = j, indicando as transformações para strings vazias. O preechimento da matriz começa no dp[1][1] até dp[m][n], para cada célula dp[i][j], os caracteres da string a[i-1] e b[j-1] são comparados. Para o caso de serem iguais, dp[i-1][j-1] é transferido diretamente para dp[i][j], o que significa que não precisa ter nenhuma edição. Se forem diferentes, a célula é preenchida com o mínimo entre as possíveis operações(inserção, deleção e substituição).

Depois para buscar palavras semelhantes na árvore, é verificado a distância de edição entre o nó root e a palavra, caso ela seja menor que a variável "TOL" (tolerância), a palavra do root é adicionada a lista de resultados. Após essa verificação, é analisada os nós filhos de root investigando quais palavras tem as distâncias dentro do intervalo [distância - TOL, distância + TOL] para adicionar na lista de resultados.

Para adicionar a palavra na árvore, temos algumas etapas:

  1. Se o nó root está vazio, a palavra atual (curr) que está sendo lida é colocada nesse nó.
  2. Se já existe a palavra no root, é calculada a distância entre o root e a palavra (curr) que precisamos adicionar.
  3. Se não possuir nó para essa distância na árvore no vetor next, cria-se um novo espaço para essa palavra (curr), atualizando o vetor next para apontar para ela e incrementando o contador ptr.
  4. Se ja existir um nó para essa distância, não é criado um novo espaço, adiciona a palavra (curr) nesse nó existente.

FuzzyWuzzy

Fórmula de Cálculo da Similaridade

A similaridade entre duas strings é calculada usando a seguinte fórmula:

Similaridade = (1 - (Distância de Levenshtein / Comprimento máximo das duas strings)) * 100

Esta fórmula fornece um valor percentual que reflete quão semelhantes são as duas strings baseado na distância de Levenshtein, onde 100% representa uma correspondência perfeita e 0% indica nenhuma similaridade.

Referências

http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees
https://www.youtube.com/watch?v=oIsPB2pqq_8
https://medium.com/datenworks/fuzzy-search-buscando-texto-por-aproxima%C3%A7%C3%A3o-6c7214e0ea01

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bk_tree_modification-0.1.2.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bk_tree_modification-0.1.2-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file bk_tree_modification-0.1.2.tar.gz.

File metadata

  • Download URL: bk_tree_modification-0.1.2.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.9.2

File hashes

Hashes for bk_tree_modification-0.1.2.tar.gz
Algorithm Hash digest
SHA256 9c17397d19e8bc3e1d5cec0543e449b53f111d97a152127fcba38ba5374a9e59
MD5 0a5bb83e3543c57bcad486d7c3296fe1
BLAKE2b-256 3bdeca5c2fcd197f974f66308b4af5cf5b52a2e0bf6e5f1a0e86cd673019930c

See more details on using hashes here.

File details

Details for the file bk_tree_modification-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for bk_tree_modification-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b648e335473cfd09f7028e40d9a2aae866377290afcc0e2a0158d5f417ff043a
MD5 42a9f4c835f458931f131eed5e4972fd
BLAKE2b-256 d1e4f77dfa5d107009f0b8c6b5a6da27f282cefda6e0fad7c85ef9b7a8ca6a5e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page