문자열 비교

R로 데이터 정리하기

Maggie Matsui

Content Developer @ DataCamp

값 사이의 거리 측정

0부터 15까지의 수직선에 3과 10에 점이 표시됨.

R로 데이터 정리하기

값 사이의 거리 측정

같은 수직선에서 3과 10 사이 길이를 빨간색 괄호로 표시.

R로 데이터 정리하기

값 사이의 거리 측정

빨간 선으로 표시된 거리 아래에 10 마이너스 3은 7로 표시.

                                            typhoon과 baboon 사이의 거리는 얼마일까요?

R로 데이터 정리하기

최소 편집 거리

한 문자열을 다른 문자열로 바꾸려면 몇 번의 오타가 필요할까요?

삽입을 나타내는 초록색 플러스 기호.

R로 데이터 정리하기

최소 편집 거리

한 문자열을 다른 문자열로 바꾸려면 몇 번의 오타가 필요할까요?

삭제를 나타내는 빨간색 마이너스 기호

R로 데이터 정리하기

최소 편집 거리

한 문자열을 다른 문자열로 바꾸려면 몇 번의 오타가 필요할까요?

치환을 나타내는 보라색 순환 기호.

R로 데이터 정리하기

최소 편집 거리

한 문자열을 다른 문자열로 바꾸려면 몇 번의 오타가 필요할까요?

전치(자리 바꿈)를 나타내는 파란색 양방향 화살표.

R로 데이터 정리하기

편집 거리 = 1

dog와 dogs의 차이를 초록색 플러스 기호로 표시.

R로 데이터 정리하기

편집 거리 = 1

bath와 bat의 차이를 빨간색 마이너스 기호로 표시.

R로 데이터 정리하기

편집 거리 = 1

cats와 rats의 차이를 보라색 순환 기호로 표시.

R로 데이터 정리하기

편집 거리 = 1

sign과 sign의 차이를 파란색 양방향 화살표로 표시.

R로 데이터 정리하기

더 복잡한 예시

baboon $\rightarrow$ typhoon

단어 baboon

R로 데이터 정리하기

더 복잡한 예시

baboon $\rightarrow$ typhoon
  • h 삽입

baboon 아래에 h 위로 초록색 플러스가 있는 babhoon.

R로 데이터 정리하기

더 복잡한 예시

baboon $\rightarrow$ typhoon
  • h 삽입
  • b $\rightarrow$ t 치환

그 아래에 t 위로 보라색 순환 기호가 있는 tabhoon.

R로 데이터 정리하기

더 복잡한 예시

baboon $\rightarrow$ typhoon
  • h 삽입
  • b $\rightarrow$ t 치환
  • a $\rightarrow$ y 치환

그 아래에 y 위로 보라색 순환 기호가 있는 tybhoon.

R로 데이터 정리하기

더 복잡한 예시

baboon $\rightarrow$ typhoon
  • h 삽입
  • b $\rightarrow$ t 치환
  • a $\rightarrow$ y 치환
  • b $\rightarrow$ p 치환

합계: 4

그 아래에 p 위로 보라색 순환 기호가 있는 typhoon.

R로 데이터 정리하기

편집 거리의 종류

  • Damerau-Levenshtein
    • 방금 학습한 내용
  • Levenshtein
    • 치환, 삽입, 삭제만 고려
  • LCS (최장 공통 부분수열)
    • 삽입과 삭제만 고려
  • 기타
    • Jaro-Winkler
    • Jaccard

어떤 것이 최선일까요?

R로 데이터 정리하기

R에서의 문자열 거리

library(stringdist)
stringdist("baboon", 
           "typhoon",
           method = "dl")
4

이전 슬라이드에서 baboon을 typhoon으로 바꾸는 과정 그림.

R로 데이터 정리하기

다른 방법들

# LCS
stringdist("baboon", "typhoon",
           method = "lcs")
7
# Jaccard
stringdist("baboon", "typhoon",
           method = "jaccard")
0.75
R로 데이터 정리하기

데이터 정제를 위한 문자열 비교

  • 2장에서:
    • "EU", "eur", "Europ" $\rightarrow$ "Europe"
  • 변형이 너무 많으면 어떻게 할까요?
    • "EU", "eur", "Europ", "Europa", "Erope", "Evropa", ... $\rightarrow$ "Europe"?
    • 문자열 거리를 사용합니다!
R로 데이터 정리하기

데이터 정제를 위한 문자열 비교

survey
          city move_score
1       chicgo          4
2   los angles          4
3      chicogo          5
4      new yrk          5
5    new yoork          2
6     seatttle          3
7   losangeles          4
8      seeatle          2
...
cities
         city
1    new york
2     chicago
3 los angeles
4     seattle
R로 데이터 정리하기

문자열 거리로 재매핑

library(fuzzyjoin)
stringdist_left_join(survey, cities, by = "city", method = "dl")
        city.x move_score      city.y
1       chicgo          4     chicago
2   los angles          4 los angeles
3      chicogo          5     chicago
4      new yrk          5    new york
5    new yoork          2    new york
6     seatttle          3     seattle
7   losangeles          4 los angeles
8      seeatle          2     seattle
9      siattle          1     seattle
...
R로 데이터 정리하기

문자열 거리로 재매핑

stringdist_left_join(survey, cities, by = "city", method = "dl", max_dist = 1)
        city.x move_score      city.y
1       chicgo          4     chicago
2   los angles          4 los angeles
3      chicogo          5     chicago
4      new yrk          5    new york
5    new yoork          2    new york
6     seatttle          3     seattle
7   losangeles          4 los angeles
8      seeatle          2        <NA>
9      siattle          1     seattle
...
R로 데이터 정리하기

연습해 봅시다!

R로 데이터 정리하기

Preparing Video For Download...