作者cnoize (泥巴星球Server)
看板IME
标题[xx] X X 输入法简介 2005-02 (3) 答客问(B)
时间Sun Mar 13 23:58:09 2005
因为我的用词不够准确, 所以读者还有疑问,
所以再补充这一篇文章.
相关文章会放置於下列网址:
http://info.sayya.org/~cnoize/im/
Q: 不考虑字根与按键的配对,怎麽可能做的到?
A:
答案的线索在前两篇文章之中都提到了.
如果因为我的表达力不足, 因而读者无法理解,
这种状况是无解的.
"不考虑字根与按键的配对" 是表示原理已经写出来了,
所以不需要再重新思考这部分的"理论部分".
解答很简单, 1. 每个字根都至少有一个键位, 而学习者并不需要
在乎每个键位有几个字根. 假设全部 3200 个字根, A 有 2000 个,
B 有 960 个, C 到 Z 各占了 10 个字根, 只要不重码, 这也是符合
规则的.
2. 实际上 "字根 -> 键位" 的对应如何安排, 是实作的细节.
是以电脑运算出的结果为准. 正常情况下, 读者不应该关心这个问题,
直接查阅我最後做出来的表格即可.
如果读者想要知道的话, 假设日後共有 3200 个字根, 22000 个字.
(17000 个 big5+gb2312+jis0208, 2000 个简体, 2000 个日文,
1000 个香港字)
先只计算 17000 个字的部分, 其他文字的做法雷同.
1.
字根唯读资料区: 文字档(big5), 利用 sort 排序过
格式:
一
乙
丁
七
乃
九
了
二
人
人人
...
字根计算资料区: 3200 个 3200 bytes (内容为 0 ~ 25 ([a-z])
这笔资料是可分散资料档, 最初全为 0 的名字为 yy000000.dat
总共的可能笔数为 2 的 3200 次方.
每次新的计算是以 26 进位的方法, 从前面往後增加.
00 00 00 00 00.. <= yy000000.dat
01 00 00 00 00.. 下一笔.
02 00 00 00 00.. 下一笔.
...
19 00 00 00 00.. (0x19 是 16 进位, 是 10 进位的 25)
00 01 00 00 00..
2.
17000 个字 => 17000 条算式. 用 unicode 内码排序.
(uniok.txt sort 即可)
算式唯读资料区: 17000 * 3 * 2 bytes. = 102000 bytes. (102k)
内容是上面字根的顺序编号(从 0 开始), 0xFFFF 为空值.
计算资料区: 17000 * 2 bytes = 34000 bytes.
(内容是利用字根变数所填入的数值依顺序 X1 *26*26 + X2 *26 + X3)
内容应该介於 0 ~ 17575 之间(26*26*26 - 1)
3.
重码计数区: 26*26*26 * 2 = 17576 * 2 = 35152 bytes.
将计算资料区的内容数值对应的计数区 +1
最後 > 1 的部分再累加, 显示为总共重码数值.
每笔 yyxxxxxx.dat 的档案可以计算出一个重码数值.
当重码数值小於 100 时, 表示这是可用的, 我再手动增加 100 个字根
来避开, 就可以做出正式的输入法(big5+gb2312+jis0208)标准字的一部分.
2 的 3200 次方的可能性极大, 而 17000 个算式很小, 所以要算出无重码
的数值理论上一定可行. 只不过, 假设我的电脑普通快, 1 秒可以算出一个
重码数值, 只需
62687293219893581736879326478880116067839633518067409592791276958344\
13372317196622134372935612040408102784895684819344333358599878066497\
36461459676116235100909858289635686699036357515747700439778285236279\
11551684253197782904029120174223951813474795916075837219308215459290\
58319341054523285080979628542957317470063322205841954275919237119142\
29630061634458202810788088536952824367282497744945895553808236236124\
74602165498204669770690068597795715249561563546328116887361431198374\
79407740278640136398738070992548739025119429232747347923391886299125\
59842304960970062560710045873122655679734987908579179086463651479862\
51552346165624996842591160048845561897756513119676136338591718218947\
56168744395996130783459821471591622933191055748988887637768929088692\
22247471845886799249387344485600422577519576558195416366229376858836\
80121527750631110224307316620752351674603988949188849848254305469020\
52445611279968501341694741298542468548026342266546750207346352680419\
2105 年就可以全部计算一次, 找出数百亿个以上的不同的、可用的输入法编码.
不过我只需要得到一个解而已, 而且可以手工强制调整若干字根, 所以如果
重码数不多, 也符合我的需要, 所以暂订 100 个重码字以下可用. 会造出
okxxxxxx.dat (3200 bytes), 日後可以分析使用.
程式中途都可以停止, 也会造出目前最後运算到的 tmpxxxxxx.dat
(3200 bytes).
如果我用两台电脑计算的话.
第二台电脑初始值放 yy100000.dat
内容是,
00 .... 01 (第 1600 个 byte) ... 00
所需的时间可以减半.
当然这种 Brute-force 的笨方法速度会很慢, 所以我需要开发各种演算法
来加速计算. (或是用乱数做初值, 赌我的运气. :P)
程式的 usage: %s <wordall.bin> <root_len> <root.bin>
wordall.bin 是每个字的字根值列表(上述的 算式唯读资料区),
root_len 是字根数量, root.bin 可以是任意档案, 程式可以取
前面的 root_len bytes, 再用每个 byte 的资料除以 26 的余数
做为初值. 或许某首好听的音乐可以帮助我计算出我的输入法.
因此我事实上不是在做输入法, 只是在研究一个奇怪的 open problem.
现在把它命名为 "中文无重码输入法 open problem".
Q: OK,我在某软体中,可以很顺利打字,但是换了软体之後呢?
A: "伪.虾米" 程式用 windows 的 api hook 技术不是运作得不错吗?
实际上, 我也很少使用 windows 软体, 若有问题, 忽视它即可.
Q: 2000多个字根是哪些?
A:
如下: (包含一些编辑错误)
ici findrootuni3.ici uniok.txt > /tmp/root050313.txt
sort < /tmp/root050313.txt > /tmp/sort050313.txt
wc -l sort050313.txt => 2187 sort050313.txt (约 2185 个)
来源: 初步分析 15681 个字
ㄙ 一 乙 丁 七 乃 九 了 二 人 人人 儿 入 八 几 刀 刁 力 匕
十 卜 又 又又 三 下 下火 下衣 丈 上 上四 上竹 上羊 上草 丫
丸 凡 久 么 也 乞 于 亡 兀 刃 勺 千 叉 口 口口 土 士 夕 大
女 子 寸 小 小心 尢 尸 山 川 工 己 已 巳 巾 干 廾 弋 弓 才
丑 丐 不 中 丰 丹 之 尹 予 云 井 互 五 亢 仁 今 介 介下 仄
元 允 内 六 兮 公 冗 冗上 凶 凶下 凶上 分 切 匀 勾 勿 化 匹
午 升 卅 卞 厄 友 及 反 壬 天 夫 夫(x) 夫夫 太 夭 孔 孔右
少 尤 尺 屯 巴 幻右 幻左 廿 吊 引 心 戈 户 手 支 文 斗 斤
方 日 日刃 日内 日户 日兑 日吴 日壮左 日巡右 日亚 日俞 日为
日乘 日真 日产 日陷右 日单 日尧 日发 日肃 日脑右 日鼠 日寿
日荣上 日齐 日广 日乐 日卖 日钱右 日龙 日婴 日襄 日坏右
日绳右 日赞 日佥 日雚 曰 月 木 欠 止 歹 毋 比 比左 毛 氏 水
火 爪 父 爻 片 牙 牛 犬 王 王王 丙 世 丕 且 丘 主 主上 乍
乏 乎 以 付 仕 他 代 令 充 兄 冉 册 冬 冬下 冬上 凹 凹上 出
凸 加 功 包 匆 北 匝 半 卉 卉(x) 卡 占 卯 卯左 去 可 古 右
右刀 右正 右耳 召 司 叵 只 史 台 句 句外 四 囚 外 外行 外衣
外双辛 央 失 奴 它 尼 巨 巧 巧右 左 左人 左太 左心 左手
左水 左火 左牛 左犬 左示 左冰 左羊 左耳 左行 左衣 左辛 左食
市 布 平 幼 弁 弘 弗 必 戊 打 斥 旦 术 本 未 末 札 正 母 民
氐 永 泛 犯右 玄 玄下 玉 瓜 瓦 甘 生 用 甩 田 由 甲 申 疋
白 皮 皿 目 目目 矛 矢 石 示 禾 穴 立 丞 丢 交 交上 亦 亥
伊 伐 休 伏 任 光 兆 先 全 全上 共 冰左 列 刑 匈 匡 印 印右
印左 危 危下 吉 吏 同 同上 同用 吊 各 向 名 合 后 后上 因
回 在 圭 夙 多 夷 夸 好 如 字 存 守 宅 安 寺 州 并 年 式 戎
戌 成 扣 托右 收 收左 早 旨 旬 曲 曳 有 朴 朱 朵 次 此 死
污 江 污右 灰 牟 百 竹上 米 糸 缶 羊 羊上 羊羊羊 羽 老 考
而 耒 耳 聿 肉 臣 自 至 臼 舌 舛 舟 舟上 艮 色 虫 虫?) 虫虫
血 行 行右 行外 行左 衣 衣下 西 西(?) 串 亨 位 何 作 你
你右 余 余(?) 兑 克 免 兵 别 判左 利 助 努 即 即左 卵 吞上
吾 否 呆 吴 呈 吕 吕(?) 君 告 呀 含 吟 囱 困 均 坎 坐 壮
壮左 夹 妥 孝 孝上 孚 孛 完 宋 宏 局 尿 尾 岑 巫 希 序 廷
弄 弟 彤 形左 役 忘 忌 志 忍 快 戒 我 抄 技 扶 折 投右 改左
攻右 攸 旱 更 束 杏 杉右 步 每 每上 求 求下 汞 沙 沈 沈右
沈右(?) 沛 决右 沐 没 没右 沃 沂 牢 狄 狂 甬 甫 男 皂 矣 私
私右 秀 秃 系 肖 育 良 芒 见 角 言 谷 豆 豕 贝 赤 走 足 身
车 辛 辰 巡右 邑 邪 邦 那 酉 釆 里 并 事 亚 亚下 享 京 来
佰 佩右 仑 兔 儿 两 具 其 典 函 刷 刺 到 制 卒 卓 卑 卦 卷
卷上 卸 取 叔 叔左 受 味 和 周 命 咎 咎上 固 夜 奉 奇 奈 奄
奄(?) 奔 妾 妻 委 姑 姊右 孟 孤 季 宗 定 官 官下 宜 宛 尚
屈 居 居上 冈 岸 帚 帛 幸 庚 店 府 底 延 延左 延左下 弦 往
征 忝 忽 念 或 戾 拉 拔 拔右 抽 拍 抱 拖右 放 於 昔 易 昌
昆 明 昏 昊 昇 服 朋 东 果 林 松 析 欣 武 河 沾 沼 波 法 泓
沮 治 泡 炎 炙上 争 版 物 的 直 知 空 空上 罔 羌 芈 者 肥
肩 肴 肯 臾 舍 芳 花 芷 虎 虎上 虱 表 迎右 采 采上 金 长
长下 门 阜 阿 隹 雨 青 青上 非 亟 亭 亮 侵 侯 便 保 俊 俊右
俎 俞 冒 冠 削 前 剌 则 勇 勉 勃 劲 南 却右 厚上 哀 咨 哉
咸 品 垂 契 契上 奏 奎 奂 奸 威 宣 宣下 室 客 封 屏 屋 巷
帝 帅左 度 建 建左 弭 彦 待 律 思 急 怨 怨上 恒 恬 扁 拜 括
拾 政 施 既 春 春上 昭 是 是下 星 昨 曷 柱 柔 某 柬 柯 查
段 毒 泉 洪 流 流右 津 洞 洗 活 派 派右 洛 为 炭 爰 甚 畏
界 癸 皆 皇 盈 盆 省 相 眉 盾 眇 研 禹 禺 科 秋 穿 突 红
红左 约 美 端 耶 胥 胃 背 胡 致 茅 苛 苦 若 苗 英 苟 虐 虹
衍 要 贞 负 军 轨 述 述右 迥右 郎 酋 重 降右 面 革 韦 韭 音
页 风 风外 飞 食 首 香 乘 倍 倩 候 修 伦 仓 兼 冥 匪 原
原上 叟 唐 哥 员 夏 夏下 夏上 套下 奚 姬右 孙 宰 害 家 家上
容 射 屑 展 岛 差 席 师 师右 库 庭 座 弱 徒 恣 恐上 恭 恩
息 扇 拳上 拿 捕 效 料 旁 旅 旅右 时 晋 晏 晃 朔 朗 桂 栗
桌 桑 柴 桀 殷 气 气上 泰 泰下 浪 浦右 浸 浸右 海 涅 乌
乌上 爹 兹 班中 畔 畜 畚上 留 留上 疾 病左上 皋 益 盍 盎 真
矩 神 租 秦 窄 纺 素 索 纷 缺 羔 翁 耆 耕 耕右 耕左 耿 脉
能 脊 臭 臬 舀 般 荒 荒下 茸 荐 草 草上 兹 兹(?) 茹 茶 荀
荃 虔 蚤 蚩 衰 袁 讯右 讯右(x) 岂 贡 躬 轩 辱 送 送右 逆
逆右 迷 退 追 追右 邕 釜 闪 除 只 马 骨 高 斗 鬲 鬼 乾 乾左
假右 偃右 做 兜 剪 剪上 勒 务 务上 务左上 勘 动 匐 匿 区
区外 区左 参 参上 曼 商 唯 圈 国 国外 坚 坚上 基 堂 执 奢
娄 婪 孰 寇 寅 寂 宿 密 尉 专 将 屠 崖下 崩 崔 巢 常 带 康
庸 庶 张 强 彗 彬 彩右 彩左 得右 得左 徙 从 御 患 悉 惟 戚
扈 捷右 措 扫右 挂右 推 采 捺 敝 敖 救 敏 叙 敕 斛 斩 族 旋
旋右 晨 曹 梁 条 条左上 枭 欲 杀 杀左 浅右 涯右 淑 渊右 淫
淫右 深右 淮 焉 焊 爽 牵 率 瓠 甜 产 毕 异 疏 众 众븠票 祭
祭上 移 窒 笠 累 终 羞 翌 习 聊 唇 修 舂 莽 莫 荷 荼 处下
彪 衮 觅 规 许 设 豚 责 责上 贯 贪 赦 软 通 连 逐 造 逢 部
郭 都 野 陪右 陈 阴 陷右 雀 雪 雪下 雩 章 竟 顶 顷 鱼 鸟
鸟上 卤 鹿 麦 麻 备 备右 最 劳 博 博右 厥 喜 单 乔 围 尧 堪
报 报右 壹 壹上 奠 媛右 孱 孱下 尊 尊上 寻 就 巽 几 几上 彭
复 复右 恶 闷 惠 惰 戟 掌 插右 提 揖右 援右 敞 敦 敢 散 斑
斯 普 晶 景 智 晷 曾 替 朝 棠 棘 棘左 款 欺 钦 壳上 游右 渠
汤 渴右 焦 无 无上 然 牌 犀 犹 画 番 登 发 发上 皓 稍 童 策
笔 答 笋 粟 粥 结 绝 絮 丝 善 翕 肃 舜 萃 华 华下 着 虚 覃
诊右 象 贰 贲 费 贵 贵上 买 贸 贷 越 越右 辜 逮 逮右 进 乡
量 钧 闵 闰 闲 间 闲 队 隋 阳 阳右 隆 雁 雅 雄右 雄左 集 雇
云 项 须 飧 冯 黄 黍 黑 乱 伤右 傻右 剽 勤 啬 园 塞 塔右
塌右 奥 干 干左上 廉 汇 微 微上 微右 意 慈 感 爱 愁 愈 戢
摇右 构 敬 新 暖右 会 业 楚 杨 歇 岁 毁 殿 沟右 灭右 温
温右 烦 煞 瑟 当 当上 睾 睢 禁 万 禽 棱 禀 节 筮 绢 罪 署
义 羡 圣 聘右 肆 肆左 脑右 叶 葬 葛 董 虞 虏 号 号左 蜀 解
夸右 詹 贼 资 贾 路 载右上 辟 农 运 道 遂 遂右 达 遐 过
过左下 过左上 邹左 隔右 雍 隽 雉 雷 电下 零 预 顿 饰右 鼎
鼓 鼠 仆 仆右 匮 厌 尝 团 寿 梦 梦上 奁 宁 察 对 幕 幕上
彻右 撇 摘右 撤右 敲右 斡 旗 旗左上 荣 荣上 漏右 漂 汉右 满
满右 滞 漆右 渐 熊 尔 狱 甄 疑 尽 尽上 监 监上 睿 碟右 福右
称右 算 箸 缀右 网右 绵 维 罚 翠 翟 聚 臧 台 与 舞 蒿 蒙 盖
蜜 豪 豪上 狸 貌 貌右 宾 赫 轻 远 遣 递右 银 阁 隙右 需 颇
魁 麽 鼻 齐 齐下 齐上 僵右 刘 厉 寮 宽 审 写 写下 废 厨 广
广上 徵 徵右 庆 慧 虑 忧 慰 摩 摩上 撩右 敌左 敷 数 暴 样右
枢 乐 毅 洁右 潭 潜右 潘 滕 热 热上 莹 皱左 盘 确右 磊 码
谷 穷 箭 箴 缘 缘右 罢 蔑 蔑下 蔡 蓬 虾右 卫 诸 谁 竖 猪 赏
贱 贤 卖 赐 质 辇 适 迁 迁右 邻左 郑 闾 颉 养 发上 鲁 黎
黎上 墨 齿 冀 噩 嬴 学上 宪 择 横 橘右 树右 历 历上 澡 激右
燕 卢 磨 御 积 稣 萦 县 羲 翰 兴外 萧 萤上 融 融左 衡 衡中
亲 亲左 谒 猫左 赖 辽右 遗 钱 钱右 录 阎 随 随右 霍 频 颓
颐左 餐上 馅右 龙 龟 嚏右 压上 婴 弥 应 戏 戴 戴上 击上 敛
毚 营 营上 爵 墙 墙右 获右 糜 粪 总右 繁 翼 声上 聪右 联
联右 举 举下 举上 薄 薛 亏右 襄 襄下 谣右 赛上 遽 还右 锺
阑 隐 隐上 隐右 隶右 霜 鞠 鲜 点 丛 垒 断 断左 归 猎右 瞿
礼右 窜 箫 简人 简内 简匀 简厄(?) 简户 简册 简左食 简臣
简兑 简兑(?) 简壮 简壮左 简夹 简见 简言 简贝 简车 简亚 简来
简仑 简两 简冈 简东 简争 简舍 简金 简长 简门 简奂 简彦 简柬
简为 简红左 简贞 简负 简军 简韦 简页 简风 简食 简仓 简员
简岛 简师 简库 简时 简晋 简乌 简刍 简岂 简马 简兜 简务 简区
简参 简商 简坚 简娄 简专 简将 简带 简从 简条 简浅右 简产
简毕 简众 简处 简责 简贯 简通 简连 简鱼 简鸟 简卤 简麦 简备
简劳 简单 简乔 简尧 简寻 简汤 简无 简发 简笔 简肃 简华 简虚
简贲 简贵 简买 简乡 简阳右 简黄 简伤右 简爱 简会 简会(?)
简业 简当 简睾 简万 简义 简圣 简脑右 简农 简达 简过右
简邹左 简厌 简寿 简荣 简满 简满右 简尽 简监 简与 简宾 简麽
简齐 简厉 简宽 简写 简厨 简广 简乐 简猪 简卖 简质 简迁 简齿
简历 简卢 简萦 简钱右 简龙 简龟 简婴 简墙右 简环右 简举
简赛上 简阑 简隐 简断左 简归 简丰 简锁右 简双 简绳右 简赞
简边 简丽 简严 简竞 简蔺 简觉 简党 简属 简缠右 简览 简赣
简宁 简劦 简佘 简巠 简彔 简昜 简亶 简佥 简縕 简雚 织右 职
聂 藏 蓝 藉 薰 荐 虫 丰 转 医上 厘上 锁右 离 离左 杂 双
双口 双百 双虫 鸡左 松上 魏 坏 坏右 庐 怀 攀 沥 琼右 系 茧
绳右 罗 艺 识右 赞 辞左 边 边右 难 靡 类 类左 颠 丽 严 宝
献 献左 纂 苏 觉 赢 赢外 阐 党 夔 属 携右 缠右 兰 蠡 袜右
览 铁右 霸 颢 啮 囊 囊上 弯 弯勾 听 签下 变上 镳右 显 显右
显左 鳞右 蚕上 艳 赣 鹰上 盐外 观 衅 郁 万 乇 冘 夬 巿 殳
毋 夗 宁 钺 犮 劦 囟 庄 朿 穵 佘 冏 卣 坒 夆 巠 忒 忡 旰 旲
甹 耴 肙 匊 匋 囷 坴 夌 宕 彔 旻 沓 洰 畀下 甾 豖 匽 厘 咠
呙 咢 壴 复 弇 彖 昜 昝上 柰 殄 洴 洼 狊 耎 胙 胊 苕 訇 党
冓 尃 恝 捋右 浧 涂 畟 罡 荅 陟 隼 偈右 埶 堇 欶 眯 离 窐
翏 莝 虖 嵕右 岩 惢 斌 毳 焱 猋 絜 臦 褁 黹 亶 佥 喿 媷 歆
粲 觜 豊 豦 黾 慱 荥 熏 賏 畾 虢左 隤 鴈 瞢 蕇 谔右 閵 雔
繇左 罽 蹇 霝 龠 闑 雚 巂 爂上 蟺 矍 累 贔
Q: 能不能保证有最简单的取码规则,而且可以一以贯之,没有例外字?
A: 有呀. 最简单的四个字: "查表、死背".
Q: 字根若是多达2253 个, 那麽学习字根的时间会至少需要多10倍的
时间来学习。那麽,呵呵,使用者可能不愿意学习。
A: 这个输入法是作者本人专用的. 现在是分享一些观念给其他的输入法
制作者. 我的目标是盲打, 最高速度一分钟三百字, 一小时连续输入的
速度能达到平均一分钟一百五十字以上.
引用自: "玩学习" -- 三个博士姊妹的赏识教育
作者陈克正先生说:
" 一天早晨,学校规定是语文早自习,我突然想到写字是高考
语文时最费时间的,能不能把写字的速度提高一些呢?如果能
节省10分钟、20分钟都是了不得的事,我先决定测试一下自己的
写字速度。
当时高考的作文要求800字,写这800字究竟需要多少时间呢?
我心中无底,於是我整整用了一个早自习来测量我的写字速度,
因为那时高中生没有一个人有手表,教室里也没有钟,要测写字的
速度,要知道时间,没有别的办法,只有利用早自习的铃声,测试
的结果,我一个小时只能写800字左右。我一想,这糟了,如果用
这样的写字速度参加语文参考,一篇800字的作文,起草一遍,誊一
遍,考试时间就完了,我当时吓了一身冷汗,觉得如果不是这测试
一下,到时可能会出大问题。学校考语文也考作文,也总是觉得
时间紧,但从来没有想到用提高写字速度来解决这个问题,完全没有
想到写字速度还可以提高,我当时感到非常痛心,这样一个一说就
明白,而不说不明白的事怎麽就没一个老师给我提个醒呢?
於是我开始苦练写字功,主要是以提高写字速度为主要目的。
大约练了半个学期,好不容易的才把写字速度提高到每小时2000字
。这件事情,我留有极深的印象。所以在小淑华上小学时,我就要
她练字,有时一天要她练半个小时,坚持天天练。"
连写字都可以达到一小时 2000 字, 用键盘输入怎能少一万字?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.145.82.143