Text completion: Difference between revisions

Added Go
m (→‎{{header|Phix}}: flexible args)
(Added Go)
Line 28:
# How can you make the accuracy of your program higher?
 
 
=={{header|Go}}==
{{trans|Wren}}
<lang go>package main
 
import (
"bytes"
"fmt"
"io/ioutil"
"log"
)
 
func levenshtein(s, t string) int {
d := make([][]int, len(s)+1)
for i := range d {
d[i] = make([]int, len(t)+1)
}
for i := range d {
d[i][0] = i
}
for j := range d[0] {
d[0][j] = j
}
for j := 1; j <= len(t); j++ {
for i := 1; i <= len(s); i++ {
if s[i-1] == t[j-1] {
d[i][j] = d[i-1][j-1]
} else {
min := d[i-1][j]
if d[i][j-1] < min {
min = d[i][j-1]
}
if d[i-1][j-1] < min {
min = d[i-1][j-1]
}
d[i][j] = min + 1
}
}
 
}
return d[len(s)][len(t)]
}
 
func main() {
search := "complition"
b, err := ioutil.ReadFile("unixdict.txt")
if err != nil {
log.Fatal("Error reading file")
}
words := bytes.Fields(b)
var lev [4][]string
for _, word := range words {
s := string(word)
ld := levenshtein(search, s)
if ld < 4 {
lev[ld] = append(lev[ld], s)
}
}
fmt.Printf("Input word: %s\n\n", search)
for i := 1; i < 4; i++ {
length := float64(len(search))
similarity := (length - float64(i)) * 100 / length
fmt.Printf("Words which are %4.1f%% similar:\n", similarity)
fmt.Println(lev[i])
fmt.Println()
}
}</lang>
 
{{out}}
<pre>
Input word: complition
 
Words which are 90.0% similar:
[completion]
 
Words which are 80.0% similar:
[coalition competition compilation complexion composition]
 
Words which are 70.0% similar:
[cognition collision combustion commotion companion compassion complain complicity compton compulsion compunction computation condition contrition demolition incompletion volition]
</pre>
 
=={{header|Java}}==
Line 106 ⟶ 187:
Process finished with exit code 0
</pre>
 
 
=={{header|Julia}}==
9,476

edits