算法:五笔编码,如何根据输入的词条自动生成输入编码
算法:五笔编码,如何根据输入的词条自动生成输入编码
一、想要实现的
最近做的一个五笔码表工具,想要实现根据用户输入的词条自动生成输入编码。
比如:
输入 我们
生成 trwu
输入 五笔基础知识
生成 gtay
二、五笔基础知识
五笔的所有输入编码都最多只有4个字母,规则是这样的:
- 一个字时,字的前三个编码对应字母,和最后一个编码应用字母
- 两个字时,取这两个字的前两个字根字母
- 三个字时,取前两个字的第一个字根,第三个字的前两个字根
- 四个或更多字时,取前三个字的第一个字根,最后一个字的第一个字根
我要处理的五笔码表是这样的:
前面是词条,后面是词条对应的输入码
工兵 aarg
戒掉 aarh
芭蕾舞 aarl
熙熙攘攘 aarr
芽接 aaru
戒指 aarx
工模 aasa
工棚 aase
工本 aasg
花草树木 aass
式样 aasu
荛 aat
三、如何实现
1. 获取字典
先从基础码表中筛选出一套单字字典来,满足以下几个条件:
- 单字
- 编码在2个以上(因为2字以上的词条,只需要前两个编码就能凑够五笔的4码)
我是这样实现的:
let characterMap = new Map() // 新建一个字典this.dictMain.wordsOrigin.forEach(item => {if (item.word.length === 1&& item.code.length >= 2&& !characterMap.has(item.word)) // map里不存在这个字{ // 编码长度为 4 的单字 characterMap.set(item.word, item.code)}})
2. 获取每个字的编码数组
let decodeArray = [] // 每个字解码后的数组表word.split('').forEach(ch => {// 查询每个字的编码,并放到数组中decodeArray.push(this.dictMain.characterMap.get(ch))})
我们的日子
得出的数组是这样
["trn", "wu", "rqy", "jjjj", "bb"]
3. 拼成输入码
获取到了输入编码的数组,如果字数大于4,只截取4个,前三个字的编码和最后一个字的编码。
只需要根据规则将它拼起来就好了。
let decodeArray = [] // 每个字解码后的数组表
let letterArray = word.split('')
if (letterArray.length > 4){ // 只截取前三和后一letterArray.splice(3,letterArray.length - 4)
}
letterArray.forEach(ch => {decodeArray.push(this.dictMain.characterMap.get(ch) || '')
})
let phraseCode = ''switch (decodeArray.length){case 0:case 1:breakcase 2: // 取一的前二码,二的前二码phraseCode =decodeArray[0].substring(0,2) +decodeArray[1].substring(0,2)breakcase 3: // 取一二前一码,三前二码phraseCode =decodeArray[0].substring(0,1) +decodeArray[1].substring(0,1) +decodeArray[2].substring(0,2)breakdefault: // 取一二三前一码,最后的一码phraseCode =decodeArray[0].substring(0,1) +decodeArray[1].substring(0,1) +decodeArray[2].substring(0,1) +decodeArray[decodeArray.length - 1].substring(0,1)}console.log(phraseCode, decodeArray)return phraseCode
最终的结果是这样:
四、实际应用效果
算法:五笔编码,如何根据输入的词条自动生成输入编码相关推荐
- Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序
Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序 一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面, ...
- VScode输入 !无法自动生成html模板问题
问题: 遇到的问题:在VScode中新建一个html文件,输入 !,然后按回车或者Tab键都无法自动生成html模板 解决: 网上查了一下听说是改版了,需要输入 html:5 再回车才能生成html模 ...
- 输入示例,自动生成代码:TensorFlow官方工具TF-Coder已开源
视学算法报道 编辑:魔王.陈萍 转载自公众号:机器之心 如何使编程更加便捷?最近,谷歌 TensorFlow 开源了一个帮助开发者写 TensorFlow 代码的程序合成工具 TF-Coder. 项目 ...
- python 自动输入验证码_python 自动生成验证码并 输入识别
两种方法: 1: ll = [] # 空列表 for x in range(10): # 吧得到的九个数加到列表,验证码是一体的,,只能当成一个字符串 ll.append(str(x)) # 大写字母 ...
- Python实现输入电影名字自动生成豆瓣评论词云图!
一.项目背景 电影逐渐成为人们生活的不可或缺的一部分,而了解一部电影的可以通过电影评分与大众推荐度,但以上的方式都太过于片面,了解一部电影的方法是通过已经观看完电影的人群的反馈,虽然电影评分和大众推荐 ...
- 管家婆有未记账的凭证怎么办_管家婆中输入单据是否自动生成凭证
管家婆财贸系列产品都是自动生成凭证,在系统配置里面可以选择,自动接收进销存生成的凭证打勾就行了,如:填写了进货单或销售单,点保存后,他就会自动生成凭证传到总账这边,打开填制凭证,里面就可找到, 管家婆 ...
- 中文转化成拼音_五笔已经淘汰,拼音到达瓶颈,百度重拳出击,全新输入方式来袭!...
不知道大家发现没有,中文输入法的发展历程,其实就是通过建立云词库,改进词汇,发展AI技术来改善拼音输入法的识别率,进而取代五笔输入法的过程.拼音取代五笔,根本原因是易用好学,只要会讲普通话就能打字,不 ...
- 计算机考试中英文打字题,五笔及中英文打字试题(2套)含答案.docx
文档介绍: 五笔及中英文打字试题(2套)含答案.docx中英文打字试题(1)一. 填空题(每空1分,共10分)在打字键区的正屮央有8个键位,即左边的 键和右边的 键.这8个键位被称作基准键,是打字时手 ...
- ubuntu16LTS下现代五笔的使用
现代五笔是一款不错的文字输入软件,主要是编码的思想比较优秀,结合了传统五笔和拼音的长处.上手快,输入更高效,用过都说好. ubuntu下可以自定义ibus输入法,所以你可以下载现在五笔码表,然后根据上 ...
最新文章
- 数字图像处理——第七章 小波和多分辨处理
- 保存数组_面试官:讲一讲你对据结构——数组、链表、栈、队列的理解
- leetcode 622. Design Circular Queue | 641. 设计循环双端队列(Java)
- Xshell中输入rz提示:-bash: rz: command not found
- php留言板记录ip,如何用php程序记录来访IP
- Docker PHP 扩展配置
- 超级终端软件测试工程师,超级终端是否可用来测试 RS485?
- win32开发(添加菜单)
- 修改app应用的图标与名字
- 桌面麒麟系统添加字体
- chrome regedit 崩溃_谷歌浏览器网页崩溃的解决方法
- Ajax中readyState和status
- 查SCI索引号和EI索引号的方法
- 测试基础知识考试题目(答案)
- MySQL 8.0原理与实战一网打尽,甲骨文数据库专家硬刚5年之作
- Java双亲委派模型是什么、优势在哪、双亲委派模型的破坏
- 600岁的故宫,已经越来越飘了!
- 时刻盯着手机的人,却没有近视一说,就是因为这两个小秘诀(公益分享类文章)
- 【Java】将数字金额转换为大写中文金额
- GB/T 17626.2-2018下载网址
热门文章
- ATtiny13与Proteus仿真-TM1637简单时钟仿真
- 英语三级笔译注意的要点
- Itext生成图表类型PDF
- php 获取用户访问真实IP方法
- 远程连接linux配置文件,Linux远程连接介绍及相关配置
- JavaScript数组遍历5 every方法
- 解决 error while loading shared libraries: libicui18n.so.63: cannot open shared object file
- ats系统的主要设备由服务器,ATS系统介绍讲解.ppt
- 黑苹果,Mac OS X如何使用USB数据线连接手机网络(没有网卡驱动时)
- 视频文件rpc服务器不可用,RPC服务器不可用怎么办