确定一个单词在QWERTY键盘上打字的难度

13

我正在寻找一个相对简单的算法,用于确定在QWERTY键盘布局上输入一个单词的难度。

这些单词不一定是词典单词,所以常见错打单词列表之类的内容不是一个选项。我相信一定存在一种已经经过充分测试的现有算法,但我找不到任何相关信息。

有人可以提供帮助或建议吗?我将在Python中编写算法,但任何其他语言或伪代码都可以。


也许如果你了解Dvorak键盘背后的逻辑,会对你有所帮助。 - ruslik
2
一个简单的解决方案是获取有关打字错误的数据(在http://stackoverflow.com/questions/1801647/what-is-the-best-source-for-typo-statistics中讨论),并计算每个键的错误率。这是有问题的,因为打字错误通常是上下文相关的(转置、混淆相似的单词、常见结尾等)。为了考虑一些上下文,可以使用2-gram(在每个键后面跟随另一个键的错误率)。 - Michael Dunn
4个回答

5

这是一个关于QWERTY、Colemak和Dvorak键盘布局的比较,它计算打字键的距离、同手按键百分比等指标,并使用Java源代码实现。这些指标的组合应该能够很好地估计单词的“可打性”。


1
这个线程已经僵尸化了!那是一个无效的链接- 你知道源代码是否还存在吗? - Alexander Lucas
@AlexanderLucas 我知道这有点晚了,但是Wayback Machine在这里归档了链接的工作版本(https://web.archive.org/web/20080914140530/http://colemak.com/Compare)。 - Phinet

2
我没有算法可以提供,但有几个提示:
  • 我用双手打字,键盘大致分为两半,经常出现两只手之间的协调问题,意味着每只手按“正确”的顺序输入字母,但交错是错误的。如果一只手比另一只手要输入更多字母,则尤其如此,典型的例子是“the”,因为左手打te,右手打h
  • “滑动”很常见,意思是经常会错过键位而按到其他键;“添加”/“删除”也很常见,即打一个补充键或者没有按够力-->这意味着(显然)有更多字母,就越难正确拼写单词。
  • 混合大小写使得输入变得更难,它需要在按下CAPS和敲击键之间进行同步,因此很可能附近的键没有正确的大小写。
希望这些提示对你有所帮助...

1
拿出你的Scrabble游戏,记录每个字母的分数,将一个单词的分数相加,嘿,你就有了你的算法。我不确定它是否完全满足你的要求,但它可能会指引你朝着一个有用的方向。例如,你可能想为单个字母以及二元组和三元组分配分数。
我不知道任何现有的信息源可以提供你需要的信息,也许你可以通过检查键盘并将更难打的字母分配更高的分数来自己制定字母分数:例如'a'得1分,'q'得8分,'m'得2分等等。
编辑:我似乎比平时在SO上回复时更加困惑了人们。这是我的建议的要点:
a)列出所有在英语(或你的语言)中出现的三元组和二元组。为每个三元组和二元组分配一个打字难度分数。对于单个字母也做同样的事情(毕竟一个四个字母的单词可能由一个三元组和一个字母组成,而不是两个二元组)。
b)将一个单词的打字难度评分为其组成部分的难度之和。
关于难度评分,我不清楚,但您可以从键盘上的主键中的字母开始为1,对于使用食指但又不是主键的字母为2,使用手上第二或第三根手指的字母为3,以此类推。然后对于二连字,在序列左右(或右左)中易于拼写的字母得低分,单手中难以拼写的字母获得高分(例如qz,虽然这在英语中也许无效)。接着继续进行。

1
为什么/如何键入 qa 难8倍!? - fearofawhackplanet
1
所以将输入字母 q 的成本设为输入字母 a 的 1.87 倍。我提供的是未经深思熟虑、即兴建议,而不是试图把解决方案塞给 OP。 - High Performance Mark
好的,我明白了。实际上,我喜欢这个基本想法(尽管我会认为你需要查看字母组合而不是单个字母),但在我的理解中,您似乎在暗示字母在自然语言中出现的频率和输入难度之间存在某种共性。 - fearofawhackplanet
Scrabble得分代表游戏所在地字母的出现率,与QWERTY键盘上的打字难度无关。 - Petrus Theron

0

我认为曼哈顿距离算法可能是你正在寻找的最接近的算法。该算法以四边形方式考虑目标与源之间的距离。

至于在Python中的实现,针对你在QWERTY上的具体需求,你将不得不自己编写代码,否则可以在Google上搜索“用Python解决n谜题”的一些曼哈顿距离实现。


2
曼哈顿距离仅适用于单指打字。 - ruslik
在QWERTY键盘上,计算每个字符到其目标位置的距离并求和? - Senthil Kumaran
你为手指的初始位置分配了10个起始点,然后使用曼哈顿距离计算打字时需要走过的路径长度。这只是一个猜测。 - Björn Pollex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接