feat(sdk): 中文拼音输入法落地 (agent-229, 设计稿 IME_PINYIN_DESIGN.md) — 静态表词库(403音节+329词,rodata ~20.5KB,零堆)+引擎(meow_pinyin.c,音节切分DFS+联想)+SDK集成(MEOW_IME_PINYIN尾部追加零ABI破坏,组合条+候选栏+翻页+中英切换,英文零回归)

meow_ui.a→a7a9043e; hello/files/ncm重链已部署; test_pinyin 5项全过+test_ime_fix零回归
This commit is contained in:
MeowOS committed 2026-08-31 18:34:51 +08:00
1 parent f34818037f
commit e9b6b690c1
16 files changed
+2261 -11

No files matched your search

+832
View File
@@ -0,0 +1,832 @@
# -*- 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 <stdint.h>')
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()