수색…


소개

이 항목에서는 일치하는 문자열 패턴을 추출하고 바꾸는 방법을 다룹니다. 복잡한 패턴 정의에 대한 자세한 내용은 정규 표현식을 참조하십시오.

통사론

  • grep ( "검색어", "제목", optional_args)

  • grepl ( "query", "subject", optional_args)

  • gsub ( "(group1) (group2)", "\\ group #", "subject")

비고

다른 언어와의 차이점

이스케이프 된 정규식 기호 (예 : \1 )는 pattern 인수뿐만 아니라 subgsub replacement 될 때 \\1 과 같은 두 번째 이스케이프되어야합니다.

기본적으로 모든 명령 (grep, sub, regexpr)의 패턴은 PCRE (Perl Compatible Regular Expression)가 아니므로 둘러보기와 같은 일부 항목은 지원되지 않습니다. 그러나 각 함수는이를 가능하게하기 위해 perl=TRUE 인수를 허용합니다. 자세한 내용은 R 정규 표현식 항목 을 참조하십시오.

전문 패키지

대체물 만들기

# 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)
  }))
} 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow