문자열 유사도

두 문자열을 레벤슈타인·다메라우·자로–윙클러·다이스·해밍으로 비교하고 삽입·삭제·치환을 표시합니다 — 입력하는 즉시 갱신됩니다.

레벤슈타인 거리
1
유사도
80.0%
1 − 1 ÷ 5 = 80.0%
다메라우 거리
1
자로–윙클러 유사도
88.0%
다이스 유사도
50.0%
해밍 거리
1
치환 1 · 삽입 0 · 삭제 0
안녕→뇽하세요

a→b는 치환, 밑줄 친 문자는 삽입, 취소선이 그어진 문자는 삭제이고, 나머지는 그대로 둔 문자입니다.

편집 거리는 한 문자열을 다른 문자열로 바꾸는 데 필요한 문자 단위 삽입·삭제·치환의 최소 횟수입니다. 유사도는 1 − 레벤슈타인 거리 ÷ 더 긴 문자열의 길이(글자 수)입니다. 100%는 똑같다는 뜻이고, 대문자와 소문자는 다른 글자로 셉니다.

다메라우 거리(최적 문자열 정렬, OSA)는 인접한 두 문자를 바꾸는 것("form" ↔ "from")도 한 번의 편집으로 세지만, 같은 부분을 두 번 고치지는 않으므로 "ca" → "abc"는 2가 아니라 3입니다.

자로–윙클러 유사도는 두 문자열이 거의 같은 자리에 함께 가진 문자를 세고, 앞부분이 같으면 점수를 더 줍니다. 이름 비교에 알맞습니다.

다이스 유사도는 두 문자열이 함께 가진 이웃 문자 쌍의 두 배 ÷ 전체 쌍의 수입니다. 단어 하나가 자리를 옮겨도 점수가 크게 떨어지지 않아 긴 글에 알맞습니다.

해밍 거리는 문자가 다른 자리의 수를 세므로, 길이가 같은 문자열끼리만 비교합니다.

레벤슈타인 거리와 유사도 퍼센트

문자열 유사도는 두 텍스트를 비교해 입력하는 즉시 수치를 보여줍니다. 첫 번째는 레벤슈타인 거리로, 한 문자열을 다른 문자열로 바꾸는 데 필요한 문자 단위 삽입·삭제·치환의 최소 횟수입니다. 두 번째는 유사도 퍼센트로, 1 - 거리 / max(길이)로 계산되어 완전히 같은 문자열은 100%, 길이가 같지만 전혀 다른 문자열은 0%가 됩니다. 유사도 상자는 퍼센트 아래에 입력한 값으로 계산 과정을 보여 줍니다. kitten과 sitting이면 1 − 3 ÷ 7 = 57.1%입니다. 이름, 상품 코드, 코드 조각, 문장 등 어떤 텍스트에도 사용할 수 있습니다.

거리 계산 방식

이 도구는 고전적인 동적 계획법 레벤슈타인 알고리즘을 사용해 가능한 모든 편집 경로를 고려하고 가장 비용이 낮은 값을 반환합니다. 치환을 한 번의 편집으로 세기 때문에 "cat"을 "bat"으로 바꾸는 비용은 1이고, "kitten"을 "sitting"으로 바꾸는 비용은 3입니다. 이와 함께 다메라우 거리도 보여주는데, 인접한 두 문자를 바꾸는 것("form"과 "from")까지 한 번의 편집으로 세어 실제 오타에 더 가깝습니다. 이는 최적 문자열 정렬(OSA) 방식이라 같은 부분을 두 번 고치지 않으므로, ca에서 abc까지는 2가 아니라 3입니다. 비교는 대소문자를 구분하며 유니코드 코드 포인트를 개별 문자로 취급합니다. 두 값은 어느 한 상자가 바뀌는 즉시 다시 계산되므로 버튼을 누르지 않고도 철자, 오타 교정, 유사 매칭을 실험해 볼 수 있습니다. 두 문자열 비교에서는 ⇄ 두 문자열 맞바꾸기로 두 칸을 서로 바꿀 수 있고, 편집 거리 표 보기를 켜면 첫 번째 문자열을 세로로, 두 번째 문자열을 가로로 빈 시작(∅)부터 놓은 레벤슈타인 표 전체를 그리고 마지막 칸의 거리를 강조합니다. 한 칸씩 따라가기에 너무 긴 문자열이면 표 대신 그렇다고 알려 줍니다. 유사도 점수 아래의 막대는 점수만큼 길고, 전혀 다르면 빨간색에서 똑같으면 초록색까지 색이 바뀝니다. 링크 복사는 비교를 그대로 넘겨 줍니다 — 두 문자열이나 목록은 복사한 링크에만 담기고 주소창에는 쓰이지 않으며, 방식은 페이지 주소에 남습니다.

다른 점수들과 편집 내용

편집 거리 옆에는 다른 척도도 함께 보여 줍니다. 자로–윙클러 유사도는 두 문자열이 거의 같은 자리에 함께 가진 문자를 세고 앞부분이 같으면 점수를 더 주어 이름 비교에 알맞습니다. 다이스 유사도는 각 문자열의 이웃 문자 쌍을 비교해 함께 가진 쌍의 두 배를 전체 쌍의 수로 나누므로, 단어가 자리를 옮겨도 점수가 크게 떨어지지 않습니다. 해밍 거리는 문자가 다른 자리의 수를 세며 길이가 같은 두 문자열에만 정의되므로, 길이가 다르면 숫자 대신 그렇다고 알려 줍니다. 점수 아래에는 가장 짧은 편집 경로 하나를 따라 치환·삽입·삭제 횟수를 세고 텍스트에 표시합니다. 치환은 원래 문자→바뀐 문자로, 삽입은 밑줄로, 삭제는 취소선으로 보여 줍니다.

자주 묻는 질문

레벤슈타인 거리란 정확히 무엇인가요?

한 문자열을 다른 문자열로 바꾸는 데 필요한 문자 단위 편집(삽입·삭제·치환)의 최소 횟수입니다. 예를 들어 "kitten"에서 "sitting"까지의 거리는 3입니다.

유사도 퍼센트는 어떻게 계산되나요?

1에서 편집 거리를 더 긴 문자열의 길이로 나눈 값을 뺀 뒤 퍼센트로 표시합니다. 완전히 같은 문자열은 100%, 길이가 같고 공통 문자가 없는 두 문자열은 0%입니다. 두 빈 문자열은 100% 동일한 것으로 처리됩니다.

목록에서 가장 비슷한 것을 찾을 수 있나요?

네. ‘목록에서 가까운 것 찾기’로 바꾸고 찾을 문자열과 후보를 한 줄에 하나씩 넣으면, 모든 후보를 유사도 순으로 매기고 옆에 레벤슈타인·다메라우 거리를 함께 보여 줍니다.

거리가 어떻게 나왔는지 볼 수 있나요?

네. “편집 거리 표 보기”를 켜면 거리가 나온 동적 계획법 표를 그립니다. 각 칸은 그 행까지의 첫 번째 문자열을 그 열까지의 두 번째 문자열로 바꾸는 최소 편집 횟수이고, 강조된 마지막 칸이 레벤슈타인 거리입니다. 표는 짧은 문자열에만 그리며, 그보다 길면 각 문자열이 몇 자까지여야 하는지 알려 줍니다.

비교 결과를 공유하거나 점수를 한눈에 볼 수 있나요?

네. 링크 복사는 같은 비교를 다시 여는 링크를 복사합니다. 두 문자열이나 목록은 # 뒤에, 방식은 ? 뒤에 담기고, 링크를 열면 이를 읽어 들인 뒤 주소에서 지웁니다. 입력하는 동안 문자열은 주소창에 쓰이지 않고 복사한 링크에만 담깁니다. 유사도 점수 아래에는 점수만큼 긴 막대가 0%의 빨간색에서 주황색을 거쳐 100%의 초록색까지 색을 바꿔 보여 줍니다.

어떤 점수를 써야 하나요?

오타나 짧은 코드에는 레벤슈타인·다메라우 거리와 유사도 퍼센트가 알맞습니다. 이름에는 앞부분이 같을수록 점수를 더 주는 자로–윙클러, 긴 글에는 단어가 자리를 옮겨도 거의 변하지 않는 다이스, 길이가 정해진 코드에는 길이가 같은 문자열끼리만 비교하는 해밍이 알맞습니다.