[Pleac-commits] CVS: pleac/pleac pleac_haskell.data,1.70,1.71
Status: Alpha
Brought to you by:
ggc
From: Pixel <pi...@us...> - 2008-11-04 21:07:19
|
Update of /cvsroot/pleac/pleac/pleac In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv11469 Modified Files: pleac_haskell.data Log Message: 6.13 Index: pleac_haskell.data =================================================================== RCS file: /cvsroot/pleac/pleac/pleac/pleac_haskell.data,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- pleac_haskell.data 4 Nov 2008 20:40:49 -0000 1.70 +++ pleac_haskell.data 4 Nov 2008 21:07:07 -0000 1.71 @@ -2159,6 +2159,24 @@ -- @@PLEAC@@_6.12 -- Text.Regex and Text.Regex.Posix do not handle unicode (accents...) +-- @@PLEAC@@_6.13 +import Data.List + +-- Calculates the Levenshtein, or edit distance, between two strings. +-- (version taken on internet) +levenshtein sa sb = last $ foldl transform [0..length sa] sb + where + transform xs@(x:xs') c = scanl compute (x+1) (zip3 sa xs xs') + where + compute z (c', x, y) = minimum [y+1, z+1, x + if c == c' then 0 else 1] + +-- Determines if two strings are an approximate match. +amatch percentage s t = levenshtein s t * 100 <= percentage * length s + +main = do s <- readFile "/usr/share/dict/words" + print $ filter (amatch 20 "balast") (lines s) +-- ["balant","balas","balat","ballast","belast","blast"] + -- @@PLEAC@@_APPENDIX import List |