自动完成以及拼写检查和复数检查文本字段

时间:2012-09-11 06:02:33

标签: php javascript ajax drupal-6 jquery-autocomplete

您好我正在使用Drupal的6个默认jQuery自动完成功能来处理我的一个自定义文本字段。

现在我想添加拼写检查以及复数检查

例如

Word: Potatos

Spellchecker suggestions (including plural check): Potato, Potatoes

有没有办法实现此功能,以便在用户输入 Potatos 时。首先运行拼写检查脚本,这将建议正确的替代方案,一旦用户选择了正确的单词,自动完成脚本将会运行吗?

3 个答案:

答案 0 :(得分:0)

您需要做的是首先安装服务器端解决方案以执行拼写检查,例如,您可以使用PSpell。如果您无法安装PSpell,您可以使用Googlespell(只需确保查看使用条款)还有一些客户端实现可用(虽然不如服务器端解决方案那样可靠)。

有很多插件可以帮助你进行拼写检查,但是对于你的任务,我会选择像jQuery spellchecker这样更轻量级的东西。

使用所需的选项启动拼写检查程序,并为文本字段创建一个事件监听器,一个简单的例子是:

var spellchecker = new $.SpellChecker('textarea', {
    lang: 'en',
    parser: 'text',
    webservice: {
       path: '../../webservices/php/SpellChecker.php',
       driver: 'pspell'
    },
    suggestBox: {
       position: 'above'
    }
});

$('textarea').keyup(function() {
        //you would probably want to add a timer looking to see if user is finished typing
        spellchecker.check();
    });

然后你想为Spellchecker事件replace.word添加一个监听器:

spellchecker.on('replace.word', function() {
      //ie: submit the form
   });

如果你想做更高级的事情,你也可以尝试覆盖自动填充Drupal.jsAC事件.keyup()中内置的Drupals,看看事件check.success是否被触发(没有拼写错误的单词) )。如果没有拼写错误的单词,则使用drupals autocompletion实现onkeyup事件。如果拼写错误的单词对这些事件无效。

var misspelledWord = false;
spellchecker.on('check.success', function() { misspelledWord = false; });
spellchecker.on('check.fail', function() { misspelledWord = true; });

jQuery(document).ready(function(){
    Drupal.jsAC.prototype.onkeyup = function (input, e) {
      if(misspelledWord) {
          if (!e) {
          e = window.event;
        }
        switch (e.keyCode) {
          case 16: // shift
          case 17: // ctrl
          case 18: // alt
          case 20: // caps lock
          case 33: // page up
          case 34: // page down
          case 35: // end
          case 36: // home
          case 37: // left arrow
          case 38: // up arrow
          case 39: // right arrow
          case 40: // down arrow
            return true;

          case 9:  // tab
          case 13: // enter
          case 27: // esc
            this.hidePopup(e.keyCode);
            return true;

          default: // all other keys
            if (input.value.length > 0)
              this.populatePopup();
            else
              this.hidePopup(e.keyCode);
            return true;
        }
      }
    };
});

然而,通过在拼写检查器中使用jQuery的AJAX功能来实现你自己的自动完成更有意义的是replace.word事件 - 你也可以使用/自定义一个jQuery自动完成插件。

答案 1 :(得分:0)

我使用Levenshein距离算法为jQuery UI默认自动填充添加了拼写检查功能。检查github上的代码:

https://github.com/martintaleski/spellcheckAutocomplete

它被包装为jquery插件。您所需要做的就是:

$('.your-selector').spellcheckAutocomplete();

答案 2 :(得分:0)

我认为解决方案应该是ajax调用的服务器端。

选项1 - soundex mysql

简单快捷

如果你使用mysql,你的数据语言是英语,SOUNDEX可能是你的选择。

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

示例:

mysql> select SOUNDEX('potato'), SOUNDEX('potatos'), SOUNDEX('potatoes');
+-------------------+--------------------+---------------------+
| SOUNDEX('potato') | SOUNDEX('potatos') | SOUNDEX('potatoes') |
+-------------------+--------------------+---------------------+
| P300              | P320               | P320                |
+-------------------+--------------------+---------------------+

现在,在数据库中搜索基于soundex算法的相等或差异较小的单词。

选项2 - sphinxsearch

更难安装,配置和学习,但支持多种语言,阻止算法,高级查询(布尔模式等),提高性能......

如果您想要更高级的系统,那么带有词干支持的全文搜索引擎将对您有所帮助。看看http://sphinxsearch.com/docs/current.html#conf-morphology

使用词干,当您搜索马铃薯,马铃薯和土豆搜索引擎配置了morpohology = en将返回相同的结果。