데이터 분석/텍스트 분석
[R] sub(), gsub(), 정규 표현식
BTC_기범
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"
주의! 대괄호('[]') 속에서 '^' 기호는 뒤의 문자를 제외한 나머지 문자를 의미한다.