我有话语的音标:
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")
Run Code Online (Sandbox Code Playgroud)
我想用数字替换所有双元音;双元音及其匹配的替换编号存储在参考数据帧中:
ref <- data.frame(
diphthong = c("??", "e?", "??", "??", "a?", "e?", "a?", "??"),
replacement = 1:8
)
Run Code Online (Sandbox Code Playgroud)
我可以使用 单独替换每个双元音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)
Run Code Online (Sandbox Code Playgroud)
虽然这让我得到了想要的结果(见下文),但这种方法是重复的,而且远非优雅。如何一次性实现替换?
预期结果:
[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"
Run Code Online (Sandbox Code Playgroud)
您可以根据双元音数据创建一个正则表达式来匹配每个单独的双元音,并使用一次传递数据,将每个匹配项替换为替换列中的相应值:
\nlibrary(stringr)\nstr <- c("a\xc9\xaa n\xc9\x99\xca\x8a \xc9\xaats \xc9\xaats \xc3\xb0\xc9\x99 s\xc9\xaaks\xce\xb8 \xc9\x99v \xca\xa4u\xcb\x90n",\n "w\xc9\x9bl \xc3\xb0\xc9\x99 \xca\xa7\xc3\xa6p n\xc9\x9bkst d\xc9\x94\xcb\x90z \xcb\x88fa\xc9\xaand\xc9\xaa\xc5\x8b \xc9\xaat \xcb\x88v\xc9\x9bri \xc9\x99\xcb\x88mju\xcb\x90z\xc9\xaa\xc5\x8b",\n "l\xca\x8cvli bu(\xcb\x90)\xcb\x88ke\xc9\xaa \xc9\x99v \xcb\x88fla\xca\x8a\xc9\x99z f\xc9\x99 mi w\xc9\x9bl \xc3\xb0\xc3\xa6ts \xc9\xaat",\n "\xc3\xb0e\xc9\x99 ra\xc9\xaat l\xc9\x99\xca\x8a \xc9\xaan \xc3\xb0\xc9\x99 li\xcb\x90g \xc9\x91\xcb\x90nt \xc3\xb0e\xc9\xaa",\n "k\xc9\x94\xcb\x90 wi \xce\xb8\xc9\x94\xcb\x90t wi w\xc9\xaa\xca\x83t wi\xcb\x90d l\xc9\x9bft \xcb\x88\xc9\x9c\xcb\x90l\xc9\xaa\xc9\x99 na\xca\x8a",\n "a\xc9\xaa n\xc9\x99\xca\x8a s \xc3\xb0\xc9\x99 bi\xcb\x90 \xc3\xb0\xc9\x99 b\xc9\xaag b\xc9\x94\xc9\xaa \xc3\xb0e\xc9\xaal",\n "je\xc9\x99 b\xc9\x99t \xc9\xaat s \xc9\x99 m\xc9\x99\xca\x8al a\xc9\xaa k\xc9\x99n \xc9\x99\xcb\x88\xca\x83\xca\x8a\xc9\x99 ju\xcb\x90",\n "\xc9\x91\xcb\x90 \xca\xa4\xc9\x99st e\xc9\x99 ha\xca\x8a a\xc9\xaa ju\xcb\x90zd t\xc9\x99 d\xca\x8a j\xc9\xaa\xc9\x99z \xc9\x99\xcb\x88g\xc9\x99\xca\x8a",\n "je\xc9\x99 d\xc9\x99\xca\x8ant \xcb\x88w\xca\x8cri \xc9\x99\xcb\x88ba\xca\x8at mi \xc3\xa6n a\xc9\xaam \xc9\x94\xcb\x90l\xcb\x88ra\xc9\xaat")\n \nref <- data.frame(\n diphthong = c("\xc9\xaa\xc9\x99", "e\xc9\xaa", "\xca\x8a\xc9\x99", "\xc9\x94\xc9\xaa", "a\xc9\xaa", "e\xc9\x99", "a\xca\x8a", "\xc9\x99\xca\x8a"),\n replacement = 1:8\n)\npat <- paste(ref$diphthong, collapse="|")\nstr_replace_all(str, pat, function(x) ref$replacement[ref$diphthong==x])\nRun Code Online (Sandbox Code Playgroud)\n请参阅R 演示。输出:
\n[1] "5 n8 \xc9\xaats \xc9\xaats \xc3\xb0\xc9\x99 s\xc9\xaaks\xce\xb8 \xc9\x99v \xca\xa4u\xcb\x90n" \n[2] "w\xc9\x9bl \xc3\xb0\xc9\x99 \xca\xa7\xc3\xa6p n\xc9\x9bkst d\xc9\x94\xcb\x90z \xcb\x88f5nd\xc9\xaa\xc5\x8b \xc9\xaat \xcb\x88v\xc9\x9bri \xc9\x99\xcb\x88mju\xcb\x90z\xc9\xaa\xc5\x8b"\n[3] "l\xca\x8cvli bu(\xcb\x90)\xcb\x88k2 \xc9\x99v \xcb\x88fl7\xc9\x99z f\xc9\x99 mi w\xc9\x9bl \xc3\xb0\xc3\xa6ts \xc9\xaat" \n[4] "\xc3\xb06 r5t l8 \xc9\xaan \xc3\xb0\xc9\x99 li\xcb\x90g \xc9\x91\xcb\x90nt \xc3\xb02" \n[5] "k\xc9\x94\xcb\x90 wi \xce\xb8\xc9\x94\xcb\x90t wi w\xc9\xaa\xca\x83t wi\xcb\x90d l\xc9\x9bft \xcb\x88\xc9\x9c\xcb\x90l1 n7" \n[6] "5 n8 s \xc3\xb0\xc9\x99 bi\xcb\x90 \xc3\xb0\xc9\x99 b\xc9\xaag b4 \xc3\xb02l" \n[7] "j6 b\xc9\x99t \xc9\xaat s \xc9\x99 m8l 5 k\xc9\x99n \xc9\x99\xcb\x88\xca\x833 ju\xcb\x90" \n[8] "\xc9\x91\xcb\x90 \xca\xa4\xc9\x99st 6 h7 5 ju\xcb\x90zd t\xc9\x99 d\xca\x8a j1z \xc9\x99\xcb\x88g8" \n[9] "j6 d8nt \xcb\x88w\xca\x8cri \xc9\x99\xcb\x88b7t mi \xc3\xa6n 5m \xc9\x94\xcb\x90l\xcb\x88r5t" \nRun Code Online (Sandbox Code Playgroud)\n在本例中,正则表达式是使用 构建的paste(ref$diphthong, collapse="|"),并且只是基于交替的模式\xc9\xaa\xc9\x99|e\xc9\xaa|\xca\x8a\xc9\x99|\xc9\x94\xc9\xaa|a\xc9\xaa|e\xc9\x99|a\xca\x8a|\xc9\x99\xca\x8a. 该ref$replacement[ref$diphthong==x]部分将找到的双元音映射到其替换值。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |