ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [R] sub(), gsub(), 정규 표현식
    데이터 분석/텍스트 분석 2022. 4. 8. 23:10
    출처 : do it! 쉽게 배우는 R 텍스트마이닝

    sub(), gsub() 

    sub(), gsub() 함수는 지정한 패턴과 같은 부분을 제시한 문자로 대체할 때 사용된다.

     

    sub() 함수는 'pattern' 파라미터 입력값과 같은 부분 중 문장 가장 앞에 위치하고 있는 부분만 'replacement' 파라미터에 입력한 문자열로 대체된다. 

     

    gsub() 함수는 'pattern' 파라미터 입력값과 같은 부분 전체가 'replacement' 파라미터에 입력한 문자열로 대체된다.

     

    예제)

    xt <- "Data Analytics is useful. Data Analytics is also interesting"
    words <- c('at','bat','cat','chaenomeloes','chase',
               'cheap','check','cheese','chick','hat')
    words2 <- c('12 Dec','OK','http://','<TITLE>Time?<TITLE>','12345','')
    text2 <- c('product.csv','order.csv','customer.csv')
    
    sub(pattern = 'Data', replacement = 'Business', x=txt)
    # "Business Analytics is useful. Data Analytics is also interesting"
    
    gsub(pattern = 'Data', replacement = 'Business', x=txt)
    # "Business Analytics is useful. Business Analytics is also interesting"
    
    gsub(pattern = 'Data', replacement = '', x=txt)
    # " Analytics is useful.  Analytics is also interesting"
    
    gsub('.csv','',text2)
    # "product"  "order"    "customer"
    
    sub('.csv','',text2)
    # "product"  "order"    "customer"

    정규표현식(= 정규식)

    정규표현식, 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.

     

    예제)

    words <- c('at','bat','cat','chaenomeloes','chase',
               'cheap','check','cheese','chick','hat')
    
    words2 <- c('at','bat','cat','chaenomeloes','chase',
               'cheap','check','cheese','chick','hat', 'chasse', 'chse', 'ca-t')
               
    grep("che", words, value = TRUE) # 'che' 문자열을 포함한 것 출력
    # "cheap"  "check"  "cheese"
    
    grep('at', words, value = TRUE) # 'at' 문자열을 포함한 것 출력
    # "at"  "bat" "cat" "hat"
    
    grep('[ch]', words, value = TRUE) # 'c' 또는 'h' 문자열을 포함한 것 출력
    # "cat"          "chaenomeloes" "chase"        "cheap"       
    # "check"        "cheese"       "chick"        "hat"

     

     

    문자 클래스

    [:digit:] # [0-9], 0~9까지 숫자
    
    [:lower:] # [a-z], a~z까지 소문자 알파벳
    
    [:upper:] # [A-Z], A~Z까지 대문자 알파벳
    
    [:alpha:] # [A-z], A~Z와 a~z 대소문자 알파벳
    
    [:alnum:] # [A-z0-9], A~Z, a~z, 0~9 대소문자 알파벳과 숫자
    
    [:punct:] # 문장부호: [!"#$%&'()*+,-./:;<=>?@[]^__`{|}~]
    
    [:blank:] # 블랭크 문자: 스페이스, 탭
    
    [:space:] # 스페이스 문자: 스페이스, 탭, 새라인, 폼피드, 캐리지리턴
    
    [:print:] # [[:alnum:][:punct:][:space:]]
    
    [:graph:] # [[:alnum:][:punct:]]

     

    예제)

    words3 <- c('12 Dec','OK','http://','<TITLE>Time?<TITLE>','12345',' ')
    
    grep('[[:alnum:]]', words3, value = TRUE)
    # "12 Dec"              "OK"                  "http://"            
    # "<TITLE>Time?<TITLE>" "12345" 
    
    grep('[[:alpha:]]',words3, value = TRUE)
    # "12 Dec"              "OK"                  "http://"            
    # "<TITLE>Time?<TITLE>"
    
    grep('[[:digit:]]', words3, value = TRUE)
    # "12 Dec" "12345" 
    
    grep('[[:punct:]]', words3, value = TRUE)
    # "http://"             "<TITLE>Time?<TITLE>"
    
    grep('[[:space:]]', words3, value = TRUE)
    # "12 Dec" " "

    수량자

    ? # 앞 문자는 0회 또는 1회 사용
    
    * # 앞 문자는 0회 이상 반복됨
    
    + # 앞 문자는 1회 이상 반복됨
    
    {n} # 앞 문자는 n회 반복됨
    
    {n, } # 앞 문자는 n회 이상 반복됨
    
    {n, m} # 앞 문자는 n회 이상, m회 이하 반복됨

    예제)

    words2 <- c('at','bat','cat','chaenomeloes','chase',
               'cheap','check','cheese','chick','hat', 'chasse', 'chse', 'ca-t')
    
    grep("chas?e", words2, value=TRUE)
    #  "chaenomeloes" "chase"
    
    grep("chas*e", words2, value=TRUE)
    # "chaenomeloes" "chase"        "chasse"
    
    grep("chas+e", words2, value=TRUE)
    # "chase"  "chasse"

    문자 클래스 시퀀스

    \w # 단어 문자, [[:alnum:]_]
    
    \W # 단어 문자를 제외한 문자, [^[:alnum:]_]
    
    \d # 숫자, [[:digit:]]
    
    \D # 숫자를 제외한 문자, [^[:digit:]]
    
    \s # 스페이스 문자, [[:space:]]
    
    \S # 스페이스 문자를 제외한 문자, [^[:space:]]
    
    \b # 단어 경계의 빈 문자열
    
    \B # 단어 경계가 아닌 빈 문자열, 단어 양쪽 끝을 제외한 빈 문자열
    
    \< # 단어 시작
    
    \> # 단어 끝

    예제)

    grep('\\w+', words3, value =TRUE)
    # "12 Dec"              "OK"                  "http://"
    # "<TITLE>Time?<TITLE>" "12345"
    grep('\\s+', words3, value =TRUE)
    # "12 Dec" " "
    
    grep('\\d+', words3, value =TRUE)
    #  "12 Dec" "12345"
    
    grep('\\D+', words3, value =TRUE)
    # "12 Dec"              "OK"                  "http://"            
    # "<TITLE>Time?<TITLE>" " "

    메타 문자

    ^ # 문자의 시작
    
    $ # 문자의 끝

    예제)

    grep('^c', words2, value=TRUE)
    # "cat"          "chaenomeloes" "chase"        "cheap"       
    # "check"        "cheese"       "chick"        "chasse"      
    # "chse"         "ca-t"   
    
    grep('t$', words2, value=TRUE)
    # "at"   "bat"  "cat"  "hat"  "ca-t"
    
    grep('^c.*t$', words2, value = TRUE)
    # "cat"  "ca-t"
    
    grep('^[ch]?at', words2, value=TRUE)
    # "at"  "cat" "hat"
    
    주의! 대괄호('[]') 속에서 '^' 기호는 뒤의 문자를 제외한 나머지 문자를 의미한다.

    댓글

Designed by Tistory.