哪种字符串距离算法最适合测量打字准确度?
What string distance algorithm is best for measuring typing accuracy?
我正在尝试编写一个函数来检测用户键入特定 phrase/sentence/word/words 的准确程度。我的 objective 是构建一个应用程序来训练用户输入某些短语的准确性。
我最初的直觉是使用基本的 levenshtein 距离算法(主要是因为这是我头脑中唯一知道的算法)。
但经过更多的研究,我发现 Jaro-Winkler 是一个稍微有趣的算法,因为它考虑了换位。
我什至找到了一个 link 来讨论这些算法之间的区别:
Difference between Jaro-Winkler and Levenshtein distance?
阅读了所有这些内容,除了相应的维基百科帖子外,我仍然有点不知道哪种算法最适合我的objective。
既然你要对打字质量进行评分,并且你想训练学生零错误,你应该使用 Levenshtein 距离,因为它不那么宽容。
此外,Levenshtein 分数比 Jaro-Winkler 结果更易于理解,并且更容易以图形方式表示。您可以修改 Levenshtein 算法以分别报告插入、删除和错误输入,并显示 end-users 更正列表。 Jaro-Winkler,另一方面,给你的分数很难显示给 end-user,因为中间拼写错误的惩罚比最后的惩罚要低。
略微tongue-in-cheek,但只是略微:建立一个打字生成模型,给出击中正确字母的高(先验)概率,并分配一些同时击中两个相邻键的概率,两个键以错误的顺序来自不同的手,以错误的顺序来自同一只手的两个键,一个接近正确的键,一个远离正确的键,等等。或者可能更少ad-hoc:给你的模型一个概率对于给定的按键序列,给定继续通过所需的当前键对。你可以用这样的模型做很多事情;例如,您可以通过为学习者的实际表现给出似然分数来获得类似 "distance" 的指标。但更好的办法是给他们一份报告,总结他们最常犯的错误类型——毕竟,为什么要将他们的表现归结为一个单一的数字,而许多数字都可以?如果您从大量真实打字员的工作中了解不同类型错误的概率,则可加分。
我基本同意 dasblinkenlight 给出的答案,但是,建议使用 Damerau-Levenshtein distance 而不是仅 Levenshtein,即包括换位。换位相当频繁,并且在打字时很容易进行,并且没有充分的理由说明为什么它们应该针对其他可能的错误(插入、删除和替换)招致双倍的距离惩罚。
我正在尝试编写一个函数来检测用户键入特定 phrase/sentence/word/words 的准确程度。我的 objective 是构建一个应用程序来训练用户输入某些短语的准确性。
我最初的直觉是使用基本的 levenshtein 距离算法(主要是因为这是我头脑中唯一知道的算法)。
但经过更多的研究,我发现 Jaro-Winkler 是一个稍微有趣的算法,因为它考虑了换位。
我什至找到了一个 link 来讨论这些算法之间的区别:
Difference between Jaro-Winkler and Levenshtein distance?
阅读了所有这些内容,除了相应的维基百科帖子外,我仍然有点不知道哪种算法最适合我的objective。
既然你要对打字质量进行评分,并且你想训练学生零错误,你应该使用 Levenshtein 距离,因为它不那么宽容。
此外,Levenshtein 分数比 Jaro-Winkler 结果更易于理解,并且更容易以图形方式表示。您可以修改 Levenshtein 算法以分别报告插入、删除和错误输入,并显示 end-users 更正列表。 Jaro-Winkler,另一方面,给你的分数很难显示给 end-user,因为中间拼写错误的惩罚比最后的惩罚要低。
略微tongue-in-cheek,但只是略微:建立一个打字生成模型,给出击中正确字母的高(先验)概率,并分配一些同时击中两个相邻键的概率,两个键以错误的顺序来自不同的手,以错误的顺序来自同一只手的两个键,一个接近正确的键,一个远离正确的键,等等。或者可能更少ad-hoc:给你的模型一个概率对于给定的按键序列,给定继续通过所需的当前键对。你可以用这样的模型做很多事情;例如,您可以通过为学习者的实际表现给出似然分数来获得类似 "distance" 的指标。但更好的办法是给他们一份报告,总结他们最常犯的错误类型——毕竟,为什么要将他们的表现归结为一个单一的数字,而许多数字都可以?如果您从大量真实打字员的工作中了解不同类型错误的概率,则可加分。
我基本同意 dasblinkenlight 给出的答案,但是,建议使用 Damerau-Levenshtein distance 而不是仅 Levenshtein,即包括换位。换位相当频繁,并且在打字时很容易进行,并且没有充分的理由说明为什么它们应该针对其他可能的错误(插入、删除和替换)招致双倍的距离惩罚。