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.1.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.1-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bk_tree_modification-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 53030fdb59d0612d6d5f57d19ed9a354cad258eb43c6eaa38cc2da4e3d0c7abf
MD5 3ff97fa39505909983b257ce80938964
BLAKE2b-256 f6dd45bc9ee7ddd99552f5654c0e8ed5a1f51ec9df69e513e5fee2b7f081518c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bk_tree_modification-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0b60a8b972e396886920411993defdc5a516478dd08351a47d097e8f9eb2648e
MD5 e993d774972c55a80e34ff0a855ac7ff
BLAKE2b-256 bbd9b4f1d0227b30efe8cb7e86b1e0630f1bf70af6521341db0261dacca77eaa

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