#title Levenshtein Distance '리벤슈타인 거리'라고 읽는다. [http://jzcafe.blogspot.kr/2012/05/levenshtein-distance.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/OyMV+(Full+of+Aroma+%26+Bouquet) 여기]에 아주 자세히 설명되어 있다. R소스 {{{ library(vwr) levenshtein.distance('cat', 'hat') levenshtein.distance('cat', 'catwalk') levenshtein.distance('catwalk', 'sidewalk') EW = english.words ew1 = sample(EW, 20) dx = levenshtein.distance('cat', ew1) }}} T-SQL소스 {{{ CREATE FUNCTION levenshtein_distance(@s1 nvarchar(3999), @s2 nvarchar(3999)) RETURNS int AS BEGIN DECLARE @s1_len int, @s2_len int DECLARE @i int, @j int, @s1_char nchar, @c int, @c_temp int DECLARE @cv0 varbinary(8000), @cv1 varbinary(8000) SELECT @s1_len = LEN(@s1), @s2_len = LEN(@s2), @cv1 = 0x0000, @j = 1, @i = 1, @c = 0 WHILE @j <= @s2_len SELECT @cv1 = @cv1 + CAST(@j AS binary(2)), @j = @j + 1 WHILE @i <= @s1_len BEGIN SELECT @s1_char = SUBSTRING(@s1, @i, 1), @c = @i, @cv0 = CAST(@i AS binary(2)), @j = 1 WHILE @j <= @s2_len BEGIN SET @c = @c + 1 SET @c_temp = CAST(SUBSTRING(@cv1, @j+@j-1, 2) AS int) + CASE WHEN @s1_char = SUBSTRING(@s2, @j, 1) THEN 0 ELSE 1 END IF @c > @c_temp SET @c = @c_temp SET @c_temp = CAST(SUBSTRING(@cv1, @j+@j+1, 2) AS int)+1 IF @c > @c_temp SET @c = @c_temp SELECT @cv0 = @cv0 + CAST(@c AS binary(2)), @j = @j + 1 END SELECT @cv1 = @cv0, @i = @i + 1 END RETURN @c END }}} --http://www.kodyaz.com/articles/fuzzy-string-matching-using-levenshtein-distance-sql-server.aspx {{{ select dbo.levenshtein_distance('cat', 'hat'), dbo.levenshtein_distance('cat', 'catwalk'), dbo.levenshtein_distance('catwalk', 'sidewalk') }}}