VBScript : Levenshtein Distance

Levenshtein Distance은 두 문자열의 유사도를 구할 때 사용할 수 있는 알고리듬이다. 이 알고리듬은 첫번째 문자열을 두번째 문자열로 변환하기 위해서 필요한 작업수를 구한다.

예로 GeorgeGeordie 두 문자열을 생각해 보자. George를 Geordie로 바꾸기 위해서는 다음과 같이 2개의 문자 변환 작업이 필요하다.

  1. George -> Geordie (‘g’를 ‘d’로 치환)
  2. Georde -> Geordie (‘d’와 ‘e’ 사이에 ‘i’ 추가)

이미지 출처 : http://www.codeproject.com/Articles/162790/Fuzzy-String-Matching-with-Edit-Distance

다음은 VBScript로 이를 구현한 소스이다.


Function LevenshteinDistance(string1, string2)
Dim i, j, len1, len2, distance(), result

len1 = Len(string1) : len2 = Len(string2)
ReDim distance(len1, len2)
For i = 0 To len1 : distance(i, 0) = i : Next
For j = 0 To len2 : distance(0, j) = j : Next

For i = 1 To len1
For j = 1 To len2
If Asc(Mid(string1, i, 1)) = Asc(Mid(string2, j, 1)) Then
distance(i, j) = distance(i - 1, j - 1)
Else
distance(i, j) = Min3(distance(i - 1, j) + 1, distance(i, j - 1) + 1, distance(i - 1, j - 1) + 1)
End If
Next
Next

LevenshteinDistance = distance(len1, len2)
End Function

Function Min3(a, b, c)
Dim result

result = a
if (b < result) then result = b
if (c < result) then result = c

Min3 = result
End Function

젊음

문병란

젊은이는 그 웃음 하나로도
세상을 초록빛으로 바꾼다.

헐렁한 바지 속에
알토란 두 개로 버티고 선 모습
그들은 목욕탕에서
장군처럼 당당하게 옷을 벗는다

달은 눈물 흘리는 밤의 여신
작약순은 뽀조롬히 땅을 뚫고 나오는데
8월의 뜨거운 태양 아래
달리아는 온몸으로 함빡 웃는다.

보라! 히말라야 정상도 발아래
젊음은 그 몸뚱이 하나만으로도
세상을 통째로 흥정을 할 수가 있지.

플라타너스 넓은 이파리 아래서도
그들의 꿈은 하늘을 덮고

젊음아! 너의 몸뚱인 황금과 바꿀 수 없는
그 꿈 하나로도 세상을 이기고
슬픔은 축구공처럼 저만큼 날리고
오늘밤 단돈 만원으로도
그녀의 입술을 훔칠 수 있다.
랄랄랄 휘파람을 씽씽 불 수 있다.

나 다시 젊음으로 돌아가면

윤준경

나 다시 젊음으로 돌아가면
사랑을 하리
머리엔 장미를 꽂고
가슴엔 방울을 달아
잘랑잘랑 울리는 소리

너른 들로 가리라
잡초 파아란 들녘을
날개 저어 달리면
바람에 떨리는 방울 소리

방울 소리 커져서
마을을 울리고
산을 울리고
하늘을 울리고
빠알간 얼굴로 돌아누워도
잘랑잘랑잘랑
잘랑잘랑잘랑

나 다시 젊음으로 돌아가면
머리엔 장미를 꽂고
가슴엔 방울을 달고
사랑을 하리
사랑을 하리