6

我正在尝试编写一个函数来检测用户输入特定短语/句子/单词/单词的准确程度。我的目标是构建一个应用程序来训练用户输入某些短语的准确性。

我最初的直觉是使用基本的 levenshtein 距离算法(主要是因为这是我脑海中唯一知道的算法)。

但经过更多研究后,我发现Jaro-Winkler是一个稍微有趣的算法,因为它考虑了转置。

我什至找到了一个讨论这些算法之间差异的链接:

Jaro-Winkler 和 Levenshtein 距离之间的区别?

阅读完所有内容后,除了各自的维基百科帖子之外,我仍然对哪种算法最适合我的目标一无所知。

4

3 回答 3

5

由于您正在对打字质量进行评分,并且您想训练学生犯零错误,因此您应该使用 Levenshtein 距离,因为它的宽容度较低。

此外,与 Jaro-Winkler 结果相比,Levenshtein 分数更易于理解,并且更容易以图形方式表示。您可以修改 Levenshtein 算法以分别报告插入、删除和错误输入,并向最终用户显示更正列表。另一方面,Jaro-Winkler 给出的分数很难向最终用户显示,因为中间拼写错误的惩罚低于最后的惩罚。

于 2017-01-11T21:48:19.960 回答
3

有点半开玩笑,但只有一点点:建立一个打字生成模型,它给出了击中正确字母的高(先验)概率,并分配了同时击中两个相邻键的一些概率,两个键来自不同的手错误的顺序,来自同一只手的两个键的顺序错误,一个靠近正确的键,一个远离正确的键,等等。或者可能不那么特别:给你的模型一个给定的给定按键序列的概率当前的密钥对需要继续通过。你可以用这样的模型做很多事情;例如,您可以通过给出学习者实际表现的似然分来获得类似“距离”的度量。但更好的办法是给他们一份报告,总结他们犯的错误最多的类型——毕竟,当很多数字都可以的时候,为什么要把他们的表现归结为一个数字呢?如果您从大量真实打字员的工作中了解不同类型错误的概率,则可以加分。

于 2017-01-11T21:48:55.663 回答
1

我主要同意 dasblinkenlight 给出的答案,但是,建议使用Damerau -Levenshtein 距离而不是仅使用 Levenshtein,即包括换位。换位在打字时相当频繁且容易进行,并且没有充分的理由说明它们应该对其他可能的错误(插入、删除和替换)造成双倍的距离惩罚。

于 2017-01-12T14:56:44.250 回答