Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过android键盘上的手势预测或跟踪单词_Android_Keyboard_Android Softkeyboard - Fatal编程技术网

如何通过android键盘上的手势预测或跟踪单词

如何通过android键盘上的手势预测或跟踪单词,android,keyboard,android-softkeyboard,Android,Keyboard,Android Softkeyboard,我正在尝试为Android开发一个键盘,但我不了解如何通过在键盘上滑动(跟踪)单词来实现单词预测的背景理论/算法,因为它们是在Swype、SwiftKeys和Android内置键盘中实现的 欢迎使用任何文档或示例。我们可以将输入过程分解为更易于管理的块 用户将手指放在起始字母上/附近 用户将手指拖过/靠近X多个字母 用户在最后一个字母上/附近释放手指 其结果是字母混乱,顺序和接近度是他们试图输入的实际单词的最重要指标。现在,我们的任务是获取这些字母的排序列表,并在字典中找到最接近的匹配项 这里简

我正在尝试为Android开发一个键盘,但我不了解如何通过在键盘上滑动(跟踪)单词来实现单词预测的背景理论/算法,因为它们是在Swype、SwiftKeys和Android内置键盘中实现的


欢迎使用任何文档或示例。

我们可以将输入过程分解为更易于管理的块

  • 用户将手指放在起始字母上/附近
  • 用户将手指拖过/靠近X多个字母
  • 用户在最后一个字母上/附近释放手指
  • 其结果是字母混乱,顺序接近度是他们试图输入的实际单词的最重要指标。现在,我们的任务是获取这些字母的排序列表,并在字典中找到最接近的匹配项

    这里简单的暴力方法是通过删除字母来查询数据库中的单词。例如,“DSRTYUIOKNBVFRE”可以合法地包含“DRY”、“I”、“DO”、“RUN”、“SUN”、“SON”、“foother”、“DRIVE”、“STOKE”等几十个词。突然之间,我们已经将搜索空间从数千个单词的字典缩减到几十个单词

    但我们可以做得更好。我们知道用户可能是从正确的字母开始,然后以正确的字母结束,所以像“DRY”、“I”、“do”、“RUN”和“SON”这样的词不太可能是正确的,因为它们在输入的开始和/或结束处漏掉了很多字母。因此,我们可以将列表细化到我发现的最后三个字母:“foot”、“DRIVE”还有“斯托克”(也许还有十几个)

    假设我们也在根据用户的手指离字母的距离来衡量字母,我们可以进一步细化此列表,然后按顺序将它们呈现给用户


    显然,我已经跳过了这里棘手的细节——比如将“DSRTYUIOKNBVFRE”的混乱转换为可能的单词列表,并根据输入和找到的字符串执行匹配。但我希望我已经概述了这些键盘是如何工作的(我确信它们现在比我描述的要先进得多)。

    对algo单词的预测会是这样的。
    您可以在apk中提供自己的静态字典。当用户安装它时,您可以在安装和首次使用后开始提供单词预测
    为了改善用户体验,您可以使用一种算法来查找用户类型中的常用词
    以标准英文(美国)键盘为例,您可以看到用户刷过的字母键的接近程度,并相应地显示建议
    也就是说,如果用户想键入(刷卡)单词“SUN”,他会从字母S开始刷卡,然后继续刷卡Y,而不是U,最后刷卡到N。因此,您可以使用字母Y上的近似值来查找最近的字母集。它们是T,G,H,J和U这表明。单词STN、SGN、SJN、SHN、SUN。因此,您可以在文本框中显示SUN类型-“SUN”或者如果用户更频繁地使用“SGN”或“SVN”您可以向用户提供建议“SGN”、“SUN”,让用户选择正确的单词。
    广泛传播。用句子预测单词
    继续“SUN”一词的相同示例
    如果用户想要键入的句子是
    今晚我将在SVN上提交
    因此,您可以在单词周围设置句子的上下文(如单词commit等)SVN并直接将未命中键入的(未命中的)S-Y-N
    更正为SVN
    或者如果用户想要键入一个句子
    今天太阳将从北方升起
    您可以根据句子上下文(如单词rise等)应用相同的内容,并让S-Y-N错误自动更正为SUN

    注:

    这是我设计算法的想法。如果我必须实现同样的东西,我将使用一个类似这样的算法。

    我有一些建议

    首先,看看源代码。这是一个基本但功能齐全的文本预测和字典。代码是干净的,将成为一个很好的扩展平台。查看建议WordComposer二进制字典类,了解与单词预测相关的功能。它有一本词频字典,告诉你在“现实生活”中找到一个词的频率

    其次是针对刷卡算法。当用户刷卡时,您可以确定的是他们开始和结束的字符。这是预测的一个很好的开始。我玩了一点Swype,它似乎总是尊重开始和结束字符

    在开始字符和结束字符之间,您有滑动传递的字符。这些可能是用来填充空格的字符。现在,您可以通过组合这些字符并在字典中查找可能的单词来开始猜测。您总是以起始字符开始猜测,填写一些刷卡的候选字符,然后以结束字符结束猜测。向用户显示字典中的最佳(最高频率)匹配项

    这可能需要尝试很多组合,比如2^(n-2),其中n是滑动下的字符数。因此,我建议使用“贪婪”搜索,从一开始就连续添加字符,如果它们与字典中的单词匹配,则保留它们,否则丢弃它们。可能有必要对这种方法进行一些改进

    您可以使用的另一个信息来源是当滑动减慢或改变特定字符的方向时。您可以通过计算spee来检测这一点