R:regexpr()如何在模式参数中使用向量
我想从一本短文词典中了解术语的位置。问题出在下面代码的最后几行,这些代码大致基于 我知道pattern=paste(vector,collapse=“|”)的解决方案,但我的向量可能很长(所有常用名称)R:regexpr()如何在模式参数中使用向量,r,regex,vector,vectorization,tm,R,Regex,Vector,Vectorization,Tm,我想从一本短文词典中了解术语的位置。问题出在下面代码的最后几行,这些代码大致基于 我知道pattern=paste(vector,collapse=“|”)的解决方案,但我的向量可能很长(所有常用名称) 这个命令是否有一个简单的矢量化版本,或者是否有一个解决方案可以为每一行接受一个新的模式参数 您可以使用以下方法对regexpr进行矢量化: mapply是sapply的多变量版本mapply将乐趣应用于每个。。。参数、第二个元素、第三个元素等等 使用 结果: Nam
这个命令是否有一个简单的矢量化版本,或者是否有一个解决方案可以为每一行接受一个新的模式参数 您可以使用以下方法对
regexpr
进行矢量化:
mapply
是sapply
的多变量版本mapply
将乐趣应用于每个。。。参数、第二个元素、第三个元素等等
使用
结果:
Name Segment Content Postion
roy roy 3 Roy Batty 1
sebastian sebastian 7 J.F. Sebastian 6
harry harry 8 Harry Bryant 1
dave dave 10 Holden, Dave 9
leon leon 11 Leon Kowalski 1
tyrell tyrell 12 Dr. Eldon Tyrell 11
或者,使用stringr:
字符串和模式上的矢量化
它返回:
对于stru\u locate
,一个整数矩阵。第一列给出匹配的开始位置,第二列给出结束位置
使用
请注意,如果需要将字符串与fixed(即非正则表达式模式)匹配,则使用该选项。否则,请删除
fixed()
和fixed=TRUE
也许您需要stringr::str\u locate(tolower(pkd.names.quotes[tdm$j])、rownames(tdm)[tdm$i])[,1]
。检查stringr
包(和stringi
包),它提供基本相同的regex
基函数,但更快、更矢量化。@nicola它可以工作。请注意,stringr
regex风格是ICU,它与TRE(默认的基本regex引擎)有很大不同,也与PCRE(perl=TRUE
)引擎有很大不同。顺便说一句,如果搜索的字符串是固定字符串,我建议stru locate(tolower(pkd.names.quotes[tdm$j]),fixed(rownames(tdm)[tdm$I])[,1]
Dave在firstnames
中重复。事情可能会变得一团糟?@amonk:也许,下一行可以解决这个问题-dict非常感谢!我开始尝试stringr::str_locate,并取得了一些好的结果,但我还不擅长应用函数族。祝你下午愉快!
Name Segment Content Postion
1 roy 3 Roy Batty 1
2 sebastian 7 J.F. Sebastian -1
3 harry 8 Harry Bryant -1
4 dave 10 Holden, Dave -1
5 leon 11 Leon Kowalski -1
6 tyrell 12 Dr. Eldon Tyrell -1
Warning message:
In regexpr(pattern = rownames(tdm)[tdm$i], text = tolower(pkd.names.quotes[tdm$j])) :
argument 'pattern' has length > 1 and only the first element will be used
data.frame(
Name = rownames(tdm)[tdm$i],
Segment = colnames(tdm)[tdm$j],
Content = pkd.names.quotes[tdm$j],
Postion = mapply(regexpr, rownames(tdm)[tdm$i], tolower(pkd.names.quotes[tdm$j]), fixed=TRUE)
)
Name Segment Content Postion
roy roy 3 Roy Batty 1
sebastian sebastian 7 J.F. Sebastian 6
harry harry 8 Harry Bryant 1
dave dave 10 Holden, Dave 9
leon leon 11 Leon Kowalski 1
tyrell tyrell 12 Dr. Eldon Tyrell 11
str_locate(tolower(pkd.names.quotes[tdm$j]), fixed(rownames(tdm)[tdm$i]))[,1]