【问题标题】:How to get spelling corrected words in Android?如何在 Android 中获得拼写更正的单词?
【发布时间】:2017-02-14 12:43:34
【问题描述】:

当您在 Android 中(不仅在我的应用程序中)在操作系统范围内输入任何文本区域时,用户可以使用自动更正或单击拼写错误的单词进行更正。有没有办法获得所有拼写错误的单词的列表以及它们变成了什么?

或者,这是否可以通过 root 设备实现,或者您甚至可以用自己的字典替换自动更正来跟踪它吗?

【问题讨论】:

  • 请为不赞成票添加更多解释,我们很乐意添加更多详细信息或编辑问题。
  • 澄清一下,您不是要在单个应用程序中执行此操作,而是要在系统范围内为所有应用程序执行此操作?
  • @RayfenWindspear 是的,没错。

标签: android dictionary


【解决方案1】:

Android 中的此功能由拼写检查框架提供。它的documentation herehere 展示了如何连接到它并在应用程序内与它的建议进行交互。

因为这是系统提供的一项服务,很像定位服务之类的服务,所以没有办法在不被 root 的情况下在系统范围内挂钩。我没有任何修改 Android 系统或其服务的内部工作的个人经验,但作为起点,您可以查看任何篡改其中一些服务的输入/输出的开源应用程序,例如GPS 欺骗应用。

最坏的情况是您必须找到 Spell Checker Framework 编译和存储的位置,然后用修改后的版本覆盖它。

我能够从 Android 5.1.1 中找到旧版本的 SpellCheckerService.java here。您或许可以对此进行调查并弄清楚您需要做什么以及在哪里做。

编辑:在查看了 1149 个 Android 源代码库 (100+ GB) 的整个列表后,我找到了两个最有可能让您寻找空缺的候选人。

git clone https://android.googlesource.com/platform/frameworks/base

git clone https://android.googlesource.com/platform/packages/inputmethods/LatinIME

在 base 中,您会在 base/core/java/android/****/textservice/ 中找到 SpellChecker 源,其中 ****serviceviewwidgetinternal 之一(内部位于 com/android 中)。这似乎是最低水平。这里的很多方法等等都是abstract

在 LatinIME 中,您会找到用于拉丁字符集的更高级别的 SpellChecker 源(对于其他字符集还有其他存储库)。您可以在LatinIME/java/src/com/android/inputmethod/latin/spellcheck/ 中找到它们。在这里您可以找到实现。

在跟踪源(特别是跟踪getSuggestionResults)之后,调用会下降到Dictionary 级别。 LatinIME/java/src/com/android/inputmethod/latin/Dictionary.javaabstract public ArrayList<SuggestedWordInfo> getSuggestions(),这意味着返回结果是 Dictionary 的责任。不过,我会假设用户可安装的字典只是一个简单的数据库,供 Android 系统的 Dictionary 处理代码使用,这可能意味着您仍然需要修改系统代码并扎根才能实现目标。

恐怕在我谈到这个主题时,这已经离兔子洞很远了。恐怕我还没有完全回答这个问题,但这应该会给你一些关于你想如何继续的方向。

另一个编辑:也许我对可安装字典只是一个数据库的看法是错误的。 See this example。这个例子似乎是应用程序的形式,所以我不确定。

【讨论】:

  • 寻找 SpellCheckerService 的实际来源。它出奇地难以定位......我希望它可以为可能的解决方案提供一些启示
  • 很有趣,所以我假设 Android 将使用拼写错误的单词查询服务,以便服务可以返回选项列表。现在我想知道操作系统是否会通知服务用户选择的内容(这可以改进拼写检查器)。如果您认为我的假设是正确的,请告诉我。谢谢!顺便说一句,我发现此链接试图获取更多信息android-developers.googleblog.com/2012/08/…
  • Android 源代码库被分成 1149 个单独的存储库,这些存储库显然无法在网络上搜索到:@ 幸运的是,我不久前构建了一个刮板,它允许我将所有 git clone 命令拉入秒。现在我正在等待所有 1149 个单独的 repos 下载...
  • 哦,很多,非常感谢您的帮助。我会继续查看文档/其他资源,我可能会找到一些东西。
  • 找到了一个旧版本的 SpellCheckerService.java,您可以查看一下它是如何工作的。 grepcode.com/file/repository.grepcode.com/java/ext/…
【解决方案2】:

查找输入文本的建议

Spannable str = myEditText.getText(); 
SuggestionSpan[] spanned = str.getSpans(startIndex, endIndex, SuggestionSpan.class);

如果 spanned 不为空,则 startIndex 和 endIndex 之间的文本有错误。通过更改这些索引的值,可以找出哪个单词是错误的。跨区数组中的每一项都有一个名为 mSuggestions 的字段,它是一个字符串数组,为错误的单词提供建议的单词。

还有其他方法可以检查:here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多