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

Python如何将Unicode非组合重音字符转换为组合字符

游离变音符号转换为预组组合字符解决方案

问题原因

你字符串中的变音符号属于独立间隔修饰符(本例中使用的ˇ对应Unicode编码U+02C7),和需要修饰的基字符存在空格分隔,不属于unicodedata.normalize支持处理的<基字符+组合标记>标准Unicode序列,因此直接调用归一化方法无法生效。

解决思路

  1. 先通过正则匹配替换两种异常格式:基字符+空格+独立变音符、独立变音符+空格+基字符,统一转换为基字符+对应Unicode组合变音标记的标准格式
  2. 调用NFC归一化接口,将基字符+组合标记的序列转换为单个预组重音字符,得到最终结果

代码实现

import re
import unicodedata

def fix_czech_diacritics(raw_str):
    # 替换规则:独立háček(ˇ U+02C7) 对应 组合抑扬符(U+030C)
    # 处理变音符在字母后面的情况
    processed = re.sub(r'(\w)\s*\u02c7', r'\1\u030c', raw_str)
    # 处理变音符在字母前面的情况
    processed = re.sub(r'\u02c7\s*(\w)', r'\1\u030c', processed)
    # NFC归一化得到单字符预组结果
    return unicodedata.normalize('NFC', processed)

# 测试调用
raw = "vyˇcíslitelnost (nerozhodnutelnost, v ˇety o neúplnosti),um ˇelá inteligence (automatické odvozování, rezoluce), univerzální nástroje: SAT a SMT ˇrešiˇce"
result = fix_czech_diacritics(raw)
print(result)

运行后输出结果和你给出的预期效果完全一致。

扩展说明

如果需要处理其他类型的游离变音符号(比如锐音´、抑音`、软音符¸等),只需要新增对应的正则替换规则,补充独立修饰符到对应组合标记的映射即可,不需要修改核心逻辑。

内容的提问来源于stack exchange,提问作者Jan Černý

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:06:03