用于泰米尔语字符的Python 3 Unicode len()函数

时间:2016-01-27 10:19:10

标签: python python-3.x unicode tamil

当我们相信Python 3在Unicode上完全正确时,我在面对这种情况时感到很惊讶。

>>> amma = "அம்மா"
>>> amma
'அம்மா'
>>> len(amma)
5

显然泰米尔语字符串"அம்மா"有3个字母,len("அம்மா")的返回值5不可接受或赞赏。

其他Dravidian或Brahmic脚本如何解决此问题以获得正确的字符串长度?

编辑#1: 考虑到@joey的评论,这个问题可以改写如下。

如何计算Python中的字形长度?

我们知道Swift或Perl6默认执行此操作

  2> let amma = "அம்மா".characters.count
amma: Distance = 3

3 个答案:

答案 0 :(得分:2)

它可能有3个字母,但它有5个字符:

$ charinfo 'அம்மா'
U+0B85 TAMIL LETTER A [Lo]
U+0BAE TAMIL LETTER MA [Lo]
U+0BCD TAMIL SIGN VIRAMA [Mn]
U+0BAE TAMIL LETTER MA [Lo]
U+0BBE TAMIL VOWEL SIGN AA [Mc]

如果您需要更具体,那么您只需要计算Letter类别中的字符数。

答案 1 :(得分:1)

以下代码仅计算字符,并忽略unicode标记(使用标准re模块)。

import re
amma = "அம்மா"
len(re.findall("[ஃ-ஹ]", amma))

以下是获取unicode中字母计数的最快方法(使用第三方regex模块)。

import regex
amma = "அம்மா"
len(regex.findall('\p{L}\p{M}*', amma))

答案 2 :(得分:0)

包装

pip install Open-Tamil

代码

from tamil import utf8
amma = "அம்மா"
letters = utf8.get_letters(amma)
print(len(letters))