Android 的拼写检查器中使用了哪种算法?

Posted

技术标签:

【中文标题】Android 的拼写检查器中使用了哪种算法?【英文标题】:Which algorithm is being used in Android's spell checker? 【发布时间】:2012-06-19 10:35:55 【问题描述】:

我正在研究字符串匹配算法。我遇到的最有用的一个是我的手机使用的那个(SE xPeria neo v 上的 android 2.3.4)。

如屏幕截图所示,我按下了字符jiw,它们接近我想要的字符并且它正确建议。

该算法似乎类似于levenstein distance(我的输入和字典之间的距离)。不知何故,附近的字符在字符串匹配中具有 some 值。

对所使用的算法有任何想法吗?

【问题讨论】:

能否解释一下为什么他们认为这不具建设性?这个问题非常精确(“使用什么算法?”),并且系统的源代码是公开的,所以这个问题可能有答案。 +1 表示简洁、可回答、有趣的问题。 非常有趣的编程问题,+1 投票,祝你的项目好运 【参考方案1】:

我拉出Android source code 并寻找拼写检查。我发现这个目录似乎包含您正在寻找的来源:

packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/

文件spellcheck/AndroidSpellCheckerService.java 看起来像是负责所有繁重工作的文件,但Suggest.java 似乎也以某种方式参与其中。

【讨论】:

【参考方案2】:

这个excellent information retrieval book 有一个关于Levenstein distance 的详细部分,包括加权变化。然后可以将权重作为键盘上按键之间的距离。

【讨论】:

谢谢@phs。这篇文章提供了很多信息,并指出我最初怀疑 Levenstein 距离是 Android 中字符串比较的度量标准。但只是怀疑..

以上是关于Android 的拼写检查器中使用了哪种算法?的主要内容,如果未能解决你的问题,请参考以下文章

最适合拼写检查器、字典和词库的算法和数据结构

如何在 Android Studio / IntelliJ Idea 中添加字典进行拼写检查

如何在 Cordova Android 应用程序中禁用复制粘贴、拼写检查、自动完成

朴素贝叶斯算法——拼写检查器

iOS之深入解析Xcode的拼写检查

创建一个“拼写检查”,检查具有合理运行时间的数据库