-
[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" 주의! 대괄호('[]') 속에서 '^' 기호는 뒤의 문자를 제외한 나머지 문자를 의미한다.
'데이터 분석 > 텍스트 분석' 카테고리의 다른 글
[R] Stringr 패키지 (0) 2022.04.16 [R] 텍스트 패턴 찾기, 위치 정보 수집, 수정 함수 (0) 2022.04.14 [R] Do it R 텍스트마이닝_1 (0) 2022.04.11 [R]함수 paste(), paste0(), outer() 등 (0) 2022.04.02 [R] readr 패키지 (0) 2022.04.01