将韩文音节分解为字母(日语)

Nin*_*494 1 java unicode character unicode-normalization

我正在开发一个处理韩语句子的程序,我需要一种将音节或字母分解为字母的方法。对于不了解韩文的人来说,一个音节由2-4个字母(jamo)组成,创建了数千种不同的组合。我想做的就是将这些音节分解成组成它的字母。

我可以通过将其Unicode值与该范围内的关联字母进行比较来获得第一个字母,即以x字母开头的音节在y范围内。但是,我不知所措,无法找到其余的信件。

这是一个包含韩文音节的Unicode值的表:http : //jrgraphix.net/r/Unicode/AC00-D7AF

一二三*_*一二三 6

Hangul音节分解(例如??+ ?+ ?)是通过Java通过以下java.text.Normalizer类完成的:

String s = Normalizer.normalize("\uD4DB", Normalizer.Form.NFD);
Run Code Online (Sandbox Code Playgroud)

Unicode标准的第3.12节(来自第142页)中还提供了韩文分解算法。并且由于规范化还会影响其他非Hanul字符,因此您应该熟悉UAX#15中Unicode规范化的一般原理和形式。


ver*_*y_p 6

基本上,分解韩文 LVT 或 LV 音节的算法是:

  • 从代码点的标量值中减去 0xAC00(在 U+AC00 和 U+D7A3 之间,而不是您所说的 U+D7AF),
  • 将之前的差值除以 28,然后:
    • 如果第一次休息为 0,则没有 T jamo;
    • 否则将 0x11A7 添加到第一个剩余部分(在 1 和 27 之间)以获得最终的 T jamo(在 U+11A8 和 U+11C2 之间);
  • 将前一个商除以 21,然后:
    • 将 0x1161 添加到第二个剩余部分(在 0 和 20 之间)以获得中间(或最终)V jamo(在 U+1161 和 U+1175 之间);
    • 将 0x1100 添加到第二商(0 到 17 之间)以获得领先的 L jamo(U+1100 和 U+1112 之间);

其他可分解的韩文字母(在 U+1113 和 U+11F9 范围内,不包括上面返回的 3 个范围内的简单 L、V 和 T jamos,或在 U+3131 到 U+318E 范围内的扩展 jamos)可以通过小表查找(取自包含韩文规范分解对的主 UCD 表)处理成对的简单 jamos。

该算法在 Unicode 中进行了标准化,只是为了避免将 10,584 个韩文预组合字符(预组合韩文 LV 或 LVT 音节)的规范分解映射到 UCD 表中,成为 UCD 中禁止的三元组(L、V、T simple jamos) , 或成对 (L, V simple jamo) 或成对 (LV 音节, T simple jamo)。

为此,UCD 表只列出了在算法上可分解的第一个和最后一个预组合的 LV 或 LVT 字符;它们也具有所有相同的字符属性(除了在 UCD 的辅助表中列出的“L/V/T/LV/LVT”类型,特定于韩文)

请注意,某些 LL 或 TT 预组合辅音被视为简单的 jamos 并且不可分解。这是韩文中双辅音 (“SANG” jamos) 的传统,但这在 jamo 字母表的主要排序顺序中是可见的,其中双辅音在单辅音之后排序,所有 L 或 LL jamos 在所有 V 之前排序jamos,并且所有 V jamos 在 T 和 TT jamos 之前排序。

通常在格式正确的韩语音节中,V jamo(或元音)只能出现在 L 前导 jamo(辅音)之后,T 尾随 jamo(辅音)只能出现在 V jamo(元音)之后。

但是有一些例外可以强制使用格式正确的 Hangul 音节:如果插入前导的 Hangul V 填充符(未呈现的控件),缺少的 L jamo(在孤立的 V jamo 之前)可以变得格式正确,并且缺少 V jamo(在孤立的 V jamo 之前)如果您插入领先的 Hangul V 填充符(未呈现的控件),T jamo) 可以变得格式良好。这有时用于音译一些以元音开头的非韩语单词,但通常韩语使用(并渲染)他们字母表的最后一个辅音(IOSEUNG,前导或尾随)来表示缺失的 L jamo。

最后,(L*, V*, T*) 格式正确的韩文音节后面可以跟一些声调标记(写在音节右侧的点,呈现在一个正方形中)。(L*, V*, T*) 音节方块的布局顺序在韩语中是标准的:所有 L* 水平对齐,所有 V* 水平对齐,所有 T* 水平对齐,然后 L* 块到左侧部分正方形,右侧的 V* 块,以及 (L*, V*) 块下方的最终 T* 块。声调标记单独添加到 (L*, V*, T*) Hangul 方块的右侧,包含相同音节的所有 jamos。

韩语也有字母的“半角”变体,它们不是严格意义上的“韩文”。半角字母只包含 L 或 LV“半音节”,没有 T“半音节”(它们被 L 半音节代替):这些半角字母不会呈现在韩文方块中,它们可以以任何顺序出现,就像拉丁字母一样。半宽 LV 音节也可以分解为半宽 L 和半宽 V 音节,但是由于这会扩大它们的呈现方式,因此这种分解不是规范等效的(半宽 LV 音节被认为是牢不可破的连字,类似于拉丁语中的 AE 或 IJ 连字;这种分解仅用于在韩语校对中对它们进行排序,这在韩语字母表的主要排序顺序中可见)。