2

src$Reviewでは、各行がロシア語のテキストで埋められています。各行のCAPSLOCKを数えたい。たとえば、「My apple is GREEN」では、大文字の数だけでなく、CAPSLOCK (「My」なしで「GREEN」のみ) の数も数えたいと考えています。そのため、少なくとも 2 文字が大文字で表示されている場合にのみ機能します。

今、私は自分のスクリプトに次のコードを持っています:

capscount <- str_count(src$Review, "[А-Я]")

大文字の合計数のみをカウントします。CAPSLOCK 内の文字の合計量のみが必要です。つまり、これらの文字は、単語内の少なくとも 2 文字の後に続く文字 (たとえば、"GREEN" の "GR") が表示されている場合にのみカウントされます。

前もって感謝します。

4

3 に答える 3

4

お探しのパターンは です"\\b[A-Z]{2,}\\b"\\b両側に ,という境界がある 2 つ以上の連続する大文字に一致します。これが全体の構造です。必要に応じてロシア語のアルファベットを記入してください。

#test string. A correct count should be 1 0 2
x <- c("My GREEN", "My Green", "MY GREEN")

library(stringr)
str_count(x, "\\b[A-Z]{2,}\\b")
#[1] 1 0 2

library(stringi)
stri_count(x, regex="\\b[A-Z]{2,}\\b")
#[1] 1 0 2

#base R
sapply(gregexpr("\\b[A-Z]{2,}\\b", x), function(x) length(c(x[x > 0])))
#[1] 1 0 2

アップデート

文字数をご希望の場合:

sapply(str_match_all(x, "\\b[A-Z]{2,}\\b"), nchar)
于 2015-10-18T12:22:34.360 に答える
1

と でピエールの正規表現を使用ncharstr_extract_allます。simplify = TRUEandを使用しpaste0て、すべてのインスタンスを連結します。

library(stringr)

string <- c("My applie is GREEN and Her Majesty's apricot is ORANGE", "I have a LARGE sword", "My baby is sick")

nchar(
  paste0(
    str_extract_all(string = string, pattern = "\\b[A-Z]{2,}\\b", simplify = TRUE), 
    collapse = "")
  )
于 2015-10-18T12:34:32.217 に答える