[MySQL] 사운덱스 (Soundex)

2020. 9. 24. 20:24

영어 이름은 발음은 비슷하거나 거의 같은데 철자가 다른 경우가 많습니다. 예를 들면 루이스라는 이름의 철자는 Lewis, Luis, Louis, ... 여러가지가 나올 수 있습니다. 그래서 이런 헷갈리는 이름의 경우 전화로 이름을 말할때는 스펠링까지 말하기도 합니다.

1920년대에 미국 국립문서기록관리청(NARA, National Archives and Records Administration)에서 인구조사 기록을 효율적으로 관리하기 위해 유사한 발음을 갖는 이름을 그룹화하기 위한 사운덱스 알고리즘을 개발했는데 모든 문자열을 알파벳+3자리 숫자로 표기하는 방식입니다.

알고리즘은 위키에 잘 나와있으니 찾아보시고요, 결과물을 보면 helo=hello=hallow=H400 이런식으로 색인이 만들어집니다.

 

SOUNDEX(str)
str: 문자열

MySQL에서 사운덱스 함수를 사용해 문자열에 사운덱스 알고리즘을 적용한 결과물을 얻을 수 있습니다. 표준 사운덱스 문자열은 원래 4글자인데, MySQL에서는 뒤에 숫자를 늘려 임의 길이의 문자가 생성되는 점 참고해주세요.

이 함수는 영어 알파벳에만 적용됩니다. 그리고 MySQL에서 사운덱스는 D. Knuth가 제안한 개선된 버전이 아니라 1920년대에 나온 버전으로 구현되어 있다고 합니다.

mysql> SELECT SOUNDEX('Hello');
        -> 'H400'
mysql> SELECT SOUNDEX('Quadratically');
        -> 'Q36324'

예제입니다. 사운덱스 결과물의 길이가 4자리를 넘어갈 수 있다는 것을 확인할 수 있습니다.

 

expr1 SOUNDS LIKE expr2

SOUNDEX(expr1) = SOUNDEX(expr2)와 동일

SOUNDS LIKE라는 동의어를 사용해 간편하게 활용할 수도 있습니다.