如何解决如何通过匹配参考值替换子字符串值
我有话语的语音转录:
str <- c("aɪ nəʊ ɪts ɪts ðə sɪksθ əv ʤuːn","wɛl ðə ʧæp nɛkst dɔːz ˈfaɪndɪŋ ɪt ˈvɛri əˈmjuːzɪŋ","lʌvli bu(ː)ˈkeɪ əv ˈflaʊəz fə mi wɛl ðæts ɪt","ðeə raɪt ləʊ ɪn ðə liːg ɑːnt ðeɪ","kɔː wi θɔːt wi wɪʃt wiːd lɛft ˈɜːlɪə naʊ","aɪ nəʊ s ðə biː ðə bɪg bɔɪ ðeɪl","jeə bət ɪt s ə məʊl aɪ kən əˈʃʊə juː","ɑː ʤəst eə haʊ aɪ juːzd tə dʊ jɪəz əˈgəʊ","jeə dəʊnt ˈwʌri əˈbaʊt mi æn aɪm ɔːlˈraɪt")
我想用数字代替所有的双峰; diphthong及其匹配的替换号存储在参考数据框中:
ref <- data.frame(
diphthong = c("ɪə","eɪ","ʊə","ɔɪ","aɪ","eə","aʊ","əʊ"),replacement = 1:8
)
我可以使用gsub
分别替换每个二元音,将结果存储在一个新向量中,替换该新向量中的下一个二元音,依此类推:
a <- gsub("ɪə","1",str)
b <- gsub("eɪ","2",a)
c <- gsub("ʊə","3",b)
d <- gsub("ɔɪ","4",c)
e <- gsub("aɪ","5",d)
f <- gsub("eə","6",e)
g <- gsub("aʊ","7",f)
h <- gsub("əʊ","8",g)
虽然这可以为我带来预期的效果(请参见下文),但此方法是重复性的,而且远非优雅。如何一口气完成替换?
预期结果:
[1] "5 n8 ɪts ɪts ðə sɪksθ əv ʤuːn" "wɛl ðə ʧæp nɛkst dɔːz ˈf5ndɪŋ ɪt ˈvɛri əˈmjuːzɪŋ"
[3] "lʌvli bu(ː)ˈk2 əv ˈfla3z fə mi wɛl ðæts ɪt" "ð6 r5t l8 ɪn ðə liːg ɑːnt ð2"
[5] "kɔː wi θɔːt wi wɪʃt wiːd lɛft ˈɜːl1 n7" "5 n8 s ðə biː ðə bɪg b4 ð2l"
[7] "j6 bət ɪt s ə m8l 5 kən əˈʃ3 juː" "ɑː ʤəst 6 h7 5 juːzd tə dʊ j1z əˈg8"
[9] "j6 d8nt ˈwʌri əˈb7t mi æn 5m ɔːlˈr5t"
解决方法
您可以创建一个简单的for循环:
for(i in seq_len(nrow(ref))) {
str <- gsub(ref$diphthong[i],ref$replacement[i],str)
}
,
足够:
ref
其中ref <- setNames(as.character(1:8),c("ɪə","eɪ","ʊə","ɔɪ","aɪ","eə","aʊ","əʊ"))
定义为:
ref
如果ref <- setNames(as.character(ref$replacement),ref$diphthong)
已被定义为数据帧,则可以通过以下方式将其转换为命名向量:
python -m ipykernel install --user --name=testenv
,
您可以从diphthong数据中创建一个正则表达式来匹配每个单独的diphthong,并在数据上使用一次传递,将每个匹配项替换为替换列中的相应值:
library(stringr)
str <- c("aɪ nəʊ ɪts ɪts ðə sɪksθ əv ʤuːn","wɛl ðə ʧæp nɛkst dɔːz ˈfaɪndɪŋ ɪt ˈvɛri əˈmjuːzɪŋ","lʌvli bu(ː)ˈkeɪ əv ˈflaʊəz fə mi wɛl ðæts ɪt","ðeə raɪt ləʊ ɪn ðə liːg ɑːnt ðeɪ","kɔː wi θɔːt wi wɪʃt wiːd lɛft ˈɜːlɪə naʊ","aɪ nəʊ s ðə biː ðə bɪg bɔɪ ðeɪl","jeə bət ɪt s ə məʊl aɪ kən əˈʃʊə juː","ɑː ʤəst eə haʊ aɪ juːzd tə dʊ jɪəz əˈgəʊ","jeə dəʊnt ˈwʌri əˈbaʊt mi æn aɪm ɔːlˈraɪt")
ref <- data.frame(
diphthong = c("ɪə","əʊ"),replacement = 1:8
)
pat <- paste(ref$diphthong,collapse="|")
str_replace_all(str,pat,function(x) ref$replacement[ref$diphthong==x])
请参见R demo。输出:
[1] "5 n8 ɪts ɪts ðə sɪksθ əv ʤuːn"
[2] "wɛl ðə ʧæp nɛkst dɔːz ˈf5ndɪŋ ɪt ˈvɛri əˈmjuːzɪŋ"
[3] "lʌvli bu(ː)ˈk2 əv ˈfl7əz fə mi wɛl ðæts ɪt"
[4] "ð6 r5t l8 ɪn ðə liːg ɑːnt ð2"
[5] "kɔː wi θɔːt wi wɪʃt wiːd lɛft ˈɜːl1 n7"
[6] "5 n8 s ðə biː ðə bɪg b4 ð2l"
[7] "j6 bət ɪt s ə m8l 5 kən əˈʃ3 juː"
[8] "ɑː ʤəst 6 h7 5 juːzd tə dʊ j1z əˈg8"
[9] "j6 d8nt ˈwʌri əˈb7t mi æn 5m ɔːlˈr5t"
在这种情况下,正则表达式是使用paste(ref$diphthong,collapse="|")
构建的,它只是基于交替的模式ɪə|eɪ|ʊə|ɔɪ|aɪ|eə|aʊ|əʊ
。 ref$replacement[ref$diphthong==x]
部分将找到的diphthong映射为其替换值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。