有没有办法以编程方式将韩文 unicode 合并为一个?

Is there a way to programmatically combine Korean unicode into one?

使用韩语输入法编辑器 (IME),可以键入 버리 + ,它会自动变为 버려

有没有办法在 Python 中以编程方式执行此操作?

>>> x, y = '버리', '어'
>>> z = '버려'
>>> ord(z[-1])
47140
>>> ord(x[-1]), ord(y)
(47532, 50612)

有没有办法计算 47532 + 50612 -> 47140?

这里还有一些例子:

가보 + 아 -> 가봐

끝나 + ㄹ -> 끝날

您可以使用自己的翻译 table。
缺点是你必须手动输入所有对,或者你有一个文件可以从中获取它。
例如:

# Sample Korean chars to map
k = [[('버리', '어'), ('버려')], [('가보', '아'), ('가봐')], [('끝나', 'ㄹ'), ('끝날')]]

class Korean(object):
    def __init__(self):
        self.map = {}

        for m in k:
            key = m[0][0] + m[0][1]
            self.map[hash(key)] = m[1]

    def __getitem__(self, item):
        return self.map[hash(item)]

    def translate(self, s):
        return [ self.map[hash(token)] for token in s]

if __name__ == '__main__':
    k_map = Korean()
    k_chars = [ m[0][0] + m[0][1] for m in  k]

    print('Input: %s' % k_chars)
    print('Output: %s' % k_map.translate(k_chars))

    one_char_3 = k[0][0][0] + k[0][0][1]
    print('%s = %s' % (one_char_3, k_map[ one_char_3 ]) )

Input: ['버리어', '가보아', '끝나ㄹ']
Output: ['버려', '가봐', '끝날']
버리어 = 버려

测试 Python:3.4.2

我是韩国人。首先,如果您键入 버리 + ,它将变为 버리어 而不是 버려버려버리어 的缩写,它不是自动生成的。同样的原因,가보아 不能在输入时自动变成 가봐

其次,相比之下,끝나 + 变成了 끝날 因为 没有 jongseong(종성)。请注意韩文的一个字符由choseong(초성)、jungseong(중성)和jongseong[=61=组成]. choseongjongseong是辅音,jungseong是元音。在 Wikipedia 查看更多信息。所以只有当打字时没有jongseong时(比如끝나),才有可能有jongseong(ㄹ).

如果你想把 버리 + 变成 버려,你应该实现一些韩语语法,特别是对于这种情况,jungseong 的缩写。例如 + = , + = 如您所提供。 한글 맞춤법 chapter 4. section 5(我现在找不到英文页面)这样定义缩写。这是可能的,但不是那么容易的工作,尤其是对于非韩国人。

下一步,如果你想要的只是将 끝나 + 变成 끝날,这可能是一个相对容易的工作,因为有库可以处理合成和choseongjungseongjongseong的分解。在 Python 的情况下,我找到了 hgtk。你可以这样尝试(非实用代码):

# hgtk methods take one character at a time
cjj1 = hgtk.letter.decompose('나')  # ('ㄴ', 'ㅏ', '')
cjj2 = hgtk.letter.decompose('ㄹ')  # ('ㄹ', '', '')
if cjj1[2]) == '' and cjj2[1]) == '':
    cjj = (cjj1[0], cjj1[1], cjj2[0])
    cjj2 = None

不过,如果没有适当的韩文知识,将很难完成。