62 lines
1.4 KiB
Markdown
62 lines
1.4 KiB
Markdown
# Kotlin multiplatform library for Levenshtein distance
|
|
|
|
THis library is used to find the closest matches of a word in a predefined set of word, according to
|
|
[Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) or [Damerau-Levenshtein distance](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance).
|
|
|
|
### Build
|
|
The library uses Gradle as the build system, so the only required dependency is a valid JDK 17 implementation.
|
|
Then it can be built using
|
|
|
|
```bash
|
|
./gradlew build
|
|
```
|
|
|
|
### Usage
|
|
|
|
The library is avaliable from "https://woggioni.net/mvn" Maven repository and can ba consumed by another Gradle
|
|
project simply by adding
|
|
|
|
```Groovy
|
|
repositories {
|
|
maven {
|
|
url = "https://woggioni.net/mvn"
|
|
}
|
|
}
|
|
dependencies {
|
|
implementation group: 'net.woggioni', name: 'klevtree', version: '2023.03'
|
|
}
|
|
```
|
|
|
|
As a Kotlin multiplatform library it currently supports the jvm, js and linuxX64 targets
|
|
|
|
### Example code
|
|
|
|
```kotlin
|
|
val words = listOf(
|
|
"tired",
|
|
"authorise",
|
|
"exercise",
|
|
"bloody",
|
|
"ritual",
|
|
"trail",
|
|
"resort",
|
|
"landowner",
|
|
"navy",
|
|
"captivate",
|
|
"captivity",
|
|
"north")
|
|
val tree = LevTrie().apply {
|
|
algorithm = LevTrie.Algorithm.DAMERAU_LEVENSHTEIN
|
|
caseSensitive = false
|
|
words.forEach(this::add)
|
|
}
|
|
val result = tree.fuzzySearch("fired", 1)
|
|
result.forEach {
|
|
println("Word: ${it.first}, distance: ${it.second}")
|
|
}
|
|
|
|
// Word: tired, distance: 1
|
|
|
|
```
|
|
|