Python中如何拆分韩语音节为单个基础谚文字符?
拆分韩语音节为单个音素
要把韩语音节拆分成对应的辅音、元音和收音,不能直接用[*syllable](单个韩语音节是独立Unicode字符,拆分会返回自身),得利用韩语字符的编码规则解析:
解决方案代码
# 定义韩语初声(辅音)、中声(元音)、终声(收音)列表 initial_consonants = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'] vowels = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'] final_consonants = ['', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'] def split_hangul_syllable(syllable): # 检查输入是否为单个韩语音节 if len(syllable) != 1 or not ('가' <= syllable <= '힣'): return [syllable] # 计算字符编码偏移量 code_offset = ord(syllable) - ord('가') # 拆分各音素的索引 initial_idx = code_offset // (21 * 28) vowel_idx = (code_offset % (21 * 28)) // 28 final_idx = code_offset % 28 # 组装结果列表 parts = [initial_consonants[initial_idx], vowels[vowel_idx]] if final_consonants[final_idx]: parts.append(final_consonants[final_idx]) return parts # 测试示例 example = '만들다' print(split_hangul_syllable(example[-2])) # 输出: ['ㄷ', 'ㅡ', 'ㄹ']
原理说明
韩语音节(如들)在Unicode中是单个复合字符,范围为U+AC00(가)到U+D7AF(힣),每个音节由**初声(辅音)、中声(元音)、终声(收音,可选)**组成:
- 用字符编码减去
가的编码,得到偏移量 - 通过数学运算拆分出三个音素的索引
- 从预设的音素列表中取出对应字符,组装成结果
如果需要批量拆分整个字符串的所有音节,可再封装一个函数:
def split_hangul_string(s): result = [] for char in s: result.extend(split_hangul_syllable(char)) return result print(split_hangul_string('만들다')) # 输出: ['ㅁ', 'ㅏ', 'ㄴ', 'ㄷ', 'ㅡ', 'ㄹ', 'ㄷ', 'ㅏ']
内容的提问来源于stack exchange,提问作者Francisco García Barrada
相关产品推荐
相关产品推荐

