gpt4 book ai didi

正则表达式提取与 R 中某些单词匹配的部分字符串

转载 作者:行者123 更新时间:2023-12-01 23:55:05 25 4
gpt4 key购买 nike

我的数据包含如下所示的短信。我想从他们那里提取区 block 年龄。

x:
my block is 8 years old and I am happy with it. I had been travelling since 2 years and that’s fun too…..
He invested in my 1 year block and is happy with the returns
He re-invested in my 1.5 year old block
i had come to U.K for 4 years and when I reach Germany my block will be of 5 years

我提取了数字后跟单词“year”或“years”,但我意识到我应该选择更接近单词“block”的数字。

library(stringr)

> str_extract_all(x, "[0-9.]{1,3}.year|[0-9.]{1,3}.years")
[[1]]
[1] "8 years" "2 years"

[[2]]
[1] "1 year"

[[3]]
[1] "1.5 year"

[[4]]
[1] "4 years" "5 years"

我希望输出是一个包含

的列表
8 years
1 year
1.5 year
5 years

我正在考虑提取句子中包含单词“block”、“old”的部分。但我不太清楚如何实现这一点。任何改进此过程的想法或建议都会有所帮助。

谢谢

最佳答案

这是一个一直使用 stringr 的解决方案:

library(stringr)
m1 <- str_match(x, "block.*?([0-9.]{1,3}.year[s]?)")
m2 <- str_match(x, "([0-9.]{1,3}.year[s]?).*?block")
sapply(seq_along(x), function(i) {
if (is.na(m1[i, 1])) m2[i, 2]
else if (is.na(m2[i, 1])) m1[i, 2]
else if (str_length(m1[i, 1]) < str_length(m2[i, 1])) m1[i, 2]
else m2[i, 2]
})
## [1] "8 years" "1 year" "1.5 year" "5 years"

或等效地:

m1 <- str_match(x, "block.*?([0-9.]{1,3}.year[s]?)")
m2 <- str_match(x, "([0-9.]{1,3}.year[s]?).*?block")
cbind(m1[,2], m2[,2])[cbind(1:nrow(m12), apply(str_length(cbind(m1[,1], m2[,1])), 1, which.min))]

两种解决方案都假定“block”在每个字符串中只出现一次。

关于正则表达式提取与 R 中某些单词匹配的部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com