4

こんにちは私はカスタムテキストフィールドの1つにDrupalの6つのデフォルトのjQueryオートコンプリート機能を使用しています。

ここで、複数形のチェックだけでなく、スペルチェッカーも追加したいと思います。

例えば

Word: Potatos

Spellchecker suggestions (including plural check): Potato, Potatoes

ユーザーがPotatosと入力したときに、この機能を実装する方法はありますか。まず、正しい選択肢を提案するスペルチェッカースクリプトが実行され、ユーザーが適切な単語を選択すると、オートコンプリートスクリプトが実行されますか?

4

3 に答える 3

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をご覧ください。

ステミングを使用すると、ジャガイモを検索すると、モルフォロジー=en で構成されたジャガイモとジャガイモの検索エンジンで同じ結果が返されます。

于 2014-11-13T14:37:14.000 に答える
0

あなたがする必要があるのは、最初にスペルチェックを実行するためのサーバー側のソリューションをインストールすることです。たとえば、PSpellを使用できます。PSpell をインストールできない場合は、Googlespell を使用できます (利用規約を必ず確認してください)。クライアント側の実装も利用できます (ただし、サーバー側のソリューションほど信頼性は高くありません)。

スペルチェックに役立つプラグインはたくさんありますが、タスク Id には、jQuery スペルチェッカーのようなより軽量なものを使用します。

必要なオプションでスペルチェッカーを開始し、テキストフィールドのイベントリスナーを作成します。簡単な例は次のとおりです。

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もっと高度なことをしたい場合は、オートコンプリートイベントに組み込まれている Drupals をオーバーライドし.keyup()て、イベントcheck.successが発生したかどうかを確認することもできます (スペルが間違っている単語はありません)。スペルミスの単語がない場合は、onkeyup イベントに drupal オートコンプリートの実装を使用します。単語のつづりが間違っている場合、これらのイベントに対しては何もしません。

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;
        }
      }
    };
});

ただし、スペルチェッカーのreplace.wordイベントでjQueryのAJAX機能を使用して独自のオートコンプリートを実装する方が理にかなっています.jQueryオートコンプリートプラグインの1つを使用/カスタマイズすることもできます.

于 2013-03-07T06:57:07.033 に答える