首页 > 编程语言 >用Python开发输入法后台(5)——数据结构

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

时间:2023-05-26 22:55:06浏览次数:43  
标签:检索 输入法 拼音 Python 字典 字词 汉字 数据结构 笔画

全部汉字

我从网上收集了一些资料, 构建了一个<全部汉字.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个字多拼音首字母来索引.

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

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

 

标签:检索,输入法,拼音,Python,字典,字词,汉字,数据结构,笔画
From: https://www.cnblogs.com/huzhongqiang/p/17435462.html

相关文章

  • Python——饼图
    matplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center=(0,......
  • python 日期函数的使用
    计算一段时间内,周六出现的次数。如果是周六,则 5==dt_start.weekday()这里用到了2个主要的日期函数datetime_to_date_int,date_int_to_datetime importdatetimedefdatetime_to_date_int(dt):ifisinstance(dt,datetime.datetime):dt=dt.date()......
  • 使用这些方法让你的 Python 并发任务执行得更好
    动动发财的小手,点个赞吧!问题一直以来,Python的多线程性能因为GIL而一直没有达到预期。所以从3.4版本开始,Python引入了asyncio包,通过并发的方式并发执行IO-bound任务。经过多次迭代,asyncioAPI的效果非常好,并发任务的性能相比多线程版本有了很大的提升。但是,程序员在使......
  • 2.3Tucker分解HOSVD、HOOI算法推导和python实现
    HOSVD参考论文:AMULTILINEARSINGULARVALUEDECOMPOSITIONHOSVD虽然不能保证给Tucker分解给出最优拟合,但是可以提供一个好的初始化的解这些矩阵都是正交的。之所以求前R最大特征值,可以在下文的HOOI看到,目的是最大化目标函数UWHOSVD的最后一行证明如下:HOOI:黄色之所以可以化过去,......
  • python md5源码
    importbinasciiimportsysimportos.pathSV=[0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,0xa679438e,0x49b40......
  • python day3
    上篇案例  #我写的importrandomnum=random.randint(1,10)print(num)a=int(input("请输入数字"))ifa==num:print("bingo!")elifa>num:b=int(input("大了,还有两次机会,重新输入"))ifb>num:c=int(input(&qu......
  • Python 使用Seaborn画图,代码正常不出图
    不得不说,这个库画出来的图也太好看了。目前还没有很懂这个库,但是需要注意的是我在用完plt之后引入这个,图片一直出不来真的困扰我很久啊。终于找到了救命的办法参考链接:https://blog.csdn.net/qq_56039091/article/details/124024286......
  • 【python基础】变量
    1.初识变量编程本质就是通过一定的规则,去操纵数据,变量作为数据的载体,在程序中经常会被用到。与变量相联系的还有一个名词叫数据类型,我们可以举一个生活中的例子,来理解数据类型-变量-数据三者之间的关系红色的1号杯子中装满了水,其中红色就代表数据类型,1号杯子就代表变量,而水就代......
  • 使用 OpenCV 进行轮廓检测 (Python/C++)第一部分
    什么是轮廓当我们连接一个对象边界上的所有点时,我们得到一个轮廓。通常,特定轮廓是指具有相同颜色和强度的边界像素。OpenCV使得在图像中查找和绘制轮廓变得非常容易。它提供了两个简单的功能:findContours()drawContours()此外,它有两种不同的轮廓检测算法:CHAIN_APPROX_SIMPLECHAIN_......
  • 数据结构与算法—排序算法篇
    1、选择排序1.1、算法思想每趟从待排序的数据元素中,选出最小(或最大)的一个元素,顺序放在待排序的数列最前面,直到全部待排序的数据元素排完。1.2、步骤1、查找此数列中的最小元素,将其与第一个交换2、从第二个值开始找,查找到最小元素,将其与第二个交换3、以此类推,直到遍历结束1.3、算法......