Python 处理输入法字库(五笔极点字库转小鸭字库)

Python 处理输入法字库(五笔极点字库转小鸭字库)

一直都是用的小鸭五笔,091新字库是极点格式的,刚开始懒得动,直接用极点五笔了,用了一段时间碰到很多问题.其中最坑的是. 在tkinter Gui 里极点输入不能退格,一退格就乱码(

)  ,我以为是我开发的程序有问题,调试了很久都找不到原因. 突然想到会不会是输入法问题,换个输入法就OK 了.

赶紧把极点删了,新字库导出到小鸭五笔用.  不过小鸭五笔对 一个字词有多个编码的情况,会出两顺序和字库不一致的情况.字词的排序变了。  研究了一下小鸭的出词规律,发现可以通过删除一字多码的情况来修正. 一字多码,保留简码. 去掉一些非汉字码.越简单越好呀...

1.极点导出字库:

先整理成下面字典数据结构: 一个是字对多码,一个是码对多字.

然后通过这两个结构来整理.

最后整理成小鸭五笔的导入码表

代码如下:

#!/usr/bin/python

# -*- coding: gbk -*-

# conver.py

#

# Copyright (C) 2016 - xulong

# python3

#

import sys

import os

import re

import json

#import sendkeys

#import win32con

#import win32ui

#import win32gui

#import time

#定义中文字符范围

area=[]

area.append(range(0x4E00,0x9FA5+1))#基本汉字 20902字

area.append(range(0x9FA6,0x9FEF+1))#基本汉字补充 74字

area.append(range(0x3400,0x4DB5+1))#扩展A 6582字

area.append(range(0x20000,0x2A6D6+1))#扩展B 42711字

area.append(range(0x2A700,0x2B734+1))#扩展C 4149字

area.append(range(0x2B740,0x2B81D+1))#扩展D 222字

area.append(range(0x2B820,0x2CEA1+1))#扩展E 5762字

area.append(range(0x2CEB0,0x2EBE0+1))#扩展F 7473字

area.append(range(0x2F00,0x2FD5+1))#康熙部首 214字

area.append(range(0x2E80,0x2EF3+1))#部首扩展 115字

area.append(range(0xF900,0xFAD9+1))#兼容汉字 477字

area.append(range(0x2F800,0x2FA1D+1))#兼容扩展 542字

area.append(range(0xE815,0xE86F+1))#PUA(GBK)部件 81字

area.append(range(0xE400,0xE5E8+1))#部件扩展 452字

area.append(range(0xE600,0xE6CF+1))#PUA增补 207字

area.append(range(0x31C0,0x31E3+1))#汉字笔画 36字

area.append(range(0x2FF0,0x2FFB+1))#汉字结构 12字

area.append(range(0x3105,0x312F+1))#汉语注音 43字

area.append(range(0x31A0,0x31BA+1))#注音扩展 22字

area.append(range(0x3000,0x303F+1))#CJK 符号和标点 (CJK Symbols and Punctuation)

area.append(range(0x0,0xFF)) # 英文字母

#中文标点符号

area.append([

0x3002, #句号     。

0xFF1F, #问号     ?

0xFF01, #叹号    !

0xFF0C, #逗号     ,

0x3001, #顿号     、

0xFF1B, #分号     ;

0xFF1A, #冒号     :

0x300C, #引号     「

0x300D, #       」

0x300E, #引号     『

0x300F, #       』

0x2018, #引号     ‘

0x2019, #       ’

0x201C, #引号     “

0x201D, #       ”

0xFF08, #括号     (

0xFF09, #       )

0x3014, #括号     〔

0x3015, #       〕

0x3010, #括号     【

0x3011, #       】

0x2014, #破折号   —

0x2026, #省略号   …

0x2013, #连接号   –

0xFF0E, #间隔号   .

0x300A, #书名号  《

0x300B, #       》

0x3008, #书名号  〈

0x3009 #       〉

]

)

#极点格式字库转为小鸭格式字库

def jd2xy_convert():

context = ''

with open('./freeime.txt','r',encoding='utf-16' ) as f:

context=f.read()

#取编码 a 到 yyyy

rlt = re.findall(r'\n(a .*?)\nz',context,re.S)

if len(rlt) == 1:

context = rlt[0]

#替换掉一些特殊标记

context=context.replace('~','')

context=context.replace('^','')

context=context.replace('!','')

#转换文本为对象

lns = context.splitlines()

bm_wd = {}#Key存编码,value以列表形式存对应的的字词

wd_bm = {}#key存字忘,value以列表形式存对应的的编码

for l in lns:

l=l.strip(' ')

lst=l.strip(' ').split(' ')

bm_wd[lst[0]]=lst[1:]

for i in range(1,len(lst)):

if lst[i] in wd_bm.keys():

wd_bm[lst[i]].append(lst[0])

else:

wd_bm[lst[i]]=[lst[0]]

#同字的多码排序

for bm in wd_bm:

wd_bm[bm].sort()

#输出保存方便检查

with open(u'./1.编码对字.txt','w',encoding='utf-16') as f:

f.write('{\n')

for bm in bm_wd:

f.write('%s:%s,\n'%(bm,str(bm_wd[bm])))

f.write('}\n')

with open(u'./1.字对编码.txt','w',encoding='utf-16') as f:

f.write('{\n')

for bm in wd_bm:

f.write('%s:%s,\n'%(bm,str(wd_bm[bm])))

f.write('}\n')

will_remove=[]

for ti in range(4):

for wd in wd_bm:

#包含有不非汉字表字符,移除

for c in wd:

for r in area:

if ord(c) in r:break

else:

for i in range(0,len(wd_bm[wd])):

will_remove.append((wd_bm[wd][i],wd,str(wd_bm[wd])))

#汉字只有一个编码的,跳过

if len(wd_bm[wd]) == 1:

continue

#七 a agci #花 a awci ,单字双码跳过

if len(wd) == 1 and len(wd_bm[wd]) == 2:

if wd_bm[wd][0] == wd_bm[wd][1][0] and wd_bm[wd][1][2:4]== 'ci':

continue

#同字词有多编码,后码以前辍方式包含了前码的,剔除(针对二码字词,删除对应的三四码)

for i in range(1,len(wd_bm[wd])):

if wd_bm[wd][i].startswith(wd_bm[wd][i-1]) and len(wd_bm[wd][i-1]) < 3:

will_remove.append((wd_bm[wd][i],wd,str(wd_bm[wd])))

for t in will_remove:

if t[0] in wd_bm[t[1]]: wd_bm[t[1]].remove(t[0])

if t[1] in bm_wd[t[0]]: bm_wd[t[0]].remove(t[1])

with open('./2.删除的字码.txt','w',encoding='utf-16') as f:

for t in will_remove:

f.write('%s:%s %s\n'%(t))

#清空无字词编码,并记录到文件

with open('./3.空码.txt','w',encoding='utf-16') as f:

bms = list(bm_wd.keys())

for bm in bms:

if len(bm_wd[bm]) == 0:

f.write('%s %s\n'%(bm,' '.join(bm_wd[bm])))

del bm_wd[bm]

with open('./9.转成功的小鸭字库.txt','w',encoding='utf-16') as f:

f.write('[cmd:RefCode]\n')

f.write('[cmd:RemoveAll]\n')

f.write('[cmd:Info=Gnolux专用词库]\n')

f.write(';------------------------------\n')

for bm in bm_wd:

f.write('%s %s\n'%(bm,' '.join(bm_wd[bm])))

def test_input():

bm_wd=jd2xy_convert()

for k in bm_wd:

print(k,bm_wd[k])

for i in range(1,len(bm_wd[k])+1):

if (len(bm_wd[k])) == 1 and (len(k)==4):

sendkeys.SendString('%s'%(k))

print('%s'%(k))

else:

sendkeys.SendString('%s%d'%(k,i))

print('%s%d'%(k,i))

#time.sleep(0.5)

sendkeys.UniKeyPress(win32con.VK_RETURN)

#time.sleep(1)

if __name__ == '__main__':

jd2xy_convert()

#os.startfile('notepad.exe')

#time.sleep(1)

#w=win32ui.FindWindow(None,'无标题 - 记事本')

#win32gui.SetForegroundWindow(w.GetSafeHwnd())

#time.sleep(1)

#test_input()

Python 处理输入法字库(五笔极点字库转小鸭字库)相关教程

用python画小鸭,Python 处理输入法字库(五笔极点字库转小鸭字库)相关推荐

  1. Python 处理输入法字库(五笔极点字库转小鸭字库)

    一直都是用的小鸭五笔,091新字库是极点格式的,刚开始懒得动,直接用极点五笔了,用了一段时间碰到很多问题.其中最坑的是. 在tkinter Gui 里极点输入不能退格,一退格就乱码( )  ,我以为是 ...

  2. Redhat Linux 9/AS 3上安装清华紫光拼音输入法智能五笔全拼等

    Redhat Linux 9/AS 3上安装清华紫光拼音输入法智能五笔全拼等 版权声明:本文可以任意转载,转载时请保持文章的完整性,并以超链接形式标明文章原始出处和作者信息及本声明. [url]htt ...

  3. python画树叶-用python画树叶

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. draws a 叶子 and fill it. t.begin_fill ...

  4. python画函数曲线-python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H・Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  5. python画曲线-利用python画出AUC曲线的实例

    以load_breast_cancer数据集为例,模型细节不重要,重点是画AUC的代码. 直接上代码: from sklearn.datasets import load_breast_cancer ...

  6. 用python画玫瑰花-用python画一朵玫瑰给你

    原标题:用python画一朵玫瑰给你 版权声明:原创文章转载请注明来源. https://blog.csdn.net/samll_snail/article/details/85853630 听说 p ...

  7. python画双折线图-python双折线图

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! practice.png双y轴折线图(plot both of those pl ...

  8. python画正方形-用python画正方形

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在学习python学习教程,我无法打开屏幕进行绘图. 我没有发现错误,它只是 ...

  9. python画笑脸图案-python画个笑脸

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. project python是一本免费的交互式书籍,它通过使用图形.动画 ...

最新文章

  1. Freescale 车身控制模块(BCM) 解决方案
  2. Hadoop学习之MapReduce(四)
  3. STM32_DMA 标准初始化设置解释
  4. 京东 你访问的页面需要验证证书_中级会计“新”证书来了
  5. 【机器学习】 关联规则Apriori和mlxtend——推荐算法
  6. (C语言)人名排序,字符串排序
  7. mybatis开启log_mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台...
  8. Python学习笔记(matplotlib篇)--多图figure
  9. PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
  10. 任务栏图标变成白色怎么办
  11. 16进制与字符串相互转换(C语言)
  12. 深度解密微信疯读狂加粉的伎俩
  13. python微信朋友圈分享功能_利用Python让你的微信朋友圈与众不同,更加高大上
  14. 《机器学习基石》第12节课学习笔记
  15. python绝技运用python成为顶级pdf_python绝技:运用python成为顶级黑客 中文pdf完整版[42MB]...
  16. 图扑软件携数字孪生产品与解决方案亮相高交会
  17. Popular MVC框架请求响应数据加解密@Decrypt和@Encrypt的使用示例
  18. 小哥Cadence Allegro 132讲字幕版PCB设计视频教程-cadence视频-allegro视频-PCB视频
  19. 新媒体运营必备工具盘点(干货收藏)
  20. edge插件默认下载位置

热门文章

  1. 微信小程序踩坑–卸载所有页面(含tabBar)跳转到指定页面
  2. exploit-db图文教程
  3. win7怎么进入安全模式_win7安全模式怎么进
  4. Micropython——关于I2C和SoftI2C以及SPI和SoftSPI的区别
  5. 【MicroPython ESP32】I2C功能使用介绍
  6. php如何做防抖,别抖,OK? 操作系统抖动现象、网络抖动与延迟、函数抖动之防抖与节流,串讲...
  7. java使用poi读取Excel2003版(.xls)
  8. 经典背包问题3——背包问题求方案数 、背包问题求具体方案
  9. 培训html源码,前端培训——html源码笔记
  10. ts16949 软件开发流程图_TS16949体系过程流程图(1)