输入法 RIME

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# d.pyfrom itertools import islice
import time# wubixinshiji.dict.yaml https://github.com/GuoBinyong/wubixinshiji
NCTPATH = './wubixinshiji.dict.yaml'# 读取新世纪五笔码表
def read_code_table():nc_ct = {}with open(NCTPATH, 'r', encoding='utf-8') as f:# 按行读取for line in islice(f.readlines(), 81, None):str = line.strip().split('\t')nc_ct[str[0]] = str[1]f.close()print("已读取新世纪码表, 共有 %d 项 " % len(nc_ct))return nc_ct# 读取新世纪五笔码表为 list
def list_code_table():list_nc_ct = []with open(NCTPATH, 'r', encoding='utf-8') as f:# 按行读取for line in islice(f.readlines(), 81, None):str = line.strip().split('\t')# 元组哦tmp=(str[0], str[1])list_nc_ct.append(tmp)f.close()print("已读取新世纪码表, 共有 %d 项 " % len(list_nc_ct))return list_nc_ct# 生成新世纪五笔单字码表
def single_table():single_ct = {}rc=0dc=0cc=0with open(NCTPATH, 'r', encoding='utf-8') as f:# 按行读取for line in islice(f.readlines(), 81, None):# 分割行 str:['工','a','99454797','aa']str = line.strip().split('\t')# 检测第一段的长度,是否为单字if len(str[0]) == 1:# 检测编码是否为独码if len(str[1])>1:if str[0] not in single_ct:single_ct[str[0]] = str[1]else:rc+=1else:dc+=1else:cc+=1f.close()print("忽略 82 行,删掉词语 %d 条,独码 %d 条,重复 %d 条,已生成单字码表共有 %d 项" %(cc,dc,rc,len(single_ct)))return single_ct# 全局读一次,减少开销
NCT = read_code_table()
listNCT=list_code_table()
SCT = single_table()# 比对 98 五笔词库和新世纪五笔码表,新世纪五笔码表中没有的保存到文件
def filter_code_table(table_path):dt = {}# 读取行数lc = 0# 新世纪五笔码表中已经存在项计数hc = 0# 单字数量sc = 0# 打开 98 五笔词库 从第25行开始with open(table_path, 'r', encoding='utf-8') as f:# 从第24行开始读取for line in islice(f.readlines(), 24, None):# 分割str = line.strip().split('\t')# 取出字串列表的第一个元素 汉字,是否在新世纪五笔码表中if str[0] not in NCT:# 检测 长度是词语吗?if len(str[0]) > 1:dt[str[0]] = str[1]else:sc += 1else:hc += 1lc += 1f.close()# 写入文件,追加方式with open(u'./out.txt', 'a+', encoding='utf-8') as o:# 遍历 dict 此处只有一对数据for key, value in dt.items():o.write('%s\t%s\n' % (key, value))o.close()print("处理词库文件 %s 完毕, 共处理 %d 行, %d 个项已经存在于新世纪五笔码表中, 保存了 %d 行,舍弃了 %d 个单独字符。" % (table_path, lc, hc, len(dt), sc))# 查询单字编码
def query_code(s):if s in SCT:return SCT[s]# 根据汉字查找 新世纪五笔 的编码
def get_code(str):len_str = len(str)if len_str == 1:return query_code(str)if len_str == 2:# 取索引 第一个字符 第二个字符f = str[0]s = str[1]fc = query_code(f)sc = query_code(s)return fc[:2] + sc[:2]if len_str == 3:s1 = str[0]s2 = str[1]s3 = str[2]s1c = query_code(s1)s2c = query_code(s2)s3c = query_code(s3)return s1c[0] + s2c[0] + s3c[:2]if len_str > 3:s1 = str[0]s2 = str[1]s3 = str[2]se = str[len_str - 1]s1c = query_code(s1)s2c = query_code(s2)s3c = query_code(s3)sec = query_code(se)return s1c[0] + s2c[0] + s3c[0] + sec[0]def take_second(e):return e[1]if __name__ == '__main__':start = time.time()filter_code_table('./wubi98_ci.dict.yaml')filter_code_table('./wubi98_S.dict.yaml')filter_code_table('./wubi98_U.dict.yaml')new_code_table = {}lc = 0cc = 0final_code_table=[]with open(u'./out.txt', 'r', encoding='utf-8') as f:for line in f:# 分割str = line.strip().split('\t')# 给汉字编码 此处会过滤掉重复 keynew_code_table[str[0]] = get_code(str[0])lc += 1# 将筛选出来的词语添加到新世纪五笔词库中for n in listNCT:final_code_table.append(n)for key,value in new_code_table.items():m=(key,value)final_code_table.append(m)# 按编码排序final_code_table.sort(key=take_second)f.close()# 输出汉字和编码写入文件with open(NCTPATH, 'r', encoding='utf-8') as f,open(u'./sorted.txt', 'w', encoding='utf-8') as o:for line in islice(f.readlines(), 0, 81):# 写入文件头o.write(line)for c in final_code_table:o.write('%s\t%s\n' % (c[0], c[1]))cc+=1print("新世纪五笔原有 %d 条,新添加了 %d 条,整合后为 %d 条,从98五笔词库中提取了 %d 条词语(未查重),现写入 %d 条词语。" % (len(listNCT),len(new_code_table),len(final_code_table),lc, cc))end = time.time()print("程序用时:%fs" % (end - start))

程序输出

已读取新世纪码表, 共有 107396 项
已读取新世纪码表, 共有 112061 项
忽略 82 行,删掉词语 79459 条,独码 25 条,重复 4491 条,已生成单字码表共有 28086 项
处理词库文件 ./wubi98_ci.dict.yaml 完毕, 共处理 108547 行, 92410 个项已经存在于新世纪五笔码表中, 保存了 16047 行,舍弃了 90 个单独字符。
处理词库文件 ./wubi98_S.dict.yaml 完毕, 共处理 73011 行, 64295 个项已经存在于新世纪五笔码表中, 保存了 8715 行,舍弃了 1 个单独字符。
处理词库文件 ./wubi98_U.dict.yaml 完毕, 共处理 100477 行, 32351 个项已经存在于新世纪五笔码表中, 保存了 0 行,舍弃了 68126 个单独字符。
新世纪五笔原有 112061 条,新添加了 16072 条,整合后为 128133 条,从98五笔词库中提取了 24762 条词语(未查重),现写入 128133 条词语。
程序用时:0.481324s

squirrel.custom.yaml

patch:style/color_scheme: das2mstyle/horizontal: truestyle/text_orientation: horizontal  # horizontal | verticalstyle/inline_preedit: truestyle/font_face: '思源黑体 CN ExtraLight'style/font_point: 16style/label_font_point: 16style/comment_font_point: 12style/corner_radius: 5style/border_height: 4style/dborder_width: 4style/candidate_format: "%c %@ "preset_color_schemes/das2m:name: 少司命 / das2mauthor: Das2m <zhangyingda@gmail.com>back_color: '0x4C4957'text_color: '0xCAFDDB'hilited_text_color: '0xCAFDDB'hilited_back_color: '0x4C4957'hilited_candidate_text_color: '0xA28AFD'hilited_candidate_back_color: '0x4C4957'hilited_candidate_label_color: '0xA28AFD'hilited_comment_text_color: '0xA28AFD'candidate_text_color: '0xFDFCFC'label_color: '0xFDFCFC'comment_text_color: '0xFDFCFC'

Python 给词语编码新世纪五笔相关推荐

  1. Linux下安装新世纪五笔输入法(附表)(for 小白)

    2018.1.31 本人刚入Linux不久,奈何自己习惯用的输入法是新世纪五笔,Linux下提供可安装的五笔并不是新世纪版本的,于是开始了漫长的百度之旅... 网上各种教程.经验,基本上关于86或98 ...

  2. Ubuntu 下安装新世纪五笔输入法

    http://pinyin.sogou.com/linux/help.php 1.在此页面下 添加软件源:ppa:fcitx-team/nightly 2.之后在软件中心安装 fctix 这样就可以安 ...

  3. 为ibus输入法框架制作新世纪五笔码表

    本文记录了笔者在ubuntu 16.04系统上为ibus输入法框架制作新世纪五笔码表的过程,有需要的可以参考一下. 首先,安装ibus输入法框架:     sudo apt install ibus- ...

  4. Arch Linux fcitx 新世纪五笔配置

    前提:安装 fcitx RIME安装 安裝: $ sudo pacman -S fcitx-rime 注销生效 Ctrl + Shift 切换到 RIME Ctrl +' 可以选择输入方案 下面是新世 ...

  5. linux 中的rime 输入法 自定义 新世纪五笔输入法

    linux 中 使用 新世纪五笔输入法 正如新世纪五笔输入法在windows 下是收费的情况是一样的, 我们大linux 下没有一个可以让我们轻松使用的新世纪五笔输入法, 可以方便使用的只有我们的86 ...

  6. 新世纪五笔 形码之耻_世纪之剑

    新世纪五笔 形码之耻 翻译自: https://www.pybloggers.com/2016/11/the-hack-of-the-century/ 新世纪五笔 形码之耻

  7. Linux新世纪五笔

    下载新世纪版五笔码表链接: https://pan.baidu.com/s/1p_B9ijDzgoB2V_tTY3NqcA 提取码: zsra 首先在终端输入sudo apt-get install ...

  8. 提供linux下的新世纪五笔的码表和字根口诀,用于ibus。

    注:怎么配置输入法,请阅读:http://blog.csdn.net/sabalol/article/details/8512436 # create new database from wubi-x ...

  9. 基于Linux系统部署新世纪版五笔输入法

    基于Linux系统部署新世纪版五笔输入法 出于工作需要,突然生出学习五笔的想法.五笔有三个版本:86/98/新世纪. 按照新手上路,有新学新的想法,选择了新世纪版. 然后发现了个坑:公司电脑是Linu ...

  10. 输入法全屏_五笔输入法那么方便,为什么败给了拼音?如今,我可算是明白了...

    我们在日常生活中使用的输入法有很多种.输入法有四种:拼音输入法.五笔输入法.手写输入法和笔画输入法.其中,拼音输入法分为九笔输入法和二十六笔输入法.手写输入分为全屏手写和半屏手写.在这些输入法中,我们 ...

最新文章

  1. 九、序列参数集Sequence Paramater Set(SPS)解析
  2. SAP CRM销售订单创建时text determination的调试细节
  3. c++ set 遍历_47. Set 是如何工作的(3) 遍历顺序是如何确定的?
  4. linux scp 输入密码,Linux scp远程复制数据不需要输入密码
  5. zabbix前端php界面,Zabbix前端插件zatree在Zabbix 2.2.1前端报错的解决方案
  6. java reflector_Java DefaultReflectorFactory类代码示例
  7. 截图转文字怎么操作?截图转文字的软件有哪些?
  8. Excel文本自动换行
  9. 大数据小项目之电视收视率企业项目05
  10. Linux蓝牙鼠标自己断开,thinkpad蓝牙鼠标经常断线怎么办 thinkpad蓝牙鼠标频繁断开连接处理方法...
  11. 站长平台之360推送工具
  12. 【面试宝典】Mysql面试题大全
  13. 在一个笼子里同事养着一些鸡和兔子,你想了解有多少只鸡和兔,主任对你说:我只告诉你鸡和兔的总头数是16和总脚数是40,你能不能自己计算有多少只鸡和多少只兔?
  14. Unity3d 多线程、多并发网络解决方案(C#)
  15. mysql 分销提成计算_销售人员工资计算表-2017销售人员工资提成计算表免费版-东坡下载...
  16. Moonbeam成功续约新一轮的Polkadot插槽租赁期
  17. 地铁供电系统原理图_高铁、地铁、火车供电工作原理
  18. /\s+/g和/\s/g的区别
  19. 安防视频监控系统视频上云解决方案EasyCVR音频基础知识一文全介绍
  20. 北京地铁五号线全攻略 23座车站乘坐细节大起底

热门文章

  1. JAVA多线程模拟火车站售票大厅
  2. Netflix公司Druid应用实践
  3. 英特尔至强处理器排行_英特尔赛扬Vs之间的比较。 至强处理器
  4. js页面打印去除页眉页脚
  5. ethtool如何让接口闪灯_如何使用ethtool命令操作以太网卡
  6. [转]一些漢字、字體/字型、内碼、輸入法資料的整理
  7. mysql的填充因子_数据库索引中的填充因子
  8. RabbitMQ是什么?一些简单的概念
  9. azkaban短信报警功能和项目依赖功能实现
  10. 魔法门之英雄无敌3 android,魔法门之英雄无敌3 v0.86.04