Files
MeowOS-SDK/gen_pinyin_lex.py
T

833 lines
27 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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()