8

たとえば、次のような文字列があるとします。

x <- 'The world is at end. What do you think?   I am going crazy!    These people are too calm.'

!?.句読点とそれに続く空白のみで分割し、句読点を保持する必要があります。

これにより、句読点が削除され、分割部分に先頭のスペースが残ります

vec <- strsplit(x, '[!?.][:space:]*')

句読点を残して文を分割するにはどうすればよいですか?

4

5 に答える 5

14

後読みアサーションを使用しPCREてオンにすることができます。perl=TRUE

strsplit(x, '(?<![^!?.])\\s+', perl=TRUE)

正規表現:

(?<!          look behind to see if there is not:
 [^!?.]       any character except: '!', '?', '.'
)             end of look-behind
\s+           whitespace (\n, \r, \t, \f, and " ") (1 or more times)

ライブデモ

于 2013-11-01T03:12:43.793 に答える
1

たとえば、句読点に続くスペースを文字列に置き換えて、zzzzzその文字列で分割することができます。

x <- gsub("([!?.])[[:space:]]*","\\1zzzzz","The world is at end. What do you think?   I am going crazy!    These people are too calm.")
strsplit(x, "zzzzz")

\1置換文字列内のwhereは、パターンの括弧で囲まれた部分式を参照します。

于 2013-11-01T03:59:22.683 に答える
1

qdap バージョン 1.1.0 以降sent_detect次のように関数を使用できます。

library(qdap)
sent_detect(x)

## [1] "The world is at end."       "What do you think?"        
## [3] "I am going crazy!"          "These people are too calm."
于 2014-02-26T23:18:14.870 に答える