Preg問題タイプ

提供:MoodleDocs
2021年4月6日 (火) 05:25時点におけるToshihiro KITA (トーク | 投稿記録)による版 (→‎部分一致)
移動先:案内検索


注意: このプラグインは、現在 (2020年2月) Moodleブランチ2.3から3.1のみで利用可能と記載されていますが、プラグイン統計タブでは、このプラグインがインストールされている30以上のサイトのうち、半分が3.2から3.8のMoodleブランチであることがわかります。公式にサポートされていないブランチでも、正規表現プラグインは動作しますが、'オーサリングツール' は利用できません。プラグイン開発者は、このプラグインをアップデートして、この問題を引き起こすJavaScriptの問題を修正するために作業しています。DEVELOPER レベルのデバッグを有効にした場合、サーバに危険を及ぼさない警告が表示されることがあります。これらは将来のリリースで修正されるはずです。

Pregは、正規表現 (regexes)を使用して、学生の回答をチェックする問題タイプです(ただし、ヒント機能のために、正規表現なしで使用することもできます)。正規表現は、問題を作成するときの教師と答えを書くときの学生の両方に、膨大な機能と柔軟性を与えます。最初のセクションでは、このドキュメントの使い方を説明していますが、慎重に使用してください。正規表現の構文についての詳細は http://www.nusphere.com/kb/phpmanual/reference.pcre.pattern.syntax.htm にあります。多くの優れた正規表現のマニュアルがありますが、ここでは繰り返しません。

Preg問題とこのドキュメントの利用方法

正規表現については何も知らない (知りたくない) けど、次の単語 (文字) をヒントにするのは便利そうだな

Preg問題タイプを記述と同じように使うことができますが、正規表現についての知識がなくても、高度なヒントを得ることができます。そのためには、選択する必要があります。

  • Notation => Moodle shortanswer
  • Engine => Finite state automata
  • Exact matching => Yes

その後は、あなたの記述問題から答えをコピーすればいいのです。ヒンティングの設定については、ヒンティングのセクションを読んで理解しておくとよいでしょう。いくつかの図解された、ステップバイステップの、K-12および大学レベルの使用例については、Preg問題タイプの例を参照してください。

正規表現の知識は漠然としているが、パターンマッチングを利用してみたい

正規表現を書くのは大変だけど、その強みをパターンとして利用したい場合、オーサリングツールが問題の作成に大いに役立つでしょう。ツールは正規表現の意味を様々な方法で示してくれます: 表現の内部構造(シンタックスツリー)、マッチングの視覚的なパス(説明グラフ)、そしてテキストの説明です。また、複数の文字列に対して正規表現をテストし、期待通りに動作するかどうかを確認することもできます。あなたの正規表現を実験し、遊び、オーサリングツールの対応する変更を見て、最終的にはあなたが望む正規表現を手に入れてください。

まずオーサリングツールのセクションを読み、その後(おそらく自分でツールを試した後)正規表現を理解するのセクションを読みます。(これは任意ですが、面白いし、大いに役立つでしょう) また、問題の仕組みのセクションも読んで、様々な設定とそれが問題にどのように影響するかを理解しておくと良いでしょう。

正規表現をしっかり学んで、正規表現が許すことなら何でもできるようになるための努力をしたい

さて、あなたは正規表現を知らないけれど、それを理解して複雑な表現を簡単に作りたいと思っています。闇雲に努力するのではなく、このセクションを読んで理解することに時間と労力を費やした方が良いでしょう。そして、オーサリングツールについて少し読み、それらを使って正規表現の作成を試してみましょう。これらのツールを使えば、本当によく理解できているか、期待通りの動作をするかを確認することができます。構文ツリーは、優先順位アリティ の意味を正しく理解しようとするときに特に役立つでしょう。正規表現の原理をよく理解したら、問題の仕組み正規表現のリファレンスのセクションを読んでください (可能性を知るためです。わざわざすべてを理解したり覚えたりする必要はありません。定期的に新しいことを学ぶためにそこを見ればいいのです)。これで、オーサリングツールをあまり使わずに正規表現を書けるようになったはずですが、式をテストするためのテストツールは別です。

私は正規表現をよく知っているので、詳しい説明がなくても自分で書けます

様々な設定とその下での問題の動作を理解するために、問題の仕組みを読むべきです。また、オーサリングツールのセクションの正規表現テストにも興味があるかもしれません。最後に、正規表現リファレンスも参考になるかもしれません。

==対応するMoodleブランチと翻訳==。 このプラグインは、現在 (2018年4月) Moodleブランチ2.3から3.1のみで利用可能と記載されていますが、stats page によると、このプラグインがインストールされている50以上のサイトのうち、半分は3.2から3.4のMoodleブランチです。公式にサポートされていないブランチでは、正規表現プラグインは動作しますが、オーサリングツールは利用できません。プラグイン開発者は、このプラグインをアップデートし、この問題の原因となっているJavaScriptの問題を修正するために作業を行っています。DEVELOPERレベルのデバッグを有効にした場合、サーバに危険を及ぼさない警告が表示されることがあります。これらは将来のリリースで修正される予定です。

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP

すべてのMoodleプラグインと同様に、pregプラグインは、最初は英語で利用できます。現在、ロシア語およびメキシコのスペイン語の翻訳が利用可能ですが、AMOSで他の翻訳を行うことができます。

インストール方法

  • Moodle plugins databaseからダウンロード/インストールしてください。
  • すべてのプラグインの依存関係をインストールしてください。

preg missing dependencies.png

preg pathtodot.png

  • Windowsの場合、path to dotへのパスはC:\Program Files (x86)\Graphviz2.38\bin\dot.exeとなります。
  • Macでpath to docを見つけるには、ターミナルウィンドウを開き、次のように入力します。
which dot
    • そして、そのパス(例: /opt/local/bin/dot)を 'サイト管理 / ▶︎ サーバ / ▶︎システムパス' のPath to dotに入力します。

PREG問題の仕組み

基本的に、この問題タイプは記述問題タイプの拡張バージョンです。いくつかの異なる方法でその機能を拡張しています(ほとんどどのような組み合わせでも使用できます)。

  • パターン・マッチング - 正規表現を使用して、可能性のある学生の答えを記述する強力なパターンを作成できます。
  • ヒンティング - 学生が問題に行き詰まったとき、次の正しい単語(lexeme)や文字(ペナルティの可能性あり)を尋ねることを許可することができます。

問題の作業に影響する設定

答えとして指定したすべての正規表現の大文字・小文字の区別を設定します。なお、正規表現部分の大文字・小文字の区別を設定することもできます。 完全一致 は以下のように問題に影響します。

Yes
最初の文字から最後の文字まで、学生全体 の解答があなたの正規表現と一致する必要があります。
No
学生の解答には、あなたの正規表現に一致する 部分 を含めることができます。例えば、正解が "全体" の場合、"the whole enchilada"、"the whole shebag"、"the whole nine yards"、"the whole world"、"the whole truth" はすべて正しい学生の解答となります。

また、special regex syntaxを使用して、いくつかの正規表現を学生の解答全体にマッチするように設定することもできます。

Notations は、解の "言語" を指定するものです。

Regular Expression
正規表現のための通常の記法です。正確には、Perl互換の正規表現の方言です。読みやすくするために、複数の文字列で正規表現を書いても構いません。
正規表現(拡張)
本当に複雑な正規表現に便利です。これは、PHP の 'x' 修飾子に似ています。正規表現の中で、文字クラスの中にないエスケープされていない空白を無視します。- これにより、スペースを使って自由に正規表現をフォーマットすることができます。また、改行も無視しますが、便利な例外があります。'#' 文字以降、文字列の最後まではコメントとして扱われます(#はエスケープしてはいけませんし、文字クラスの中にあってはいけません)。
Moodle shortanswer
これを使えば、正規表現の構文を一切使わずに、記述問題の解答をそのままコピーすることができます。ワイルドカードの '*' に対応しています。FAエンジンを選択すると、ヒント機能を利用することができます。正規表現についての説明は省略できますが、問題のヒント動作を設定するために変更できる様々な設定を理解するために、ヒントセクションを必ず読んでください。有用なヒントと動作例については、Preg問題タイプの例を参照してください。

マッチングエンジンは、正規表現によるマッチングを行うプログラムモジュールを指定します。最適なマッチングエンジンというものはなく、使用する機能によって異なります。エンジンにはさまざまな安定性があり、使用できる機能も異なります。

PHP preg extension
は、ヒントが必要ない他のエンジンがあなたの表現を難しすぎると拒否する、またはバグに遭遇した場合に使用するべきです。これは、PHPのネイティブなpreg_関数をベースにしています。100% perl 互換の正規表現機能をサポートしており、非常に安定しており、徹底的にテストされています。しかし、部分一致をサポートしていないので、 (PHP開発者に部分一致のサポートを追加させない限り) no hinting はありません。しかし、サブパターンの取り込みには対応しています。他のエンジンがサポートしていない複雑な正規表現機能が必要な場合は、このエンジンを選択してください。
Finite state automata (FA)
学生のための ヒントの実行 に使うことができます。FA エンジンはカスタムPHPコードで、多くの (すべてではない) 正規表現機能をサポートし、徹底的にテストされています (AT&T testregex スイートのすべてのテストと、サポートしている機能に関する PCRE testinput1, testinput4 スイートのほとんどのテストに合格しており、これは非常に意味のあることです)。今のところサポートされていない機能は、ルックアラウンドアサーションといくつかのタイプの条件付きサブパターンです。

誤字脱字検出

3.2以降のFAエンジンでは、誤字脱字の検出がサポートされています。

先生方は、誤字脱字のある解答が完全に間違っていると評価されることを望まないことが多いです。このシステムは4種類のタイポを検出して修正します。

 character insertion: cot → coat
 character deletion: cooat → coat
 character substitution: coot → coat
 characters transposition: caot → coat

問題設定で誤字脱字検出を有効にして、誤字脱字制限(解答に許容される誤字脱字の数)と誤字脱字のペナルティ(ゼロにすることも可能)を指定する必要があります。 typo detection.png

ヒント

ヒントは、adaptive and interactive behavioursのFAエンジンでサポートされています。

部分一致

ヒントは 部分一致 から始まります。部分的に正しい解答とは、正しい文字で始まり(正規表現にマッチする)、ある文字でマッチが切れる文字列を意味します。例えば、"フランスとオランダの国旗に使われている色は何ですか?" という質問をして、正規表現を入力したとします。

 "are blue, white(,| and) red"

と学生が答えました。

 "they are blue, vhite and red"

このような場合、部分的に一致するのは

 "are blue, "

正規表現は固定されていないため ("完全一致" が "いいえ" に設定されている)、学生の解答の最初の文字でマッチしないことがあることに注意してください (上記の例のように "they" がスキップされます)。部分一致を使用している間、学生は正しい部分と間違った部分を見ることになります。

 they are blue, vhite and red

preg the colors of the french flag.png

一般的なヒントのルール

REGEXP Regular Expression Short-Answer question typeとは異なり、Preg問題タイプはヒント文字を学生の解答に追加せず、いくつかの理由から別々に表示します。

  1. 自分の解答にヒント文字を追加したいかどうかは学生の責任です (さらにいくつかの理由もあります)。
  2. 解答が修正されると、ヒント を繰り返し押すのが簡単になってしまうので、ヒントを考えるのがわずかに楽になりますが、これは通常望ましい行動ではありません。

ヒントは可能な限り、マッチを完了するための最短経路につながる文字を選択します。先ほどの正規表現に対する解答を考えてみましょう。

 are blue, white; red

ヒントとなる文字は2つあります。"," または " "( " および " のパスにつながる)です。問題では "," はマッチを完成させる最短のパスを導くので選択され、 " " は3文字長いパスを導くので選択されます。

すべての正規表現が100%の評価を得られるとは限りません。記憶力の悪い学生のための表現を追加したとします。

 are white(,| and) red

60%の評価と を忘れたことについてのフィードバック。あなたは、ヒントを使って学生を回答に導くことを望まないかもしれません。

  are white, red

もし彼が

  are white, oh I forgot the other colors.

Hint grade border はこれを制御します。評定がHint grade border以上の正規表現のみが部分一致とヒントに使用されます。Hint grade borderを1に設定すると、評定100%の正規表現のみがヒントに使用され、0,5に設定すると、評定50%~100%の正規表現がヒントに使用され、0%~49%の正規表現は使用されません。ヒントに使用されない正規表現は学生の解答と完全にマッチした場合のみ機能します。