使用韩语输入法编辑器(IME),可以输入버리
+ 어
,它将自动变为버려
。
有没有办法以编程方式在Python中执行此操作?
>>> x, y = '버리', '어'
>>> z = '버려'
>>> ord(z[-1])
47140
>>> ord(x[-1]), ord(y)
(47532, 50612)
有没有办法计算47532 + 50612 - > 47140?
以下是一些例子:
가보+아 - > 가봐
끝나+ㄹ - > 끝날
答案 0 :(得分:4)
我是韩国人。首先,如果您输入버리
+ 어
,则会变为버리어
而不是버려
。 버려
是버리어
的缩写,不会自动生成。此外,가보아
在输入过程中也不会因同样的原因自动变为가봐
。
其次,相比之下,끝나
+ ㄹ
变为끝날
,因为나
没有 jongseong (종성)。请注意,Hangul的一个字符由 chooseong (초성), jungseong (중성)和 jongseong 组成。 chooseong 和 jongseong 是辅音, jungseong 是元音。点击Wikipedia了解更多信息。因此,只有在打字时没有 jongseong (如끝나),才有可能 jongseong (ㄹ)。
如果你想버리
+ 어
到버려
,你应该实现一些韩语语法,特别是对于这种情况, jungseong 的缩写。例如,您提供的ㅣ
+ ㅓ
= ㅕ
,ㅗ
+ ㅏ
= ㅘ
。 한글 맞춤법 chapter 4. section 5(我现在无法找到英文网页)定义这样的缩写。这是可能的,但不是那么容易的工作,尤其是非韩国人。
接下来,如果您想要的只是끝나
+ ㄹ
到끝날
,那么它可以是一个相对容易的工作,因为有可以处理合成的图书馆和分解选择, jungseong , jongseong 。在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
但是,如果没有适当的Hangul知识,那将很难完成。
答案 1 :(得分:3)
您可以使用自己的翻译表
缺点是您必须输入所有配对手册或者您有一个文件来获取它。
例如:
# 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 ]) )
输入:['버리어','가보아','끝나ㄹ'] 输出:['버려','가봐','끝날']
버리어=버려
使用Python测试:3.4.2