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

나 다시 젊음으로 돌아가면

윤준경

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

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

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

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

ASP : MySQL UTF-8 로 접속하기

ASP가 UTF-8 환경이고 MySQL DB가 UTF-8 일 때 다음의 연결 문자열을 사용해서 처리가 가능하다.

Driver={MySQL ODBC 5.1 driver};Server=localhost;Port=3306;Option=3;Database=db;Uid=id; Pwd=password;charset=utf8

MySQL ODBC 3.51에서는 도저히 방법을 찾지 못했다. 또한 MySQL  ODBC 5.1.10에서는 System 오류(Specified driver could not be loaded due to system error 127)가 발생했고, MySQL ODBC 5.1.4 버전에서는 동작을 했다.