使用R tidy text mining分句时重编码拆分同句多行为的方法
问题原因
你编写的代码未生效的核心原因是dplyr::recode()是全值匹配函数,只有当column列的单元格内容完全等于apples and oranges时才会触发替换,只要单元格内存在其他字符(比如前后还有其他描述内容)就不会生效。
解决方法
方法1:用正则全局替换匹配局部内容
使用stringr::str_replace_all()支持文本内的局部匹配,还可以批量配置拆分规则,适配所有需要拆分的行为组合即可:
library(tidyverse) library(tidytext) # 配置拆分规则:命名向量的键为原并列短语,值为拆分后的带句号格式 split_rules <- c( "apples and oranges" = "apples. Oranges", "walking and biking" = "walking. Biking" # 可继续添加其他需要拆分的并列行为组合 ) # 全局替换所有匹配到的短语 data <- data %>% mutate(behaviour = str_replace_all(column, split_rules)) # 分句 tidy_text_data <- data %>% unnest_tokens(output = "sentences", input = behaviour, token = "sentences")
方法2:通用正则自动拆分所有并列结构
如果你需要拆分的都是「A and B」类结构,无需逐个指定匹配项,可直接用通用正则规则自动处理,还支持自动将拆分后首字母大写,适配分句规则:
data <- data %>% mutate(behaviour = str_replace_all(column, "([a-zA-Z]+) and ([a-zA-Z]+)", "\\1. \\U\\2"))
其中\\U\\2会自动将匹配到的第二个行为首字母转为大写,符合句子开头格式,提升分句准确率。
方法3:自定义分句规则更可控
如果默认的句子分词规则仍不符合你的拆分需求,可直接指定你插入的句号作为拆分依据,完全自主控制拆分逻辑:
tidy_text_data <- data %>% unnest_tokens( output = "sentences", input = behaviour, token = "regex", pattern = "\\.\\s?" )
内容的提问来源于stack exchange,提问作者rpsychstats
相关产品推荐
相关产品推荐

