gpt4 book ai didi

r - 如何使用多个模式执行 "find and replace"以在 R 中的字符串中找到

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

我正在尝试在 R 中的字符串中切换单词的性别。例如,如果我有一个句子“My gf has a mother who talks to my father and his bf”,我希望它显示为“My bf has一位与我母亲和她的女朋友交谈的父亲”。

我有一个键值对列表,其中包含一个性别对列表——现在它只是一个数据框,如下所示。然后我解决它的天真的方法就是在我遍历列表的地方做一个字符串替换并将键替换为值。这样做的明显问题是它最终只是交换了句子中的所有内容,然后又将其全部交换回来。您可以看到这是下面的示例代码。

library(stringr)

key_vals = data.frame(first_word = c("bf", "gf", "mother", "father", "his", "her"), second_word = c("gf", "bf", "father", "mother", "her", "his"))

ex = "My gf has a mother who talks to my father and his bf"

for(i in 1:nrow(key_vals)){
ex = str_replace_all(ex, key_vals$first_word[i], key_vals$second_word[i])
}


我的另一个想法是制作两个列表,一个包含所有男性键和所有女性值,而另一个则相反。然后,如果我将句子分成单独的单词,对于每个单词,我可以做一个 if 语句,例如“如果存在男性字符串,将其替换为女性字符串,如果存在女性字符串,则将其替换为男性字符串,否则什么都不做”。但是,我无法弄清楚如何以一种可以轻松地重新组合成工作句子的方式单独获取单词。基于正则表达式等的字符串拆分只是删除了单词,所以我真的很挣扎。

另一个问题是,例如,如果有像“mother”这样的东西,它可能会被替换为“mothis”,因为我使用的是一种愚蠢的匹配字符串的方式,它没有首先识别单词,所以看来我无论如何都需要将它拆分成单词。

这感觉应该比对我来说要简单得多!任何帮助将不胜感激。

最佳答案

我们可以使用gsubfn

library(gsubfn)
gsubfn("(\\w+)", setNames(as.list(key_vals[[2]]), key_vals[[1]]), ex)
[1] "My bf has a father who talks to my mother and her gf"

关于r - 如何使用多个模式执行 "find and replace"以在 R 中的字符串中找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71400239/

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