regex - 将句子分成词和尾标

标签 regex r

我想将一个句子分成单词和结束标记(假设所有其他标点符号都已删除)。我已经编写了一个工作函数来按照描述将字符串分开,但我认为这部分:

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/

相关文章:

sql - 独特的组合频率

R M1 构建不会编译包

java - 正则表达式不起作用,应该如何制定?

regex - TCL Regex 用于匹配 CSV 中的未转义引号

php - 从 SQL 查询中提取所有表

javascript - JavaScript 中的构造函数正则表达式

Python 字符串(参数)-> 正则表达式

r - 在具有多个匹配行的 R 中使用 reshape 函数

r - ggmap 具有值的热图

r - 错误 : Could not find a root 'DESCRIPTION' file that starts with '^Package'