You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确将音素转写字符串分割为单个音素段?

解决音素分割时长元音被拆分的问题

你遇到的核心问题是正则表达式的匹配顺序:你的phonemes向量里,单字符的短元音i排在双字符的长元音iː前面,导致正则引擎优先匹配了短的i,而不是完整的iː,最终把长元音拆成了两个部分。

解决方案:调整音素匹配顺序

正则的交替匹配是从左到右尝试的,所以我们只需要把多字符的音素(双元音、长元音、塞擦音)都放在单字符音素的前面,让引擎优先匹配完整的长音素,而不是先匹配它的子字符。

步骤如下:

  1. 重新排序你的音素向量:
# 优先排列多字符音素,再放单字符音素
phonemes <- c(
  # 双元音(双字符)
  "ɪə","eɪ","ʊə","ɔɪ","aɪ","eə","aʊ","əʊ",
  # 长元音(双字符)
  "iː","uː","ɜː","ɔː","ɑː",
  # 塞擦音(双字符)
  "ʧ","ʤ",
  # 单字符音素
  "ə","ɪ", "ɛ","ɒ","ʌ","æ","i","ʊ",
  "j","w",
  "r","l",
  "n","m","ŋ",
  "f","v","θ","ð","s","z","ʃ","ʒ","h",
  "p","b","t","d","k","g"
)
  1. 重新生成匹配模式并执行分割:
library(stringr)

test1 <- "dɪd ɛnɪbɒdi liːv ðeə glɑːsɪz hɪə lɑːst wiːk sʌmbədi dɪd"
phonemes_pattern <- paste0("(", paste0(phonemes, collapse = "|"), ")")
test1_clean <- gsub(" ", "", test1)

# 执行分割
split_result <- str_split(test1_clean, paste0("(?<=", phonemes_pattern, ")"))

# 查看结果
split_result[[1]]

正确结果示例

调整后,长元音iː会被作为一个整体保留,分割结果里的对应部分会是:
"l", "iː", "v" 而不是之前的 "l", "i", "ː", "v"

整个分割结果会变成:

[1] "d"   "ɪ"   "d"   "ɛ"   "n"   "ɪ"   "b"   "ɒ"   "d"   "i"   "l"   "iː"  "v"   "ð"   "eə"  "g"   "l"   "ɑː"  "s"   "ɪ"   "z"   "h"   "ɪ"   "ə"  
[25] "l"   "ɑː"  "s"   "t"   "w"   "iː"  "k"   "s"   "ʌ"   "m"   "b"   "ə"   "d"   "i"   "d"   "ɪ"   "d"   ""

这样就能完美解决长元音被错误拆分的问题啦!

内容的提问来源于stack exchange,提问作者Chris Ruehlemann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:06:05