获取"alphabetical" python中的下一个Unicode字符



我需要能够在python的ICU排序规则算法中找到给定字符的紧随其后的字符。

我的用例是,我正在使用该算法进行排序的no-sql数据库中查询键,并且我需要以一组字符开头的所有键。

我正在寻找的是一个函数:

def nextchar(x):
return x[:-1]+next_in_icu(x[-1:])

首先是一些背景信息,然后是可能的解决方案。

ICU 使用 CLDR 排序规则算法,这是 Unicode 排序规则算法的定制。CLDR 中的基本排序规则称为根排序规则。

特定于语言的定制包含对根排序规则的最小更改。因此,任何 ICU 收集器实例都将支持所有 Unicode。在每个序列中,有多个排序规则强度,因此尝试基于排序规则键执行所需的操作将很复杂且效率低下。

ICU也有一个AlphabeticIndex类,但这对于您的需求来说太粗糙了。

可能最适合的是 CLDR 针对每个区域设置的示例字符。我将根据示例字符提出建议。我假设不需要增补字符。

import icu
def get_next_char(x, lang):
exemplarSet = icu.LocaleData(lang).getExemplarSet(0, 0)
characters = list(exemplarSet)
if x is None:
return characters[0]
index = characters.index(x.lower())
return characters[index+1]
def nextchars(x, lang):
result = x + get_next_char(None, lang) if len(x) == 1 else x[:-1]+get_next_char(x[-1:], lang)
return  result

get_next_char()需要两个参数,即您要查找的下一个字符和语言。您需要使用语言标记而不是区域设置对象。

这将创建一个包含集合的 UnicodeSet 对象,该集合在上下文中类似于正则表达式集。

然后将 UnicodeSet 转换为列表,在类型转换为列表期间,集中的范围将转换为单个字符序列。

查找字符的索引,然后在列表中查找下一个字符。

我没有在示例中为错误处理而烦恼,这是需要添加的内容。

例子:

nextchars('fin', 'en')
# 'fio'
nextchars('str', 'en')
# 'sts'
nextchars("b", "en")
'ba'

假设我正确理解了你的问题。

相关内容

最新更新