我正在寻找一种相当简单的算法来确定在 QWERTY 布局上键入单词的难度。
这些词不一定是字典词,因此不能选择通常输入错误的词或类似词的列表。我确信一定有一个现有的、经过充分测试的算法,但我找不到任何东西。
任何人都可以提供任何帮助或建议吗?我正在用 python 编写算法,但欢迎使用任何其他语言或伪代码。
在 QWERTY、Colemak 和 Dvorak 布局之间进行了比较,它使用 Java 源代码计算键入的键之间的距离、同一只手上的键的百分比等。这些指标结合起来应该可以很好地估计单词的“可打字性”。
我没有任何算法可以提出,但有一些提示:
我用双手打字,这意味着键盘大致分成两半,我经常有两只手之间的协调问题,这意味着每个人都按“正确”的顺序输入字母但交错是错误的。如果一只手比另一只手要输入更多的字母,则尤其如此,典型的:“the”,因为左手类型t
和e
右手类型h
。
“滑倒”很频繁,这意味着一个人经常会错过一个键并击中另一个键;“添加”/“删除”也很常见,即键入补充键或按下不够用力--> 这意味着(显然)字母越多,就越难把单词弄对。
混合大小写使其更难,它需要在按下 CAPS 和击键之间同步,因此附近的键很可能没有正确的大写/小写。
希望这可以帮助...
拿出你的拼字游戏,记下每个字母的分数,合计一个单词的分数,嘿,你很快就有了你的算法。不确定它是否完全满足您的要求,但它可能会为您指明一个有用的方向。例如,您可能不仅要为单个字母分配分数,还要为二元组和三元组分配分数。
我不知道您需要的任何现有信息来源,也许您可以通过检查键盘并为更难的字母分配更高的分数来得出自己的字母分数:所以 1 代表“a”,8 代表“q” ',2 代表 'm',依此类推。
编辑:当我回复 SO 时,我似乎比平时更让人们感到困惑。这是我的建议的准系统:
a) 列出以英语(或您的语言)出现的所有三元组和二元组。给他们每个人分配一个打字难度分数。对单个字母执行相同的操作(毕竟 4 个字母的单词可能由一个三元组和一个字母组成,而不是两个二元组)。
b) 将输入一个单词的难度评分为输入其组成部分的难度之和。
至于难度分数,我不知道,但你可以从 1 开始键盘上的 Home 键上的字母,2 表示使用食指但不是 Home 键的字母,3 表示字母它使用你手上的第二或第三根手指,依此类推。然后对于二字图,按顺序排列左右(或左右)的简单字母得分低,顺序排列困难的字母得分高(例如qz,尽管这可能对英语无效)。随你去。
我认为,曼哈顿距离算法可能最接近您所看到的。该算法以四边形方式考虑了目标与源的距离。
至于在python中的实现,对于你在QWERTY中的特定难度需要,你必须自己写一个,否则如果你用谷歌搜索“python中的n拼图求解器”,几乎找不到曼哈顿距离的实现。