R Language
패턴 일치 및 교체
수색…
소개
이 항목에서는 일치하는 문자열 패턴을 추출하고 바꾸는 방법을 다룹니다. 복잡한 패턴 정의에 대한 자세한 내용은 정규 표현식을 참조하십시오.
통사론
grep ( "검색어", "제목", optional_args)
grepl ( "query", "subject", optional_args)
gsub ( "(group1) (group2)", "\\ group #", "subject")
비고
다른 언어와의 차이점
이스케이프 된 정규식 기호 (예 : \1
)는 pattern
인수뿐만 아니라 sub
및 gsub
replacement
될 때 \\1
과 같은 두 번째 이스케이프되어야합니다.
기본적으로 모든 명령 (grep, sub, regexpr)의 패턴은 PCRE (Perl Compatible Regular Expression)가 아니므로 둘러보기와 같은 일부 항목은 지원되지 않습니다. 그러나 각 함수는이를 가능하게하기 위해 perl=TRUE
인수를 허용합니다. 자세한 내용은 R 정규 표현식 항목 을 참조하십시오.
전문 패키지
- 현악기
- stringr
대체물 만들기
# example data
test_sentences <- c("The quick brown fox quickly", "jumps over the lazy dog")
갈색 여우를 빨간색으로 만들어 봅시다.
sub("brown","red", test_sentences)
#[1] "The quick red fox quickly" "jumps over the lazy dog"
이제, 만들어 보자 "fast"
여우 행위 "fastly"
. 이렇게하지 않습니다 :
sub("quick", "fast", test_sentences)
#[1] "The fast red fox quickly" "jumps over the lazy dog"
sub
가 처음으로 사용 가능한 대체품 만 만들면 글로벌 교체를 위해 gsub
가 필요합니다.
gsub("quick", "fast", test_sentences)
#[1] "The fast red fox fastly" "jumps over the lazy dog"
자세한 예제 는 대체 문자열 수정을 참조하십시오.
성냥 찾기
# example data
test_sentences <- c("The quick brown fox", "jumps over the lazy dog")
성냥이 있습니까?
grepl()
은 문자열 또는 문자 벡터에 단어 또는 정규 표현식이 있는지 확인하는 데 사용됩니다. 이 함수는 TRUE / FALSE (또는 "Boolean") 벡터를 반환합니다.
우리는 각 문자열에서 "여우"라는 단어를 검사 할 수 있고 그 대가로 부울 벡터를받을 수 있습니다.
grepl("fox", test_sentences)
#[1] TRUE FALSE
위치 일치
grep
은 문자열과 정규 표현식을 사용합니다. 이것은 인덱스의 숫자 벡터를 반환합니다. 이것은 "fox"라는 단어가 포함 된 문장을 반환합니다.
grep("fox", test_sentences)
#[1] 1
일치하는 값
패턴과 일치하는 문장을 선택하려면,
# each of the following lines does the job:
test_sentences[grep("fox", test_sentences)]
test_sentences[grepl("fox", test_sentences)]
grep("fox", test_sentences, value = TRUE)
# [1] "The quick brown fox"
세부
"fox"
패턴은 정규 표현식이 아니라 단순한 단어이기 때문에 fixed = TRUE
를 지정하여 성능을 향상시킬 수 있습니다 ( grep
또는 grepl
).
grep("fox", test_sentences, fixed = TRUE)
#[1] 1
패턴과 일치 하지 않는 문장을 선택하려면 grep
with invert = TRUE
사용할 수 있습니다. 또는 -grep(...)
또는 !grepl(...)
하여 -grep(...)
세트 지정 규칙을 따르십시오.
grepl(pattern, x)
및 grep(pattern, x)
에서 x
매개 변수는 벡터화 되고 pattern
매개 변수는 벡터화 되지 않습니다. 결과적으로 일치 이것들을 직접 사용할 수 없습니다 pattern[1]
에 대한 x[1]
, pattern[2]
에 대한 x[2]
, 등등.
경기 요약
예를 들어 grepl
명령을 수행 한 후 TRUE
또는 FALSE
일치 수에 대한 개요를 얻고 자 할 수 있습니다. 이것은 큰 데이터 세트의 경우에 유용합니다. 그렇게하기 위해서 summary
명령을 실행하십시오 :
# example data
test_sentences <- c("The quick brown fox", "jumps over the lazy dog")
# find matches
matches <- grepl("fox", test_sentences)
# overview
summary(matches)
단일 및 글로벌 일치.
정규 표현식으로 작업 할 때 PCRE에 대한 하나의 수정자는 전역 일치에 대해 g
입니다.
R 일치 및 대체 함수에는 두 가지 버전이 있습니다 : 첫 번째 일치 및 전체 일치 :
sub(pattern,replacement,text)
는sub(pattern,replacement,text)
에서 첫 번째로 나오는 pattern 대체를 대체합니다.gsub(pattern,replacement,text)
는 sub와 같지만 패턴이 나타날 때마다 동일하게 수행됩니다.regexpr(pattern,text)
는 패턴의 첫 번째 인스턴스에 대한 일치 위치를 반환합니다.gregexpr(pattern,text)
은 모든 일치를 반환합니다.
일부 무작위 데이터 :
set.seed(123)
teststring <- paste0(sample(letters,20),collapse="")
# teststring
#[1] "htjuwakqxzpgrsbncvyo"
모음을 다른 것으로 바꾸려면이 방법이 어떻게 적용되는지 보겠습니다.
sub("[aeiouy]"," ** HERE WAS A VOWEL** ",teststring)
#[1] "htj ** HERE WAS A VOWEL** wakqxzpgrsbncvyo"
gsub("[aeiouy]"," ** HERE WAS A VOWEL** ",teststring)
#[1] "htj ** HERE WAS A VOWEL** w ** HERE WAS A VOWEL** kqxzpgrsbncv ** HERE WAS A VOWEL** ** HERE WAS A VOWEL** "
이제 우리가 어떻게 하나 이상의 모음이 뒤 따르는 자음을 찾을 수 있는지 봅시다.
regexpr("[^aeiou][aeiou]+",teststring)
#[1] 3
#attr(,"match.length")
#[1] 2
#attr(,"useBytes")
#[1] TRUE
우리는 길이 2의 문자열의 위치 3을 찾습니다. 예 : ju
이제 우리가 모든 경기를 원한다면 :
gregexpr("[^aeiou][aeiou]+",teststring)
#[[1]]
#[1] 3 5 19
#attr(,"match.length")
#[1] 2 2 2
#attr(,"useBytes")
#[1] TRUE
이 모든 것은 정말 훌륭합니다. 그러나 일치하는 위치 만 사용하면 일치하는 것을 얻는 것이 쉽지 않습니다. 여기 regmatches
가 나오는데 regexpr에서 일치하는 문자열을 추출하는 것이 유일한 목적이지만 다른 구문을 사용합니다.
일치 항목을 변수에 저장 한 다음 원래 문자열에서 추출해 봅시다.
matches <- gregexpr("[^aeiou][aeiou]+",teststring)
regmatches(teststring,matches)
#[[1]]
#[1] "ju" "wa" "yo"
이것은 지름길을 가지지 않는 것이 이상하게 들릴지 모르지만, 이것은 우리의 첫 번째 것과 일치하는 다른 문자열로부터 추출을 허용합니다 (두 개의 긴 벡터를 비교하는 것이 첫 번째 패턴에 대한 일반적인 패턴이지만 두 번째 패턴에 대한 일반적인 패턴이 아니라는 것을 생각하십시오. 쉬운 비교) :
teststring2 <- "this is another string to match against"
regmatches(teststring2,matches)
#[[1]]
#[1] "is" " i" "ri"
주의 사항 : 기본적으로 패턴은 Perl 호환 정규식이 아니지만 둘러보기와 같은 일부 기능은 지원되지 않지만 여기에 표시된 각 함수는 perl=TRUE
인수를 사용하여이를 사용 가능하게합니다.
큰 데이터 세트에서 일치 항목 찾기
큰 데이터 세트의 경우, grepl("fox", test_sentences)
호출이 잘 수행되지 않습니다. 큰 데이터 세트는 크롤링 된 웹 사이트 또는 백만 개의 트윗 등입니다.
첫 번째 가속은 perl = TRUE
옵션을 사용하는 것입니다. 더 빨리 옵션은 fixed = TRUE
입니다. 완전한 예제는 다음과 같습니다.
# example data
test_sentences <- c("The quick brown fox", "jumps over the lazy dog")
grepl("fox", test_sentences, perl = TRUE)
#[1] TRUE FALSE
텍스트 마이닝의 경우 종종 코퍼스가 사용됩니다. 코퍼스는 grepl
직접 사용할 수 없습니다. 따라서 다음 함수를 고려하십시오.
searchCorpus <- function(corpus, pattern) {
return(tm_index(corpus, FUN = function(x) {
grepl(pattern, x, ignore.case = TRUE, perl = TRUE)
}))
}