用Python开发输入法后台(5)——数据结构

发布时间 2023-05-26 22:48:12作者: 顺其自然,道法自然

全部汉字

我从网上收集了一些资料, 构建了一个<全部汉字.json>文件, 文件格式如下所示:

{
    "吖": [
        [
            "aa",
            "ya"
        ],
        "szhdps"
    ],
    "呵": [
        [
            "aa",
            "he",
            "ke"
        ],
        "szhhszhs"
    ],
}

这是一个字典, 字典索引是每一个汉字, 值分为2部分, 前者是拼音, 后者是笔画; 一个汉字的拼音可能有多个, 所以是一个数组, 这里的拼音采用的是双拼, 所以用2个字母表示一个字, 并且不分舌前音和舌后音, 也就是说, z,c,s等同于zh,ch,si; 笔画是横,竖,撇,折,点(也是捺), 分别用字母hspzd来表示. 

常用词

这里面的字很多, 有2万多个, 所以我把常用的字词放在另外一个文件中<词.json>, 它的数据结构如下所示:

[
    [
        "的",
        "de",
        "pszhhpzd",
        1684812452
    ],
    [
        "讲座",
        "jdzo",
        "-",
        0
    ],
]

它是一个字或词的数组,  由4部分组成, 第一个表示字词本身, 第2个表示双拼拼音, 第3个表示笔画(仅对单字生效), 第4个表示这个词的序号, 序号越大表示优先级越高, 候选词排得越靠前. 序号用最后一次输入的时间戳. 

提升检索效率

为提升检索效率, 把常用词分割成3个字典, 单字词, 双字词, 多字词, 单字词用单个汉字的拼音首字母来索引, 双字词用2个字的拼音首字母索引, 多字词用前3个字多拼音首字母来索引.

为方便检索汉字的笔画, 还需要一个汉字到笔画到字典.

这样就可以快速缩小检索的范围.