> soundex | 음성 | 퍼지 매칭 <
// Soundex - 이름을 발음 기준으로 인덱싱하는 음성 알고리즘
발음 기반
철자가 아니라 발음을 기준으로 이름을 코드화합니다.
퍼지 매칭
철자가 달라도 비슷하게 들리는 이름을 찾습니다.
가계·계보 연구
계보학 및 역사 기록 분석에 유용한 도구입니다.
>> 기술 정보
Soundex 동작 방식:
Soundex는 이름의 첫 글자를 그대로 두고 나머지 자음을 음성 그룹에 따라 숫자로 치환합니다. 비슷한 발음의 자음은 동일한 숫자를 사용하고, 모음은 무시됩니다. American 방식에서는 결과를 네 자리로 패딩하고, Refined 방식에서는 가변 길이 코드가 생성됩니다.
인코딩 규칙:
1 = B,F,P,V 2 = C,G,J,K,Q,S,X,Z 3 = D,T 4 = L 5 = M,N 6 = R Robert → R163 Rupert → R163 Rubin → R150
Soundex를 사용하는 이유:
- >데이터베이스 중복 레코드 제거
- >가계/족보 연구
- >인구조사 데이터 분석
- >고객 데이터 매칭
- >철자 오류 보정
>> 자주 묻는 질문
Soundex란 무엇인가요?
Soundex는 이름을 발음에 따라 인덱싱하기 위해 1918년에 고안된 음성 알고리즘입니다. 미국 인구조사에서 철자가 달라도 비슷하게 들리는 성을 쉽게 찾기 위해 설계되었습니다.
American Soundex와 Refined Soundex의 차이는?
American Soundex는 문자 1개와 숫자 3개로 이루어진 4자리 코드를 생성합니다. Refined Soundex(SQL Server 등에서 사용)는 더 세분화된 매핑과 가변 길이 코드를 사용해 매칭 정확도를 높입니다.
철자가 다른데 같은 코드가 나오는 이유는?
그것이 바로 Soundex의 목적입니다. Smith와 Schmidt처럼 철자는 달라도 발음이 비슷한 이름을 같은 그룹으로 묶어, 데이터베이스에서 이름 변형을 더 쉽게 찾을 수 있게 해 줍니다.
Soundex의 한계는 무엇인가요?
Soundex는 주로 영어 이름을 대상으로 설계되었습니다. 다른 언어의 이름에는 잘 맞지 않을 수 있으며, 같은 이름이라도 철자가 크게 다르면 서로 다른 코드가 생성될 수 있습니다.
// 빠른 참조
| Digit | Letters |
|---|---|
| 1 | B F P V |
| 2 | C G J K Q S X Z |
| 3 | D T |
| 4 | L |
| 5 | M N |
| 6 | R |
| — | A E I O U Y H W (skipped) |
// 코드 예제
1. Keep the first letter. 2. Replace the other letters with digits (table above). 3. Drop vowels and Y; H and W are skipped (letters on both sides of H/W with the same code collapse into one digit). 4. Collapse adjacent identical digits. 5. Pad with 0 or truncate to letter + 3 digits. Robert -> R163 Rupert -> R163 Rubin -> R150 Ashcraft -> A261 Tymczak -> T522 Pfister -> P236
>> 더 많은 질문
Q: Robert와 Rupert가 같은 Soundex 코드가 되는 이유는?
A: 둘 다 R로 시작하고 자음 그룹으로 부호화됩니다. B/P → 1, R → 6, T → 3으로 R163이 됩니다. Soundex는 비슷하게 소리 나는 자음을 묶으므로 같은 이름의 철자 변형이 잘 일치합니다.
Q: Soundex는 H와 W를 어떻게 처리하나요?
A: H와 W는 건너뛰며 구분자 역할을 하지 않습니다. 양옆 자음이 같은 코드면 하나의 소리로 셉니다. 그래서 Ashcraft는 A226이 아니라 A261입니다. 모음은 구분합니다.
Q: Soundex의 한계는?
A: 영어 이름용으로 설계되었고(1918/1922년 Russell과 Odell의 특허) 첫 글자 이후의 소리 차이는 구분하지 않습니다. Catherine과 Katherine처럼 첫 글자가 다르면 일치하지 않습니다.