【问题标题】:how to traverse a unicode tamil word character by charcter in python?如何在python中逐个字符地遍历unicode泰米尔语单词?
【发布时间】:2014-07-18 13:34:05
【问题描述】:

我想知道 Unicode 字符串(泰米尔语)中有多少个字符,然后检查字符 1 和字符 2 是否有特定的出现。
我可以将单词拆分为字符,但我不知道如何使用单词长度逐个字符地遍历它们。

示例:单词:“எஃகு”。
它应该返回没有字符为 3,并且我应该能够将 word[0] 打印为“எ”,将 word[1] 打印为“ஃ”,将 word[2] 打印为“கு”。

我想检查如下:

    if word[0] is a vowel:
        if word[1] is "ஃ":
           then print word[0]+word[1]+word[3] (as எஃகு)
        else:
           print word[0] 

我想使用 no of characters 进行遍历,如果 no.of.char 为 3,那么 i=0 应该可以帮助我处理 'எ'。
我看到了很多与 Unicode 字符处理和长度处理相关的问题。但它们要么返回字节长度,要么给出不同的结果。所以我很困惑。

我用于按字符拆分它们的代码:

    for line in f.readlines():
       letters = utf8.get_letters(line)
       for letter in letters:
          ff.write(unicode(letter))
          ff.write(' ')

示例输入文件:

அன்று
அதாவது
அஃதான்று

示例输出文件:

அன்று
அ தா வ து
அ ஃ தா ன் று

【问题讨论】:

  • 您的字符串是unicode 对象还是str 对象?你能举一个你有的创建/操作这样一个字符串的代码的例子吗?
  • 听起来像是nedbatchelder.com/text/unipain.html的广告
  • 值得注意的是,"எஃகு" 中有四个 Unicode 代码点,而不是三个。您可以使用list("எஃகு") 将它们拆分为一个列表(如果您使用的是 Python 3),您将获得['எ', 'ஃ', 'க', 'ு']
  • @BrenBarn 我已经给出了示例输入文件。
  • 我对泰米尔语一无所知,但是...l = tamil.utf8.get_letters(str) 不会返回字母列表吗?您可以使用l[0]l[1]l[2] 解决吗? len(l)的字符数?

标签: python regex python-2.7 tamil


【解决方案1】:

pip install Open-Tamil

代码

from tamil import utf8
string = u"எஃகு"
letters = utf8.get_letters(string)
print(len(letters))
# 3. Not 4. 
print(letters)
# [u'\u0b8e', u'\u0b83', u'\u0b95\u0bc1']
for letter in letters:
    print(letter)
# எ
# ஃ
# கு

【讨论】:

  • 这是很好的示例代码。我建议的唯一更改是为源字符串使用与 str 不同的名称,以避免隐藏内置的字节串类名称。
  • @Blckknght:好点。我不是 Pythonista,str-as-type 完全没有进入我的脑海。
  • 您的代码和我的代码之间的区别在于它是从文件中读取的,因此无法在字符串前面加上“u”。我认为这就是为什么它为我返回 4 的原因。我如何从文件中读取并以“u”为前缀。您的代码确实返回 3。感谢您的帮助。
  • 这完全是另一个话题,与泰米尔语无关,但与编码以及strunicode 类型之间的区别有关。请阅读this article。简短的回答 - 使用 line.decode('utf-8') 而不是 line
  • 忽略 - 你已经有一个 unicode 字符串,否则 utf.get_letters 根本不起作用。所以还有别的问题是你的问题。此外,如果 for 循环给你 3 个结果,len() 不可能给你 4 个。
猜你喜欢
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多