갈대

신경림

언제부턴가 갈대는 속으로
조용히 울고 있었다.
그런 어는 밤이었을 것이다. 갈대는
그의 온몸이 흔들리고 있는 것을 알았다.

바람도 달빛도 아닌 것.
갈대는 저를 흔드는 것이 제 조용한 울음인 것을
까맣게 몰랐다.
– 산다는 것은 속으로 이렇게
조용히 울고 있는 것이란 것을
그는 몰랐다.

암흑 에너지

외계인이 지구의 한 가정을 엿본다. 이 집안의 최고 권력자는 키가 작고 말총머리를 하고 있는 비교적 어린 세포를 가지고 있는 여성이다. 그보다 조금 더 크고 얼굴에 주름이 많아 보이는 다른 여성은 매일 그 어린 여성을 위해 음식을 만들고 빨래를 하고 거주지를 청소한다. 가끔 잔소리를 하지만 행동을 보면 영락없는 하인이다. 가장 키가 큰 남성은 이마가 벗겨지고 배가 불룩하다. 종일 개미처럼 일을 해 그 가정이 필요로 하는 모든 재원을 마련한다. 밤늦게 집에 들어오면 발뒤꿈치를 들고 걸어야 하며, 어린 여성에게 방해될까 봐 큰 소리도 못 낸다. 어린 여성의 행복을 위해 이 늙은 남성이 할 수 있는 최대한의 행동은 없는 것처럼 지내는 것이란다. 그런데 가족 증명을 보니, 나이 많은 남성과 여성은 어린 여성의 아버지이고 어머니란다.

이 가족에 대한 외계인의 분석 결과는 다음과 같다. “드러난 중용한 인자, 즉 그들의 가족적 위치, 육체적 힘, 재정 능력, 대인관계를 기반으로 분석한 결과, 이 가족이 보이는 현재의 행동 양태는 이해하거나 설명할 수 없음. 상황을 이해하기 위해선 뭔가 나타나 있지 않은 다른 분석 요소가 필요함. 우리는 일단 그것을 암흑 에너지라고 부르겠음. 추후 연구가 필요함. 이상.” 이 경우, 암흑 에너지는 ‘사랑’이었다.

이석영 `초신성의 후예` 중에서

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