计数+识别两个字符串向量中的常用词 [R]
Posted
技术标签:
【中文标题】计数+识别两个字符串向量中的常用词 [R]【英文标题】:Count+Identify common words in two string vectors [R] 【发布时间】:2021-04-01 04:45:22 【问题描述】:我如何编写一个 R 函数,它可以采用两个字符串向量并返回常用词的数量以及比较从 stringvec1 的元素 1 到 stringvec2 的元素 1、stringvec1 的元素 2 到 stringvec2 的元素 2 等的常用词的数量。
假设我有这些数据:
#string vector 1
strvec1 <- c("Griffin Rahea Petersen Deana Franks Morgan","Story Keisha","Douglas Landon Lark","Kinsman Megan Thrall Michael Michels Breann","Gutierrez Mccoy Tyler West*** Grayson Swank Shirley Didas Moriah")
#string vector 2
strvec2 <- c("Griffin Morgan Rose Manuel","Van De Grift Sarah Sell William","Mark Landon Lark","Beerman Carlee Megan Thrall Michels","Mcmillan Tyler Jonathan West*** Grayson Didas Lloyd Connor")
理想情况下,我有一个函数可以返回常用词的数量以及常用词是什么:
#Non working sample of how functions would ideally work
desiredfunction_numwords(strvec1,strvec2)
[1] 2 0 2 3 4
desiredfunction_matchwords(strvec1,strvec2)
[1] "Griffin Morgan" "" "Landon Lark" "Megan Thrall Michels" "Tyler West*** Grayson Didas"
【问题讨论】:
【参考方案1】:您可以在每个单词处拆分字符串并执行操作。
在基础 R 中:
numwords <- function(str1, str2)
mapply(function(x, y) length(intersect(x, y)),
strsplit(str1, ' '), strsplit(str2, ' '))
matchwords <- function(str1, str2)
mapply(function(x, y) paste0(intersect(x, y),collapse = " "),
strsplit(str1, ' '), strsplit(str2, ' '))
numwords(strvec1, strvec2)
#[1] 2 0 2 3 4
matchwords(strvec1, strvec2)
#[1] "Griffin Morgan" "" "Landon Lark"
#[4] "Megan Thrall Michels" "Tyler West*** Grayson Didas"
【讨论】:
【参考方案2】:您可以将strvec1
用作正则表达式模式,通过strsplit
将其分成单独的单词并paste
将单词与交替标记|
一起使用:
pattern <- paste0(unlist(strsplit(strvec1, " ")), collapse = "|")
您可以将此模式与str_count
和str_extract_all
一起使用:
library(stringr)
# counts:
str_count(strvec2, pattern)
[1] 2 0 2 3 4
# matches:
str_extract_all(strvec2, pattern)
[[1]]
[1] "Griffin" "Morgan"
[[2]]
character(0)
[[3]]
[1] "Landon" "Lark"
[[4]]
[1] "Megan" "Thrall" "Michels"
[[5]]
[1] "Tyler" "West***" "Grayson" "Didas"
【讨论】:
以上是关于计数+识别两个字符串向量中的常用词 [R]的主要内容,如果未能解决你的问题,请参考以下文章
R语言常用函数:交集intersect并集union找不同setdiff判断相同setequal的运用