我想将一个句子分成单词和结束标记(假设所有其他标点符号都已删除)。我已经编写了一个工作函数来按照描述将字符串分开,但我认为这部分:
unlist(c(strsplit(x, "[^[:alnum:]'\"]", perl = T), substring(x, nchar(x), nchar(x))))
是一个可以更好地实现的 cob 工作,无需使用子字符串,只需在空格处以及在结束标记之间使用 or | 进行拆分即可。各种声明,但不知道我将如何实现这一目标。对此的任何指示将不胜感激。
breaker <- function(string) {
FUN <- function(x) {
unlist(c(strsplit(x, "[^[:alnum:]'\"]", perl = T), substring(x,
nchar(x), nchar(x))))
}
lapply(string, FUN)
}
#EXAMPLES
x <- "I'm liking it!"
breaker(x)
y <- c("I'm liking it!", "How much do you like it?", "I'd say it's awesome.")
breaker(y)
最佳答案
这是一个正则表达式模式,它可以独立完成整个工作。它将匹配(并因此允许 strsplit()
拆分字符串) 在一个空格处 或 就在句子结尾的标点符号之一之前分数。
pat <- "[[:space:]]|(?=[.!?])"
模式的前半部分匹配空格字符,任何匹配都会导致 strsplit()
在拆分字符串时“吃掉”匹配的字符。模式的后半部分((?=...)
内的部分)匹配句末标点符号。它是“零宽度正先行断言”的示例(详情请参阅 ?regexp
),因此,将不导致 strsplit()
“吃掉” up'匹配的标点符号。
对于您的示例向量,您甚至不需要调用 lapply()
:
breaker <- function(X) {
strsplit(X, "[[:space:]]|(?=[.!?])", perl=TRUE)
}
x <- "I'm liking it!"
breaker(x)
y <- c("I'm liking it!", "How much do you like it?", "I'd say it's awesome.")
breaker(y)
关于regex - 将句子分成词和尾标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808733/