【发布时间】:2020-12-19 18:55:47
【问题描述】:
我似乎想不出一个看似简单的任务:
我有语音的音素转录。为了计算音素,我想将字符串分成单个音素段。不幸的是,用于音素的字符并非 100% 不同。例如,长 /i/ 音转写为 iː(注意:ː 不是冒号而是特殊字符!)而短 /i/ 音偶尔可能转写为 i。在两个不同的音素中重复使用i 会导致拆分操作出现问题:
测试数据:
test1 <- "dɪd ɛnɪbɒdi liːv ðeə glɑːsɪz hɪə lɑːst wiːk sʌmbədi dɪd"
所有音素的向量:
phonemes <- c("ɪə","eɪ","ʊə","ɔɪ","aɪ","eə","aʊ","əʊ", # diphthongs
"iː","uː","ɜː","ɔː","ɑː", # long vowels
"ə","ɪ", "ɛ","ɒ","ʌ","æ","i","ʊ", # short vowels
"j","w", # semi-vowels
"r","l", # approximants
"n","m","ŋ", # nasals
"f","v","θ","ð","s","z","ʃ","ʒ","h", # fricatives
"ʧ","ʤ", # affricates
"p","b","t","d","k","g") # plosives
交替模式:
phonemes_pattern <- paste0("(", paste0(phonemes, collapse = "|"), ")")
splitting 操作:
str_split(gsub(" ", "", test1), paste0("(?<=", phonemes_pattern, ")"))
[[1]]
[1] "d" "ɪ" "d" "ɛ" "n" "ɪ" "b" "ɒ" "d" "i" "l" "i" "ː" "v" "ð" "eə" "g" "l" "ɑː" "s" "ɪ" "z" "h" "ɪ" "ə" "l" "ɑː" "s" "t"
[30] "w" "i" "ː" "k" "s" "ʌ" "m" "b" "ə" "d" "i" "d" "ɪ" "d" ""
结果是正确的除了对于长 /i/ 声音,其中两个字符 i 和 ː 也是分开的。有人可以帮忙吗?
【问题讨论】: