如何在Android中获得拼写更正的单词?

时间:2017-02-06 19:58:59

标签: android dictionary

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

或者,这是否可以使用root设备,或者你甚至可以用你自己的字典替换自动更正来跟踪它?

2 个答案:

答案 0 :(得分:2)

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

因为这是系统提供的服务,就像位置服务之类的东西一样,没有办法在没有植根的情况下在系统范围内挂钩。我没有任何个人经验来修改Android系统或其服务的内部工作方式,但作为一个起点,您可以查看任何篡改其中某些服务的输入/输出的开源应用程序,例如: GPS欺骗应用程序。

最糟糕的情况是,您必须找到拼写检查器框架编译并存储的位置,并使用可以执行您想要的修改版本覆盖它。

我能够从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/core/java/android/****/textservice/中找到拼写检查来源,其中****serviceviewwidget或{{}之一1}}(内部在com / android中)。这似乎是最低级别。这里的许多方法都是internal

在LatinIME中,您将找到拉丁字符集的更高级别的SpellChecker源(其他字符集还有其他存储库)。您将在abstract中找到它们。这是您可以找到实现的地方。

在跟踪来源(特别是跟踪LatinIME/java/src/com/android/inputmethod/latin/spellcheck/)后,呼叫将降至getSuggestionResults级别。 DictionaryLatinIME/java/src/com/android/inputmethod/latin/Dictionary.java,这意味着abstract public ArrayList<SuggestedWordInfo> getSuggestions()有责任返回结果。不过,我认为用户可安装的字典只是一个简单的数据库,由Android系统的Dictionary处理代码使用,这可能意味着你仍然需要修改系统代码并扎根以实现你的目标

我担心这是在兔子洞的尽可能远的地方。我担心我还没有完全回答这个问题,但是这应该会给你一些指导方向。

另一个编辑:也许我对一个可安装的字典只是一个数据库是错的。 See this example。这个例子似乎是以app的形式出现,所以我不确定。

答案 1 :(得分:0)

查找键入文字的建议

import sys
from PyQt4 import QtGui


class SystemTrayIcon(QtGui.QSystemTrayIcon):
    def __init__(self, icon, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, icon, parent)
        menu = QtGui.QMenu(parent)

        edit = QtGui.QLineEdit(parent)
        edit.setText("Tekstas kuris turi būti atsiradęs čia")

        hl = QtGui.QVBoxLayout(parent)
        hl.addWidget(QtGui.QLabel("Testuojame"))
        hl.addWidget(edit)

        w = QtGui.QWidget(parent)
        w.setLayout(hl)

        wa = QtGui.QWidgetAction(parent)
        wa.setDefaultWidget(w)
        menu.addAction(wa)

       exitAction = menu.addAction("Blabla")
       exitAction = menu.addAction("Blabla 2")

       self.setContextMenu(menu)


def main():
    app = QtGui.QApplication(sys.argv)

    w = QtGui.QWidget()
    trayIcon = SystemTrayIcon(QtGui.QIcon("icons/close.png"), w)

    trayIcon.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

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

还有其他检查方法:here