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

如何实现韩文字符解构 完成韩语谓词向词典原形的转换

韩语谓词(动词/形容词)原形转换实现方案

不需要切换技术栈,JavaScript原生能力即可完整实现你需要的韩文字符操作与词形转换逻辑,核心基于韩文音节的Unicode编码规则实现,不需要依赖任何第三方库。

核心原理:韩文字符的编码与拆解合成规则

现代韩文所有音节块都在Unicode编码区间U+AC00 ~ U+D7A3内,每个音节固定由「初声(首辅音)+ 中声(元音)+ 终声(尾辅音/收音,可空)」三部分组成,三者的排列顺序有统一标准:

  • 初声共19个,顺序为:ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ
  • 中声共21个,顺序为:ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ
  • 终声共28个(首位为空收音),顺序为: ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ

单个音节的编码值计算公式为:编码值 = 0xAC00 + 初声索引 * 21 * 28 + 中声索引 * 28 + 终声索引,反过来就可以通过整除、取模运算把任意韩文字符拆解为三个基础音素,也可以把三个音素拼合成合法的韩文字符,你提到的가 + ㅆ = 갔这类拼接需求用这个逻辑可以直接实现。

基础工具函数实现(JavaScript)

先封装通用的韩文拆解、合成函数,覆盖所有韩文字符操作场景:

// 音素映射表
const CHOSUNG = ['ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ','ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ'];
const JUNGSUNG = ['ㅏ','ㅐ','ㅑ','ㅒ','ㅓ','ㅔ','ㅕ','ㅖ','ㅗ','ㅘ','ㅙ','ㅚ','ㅛ','ㅜ','ㅝ','ㅞ','ㅟ','ㅠ','ㅡ','ㅢ','ㅣ'];
const JONGSUNG = ['','ㄱ','ㄲ','ㄳ','ㄴ','ㄵ','ㄶ','ㄷ','ㄹ','ㄺ','ㄻ','ㄼ','ㄽ','ㄾ','ㄿ','ㅀ','ㅁ','ㅂ','ㅄ','ㅅ','ㅆ','ㅇ','ㅈ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ'];

/**
 * 拆解单个韩语音节为初/中/终三个音素
 * @param {string} char 单个韩文字符
 * @returns {[string, string, string]} [初声, 中声, 终声]
 */
function splitHangul(char) {
  const baseCode = char.charCodeAt(0) - 0xAC00;
  const jongIdx = baseCode % 28;
  const jungIdx = Math.floor(baseCode / 28) % 21;
  const choIdx = Math.floor(baseCode / (28 * 21));
  return [CHOSUNG[choIdx], JUNGSUNG[jungIdx], JONGSUNG[jongIdx]];
}

/**
 * 三个音素合成为单个韩语音节
 * @param {string} cho 初声
 * @param {string} jung 中声
 * @param {string} jong 终声,默认空
 * @returns {string} 合成后的韩文字符
 */
function combineHangul(cho, jung, jong = '') {
  const choIdx = CHOSUNG.indexOf(cho);
  const jungIdx = JUNGSUNG.indexOf(jung);
  const jongIdx = JONGSUNG.indexOf(jong);
  const charCode = 0xAC00 + choIdx * 21 * 28 + jungIdx * 28 + jongIdx;
  return String.fromCharCode(charCode);
}

基础功能验证:调用combineHangul('ㄱ', 'ㅏ', 'ㅆ')会直接输出갔,完全符合你需要的拼接效果。

词形转换规则实现示例

基于上面的工具函数,就可以按照韩语谓词的音变规则编写转换逻辑,以你提到的「워요结尾的ㅂ不规则形容词还原」为例(比如추워요 -> 춥다),实现逻辑如下:

function toDictionaryForm(input) {
  // 处理ㅂ脱落不规则变化:추워요类
  if (input.endsWith('워요')) {
    // 切掉结尾的워요,取前面的词干部分
    const stem = input.slice(0, -2);
    const lastChar = stem[stem.length - 1];
    const [cho, jung] = splitHangul(lastChar);
    // 给词干最后一个字补上脱落的终声ㅂ
    const fixedLastChar = combineHangul(cho, jung, 'ㅂ');
    return stem.slice(0, -1) + fixedLastChar + '다';
  }

  // 无音变的普通敬语词可直接通用处理
  if (input.endsWith('요')) {
    return input.slice(0, -1) + '다';
  }

  // 其他规则(ㄹ脱落、ㅅ脱落、르不规则、过去式았/었/였等)可按相同逻辑扩展
  return input;
}

// 测试用例
console.log(toDictionaryForm('추워요')); // 输出춥다,符合预期

技术栈选择建议

  • 常规规则转换场景完全不需要换技术栈,上述JS代码无依赖、运行效率高,浏览器、Node.js环境均可直接运行。
  • 如果后续需要覆盖上百种不规则音变、处理非敬语/时态/定语形等复杂词形,再考虑引入专门的韩文NLP处理库即可,Python、Java生态下的相关库更多,但JS也有对应封装,迁移成本很低。

内容的提问来源于stack exchange,提问作者José Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:03:30