栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

结合梵文字符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

结合梵文字符

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

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

>>> import unipredata>>> a = "बिक्रम मेरो नाम हो">>> [unipredata.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 (VIRAMALETTER)*VOWEL?
。通过查找每个代码点的Unipre类别,您可以确定哪个是哪个:

>>> [unipredata.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    Unipre text segmentation algorithm, but probably good enough for    Devanagari.)    """    virama = u'N{DEVANAGARI SIGN VIRAMA}'    cluster = u''    last = None    for c in s:        cat = unipredata.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))['बि', 'क्र', 'म', ' ', 'मे', 'रो', ' ', 'ना', 'म', ' ', 'हो']


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441121.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号