gpt4 book ai didi

python - 按字符拆分泰语文本

转载 作者:太空狗 更新时间:2023-10-30 00:31:49 26 4
gpt4 key购买 nike

不按字界,那是可以解决的。

例子:

#!/usr/bin/env python3  
text = 'เมื่อแรกเริ่ม'
for char in text:
print(char)

这会产生:






这显然不是想要的输出。有什么想法吗?

文本的可移植表示是:

text = u'\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e41\u0e23\u0e01\u0e40\u0e23\u0e34\u0e48\u0e21'

最佳答案

tl;dr:使用 \X 正则表达式提取用户感知的字符:

>>> import regex # $ pip install regex
>>> regex.findall(u'\\X', u'เมื่อแรกเริ่ม')
['เ', 'มื่', 'อ', 'แ', 'ร', 'ก', 'เ', 'ริ่', 'ม']

虽然我不懂泰语,但我懂一点法语。

考虑字母 è。让 ss2 在 Python shell 中等于 è:

>>> s
'è'
>>> s2
'è'

同一封信?在视觉上对讲法语的人来说,oui。对于计算机,不:

>>> s==s2
False

您可以使用 è 的实际代码点或采用字母 e 并添加添加该重音字符的组合代码点来创建相同的字母。它们有不同的编码:

>>> s.encode('utf-8')
b'\xc3\xa8'
>>> s2.encode('utf-8')
b'e\xcc\x80'

和不同的长度:

>>> len(s)
1
>>> len(s2)
2

但从视觉上看,两种编码都会产生“字母”è。这称为 grapheme ,或最终用户认为的一个字符。

您可以演示您所看到的相同循环行为:

>>> [c for c in s]
['è']
>>> [c for c in s2]
['e', '̀']

您的字符串中有几个组合字符。因此,在您看来,一个包含 9 个字素的泰语字符串在 Python 中变成了一个包含 13 个字符的字符串。

法语的解决方案是根据Unicode对字符串进行归一化equivalence :

>>> from unicodedata import normalize
>>> normalize('NFC', s2) == s
True

虽然这不适用于许多非拉丁语言。一种处理可能由多个代码点组成的 unicode 字符串的简单方法 single grapheme正则表达式引擎通过支持 \X 正确处理这个问题。不幸的是 Python 包含的 re 模块 doesn't还没有。

提议的替换,regex , 虽然支持 \X:

>>> import regex
>>> text = 'เมื่อแรกเริ่ม'
>>> regex.findall(r'\X', text)
['เ', 'มื่', 'อ', 'แ', 'ร', 'ก', 'เ', 'ริ่', 'ม']
>>> len(_)
9

关于python - 按字符拆分泰语文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30103965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com