efficient-pinyin-keys

高效拼音输入键位


目录


Step 1 统计按键使用频率

热度图

按键频率分布直方图

频率分布直方图

Step 2 均衡性 & 输入效率

均衡性

均衡性可以由按键熵, 手指熵手掌熵三个指标的加权和表示: \(B = A_k \cdot B_k \cdot W_k + A_f \cdot B_f \cdot W_f + A_h \cdot B_h \cdot W_h\)

: \(H(p) := -\sum_i{p(i) \log_2{p(i)}}\)

交叉熵: \(H(p \parallel q) := - \sum_i{p(i) \log_2{q(i)}}\)

输入效率

输入效率可分别由平均单字击键数量平均单字消耗时间表征

  1. 平均单字击键数: \(\bar{N} := \cfrac{N_k}{N_c}\)
    • $\bar{N}$: 平均单字击键数
    • $N_k$: 样本文章击键总数
    • $N_c$: 样本文章总字数(不含标点符号)
  2. 平均单字耗时: \(\bar{T} := \cfrac{\sum_i^{N_k}{F_i \cdot R_i \cdot C_i \cdot H_i \cdot T_0}}{N_c}\)
    • $\bar{T}$: 平均单字耗时
    • $F_i$: 手指修正参数, 表征不同手指敲击所用时间差异(食指 < 中指 < 无名指 < 小指)
    • $R_i$: 键位修正参数(行), 表征不同行键位敲击所用时间差异(第2行 < 第1行 < 第3行)
    • $C_i$: 键位修正参数(列), 表征不同列键位敲击所用时间差异(其他 < TGB = YHN)
    • $H_i$: 手掌修正参数, 两手交替击键与单手顺次击键所用时间差异(前后两次击键使用不同手 < 前后两次击键使用相同手)
    • $T_0$: 单键敲击基本耗时
    • $N_k$: 样本文章击键总数
    • $N_c$: 样本文章总字数(不含标点符号)

Step 3 改进编码方案

分析与改进

分析

  1. 对比全拼按键频率分布直方图, 声母 & (y,w)频率分布直方图韵母 & 介母频率分布直方图, 可以看出相对于全拼与声母, 韵母数量更多且更加集中(例如ie)

  2. 根据使用平均单字消耗时间作为输入效率量化方案, 可以计算出各按键的权重(如下表所示), 其中第一行中的E, R, T, Y, U, I, 第二行中的S, D, F, G, H, J, E, K, L, 第三行中的V, M等键均具有较好的输入效率

行号 第1列 第2列 第3列 第4列 第5列 第6列 第7列 第8列 第9列 第10列
第1行 Q 1.68750 W 1.40625 E 1.26562 R 1.12500 T 1.26562 Y 1.26562 U 1.12500 I 1.26562 O 1.40625 P 1.68750
第2行 A 1.50000 S 1.25000 D 1.12500 F 1.00000 G 1.12500 H 1.12500 J 1.00000 K 1.12500 L 1.25000  
第3行 Z 1.87500 X 1.56250 C 1.40625 V 1.25000 B 1.40625 N 1.40625 M 1.25000      
  1. 分析现有双拼方案(以下图所示小鹤双拼为例)
    1. 部分韵母(介母)由于其拼写规则的互斥(如下所示), 合并后并不会使重码率出现上升
      • üe & ue
      • o & uo
      • ong & iong
      • ing & uai
      • iang & uang
      • ia & ua
      • ü & ui
    2. 特殊音节可使用两个互斥的按键表示(如下所示)
      • a: A A
      • ai: A I
      • an: A N
      • ang: A H
      • ao: A O
      • e: E E
      • ei: E I
      • en: E N
      • er: E R
      • eng: E G
      • o: O O
      • ou: O U
    3. 为了降低学习门槛, 该双拼方案保持大多数声母与单韵母的位置不变, 因此其击键热度图热区并非完全集中于效率最高的键位

小鹤双拼

小鹤双拼布局与击键热度图

改进

由以上分析结果, 针对全拼与双拼, 先提出两种改进方案

  1. 全拼改进方案: 综合全拼按键频率分布直方图按键输入效率权重表, 将高频字母映射至输入效率较高的按键, 以期在保持按键熵 $B_k$ 不变的条件下提高手指熵 $B_f$, 进而提高其均衡性 $B$, 同时提高其使用平均单字耗时 $\bar{T}$ 表征的输入效率
  2. 双拼改进方案: 综合声母 & (y,w)频率分布直方图, 韵母 & 介母频率分布直方图小鹤双拼布局与击键热度图, 在保证不发生按键冲突的前提下, 将高频声母与韵母映射至输入效率较高的按键, 以期同时提高均衡性 $B$, 平均单字击键数 $\bar{N}$ 与 平均单字耗时 $\bar{T}$

改进方案

全拼改进方案

小鹤双拼方案

小鹤双拼改进方案

测试结果分析

方案 均衡性 按键熵 手指熵 手掌熵 平均单字击键数 击键总数 样本字数 平均单字耗时 总耗时
全拼改进前 0.897946 4.067694 2.597974 0.995023 2.952491 53508 18123 3.263177 59138.558594
全拼改进后 0.877743 4.067694 2.361951 0.992884 2.952491 53508 18123 3.000504 54378.140625
双拼改进前 0.944259 4.420238 2.694713 0.998021 2.000000 36246 18123 2.240133 40597.937500
双拼改进后 0.932026 4.420238 2.584392 0.985862 2.000000 36246 18123 2.108291 38208.562500
  1. 对比全拼改进前后与双拼改进前后的测试结果:
    • 通过更改键盘按键布局对平均单字耗时衡量的输入效率具有一定的提升, 但是不影响平均单字击键数
    • 通过更改键盘按键布局对方案的按键熵无影响, 对手掌熵影响有限, 而手指熵会显著降低, 进而导致均衡性也随之降低, 针对对同一种方案改进前后, 均衡性输入效率可能存在一定的负相关, 即按键击键越均衡输入效率反而会下降
  2. 对比全拼与双拼的测试结果:
    • 双拼方案可以有效提高均衡性输入效率

参考资料

  1. [Keyboard Heatmap Realtime heatmap visualization of text character distribution](https://www.patrick-wied.at/projects/heatmap-keyboard/)
  2. 双拼布局的统计计算
  3. GitHub - tiansh/lqbz: 乱七八糟——堆一些奇怪的东西
  4. heatmap.js : Dynamic Heatmaps for the Web
  5. GitHub - pa7/heatmap.js: 🔥 JavaScript Library for HTML5 canvas based heatmaps
  6. python使用matplotlib画词频分析的图_如何使用matplotlib或任何其他库创建词频图_weixin_39746652的博客-CSDN博客
  7. python画频率直方图_字母频率:绘制一个直方图,按PYTHON的值排序_weixin_39526459的博客-CSDN博客
  8. Matplotlib中柱状图bar使用 - 1直在路上1 - 博客园
  9. numpy - Fastest way to compute entropy in Python - Stack Overflow
  10. API — pypinyin 0.42.0 文档
  11. LaTeX公式手册(全网最全) - 樱花赞 - 博客园
  12. 介母(拼音符号及组合特点)_百度百科
  13. 汉语拼音方案 - 中华人民共和国教育部政府门户网站
  14. python-pinyin/test_standard.py at master · mozillazg/python-pinyin
  15. 小鹤双拼·小鹤音形 - 官方网站
  16. Python格式化字符串 - 田小计划 - 博客园