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:
- Se o nó root está vazio, a palavra atual (curr) que está sendo lida é colocada nesse nó.
- Se já existe a palavra no root, é calculada a distância entre o root e a palavra (curr) que precisamos adicionar.
- 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.
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53030fdb59d0612d6d5f57d19ed9a354cad258eb43c6eaa38cc2da4e3d0c7abf
|
|
| MD5 |
3ff97fa39505909983b257ce80938964
|
|
| BLAKE2b-256 |
f6dd45bc9ee7ddd99552f5654c0e8ed5a1f51ec9df69e513e5fee2b7f081518c
|
File details
Details for the file bk_tree_modification-0.1.1-py3-none-any.whl.
File metadata
- Download URL: bk_tree_modification-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b60a8b972e396886920411993defdc5a516478dd08351a47d097e8f9eb2648e
|
|
| MD5 |
e993d774972c55a80e34ff0a855ac7ff
|
|
| BLAKE2b-256 |
bbd9b4f1d0227b30efe8cb7e86b1e0630f1bf70af6521341db0261dacca77eaa
|