韩文字符的位置无关比较

时间:2015-08-09 18:10:47

标签: python unicode comparison

我正在编写一个python3程序,它必须处理各种书写系统中的文本,包括韩文(韩文),我在不同位置比较同一个字符时遇到问题。 对于那些不熟悉韩文的人(我不太了解它),这个剧本几乎具有将音节字母组合成方块的独特功能。例如'ㅎ'发音为[h]和'ㅏ'发音为[a],音节' hah'是写着'핳' (如果你的系统无法渲染Hangul:第一个h显示在左上角,a在右上角,第二个h在它们中间)。 Unicode通过为每个辅音提供两个不同的条目来处理这个问题,具体取决于它是出现在音节的开头还是尾音中。例如,前一个音节被编码为' \ u1112 \ u1161 \ u11c2'。 我的代码需要比较两个字符,如果它们的位置不同,则将它们视为相等。即使应用Unicode规范化,也不是简单比较的情况。有办法吗?

2 个答案:

答案 0 :(得分:1)

您需要使用定制版本的Unicode排序算法(UCA),为相同的音节分配相同的权重。 UCA technical report描述了排序Hangul的一般问题。

幸运的是,ICU library有一套完整的排序规则:ko-u-co-search - 韩语(通用搜索);你可以试试demo page。要在Python中使用它,您需要使用像PyICU这样的库,或者实现UCA并支持ICU规则文件格式的库(或者让您编写自己的规则)。

答案 1 :(得分:1)

我是Python jamo的开发人员(Hangul字母叫做jamo)。一种简单的方法是将所有jamo代码点转换为各自的Hangul兼容性jamo(HCJ)代码点。 HCJ是jamo字符的显示形式,因此辅音的初始和最终形式是相同的代码点。

例如:

>>> import jamo
>>> initial, vowel, final = jamo.j2hcj('\u1112\u1161\u11c2')
>>> initial == final
True

在内部完成此操作的方法是使用从Unicode规范中复制的查找表。