簡體   English   中英

如何在python中逐個字符地拆分unicode字符串?

[英]How to split unicode strings character by character in python?

我的網站支持多種印度語言。 用戶可以動態更改語言。 當用戶輸入一些字符串值時,我必須將字符串值拆分為單獨的字符。 所以,我正在尋找一種方法來編寫一個適用於英語和一組精選印度語言的通用函數。 我搜索過各個站點,但是,似乎沒有通用的方法來處理這個要求。 有特定於語言的實現(例如,泰米爾語的Open-Tamil包實現了get_letters)但我找不到一種常見的方法來分割或迭代unicode字符串中的字符,並考慮字形。

我嘗試過的眾多方法之一:

name = u'தமிழ்'
print name
for i in list(name):
  print i

#expected output
தமிழ்
த
மி
ழ்

#actual output
தமிழ்
த
ம
ி
ழ
்

#Here is another an example using another Indian language
name = u'हिंदी'
print name
for i in list(name):
  print i

#expected output
हिंदी
हिं
दी

#actual output
हिंदी
ह
ि  
ं 
द
ी

要獲得任何語言的“用戶感知”字符,請使用\\X擴展字形集群 )正則表達式:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import regex # $ pip install regex

for text in [u'தமிழ்', u'हिंदी']:
    print("\n".join(regex.findall(r'\X', text, regex.U)))

產量

த
மி
ழ்
हिं
दी

解決此問題的方法是將所有“L”類別字符與其后續的“M”類別字符分組:

>>> regex.findall(ur'\p{L}\p{M}*', name)
[u'\u0ba4', u'\u0bae\u0bbf', u'\u0bb4\u0bcd']
>>> for c in regex.findall(ur'\p{L}\p{M}*', name):
...   print c
... 
த
மி
ழ்

regex

uniseg非常有效,而且文檔還可以。 這個問題的另一個答案適用於國際Unicode字符,但如果用戶輸入表情符號則會失敗。 以下解決方案起作用:

>>> emoji = u'😀😃😄😁'
>>> from uniseg.graphemecluster import grapheme_clusters
>>> for c in list(grapheme_clusters(emoji)):
...     print c
...
😀
😃
😄
😁

這是來自pip install uniseg==0.7.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM