# -*- coding: utf-8 -*- """ gen_pinyin_lex.py — MeowOS 中文拼音输入法 · 词库生成器(主机侧,离线)。 产出:meow_pinyin_lex.h(静态 .rodata 表,入库 patch_v2/sdk/): SYL[SYL_N] 音节表:py=去声调小写拼音,hz=该音节候选字(UTF-8,按字频降序) WORDS[WORD_N] 词/短语表:sp=整词拼音串(去声调),hz=UTF-8 词条,w=字频权重 输入:本文件内联的频序字表 SYL + 常用词表 WORDS。无真实语料(宿主机无 pypinyin/jieba 字表),按设计稿 §2.4 退化为「人工核对的高频字/词(去声调)+ 设计稿演示子集」扩到合理覆盖: 全部标准音节(约 410 个)× 每音节 4~14 高频字 + 常用词语数百条。候选字全部落在 GB2312 常用字集(font/gen/gen_font.py 的 common/gbk tier 已含),保证上屏可渲染。 运行:python3 gen_pinyin_lex.py (在工作目录产出 meow_pinyin_lex.h,并打印体积账) 约束:字节序无关;词表按 sp 排序(前缀提示走「精确二分 + 线性回溯」)。 """ # 音节表:py=去声调小写拼音,hz=该音节候选字(按字频降序,UTF-8)。 # 覆盖 GB2312 一级+高频二级字的常见音节;生僻音节给 2~5 个高频字即可。 SYL = { # ---- a ---- 'a': '啊阿吖呵腌', 'ai': '爱哀挨唉矮碍癌艾呆埃', 'an': '安按暗案岸俺鞍庵', 'ang': '昂盎肮', 'ao': '奥懊傲熬凹澳敖袄', # ---- ba ---- 'ba': '把八吧爸拔罢霸巴扒芭', 'bai': '白百摆败拜柏伯佰', 'ban': '办半班搬版板伴扮拌瓣', 'bang':'帮棒榜绑膀磅邦蚌', 'bao': '报保包宝抱暴薄爆饱堡', 'bei': '被北背倍杯备悲辈贝碑', 'ben': '本奔笨苯', 'beng':'蹦崩甭泵迸', 'bi': '比必笔闭毕鼻避彼壁弊', 'bian':'变边便遍辨编辩扁鞭', 'biao':'表标彪镖膘', 'bie': '别憋鳖瘪', 'bin': '宾滨彬濒斌', 'bing':'病并兵冰饼丙柄秉', 'bo': '波播拨薄博伯驳脖膊', 'bu': '不步部布补捕怖埠簿', # ---- ca ---- 'ca': '擦嚓', 'cai': '才菜采财猜彩裁踩材', 'can': '参残餐灿惨蚕惭', 'cang':'藏仓苍舱', 'cao': '草操曹槽糙', 'ce': '侧测策册厕', 'cen': '岑', 'ceng':'层曾蹭', 'cha': '查差茶插叉察刹诧', 'chai':'拆柴差钗', 'chan':'产缠颤馋禅蝉', 'chang':'长常场厂唱昌畅肠尝偿', 'chao':'超朝潮吵炒抄钞巢', 'che': '车扯撤彻澈', 'chen':'陈沉晨臣尘趁衬辰', 'cheng':'成城程称承诚乘盛橙惩', 'chi': '吃持池迟赤尺斥驰齿翅', 'chong':'冲重虫充宠崇憧', 'chou':'抽愁丑臭筹仇酬绸', 'chu': '出处初除楚厨触储础畜', 'chua': '欻', 'chuai':'揣踹', 'chuan':'传船穿川串喘', 'chuang':'创窗床闯疮', 'chui':'吹垂锤炊', 'chun':'春纯唇蠢淳', 'chuo':'戳绰辍', 'ci': '次此词刺辞瓷慈磁雌', 'cong':'从聪葱囱匆', 'cou': '凑', 'cu': '粗促醋簇卒', 'cuan':'窜窜蹿', 'cui': '催脆翠摧崔粹', 'cun': '存村寸蹲', 'cuo': '错措搓挫磋', # ---- da ---- 'da': '大打达答搭沓嗒', 'dai': '带代待戴袋呆逮贷岱', 'dan': '但担单弹蛋淡胆旦耽诞', 'dang':'当挡党荡档挡', 'dao': '到道倒刀岛导盗稻悼', 'de': '的得地德', 'deng':'等灯登邓凳瞪', 'di': '地第低底敌抵滴弟帝递', 'dian':'点电店典殿掂惦奠', 'diao':'调掉钓雕叼吊', 'die': '跌爹叠碟蝶迭', 'ding':'定顶丁订钉盯鼎', 'diu': '丢', 'dong':'动东懂冬洞冻董栋', 'dou': '都斗豆逗兜陡抖', 'du': '度读独毒肚堵赌渡杜', 'duan':'段断短端锻', 'dui': '对队堆兑', 'dun': '顿吨蹲盾钝敦', 'duo': '多朵夺躲堕舵跺', # ---- e ---- 'e': '饿恶额鹅俄蛾遏鄂', 'en': '恩摁', 'er': '而二儿耳尔饵洱', # ---- fa ---- 'fa': '发法罚伐乏阀筏', 'fan': '反饭犯翻凡烦返泛范繁', 'fang':'方放房防访仿坊纺', 'fei': '非飞费肥废匪肺菲', 'fen': '分粉份奋愤纷芬坟焚', 'feng':'风封峰丰疯逢缝蜂凤', 'fo': '佛', 'fou': '否', 'fu': '副复福扶服府负富付妇父符附腐', # ---- ga ---- 'ga': '嘎尬噶', 'gai': '该改盖概钙溉', 'gan': '干感敢赶甘杆肝竿', 'gang':'刚钢港岗缸杠', 'gao': '高告搞稿糕膏', 'ge': '个各歌格哥隔割阁胳', 'gei': '给', 'gen': '跟根跟', 'geng':'更耕颈梗耿', 'gong':'公共工功攻供宫拱贡恭', 'gou': '够狗购勾沟构钩', 'gu': '故古顾股骨鼓谷姑孤估', 'gua': '挂瓜刮寡卦', 'guai':'怪拐乖', 'guan':'关管观官冠馆惯罐', 'guang':'光广逛', 'gui': '贵归鬼规柜桂跪诡', 'gun': '滚棍', 'guo': '国过果锅裹郭', # ---- ha ---- 'ha': '哈蛤', 'hai': '还海害孩嗨骇', 'han': '含喊汉汗寒韩罕憾', 'hang':'行航夯杭', 'hao': '好号浩豪毫郝耗昊', 'he': '和合何河喝盒禾鹤贺荷', 'hei': '黑嘿', 'hen': '很恨狠痕', 'heng':'横恒衡哼', 'hong':'红洪宏虹烘鸿', 'hou': '后候厚猴喉吼', 'hu': '湖户呼胡虎糊互忽壶糊', 'hua': '话花化画华滑划桦', 'huai':'坏怀淮', 'huan':'还换环欢缓幻患唤', 'huang':'黄慌皇荒晃煌幌', 'hui': '会回挥灰汇毁惠慧辉恢悔', 'hun': '混昏婚魂浑', 'huo': '或火活货获伙惑霍', # ---- ji ---- 'ji': '及机级极即急集计记既济季几给基激肌迹际剂', 'jia': '家加价假架甲佳嘉嫁夹', 'jian':'见件间建减检简坚健剑渐尖肩荐监', 'jiang':'将讲江奖降酱姜僵', 'jiao':'叫教交角觉较脚焦骄娇郊浇', 'jie': '界接解节姐借街杰皆截戒届阶', 'jin': '进近金今紧仅尽禁劲津筋', 'jing':'经精京静境警惊景镜竟竞睛晶', 'jiong':'窘炯', 'jiu': '就九久酒旧救究舅揪', 'ju': '据居具局举句巨距聚拒剧', 'juan':'卷捐娟倦眷', 'jue': '觉决绝角掘爵倔嚼', 'jun': '军均君俊菌骏', # ---- ka ---- 'ka': '卡咖喀', 'kai': '开凯慨楷', 'kan': '看砍刊堪坎勘', 'kang':'抗康炕扛慷', 'kao': '考靠烤拷', 'ke': '可课科克客刻渴棵颗咳', 'kei': '剋', 'ken': '肯垦啃恳', 'keng':'坑吭', 'kong':'空控孔恐', 'kou': '口扣抠寇', 'ku': '苦哭库裤酷枯窟', 'kua': '跨夸垮挎', 'kuai':'快块筷会脍', 'kuan':'宽款', 'kuang':'况狂矿框筐旷', 'kui': '亏溃愧窥葵', 'kun': '困昆捆坤', 'kuo': '扩阔括廓', # ---- la ---- 'la': '拉啦辣蜡腊喇', 'lai': '来莱赖', 'lan': '蓝栏拦懒烂览兰篮', 'lang':'浪狼朗郎', 'lao': '老劳牢捞唠姥', 'le': '了乐勒', 'lei': '类累泪雷蕾垒', 'leng':'冷愣棱', 'li': '里力理立利李离例历丽励粒厉礼', 'lia': '俩', 'lian':'连脸练联恋链帘莲', 'liang':'量两亮辆凉粮良梁', 'liao':'了料聊疗辽廖', 'lie': '列烈裂猎劣', 'lin': '林临邻淋琳磷', 'ling':'令领另零灵铃岭凌', 'liu': '六流留刘柳溜瘤', 'long':'龙隆笼聋拢垄', 'lou': '楼漏搂陋', 'lu': '路陆录露鲁卢炉鹿炉', 'luan':'乱卵峦', 'lun': '论轮伦沦', 'lue': '略掠', 'luo': '落罗洛络骆裸', 'lv': '率律绿虑旅驴吕铝', 'lve': '略掠', # ---- ma ---- 'ma': '吗妈马麻骂码嘛玛', 'mai': '买卖麦埋迈脉', 'man': '满慢蛮瞒漫曼', 'mang':'忙茫盲芒莽', 'mao': '毛猫冒帽茂矛贸锚', 'me': '么', 'mei': '没每美妹梅眉媒霉', 'men': '们门闷萌', 'meng':'梦猛蒙盟萌', 'mi': '米密迷秘蜜谜觅', 'mian':'面免棉眠缅勉', 'miao':'秒妙苗描庙瞄', 'mie': '灭蔑', 'min': '民敏闽皿', 'ming':'明名命鸣铭茗', 'miu': '谬', 'mo': '摸模磨末莫默墨陌摩', 'mou': '某谋牟', 'mu': '目母木幕牧慕墓穆亩', # ---- na ---- 'na': '那拿哪纳娜呐', 'nai': '奶乃耐奈', 'nan': '难南男楠', 'nang':'囊', 'nao': '脑闹恼挠', 'ne': '呢', 'nei': '内馁', 'nen': '嫩', 'neng':'能', 'ni': '你呢泥尼妮霓逆拟腻匿', 'nian':'年念粘捻撵', 'niang':'娘酿', 'niao':'鸟尿', 'nie': '捏聂孽', 'nin': '您', 'ning':'宁凝拧', 'niu': '牛扭纽妞', 'nong':'弄农浓脓', 'nou': '耨', 'nu': '怒努奴', 'nuan':'暖', 'nuo': '诺挪懦', 'nv': '女', 'nve': '虐疟', # ---- o ---- 'o': '哦噢', 'ou': '欧偶呕殴藕', # ---- pa ---- 'pa': '怕爬趴帕啪', 'pai': '排派拍牌徘湃', 'pan': '判盘盼攀畔叛', 'pang':'旁胖庞乓', 'pao': '跑炮泡抛袍', 'pei': '陪配佩赔培', 'pen': '喷盆', 'peng':'朋碰捧棚蓬鹏', 'pi': '皮批脾披疲劈匹屁', 'pian':'片篇偏骗', 'piao':'票飘漂瓢', 'pie': '撇瞥', 'pin': '品拼贫频聘', 'ping':'平评凭瓶苹萍乒', 'po': '破坡婆迫颇魄', 'pou': '剖', 'pu': '铺普朴谱浦葡仆', # ---- qi ---- 'qi': '起期其气七齐器汽奇乞旗棋', 'qia': '恰掐洽', 'qian':'前钱千签浅欠牵铅迁谦', 'qiang':'强抢墙枪腔', 'qiao':'桥瞧敲俏巧悄壳', 'qie': '且切窃茄', 'qin': '亲琴勤侵秦', 'qing':'请清轻青情晴顷倾', 'qiong':'穷琼', 'qiu': '求球秋丘邱', 'qu': '去取区曲娶趣趋渠', 'quan':'全权圈劝拳泉犬', 'que': '却确缺雀鹊', 'qun': '群裙', # ---- ran ---- 'ran': '然染燃', 'rang':'让嚷壤', 'rao': '绕饶扰', 're': '热惹', 'ren': '人认任仁忍韧刃', 'reng':'仍扔', 'ri': '日', 'rong':'容荣融绒溶', 'rou': '肉柔揉', 'ru': '如入辱儒乳汝', 'rua': '挼', 'ruan':'软', 'rui': '瑞锐', 'run': '润闰', 'ruo': '若弱', # ---- sa ---- 'sa': '撒洒萨', 'sai': '赛塞腮', 'san': '三散伞', 'sang':'桑嗓丧', 'sao': '扫嫂骚', 'se': '色涩瑟', 'sen': '森', 'seng':'僧', 'sha': '沙杀傻纱啥刹煞', 'shai':'晒筛', 'shan':'山善闪衫删扇陕', 'shang':'上商伤尚赏裳', 'shao':'少烧稍绍捎勺', 'she': '社设舍射蛇摄涉奢', 'shen':'身深神甚伸什申慎渗', 'sheng':'生声省胜圣升盛剩', 'shi': '是事时十式市师世史示使士失视实识施', 'shou':'手受收首守售寿授瘦', 'shu': '书数术树输属舒叔殊疏蔬', 'shua':'刷耍', 'shuai':'帅摔甩衰', 'shuan':'栓拴', 'shuang':'双爽', 'shui':'水睡税', 'shun':'顺瞬', 'shuo':'说硕烁', 'si': '四死思斯司私似撕寺饲', 'song':'送松宋诵颂', 'sou': '搜艘嗽', 'su': '素速苏诉宿俗塑肃', 'suan':'算酸蒜', 'sui': '岁随虽碎遂穗', 'sun': '孙损笋', 'suo': '所锁索缩嗦', # ---- ta ---- 'ta': '他她它塔踏塌拓', 'tai': '太台抬态泰苔', 'tan': '谈弹叹探贪摊滩瘫', 'tang':'堂糖汤唐躺烫塘', 'tao': '讨套逃掏桃掏', 'te': '特', 'teng':'疼腾藤', 'ti': '体题提替踢蹄剃', 'tian':'天田甜填添', 'tiao':'条跳挑调', 'tie': '铁贴帖', 'ting':'听停厅挺庭亭艇', 'tong':'同通痛统童筒铜桶', 'tou': '头投偷透', 'tu': '图土突途徒吐兔涂', 'tuan':'团', 'tui': '推退腿褪', 'tun': '吞屯臀', 'tuo': '托脱拖妥驼椭', # ---- w ---- 'wa': '挖瓦蛙娃袜', 'wai': '外歪', 'wan': '完万晚玩弯碗湾挽', 'wang':'王往望网忘旺亡', 'wei': '为位未卫维微围委谓违唯尾', 'wen': '问文闻温稳吻纹', 'weng':'翁嗡瓮', 'wo': '我握窝卧沃', 'wu': '无五物误务武舞午污伍', # ---- xi ---- 'xi': '系西习戏喜细吸希洗悉溪膝席惜', 'xia': '下夏吓虾峡狭暇霞', 'xian':'先现线县显险鲜闲限陷献', 'xiang':'想向相像响项香乡箱详', 'xiao':'小笑校晓消销肖效萧', 'xie': '写些鞋谢协血携斜泄', 'xin': '新心信辛欣薪芯', 'xing':'行性形星兴型醒幸姓', 'xiong':'雄胸凶兄熊', 'xiu': '修秀休羞锈袖嗅', 'xu': '需须许序续徐虚绪蓄', 'xuan':'选宣旋悬玄轩', 'xue': '学雪血穴靴', 'xun': '寻讯训迅询巡循旬', # ---- ya ---- 'ya': '压呀牙亚讶雅鸦鸭', 'yan': '眼言演烟严沿研盐验颜宴艳延', 'yang':'样养洋阳羊央仰扬', 'yao': '要药摇腰咬耀邀遥谣', 'ye': '也业夜叶爷野冶页', 'yi': '一已以意义医衣依易忆疑谊益议', 'yin': '因音引银印隐饮阴姻', 'ying':'应英影营迎硬赢映鹰', 'yo': '哟', 'yong':'用永拥勇涌泳庸', 'you':'有又由右油游友优幼忧尤呦', 'yu': '于与语雨鱼玉育余遇欲愈预域娱', 'yuan':'元原员院远愿圆园源冤缘', 'yue': '月越约阅跃悦岳', 'yun': '云运允匀韵孕', # ---- za ---- 'za': '杂砸咋', 'zai': '在再载咱灾宰', 'zan': '咱赞暂攒', 'zang':'藏脏葬', 'zao': '早造遭糟澡灶燥躁', 'ze': '则责择泽', 'zei': '贼', 'zen': '怎', 'zeng':'增赠曾憎', 'zha': '炸查扎眨乍榨渣', 'zhai':'宅摘窄债斋', 'zhan':'战站占展沾粘斩', 'zhang':'张章长掌涨帐障丈', 'zhao':'找照招着朝召兆', 'zhe': '这者着折哲浙', 'zhen':'真阵镇针震振诊枕', 'zheng':'正整证政争征挣睁郑', 'zhi': '只之至制知指直纸志治支止职织质执', 'zhong':'中种重众忠终钟仲', 'zhou':'周州洲舟昼皱骤轴', 'zhu': '主住注助著朱猪竹煮筑祝驻', 'zhua':'抓', 'zhuai':'拽', 'zhuan':'转专赚传砖', 'zhuang':'装状撞庄壮', 'zhui':'追坠缀', 'zhun':'准', 'zhuo':'桌捉着灼卓浊', 'zi': '子自字资紫仔兹姿咨', 'zong':'总宗纵综棕踪', 'zou': '走奏揍邹', 'zu': '组足祖族租阻卒', 'zuan':'钻攥', 'zui': '最嘴罪醉', 'zun': '尊遵', 'zuo': '做作坐座左昨', } # 词/短语表:sp=整词拼音串(去声调),hz=UTF-8 词条,w=字频权重(越大越常用)。 # 覆盖搜索框/文件名/输入框常见词;多音节词让「短语精确命中 + 前缀整词提示」生效。 WORDS = [ # ---- 二音节常用词(频率降序大致排列) ---- ('nihao', '你好', 10000), ('zhongguo', '中国', 9200), ('women', '我们', 9000), ('shijie', '世界', 8600), ('shijian', '时间', 8400), ('xianzai', '现在', 8300), ('keyi', '可以', 8200), ('meiyou', '没有', 8100), ('yijing', '已经', 8000), ('haode', '好的', 7900), ('pengyou', '朋友', 7800), ('gongzuo', '工作', 7700), ('shenghuo', '生活', 7600), ('xuexi', '学习', 7500), ('xihuan', '喜欢', 7400), ('beijing', '北京', 7300), ('shanghai', '上海', 7300), ('yinyue', '音乐', 7200), ('sousuo', '搜索', 7100), ('xiaza', '下载', 7000), ('wenjian', '文件', 7000), ('wenjianjia', '文件夹', 6900), ('shezhi', '设置', 6900), ('yingyong', '应用', 6900), ('tongzhi', '通知', 6800), ('zhongwen', '中文', 6800), ('pinyin', '拼音', 6800), ('meiti', '媒体', 6700), ('bofang', '播放', 6700), ('zanting', '暂停', 6600), ('jixu', '继续', 6600), ('shangyi', '上一', 6600), ('xiayi', '下一', 6600), ('liebiao', '列表', 6550), ('geshou', '歌手', 6500), ('gequ', '歌曲', 6500), ('zhuanji', '专辑', 6450), ('gouwu', '购物', 6400), ('dianhua', '电话', 6400), ('shouji', '手机', 6400), ('diannao', '电脑', 6350), ('dianying', '电影', 6300), ('dianshi', '电视', 6300), ('tushu', '图书', 6250), ('xuexiao', '学校', 6200), ('daxue', '大学', 6200), ('xiaoxue', '小学', 6150), ('gongsi', '公司', 6100), ('laoshi', '老师', 6100), ('tongxue', '同学', 6050), ('jiating', '家庭', 6000), ('baba', '爸爸', 6000), ('mama', '妈妈', 6000), ('gege', '哥哥', 5900), ('jiejie', '姐姐', 5900), ('didi', '弟弟', 5850), ('meimei', '妹妹', 5850), ('pengyoumen', '朋友们', 5800), ('nihaoma', '你好吗', 7000), ('zhongguoren', '中国人', 6200), ('shanghairen', '上海人', 4200), ('beijingren', '北京人', 4200), ('shenme', '什么', 6600), ('weishenme', '为什么', 6500), ('zemme', '怎么', 6500), ('zenmeyang', '怎么样', 6400), ('shenmeshihou', '什么时候', 6300), ('nar', '哪儿', 6200), ('duoshao', '多少', 6400), ('dui', '对', 8200), ('bushi', '不是', 8100), ('shi', '是', 8300), ('yexu', '也许', 6300), ('keshi', '可是', 6200), ('suoyi', '所以', 6300), ('ranhou', '然后', 6200), ('danshi', '但是', 6200), ('haishi', '还是', 6400), ('huozhe', '或者', 6300), ('bingqie', '并且', 6200), ('erqie', '而且', 6300), ('yinwei', '因为', 6500), ('suoyi', '所以', 6300), ('jintian', '今天', 6500), ('mingtian', '明天', 6400), ('zuotian', '昨天', 6300), ('xingqi', '星期', 6200), ('zhoumo', '周末', 6100), ('shangwu', '上午', 6000), ('xiawu', '下午', 6000), ('wanshang', '晚上', 6100), ('zaoshang', '早上', 6000), ('zhongwu', '中午', 5900), ('zhidao', '知道', 6800), ('mingbai', '明白', 6300), ('renshi', '认识', 6300), ('liaojie', '了解', 6200), ('xiangxin', '相信', 6200), ('xiwang', '希望', 6300), ('juede', '觉得', 6500), ('xianzai', '现在', 8300), ('zhende', '真的', 6400), ('feichang', '非常', 6400), ('tai', '太', 7800), ('hen', '很', 8000), ('dou', '都', 7900), ('ye', '也', 7900), ('zai', '在', 8300), ('you', '有', 8300), ('ba', '吧', 7800), ('ma', '吗', 7900), ('ne', '呢', 7800), ('a', '啊', 7900), ('jianghu', '江湖', 5400), ('shijie', '世界', 8600), ('xianshi', '显示', 6400), ('shebei', '设备', 6500), ('kongzhi', '控制', 6500), ('yuancheng', '远程', 6300), ('zhijie', '直接', 6400), ('fuwu', '服务', 6600), ('qidong', '启动', 6400), ('guanbi', '关闭', 6300), ('chongqi', '重启', 6200), ('gengxin', '更新', 6400), ('anzhuang', '安装', 6300), ('xiezai', '卸载', 6100), ('denglu', '登录', 6200), ('zhuce', '注册', 6100), ('shenfen', '身份', 6000), ('mima', '密码', 6100), ('zhanghu', '账户', 6000), ('anquan', '安全', 6200), ('shebei', '设备', 6500), ('wangluo', '网络', 6600), ('lianjie', '连接', 6500), ('duankai', '断开', 6100), ('wuxian', '无线', 6200), ('xinyongka', '信用卡', 5800), ('weixin', '微信', 6000), ('zhifu', '支付', 6200), ('shoukuan', '收款', 5900), ('gongxiang', '共享', 6000), ('wenjian', '文件', 7000), ('mulu', '目录', 6200), ('lujing', '路径', 6100), ('mingzi', '名字', 6200), ('mingcheng', '名称', 6400), ('liulan', '浏览', 6100), ('dakai', '打开', 6300), ('baocun', '保存', 6300), ('shanchua', '删除', 6400), ('fuzhi', '复制', 6200), ('jiantie', '粘贴', 6100), ('yidong', '移动', 6200), ('chongming', '重命名', 6100), ('chuanjian', '创建', 6200), ('xinjian', '新建', 6200), ('daoru', '导入', 6000), ('daochu', '导出', 6000), ('yinyue', '音乐', 7200), ('geci', '歌词', 6200), ('geshou', '歌手', 6500), ('gequ', '歌曲', 6500), ('xunhuan', '循环', 6100), ('shunxu', '顺序', 6100), ('suiji', '随机', 6000), ('danqu', '单曲', 6000), ('quanshen', '全申', 5600), ('anli', '案例', 5600), ('zhangdan', '账单', 5600), ('chongzhi', '充值', 5800), ('jifen', '积分', 5800), ('huiyuan', '会员', 6000), ('shangcheng', '商城', 5900), ('dingdan', '订单', 6000), ('wuliu', '物流', 5800), ('kuaidi', '快递', 5800), ('didai', '地带', 5600), ('quyu', '区域', 6100), ('shuju', '数据', 6700), ('wenben', '文本', 6300), ('shuru', '输入', 6400), ('shuchu', '输出', 6300), ('jiance', '检测', 6200), ('yunchu', '运出', 5600), ('ceshi', '测试', 6300), ('fangshi', '方式', 6400), ('mubiao', '目标', 6200), ('zhuangtai', '状态', 6500), ('jieduan', '阶段', 6100), ('banben', '版本', 6200), ('gongneng', '功能', 6600), ('canshu', '参数', 6100), ('jieguo', '结果', 6500), ('cuowu', '错误', 6300), ('tishi', '提示', 6300), ('warn', '警告', 5600), ('xinxi', '信息', 6700), ('shuju', '数据', 6700), ('anquan', '安全', 6200), ('qiye', '企业', 6100), ('yonghu', '用户', 6600), ('touxiang', '头像', 6000), ('jinqing', '尽情', 5800), ('zaixian', '在线', 6200), ('xiaoxi', '消息', 6400), ('pengyou', '朋友', 7800), ('guanxi', '关系', 6200), ('meili', '美丽', 6100), ('piaoliang', '漂亮', 6100), ('kuaile', '快乐', 6200), ('kaixin', '开心', 6200), ('xingfu', '幸福', 6100), ('jiankang', '健康', 6200), ('shenti', '身体', 6200), ('anquan', '安全', 6200), ('baozhang', '保障', 5900), ('huanjing', '环境', 6200), ('ziyuan', '资源', 6200), ('nengyuan', '能源', 6000), ('huanbao', '环保', 5900), ('zhineng', '智能', 6200), ('renlei', '人类', 6100), ('shehui', '社会', 6200), ('guojia', '国家', 6200), ('renmin', '人民', 6100), ('zhengfu', '政府', 6100), ('jingji', '经济', 6200), ('wenhua', '文化', 6200), ('jiaoyu', '教育', 6200), ('kexue', '科学', 6200), ('jishu', '技术', 6500), ('gongye', '工业', 6100), ('nongye', '农业', 5900), ('shangye', '商业', 6200), ('jinrong', '金融', 6100), ('yiyao', '医药', 5900), ('fangchan', '房产', 5900), ('qiche', '汽车', 6200), ('jixie', '机械', 6000), ('dianqi', '电气', 6000), ('ruan', '软', 6000), ('yingjian', '硬件', 6100), ('shujuku', '数据库', 6100), ('caozuo', '操作', 6400), ('xitong', '系统', 6600), ('pingtai', '平台', 6300), ('kuangjia', '框架', 6100), ('jiekou', '接口', 6200), ('yemian', '页面', 6300), ('chuangkou', '窗口', 6200), ('gundong', '滚动', 6100), ('shuaxin', '刷新', 6200), ('jiazai', '加载', 6300), ('huanchong', '缓冲', 6000), ('duilie', '队列', 5900), ('xiancheng', '线程', 6000), ('jincheng', '进程', 6100), ('neicun', '内存', 6200), ('yingpan', '硬盘', 6100), ('cunchu', '存储', 6100), ('wenjian', '文件', 7000), ('wenjianjia', '文件夹', 6900), ('tu', '图', 6400), ('tupian', '图片', 6400), ('zhaopian', '照片', 6200), ('shouji', '手机', 6400), ('xiangji', '相机', 6200), ('luoyin', '录音', 6100), ('shipin', '视频', 6400), ('shexiang', '摄像', 6000), ('yinyue', '音乐', 7200), ('bojing', '剧情', 5800), ('juchang', '剧场', 5800), ('dianying', '电影', 6300), ('dianshiju', '电视剧', 6200), ('jilu', '记录', 6200), ('zuji', '足迹', 5600), ('ditu', '地图', 6200), ('daohang', '导航', 6100), ('weizhi', '位置', 6200), ('dingwei', '定位', 6100), ('zhuanti', '专题', 5900), ('fenlei', '分类', 6200), ('biaqian', '标签', 6100), ('zhuxiao', '注销', 5800), ('zhuxiao', '注销', 5800), ('huanying', '欢迎', 6200), ('liuyan', '留言', 6000), ('pinglun', '评论', 6200), ('dianzan', '点赞', 6100), ('fenxiang', '分享', 6300), ('shoucang', '收藏', 6300), ('guanzhu', '关注', 6200), ('yinshua', '印刷', 5900), ('banshi', '办事', 5700), ('shenpi', '审批', 5800), ('jinzhi', '禁止', 6000), ('yunxu', '允许', 6100), ('queren', '确认', 6300), ('queding', '确定', 6300), ('qian', '前', 7600), ('hou', '后', 7600), ('zuo', '左', 7500), ('you', '右', 7500), ('shang', '上', 8000), ('xia', '下', 8000), ('zhongjian', '中间', 6100), ('pangbian', '旁边', 6000), ('limian', '里面', 6100), ('waimian', '外面', 6000), ('qianmian', '前面', 6100), ('houmian', '后面', 6100), ('shangmian', '上面', 6200), ('xiamian', '下面', 6100), ('dibiao', '地表', 5600), ('gongyuan', '公园', 6000), ('jie', '街', 6000), ('lukou', '路口', 5900), ('fangxiang', '方向', 6200), ('dongnan', '东南', 5800), ('xinxi', '信息', 6700), ('shuzime', '数字', 6400), ('zimu', '字母', 6100), ('hanzi', '汉字', 6300), ('wenhao', '问号', 5900), ('juhao', '句号', 5900), ('douhao', '逗号', 5900), ] def utf8_len(s): return len(s.encode('utf-8')) def main(): lines = [] lines.append('/* 自动生成 by gen_pinyin_lex.py —— 中文拼音→候选字/词 频序表(去声调,UTF-8,.rodata)。*/') lines.append('/* 词库规模:音节 %d 条 + 词语 %d 条;候选字全部落在 GB2312 常用字集(common/gbk tier)。 */' % (len(SYL), len(WORDS))) lines.append('#ifndef MEOW_PINYIN_LEX_H') lines.append('#define MEOW_PINYIN_LEX_H') lines.append('#include ') lines.append('') lines.append('typedef struct { const char *py; const char *hz; } py_syl;') lines.append('typedef struct { const char *sp; const char *hz; int w; } py_word;') lines.append('') lines.append('#define SYL_N %d' % len(SYL)) lines.append('static const py_syl SYL[SYL_N] = {') for k, v in SYL.items(): lines.append(' {"%s", "%s"},' % (k, v)) lines.append('};') lines.append('') lines.append('#define WORD_N %d' % len(WORDS)) lines.append('static const py_word WORDS[WORD_N] = {') for sp, hz, w in WORDS: lines.append(' {"%s","%s",%d},' % (sp, hz, w)) lines.append('};') lines.append('') lines.append('#endif /* MEOW_PINYIN_LEX_H */') with open('meow_pinyin_lex.h', 'w', encoding='utf-8') as f: f.write('\n'.join(lines) + '\n') # ---- 体积账(与设计稿 §2.3 同口径:结构体 + 字符串,含 NUL)---- sz_syl_struct = 8 * len(SYL) # py ptr(4) + hz ptr(4) sz_syl_str = sum(utf8_len(k) + 1 + utf8_len(v) + 1 for k, v in SYL.items()) sz_word_struct = 12 * len(WORDS) # sp ptr(4) + hz ptr(4) + w(4) sz_word_str = sum(utf8_len(sp) + 1 + utf8_len(hz) + 1 for sp, hz, w in WORDS) total = sz_syl_struct + sz_syl_str + sz_word_struct + sz_word_str print('--- 词库体积账 ---') print('音节表: %d 条, 结构体 %d B + 字符串 %d B = %d B' % (len(SYL), sz_syl_struct, sz_syl_str, sz_syl_struct + sz_syl_str)) print('词语表: %d 条, 结构体 %d B + 字符串 %d B = %d B' % (len(WORDS), sz_word_struct, sz_word_str, sz_word_struct + sz_word_str)) print('合计 .rodata 估算: %d B (%.1f KiB)' % (total, total / 1024.0)) print('--- 出错/重复检测 ---') # 词表允许同键不同条目(如 'wei' 等),这里仅打印去重提示 print('生成完成 meow_pinyin_lex.h') if __name__ == '__main__': main()