全藏字【藏文字】的生成算法设计

目录

一、藏文构字的描述

1.理论依据

二、算法设计

三、藏字生成的结果


提示:以下是本篇文章正文内容,文章内容《藏文信息处理的原理与应用》这本书里进行参考的。

一、藏文构字的描述

        藏文字符是拼音性文字,现代藏字由30个辅音字母和4个元音符号(简称为元音)拼写组合而成,既可以前后书写,还可以上下叠加,构成二维的平面文字。现代藏字均以一个称为“基字”的辅音字母为核心,其前后添加和上下叠加,组成一个完整的字符结构。除“基字”外每个构件的称谓根据加在“基字”的部位而得名,即加在“基字”前的字母叫“前加字”,加在“基字”上的字母叫“上加字”,加在“基字”下的字母叫“下加字”,加在“基字”后的字母叫“后加字”,“后加字”之后再添加的字母叫“再后加字”或“重后加字”。现代藏文文法中,对藏文字符构成藏字有很严格的约束,一个藏字可有一到七个字符构成,其中基字是构成藏字必不可少的构件,其它位置上构件的有无因字而不同。

如图1-1藏字结构图:

图1-1 藏字结构图

         图1-2是七个构件都拥有的藏字实例,符合藏文文法的所有藏文字符(全藏字)组成的集合是一个封闭的集合,按照藏文文法就能生成全藏字集。本文依据藏文文法的约束生成符合文法拼写的所有藏文字符。

བསྒྲིགས་

图1-2 七个构件的藏字实例


1.理论依据

        有关藏字的数量问题,才旦夏茸先生在《藏文文法详解》中也给定了一个数量,该数量的依据如表2-13所示。才旦夏茸先生指出藏文的全集字符数应该是17532。

序号

来源

注解

数量

累计数量

1

གསལ་བྱེད།

30 个辅音字母

30

30

2

ར་མགོ་ཅན། ལ་མགོ་ཅན། ས་མགོ་ཅན། ཡ་བཏགས་ ར་

བཏགས་ ལ་བཏགས་སོགས་ཉིས་བརྩེགས་ཅན་ང་བདུན།

上加字+基字,基字+下

加字构成 2 层的字符

57

87

3

སུམ་བརྩེགས་ཅན་བཅུ་བཞི།

上加字+基字+下加字

三层字符

14

101

4

གས་འཕུལ་བཅུ་གཅིག ད་འཕུལ་དྲུག བས་འཕུལ་

བཅུ། མས་འཕུལ་བཅུ་གཅིག འས་འཕུལ་བཅུ། རྐྱང་

འཕུལ་ཞེ་བརྒྱད།

前加字+基字

48

149

5

ད་འཕུལ་ཡ་བཏགས་ཅན་དགུ། བས་འཕུལ་ར་མགོ་

ཅན་བཅུ། བས་འཕུལ་ལ་མགོ་ཅན་གཉིས། བས་འཕུལ་

ས་མགོ་ཅན་བརྒྱད། བས་འཕུལ་ཡ་བཏགས་ཅན་

གཉིས། བས་འཕུལ་ར་སྟ་ཅན་གསུམ། བས་འཕུལ་ལ་

བཏགས་ཅན་བཞི། བས་འཕུལ་སུམ་བརྩེགས་ཅན་དྲུག

མས་འཕུལ་ཡ་ར་འདོགས་ཅན་བཞི། འས་འཕུལ་ཡ་

ར་འདོགས་ཅན་དགུ། བརྩེགས་འདོགས་ཅན་འཕུལ་བ་

ང་བདུན།

前加字+基字+下加字,

前加字+上加字+基字

57

206

6

ལུས་ཀི་ཡི་གེ་༢༠༦ལ་དབངས་བཞི་འདོགས་པ།

以上 206 个字符作为基

础,分别添加 4 个元音 (206×4)

824

1030

7

འ་མཐའ་དོར་བའི་རེས་འཇུག་དག

以上字符添加 9 个后加

字(除去 འ)(1030×9)

9270

10300

8

རྗེས་འཇུག་ག་ང་བ་མ་བཞིར་ས་དྲག་ཐོབ་པ།

带再后加字 ས 的字符

(1030×4)

4120

14420

9

རྗེས་འཇུག་ན་ར་ལ་གསུམ་ལ་ད་དྲག་ཐོབ་པ།

带再后加字 ད 的字符

(1030×3)

3090

17510

10

ཝ་བཏགས་བཅུ་གཉིས་ལ་རྩྭ་ཕྱྭ་གྲྭ་གསུམ་བསྣན།

带下加字 ཝ 的 15 个

15

17525

11

དབྱངས། དབུ་ཁྱུད། ཤད། ཚེག།

4 个元音、起头符合、单

垂符号、隔字符

7

17532

详细分析可以发现该统计的一些不足:

        (1)基础字符添加后加字时,直接添加了除 འ 以外的 9 个后加字,把类似于 དཀའ 这样的字符没有计算到该数据中。那这类字符有多少呢?这类藏字应该是以上的“前加字+基字”的 48 种后面都可以加字符 འ;

        (2)该数据中带下加字 ཝ 的只有 15 个,又把类似于 དྭངས 这样的字符没有计算到该数据中。 按照构字规则,元音的添加、后加字的添加不受被添加字符的限制,这使得 15 个字符都应该是可以添加元音与后加字的,这 15 个字符添加 4 个元音有 60 个字符;这 60 个字符与前面的 15 个字符填上 9 个后加字共有 675 个字符;带“再后加字” ས 的字符应该有(60+15)*4=300,带“再后加字” ད 的应该有(60+15)*3=225;这样多出来了 60+675+300+225=1260 个。

        加上这些,则藏字全集也至少应该有17532+48+1260=18840个,在信息处理的时候,研究者可以按照自身的需求生成所需要的藏字。

二、算法设计

        本章代码根据藏文本身文法规则进行设计的。

代码如下:

#coding=utf-8
# 白玛旺久Python编程库
# @TIME:      20:11
# @FILE:      code.py
class Tibet_Str():
    def __init__(self, jcz_path):
        self.jcz_path = jcz_path

    def jichuzi_yuanyin(self):
        jichu_zi = self.jcz_path
        jichuzi_yuanyin_jy = []
        dict = ['ི', 'ུ', 'ེ', 'ོ']
        for jichu_zi in jichu_zi:
            jichuzi_yuanyin_jy.append(jichu_zi)
            for yy in dict:
                jichuzi_yuanyin_jy.append(jichu_zi + yy)
        return jichuzi_yuanyin_jy, len(jichuzi_yuanyin_jy)  # len = 1105

    # 基础字+后加字
    def jichuzi_houjiazi(self):
        jichuzi_houjia = []
        jichu_zi = self.jichuzi_yuanyin()[0]
        houjia_zi = ['ག', 'ང', 'ད', 'ན', 'བ', 'མ', 'ར', 'ལ', 'ས']
        for jichu_zi in jichu_zi:
            for houjiazi in houjia_zi:
                jichuzi_houjia.append(jichu_zi + houjiazi)
        return jichuzi_houjia, len(jichuzi_houjia)  # len = 9945

    # 再后加字ས
    def jcz_zhjz_sa(self):
        jichuziall = []
        jichuzi = self.jichuzi_houjiazi()[0]
        for jichu_zi in jichuzi:
            if jichu_zi[:][-1] == "ག" or jichu_zi[:][-1] == "ང" or jichu_zi[:][-1] == "བ" or jichu_zi[:][-1] == "མ":
                jichuziall.append(jichu_zi + "ས")
        return jichuziall, len(jichuziall)  # len =4420

    # 再后加字ད
    def jcz_zhjz_da(self):
        jichuziall = []
        jichuzi = self.jichuzi_houjiazi()[0]
        for jichu_zi in jichuzi:
            if jichu_zi[:][-1] == "ན" or jichu_zi[:][-1] == "ར" or jichu_zi[:][-1] == "ལ":
                jichuziall.append(jichu_zi + "ད")
        return jichuziall, len(jichuziall)  # len =3315

    # 基础字+འ
    def jichuzi_ha(self):
        jicuzi_ha = []
        jichu_zi = self.jcz_path
        for jichu_zi in jichu_zi:
            if len(jichu_zi) == 2:
                if jichu_zi[:][0] in "ག""ད""བ""མ" "འ":
                    if jichu_zi[:][-1] not in "ྱ" "ྲ""ླ""ྭ":
                        jicuzi_ha.append(jichu_zi + "འ")
        return jicuzi_ha, len(jicuzi_ha)  # len =48

    # 四个元音,起头符,单垂符,隔字符
    def fuhao(self):
        fuhao = ["ི", "ུ", "ེ", "ོ", "༄", "།", "་"]
        return fuhao, len(fuhao)  # len = 7

    def tibet_sum(self):
        word18840_str = []
        word18840_str.extend(self.jichuzi_yuanyin()[0])
        word18840_str.extend(self.jichuzi_houjiazi()[0])
        word18840_str.extend(self.jcz_zhjz_sa()[0])
        word18840_str.extend(self.jcz_zhjz_da()[0])
        word18840_str.extend(self.jichuzi_ha()[0])
        word18840_str.extend(self.fuhao()[0])
        return word18840_str, "全藏字总共有{}个字".format(len(word18840_str))


if __name__ == '__main__':
        jcz_str = ['ཀ', 'ཁ', 'ག', 'ང', 'ཅ', 'ཆ', 'ཇ', 'ཉ', 'ཏ', 'ཐ', 'ད', 'ན', 'པ', 'ཕ', 'བ', 'མ', 'ཙ', 'ཚ', 'ཛ', 'ཝ', 'ཞ', 'ཟ', 'འ', 'ཡ', 'ར', 'ལ', 'ཤ', 'ས', 'ཧ', 'ཨ', 'རྐ', 'རྒ', 'རྔ', 'རྗ', 'རྙ', 'རྟ', 'རྡ', 'རྣ', 'རྦ', 'རྨ', 'རྩ', 'རྫ', 'ལྐ', 'ལྒ', 'ལྔ', 'ལྕ', 'ལྗ', 'ལྟ', 'ལྡ', 'ལྤ', 'ལྦ', 'ལྷ', 'སྐ', 'སྒ', 'སྔ', 'སྙ', 'སྟ', 'སྡ', 'སྣ', 'སྤ', 'སྦ', 'སྨ', 'སྩ', 'ཀྱ', 'ཁྱ', 'གྱ', 'པྱ', 'ཕྱ', 'བྱ', 'མྱ', 'ཀྲ', 'ཁྲ', 'གྲ', 'ཏྲ', 'ཐྲ', 'དྲ', 'པྲ', 'ཕྲ', 'བྲ', 'སྲ', 'ཧྲ', 'ཀླ', 'གླ', 'བླ', 'ཟླ', 'རླ', 'སླ', 'རྐྱ', 'རྒྱ', 'རྨྱ', 'སྐྱ', 'སྒྱ', 'སྤྱ', 'སྦྱ', 'སྨྱ', 'སྐྲ', 'སྒྲ', 'སྤྲ', 'སྦྲ', 'སྨྲ', 'སྣྲ', 'གཅ', 'གཙ', 'གཉ', 'གཏ', 'གད', 'གན', 'གཞ', 'གཟ', 'གཡ', 'གཤ', 'གས', 'དཀ', 'དག', 'དང', 'དཔ', 'དབ', 'དམ', 'བཀ', 'བག', 'བཅ', 'བཙ', 'བཏ', 'བད', 'བཞ', 'བཟ', 'བཤ', 'བས', 'མཁ', 'མག', 'མང', 'མཆ', 'མཇ', 'མཉ', 'མཐ', 'མད', 'མན', 'མཚ', 'མཛ', 'འཁ', 'འག', 'འཆ', 'འཇ', 'འཐ', 'འད', 'འཕ', 'འབ', 'འཚ', 'འཛ', 'དཀྱ', 'དགྱ', 'དཔྱ', 'དབྱ', 'དམྱ', 'དཀྲ', 'དགྲ', 'དཔྲ', 'དབྲ', 'བཀྲ', 'བགྲ', 'བསྲ', 'བཀླ', 'བཟླ', 'བརླ', 'བསླ', 'མཁྱ', 'མཁྲ', 'མགྱ', 'མགྲ', 'འཁྲ', 'འགྲ', 'འཕྲ', 'འབྲ', 'འདྲ', 'འཁྱ', 'འགྱ', 'འཕྱ', 'འབྱ', 'བརྐ', 'བརྒ', 'བརྔ', 'བརྗ', 'བརྙ', 'བརྟ', 'བརྡ', 'བརྣ', 'བརྩ', 'བརྫ', 'བལྟ', 'བལྡ', 'བསྐ', 'བསྒ', 'བསྔ', 'བསྙ', 'བསྟ', 'བསྡ', 'བསྣ', 'བསྩ', 'བརྐྱ', 'བརྒྱ', 'བཀྱ', 'བགྱ', 'བསྐྱ', 'བསྒྱ', 'བསྐྲ', 'བསྒྲ', 'ཀྭ', 'ཁྭ', 'གྭ', 'ཉྭ', 'དྭ', 'ཚྭ', 'ཞྭ', 'ཟྭ', 'རྭ', 'ལྭ', 'ཤྭ', 'ཧྭ', 'རྩྭ', 'གྲྭ', 'ཕྱྭ']
        a =  [ jcz for jcz in jcz_str]
        print("{},\n{}".format(Tibet_Str(a).tibet_sum()[0], Tibet_Str(a).tibet_sum()[1]))
        with open("全藏字存储的路径","w",encoding="utf-8") as ff:
            for qzz in Tibet_Str(a).tibet_sum()[0]:
                ff.writelines(qzz+"\n")



三、藏字生成的结果

        本文一共生成18840个藏文字,下表是一部分藏字生成结果。

རབརྐིཤརདརྐྱིབསླམའཁྱམབརྐྱིརྐྱོརསྐྱུལསྦྱོགསྦྲོལསྣྲེདབསྙནདབརྐྱིགབརྒྱུསབསྐྲེགརྒྱིམས
རམརྐུཤལདརྐྱུབསླརའཁྱརབརྐྱུརྐྱོལསྐྱུསསྨྱོགསྦྲོསསྣྲེནབསྙརདབརྐྱིངབརྒྱེགབསྐྲེངརྒྱུགས
རརརྐེསནདརྐྱེབསླལའཁྱལབརྐྱེརྐྱོསསྐྱེགསྦྱོངསྨྲིགསྣྲེབབསྙལདབརྐྱིདབརྒྱེངབསྐྲེདརྒྱུངས
རལརྐོསརདརྐྱོབསླསའཁྱསབརྐྱོརྒྱིགསྐྱེངསྦྱོདསྨྲིངསྣྲེམབསྟནདབརྐྱིནབརྒྱེདབསྐྲེནརྒྱུབས
རསརྒིསལདརྒྱིམཁྱགའགྱགབརྒྱིརྒྱིངསྐྱེདསྦྱོནསྨྲིདསྣྲེརབསྟརདབརྐྱིབབརྒྱེནབསྐྲེབརྒྱུམས
ལགརྒུཧནདརྒྱུམཁྱངའགྱངབརྒྱུརྒྱིདསྐྱེནསྦྱོབསྨྲིནསྣྲེལབསྟལདབརྐྱིམབརྒྱེབབསྐྲེམརྒྱེགས
ལངརྒེཧརདརྒྱེམཁྱདའགྱདབརྒྱེརྒྱིནསྐྱེབསྦྱོམསྨྲིབསྣྲེསབསྡནདབརྐྱིརབརྒྱེམབསྐྲེརརྒྱེངས
ལདརྒོཧལདརྒྱོམཁྱནའགྱནབརྒྱོརྒྱིབསྐྱེམསྦྱོརསྨྲིམསྣྲོགབསྡརདབརྐྱིལབརྒྱེརབསྐྲེལརྒྱེབས
ལནརྔིཨནདརྨྱིམཁྱབའགྱབབསྐྱིརྒྱིམསྐྱེརསྦྱོལསྨྲིརསྣྲོངབསྡལདབརྐྱིསབརྒྱེལབསྐྲེསརྒྱེམས
ལབརྔུཨརདརྨྱུམཁྱམའགྱམབསྐྱུརྒྱིརསྐྱེལསྦྱོསསྨྲིལསྣྲོདབསྣནདབརྐྱུགབརྒྱེསབསྐྲོགརྒྱོགས
ལམརྔེཨལདརྨྱེམཁྱརའགྱརབསྐྱེརྒྱིལསྐྱེསསྨྱིགསྨྲིསསྣྲོནབསྣརདབརྐྱུངབརྒྱོགབསྐྲོངརྒྱོངས
ལརརྔོགཅའརྨྱོམཁྱལའགྱལབསྐྱོརྒྱིསསྐྱོགསྨྱིངསྨྲུགསྣྲོབབསྣལདབརྐྱུདབརྒྱོངབསྐྲོདརྒྱོབས
ལལརྗིགཙའསྐྱིམཁྱསའགྱསབསྒྱིརྒྱུགསྐྱོངསྨྱིདསྨྲུངསྣྲོམབསྩནདབརྐྱུནབརྒྱོདབསྐྲོནརྒྱོམས
ལསརྗུགཉའསྐྱུམཁྲགའཕྱགབསྒྱུརྒྱུངསྐྱོདསྨྱིནསྨྲུདསྣྲོརབསྩརདབརྐྱུབབརྒྱོནབསྐྲོབརྨྱིགས
ཤགརྗེགཏའསྐྱེམཁྲངའཕྱངབསྒྱེརྒྱུདསྐྱོནསྨྱིབསྨྲུནསྣྲོལབསྩལདབརྐྱུམབརྒྱོབབསྐྲོམརྨྱིངས
ཤངརྗོགདའསྐྱོམཁྲདའཕྱདབསྒྱོརྒྱུནསྐྱོབསྨྱིམསྨྲུབསྣྲོསབཀྱནདབརྐྱུརབརྒྱོམབསྐྲོརརྨྱིབས
ཤདརྙིགནའསྒྱིམཁྲནའཕྱནབསྐྲིརྒྱུབསྐྱོམསྨྱིརསྨྲུམདཀྱིགབཀྱརདབརྐྱུལབརྒྱོརབསྐྲོལརྨྱིམས
ཤནརྙུགཞའསྒྱུམཁྲབའཕྱབབསྐྲུརྒྱུམསྐྱོརསྨྱིལསྨྲུརདཀྱིངབཀྱལདབརྐྱུསབརྒྱོལབསྐྲོསརྨྱུགས
ཤབརྙེགཟའསྒྱེམཁྲམའཕྱམབསྐྲེརྒྱུརསྐྱོལསྨྱིསསྨྲུལདཀྱིདབགྱནདབརྐྱེགབརྒྱོསབསྒྲིགརྨྱུངས
ཤམརྙོགཡའསྒྱོམཁྲརའཕྱརབསྐྲོརྒྱུལསྐྱོསསྨྱུགསྨྲུསདཀྱིནབགྱརདབརྐྱེངབསྐྱིགབསྒྲིངརྨྱུབས
ཤརརྟིགཤའསྤྱིམཁྲལའཕྱལབསྒྲིརྒྱུསསྒྱིགསྨྱུངསྨྲེགདཀྱིབབགྱལདབརྐྱེདབསྐྱིངབསྒྲིདརྨྱུམས
ཤལརྟུགསའསྤྱུམཁྲསའཕྱསབསྒྲུརྒྱེགསྒྱིངསྨྱུདསྨྲེངདཀྱིམཀྭིནདབརྐྱེནབསྐྱིདབསྒྲིནརྨྱེགས
ཤསརྟེདཀའསྤྱེམགྱགའབྱགབསྒྲེརྒྱེངསྒྱིདསྨྱུནསྨྲེདདཀྱིརཀྭིརདབརྐྱེབབསྐྱིནབསྒྲིབརྨྱེངས
སགརྟོདགའསྤྱོམགྱངའབྱངབསྒྲོརྒྱེདསྒྱིནསྨྱུབསྨྲེནདཀྱིལཀྭིལདབརྐྱེམབསྐྱིབབསྒྲིམརྨྱེབས
སངརྡིདངའསྦྱིམགྱདའབྱདརྐྱིགརྒྱེནསྒྱིབསྨྱུམསྨྲེབདཀྱིསཀྭུནདབརྐྱེརབསྐྱིམབསྒྲིརརྨྱེམས
སདརྡུདཔའསྦྱུམགྱནའབྱནརྐྱིངརྒྱེབསྒྱིམསྨྱུརསྨྲེམདཀྱུགཀྭུརདབརྐྱེལབསྐྱིརབསྒྲིལརྨྱོགས
སནརྡེདབའསྦྱེམགྱབའབྱབརྐྱིདརྒྱེམསྒྱིརསྨྱུལསྨྲེརདཀྱུངཀྭུལདབརྐྱེསབསྐྱིལབསྒྲིསརྨྱོངས
སབརྡོདམའསྦྱོམགྱམའབྱམརྐྱིནརྒྱེརསྒྱིལསྨྱུསསྨྲེལདཀྱུདཀྭེནདབརྐྱོགབསྐྱིསབསྒྲུགརྨྱོབས
སམརྣིབཀའསྨྱིམགྱརའབྱརརྐྱིབརྒྱེལསྒྱིསསྨྱེགསྨྲེསདཀྱུནཀྭེརདབརྐྱོངབསྐྱུགབསྒྲུངརྨྱོམས
སརརྣུབགའསྨྱུམགྱལའབྱལརྐྱིམརྒྱེསསྒྱུགསྨྱེངསྨྲོགདཀྱུབཀྭེལདབརྐྱོདབསྐྱུངབསྒྲུདསྐྱིགས
སལརྣེབཅའསྨྱེམགྱསའབྱསརྐྱིརརྒྱོགསྒྱུངསྨྱེདསྨྲོངདཀྱུམཀྭོནདབརྐྱོནབསྐྱུདབསྒྲུནསྐྱིངས
སསརྣོབཙའསྨྱོམགྲགབརྐགརྐྱིལརྒྱོངསྒྱུདསྨྱེནསྨྲོདདཀྱུརཀྭོརདབརྐྱོབབསྐྱུནབསྒྲུབསྐྱིབས
ཧགརྦིབཏའསྐྲིམགྲངབརྐངརྐྱིསརྒྱོདསྒྱུནསྨྱེབསྨྲོནདཀྱུལཀྭོལདབརྐྱོམབསྐྱུབབསྒྲུམསྐྱིམས
ཧངརྦུབདའསྐྲུམགྲདབརྐདརྐྱུགརྒྱོནསྒྱུབསྨྱེམསྨྲོབདཀྱུསཁྭིནདབརྐྱོརབསྐྱུམབསྒྲུརསྐྱུགས
ཧདརྦེབཞའསྐྲེམགྲནབརྐནརྐྱུངརྒྱོབསྒྱུརསྨྱེརསྨྲོམདཀྱེགཁྭིརདབརྐྱོལབསྐྱུརབསྒྲུལསྐྱུངས
ཧནརྦོབཟའསྐྲོམགྲབབརྐབརྐྱུདརྒྱོམསྒྱུལསྨྱེལསྨྲོརདཀྱེངཁྭིལདབརྐྱོསབསྐྱུལབསྒྲུསསྐྱུབས
ཧབརྨིབཤའསྒྲིམགྲམབརྐམརྐྱུནརྒྱོརསྒྱུསསྨྱེསསྨྲོལདཀྱེདཁྭུནདབརྒྱིགབསྐྱུསབསྒྲེགསྐྱུམས
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BaiMaWang7iu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值