当前位置: 首页 > 面试题库 >

结合梵文字符

彭高畅
2023-03-14
问题内容

我有类似的东西

a = "बिक्रम मेरो नाम हो"

我想实现类似

a[0] = बि
a[1] = क्र
a[3] = म

但是由于म占用4个字节,而बि占用8个字节,我无法直截了当地。那么该怎么做呢?在Python中。


问题答案:

将文本拆分为字形簇的算法在Unicode附件29第3.1节中给出。我不会在这里为您实现完整的算法,但是我将向您大致介绍如何处理Devanagari的情况,然后您可以自己阅读附件并了解还需要实现什么。

unicodedata模块包含检测字素簇所需的信息。

>>> import unicodedata
>>> a = "बिक्रम मेरो नाम हो"
>>> [unicodedata.name(c) for c in a]
['DEVANAGARI LETTER BA', 'DEVANAGARI VOWEL SIGN I', 'DEVANAGARI LETTER KA', 
 'DEVANAGARI SIGN VIRAMA', 'DEVANAGARI LETTER RA', 'DEVANAGARI LETTER MA',
 'SPACE', 'DEVANAGARI LETTER MA', 'DEVANAGARI VOWEL SIGN E',
 'DEVANAGARI LETTER RA', 'DEVANAGARI VOWEL SIGN O', 'SPACE',
 'DEVANAGARI LETTER NA', 'DEVANAGARI VOWEL SIGN AA', 'DEVANAGARI LETTER MA',
 'SPACE', 'DEVANAGARI LETTER HA', 'DEVANAGARI VOWEL SIGN O']

在梵文中,每个字素簇由一个初始字母,可选的virama(元音杀手)和字母对以及一个可选的元音符号组成。以正则表达式表示为LETTER (VIRAMA LETTER)* VOWEL?。通过查找每个代码点的Unicode类别,您可以确定哪个是哪个:

>>> [unicodedata.category(c) for c in a]
['Lo', 'Mc', 'Lo', 'Mn', 'Lo', 'Lo', 'Zs', 'Lo', 'Mn', 'Lo', 'Mc', 'Zs',
 'Lo', 'Mc', 'Lo', 'Zs', 'Lo', 'Mc']

字母是类别Lo(字母,其他),元音符号是类别Mc(标记,间距组合),virama是类别Mn(标记,非间距),空格是类别Zs(分隔符,空格)。

因此,这是一种分离字素簇的粗略方法:

def splitclusters(s):
    """Generate the grapheme clusters for the string s. (Not the full
    Unicode text segmentation algorithm, but probably good enough for
    Devanagari.)

    """
    virama = u'\N{DEVANAGARI SIGN VIRAMA}'
    cluster = u''
    last = None
    for c in s:
        cat = unicodedata.category(c)[0]
        if cat == 'M' or cat == 'L' and last == virama:
            cluster += c
        else:
            if cluster:
                yield cluster
            cluster = c
        last = c
    if cluster:
        yield cluster

>>> list(splitclusters(a))
['बि', 'क्र', 'म', ' ', 'मे', 'रो', ' ', 'ना', 'म', ' ', 'हो']


 类似资料:
  • 问题内容: 我有一个关于在Jar文件()中编译具有某些依赖类的类的问题。通过将目录树放在-classpath选项中(例如:),是否将检查所有子目录中的类或仅检查目录树中的顶级类?提前致谢。 问题答案: 是否会递归搜索指定的目录:否 当类加载器进入在类路径中指定的目录时,它将使用该类所在的子目录开始。如果未指定包,则类加载器将其放在目录的直接子级(类文件)下。 它是直接货币/罐和的组合。 假设您具有

  • 问题内容: 我想将多个csv文件合并为一个df。 它们都是这种通用格式,带有两个索引列: 等等… 合并的df为: 我正在尝试此代码: 但我收到此错误: 问题答案: 我认为你需要,而不是:

  • 我在StackOverflow中看到了许多关于如何同时发送纯文本和html文本的邮件的答案。我的问题是,我如何在html部分中显示某种链接来看到文本部分?(某些并在单击时显示纯文本版本) 多谢了。

  • 版本申明 pragma solidity ^0.4.0; 说明: 1 版本要高于0.4才可以编译 2 号表示高于0.5的版本则不可编译,第三位的版本号但可以变,留出来用做bug可以修复(如0.4.1的编译器有bug,可在0.4.2修复,现有合约不用改代码)。 引用其它源文件 全局引入 * import “filename”; 自定义命名空间引入 * import * as symbolN

  • 6.6.1 The FieldSet(字段集) 当在Spring Batch中使用纯文本文件时, 不管是将其作为输入还是输出, 最重要的一个类就是 FieldSet。许多架构和类库会抽象出一些方法/类来辅助你从文件读取数据, 但是这些方法通常返回 String 或者 String[]数组, 很多时候这确实是些半成品。 而 FieldSet 是Spring Batch中专门用来将文件绑定到字段的抽象

  • 问题内容: 说我有一个变量,它的定义为: 我想输出,我可以这样: 但是我宁愿将代码简化为类似以下内容(不起作用): 有没有办法像对待变量一样对待它呢? 问题答案: 直接在字符串中插入变量时,可以使用花括号消除歧义。 此外,这不适用于单引号。所以: 将输出