受講生の解答の正規表現に対して「正答の可能性が高い or 誤答である」を判定します。
- で書かれています。
- 丸岡 章. 計算理論とオートマトン言語理論 [第2版]. サイエンス社, 2021年.の記法を文字列として書けば使えます。
- 度々出てくるpyCREAとは、Checking Regular Expression Answers in Pythonの略です。
- あくまで変数lengthで指定した長さ以下での判定になります。
- 変数lengthの値を大きくすると、全探索をしているために時間がかかります。
- 正規表現を指定する箇所に無駄なスペースがあると正しく判定できなくなります。
- ❌:
ans = "(b(a+b))*a((a+b)a) *"
- 上記のように無駄なスペースがあると正しく判定できません。
- 上記だと最後のアスタリスクの前に半角スペースが無駄に存在しています。
- ⭕️:
ans = "(b(a+b))*a((a+b)a)*"
- 上記のように無駄なスペースがないものにしてください。
- ❌:
1個ずつ判定する場合の実行方法 (例: example1.py)
- 以下のようなexample1.pyを作成し、pyCREA.pyを同じディレクトリに置きます。
python example1.py
で実行します。
import pyCREA
# 解答を判定したい問題についての準備
correct = "(0+1)*11" # 正答の正規表現 (0+1)*11
alphabet = ["0", "1"] # 正規表現を構成するアルファベット Σ={0,1}
length = 10 # この長さ以下の系列を判定する
# 受講生の解答の正規表現 (0+1+00+11+01+10)*111* に対する判定
ans = "(0+1+00+11+01+10)*111*" # 受講生の解答の正規表現
pyCREA.check(correct, ans, alphabet, length) # 判定
# 受講生の解答の正規表現 0(0+1)*11 に対する判定
ans = "0(0+1)*11" # 受講生の解答の正規表現
pyCREA.check(correct, ans, alphabet, length) # 判定
# 受講生の解答の正規表現 ε に対する判定
ans = "ε" # 受講生の解答の正規表現
pyCREA.check(correct, ans, alphabet, length) # 判定
# 受講生の解答の正規表現 (ε+0+1)*
ans = "(ε+0+1)*" # 受講生の解答の正規表現
pyCREA.check(correct, ans, alphabet, length) # 判定
複数個まとめて判定する場合の実行方法 (例: example2.py + example2_input.txt)
- 以下のようなexample2.pyを作成し、pyCREA.pyを同じディレクトリに置きます。
- 1行目に正答の正規表現、2行目から下に学生の解答の正規表現を書いたexample2_input.txtを作成します。
python example2.py
で実行します。
import pyCREA
# 1行目に正答,2行目から下に受講生の解答を格納したファイルに対して判定を行う
input_file = "example_input.txt" # 1行目に正答,2行目から下に受講生の解答を格納したファイル
alphabet = ["0", "1"] # 正規表現を構成するアルファベット Σ={0,1}
length = 10 # この長さ以下の系列を判定する
pyCREA.check_multiple(input_file, alphabet, length) # 判定
example1.pyを実行した結果は以下のようになります。(example2.pyでも同様です。)
L3on@MacBook:pyCREA$ python example1.py
(0+1+00+11+01+10)*111* は正しい可能性が高いです
アルファベットΣ={0,1}から構成される長さ10以下の全ての系列を調べました
0(0+1)*11 は誤答です
受理できるはずの系列が受理されませんでした: 11
ε は誤答です
受理できるはずの系列が受理されませんでした: 11
受理できないはずの系列が受理されてしまいました: ε
(ε+0+1)* は誤答です
受理できないはずの系列が受理されてしまいました: ε
変数 | 役割 |
---|---|
correct | 正答の正規表現 |
alphabet | 正規表現を構成するアルファベット |
length | 全探索する系列の最大の長さ(この長さ以下の系列全てを全探索します) |
ans | 受講生の解答の正規表現 |
- Python 3.8.3
- pyCREAを作成した環境は上記ですが、特殊な記法やパッケージは使用していないため、上記以外のバージョンであっても一般的なPython環境があれば動くように思います。
pyCREAを作成した動機は、TA(Teaching Assistant)の業務の1つである答案の採点時に、 等価な正規表現が大量にあることで正答と誤答の判別が非常に大変だったことです。
そのため、かなり限定的な使い方を目的としたプログラムになっています。
よって、今後の発展はあまり無いように思います。
(今後については、書き方がダサい点などに対処することはあるかもしれません。)
もし、開発にご協力いただけるようでしたら、以下の方法に従っていただけますと幸いです。
- 本リポジトリに対する開発:個別のブランチを切って作業をお願いします。
- 実装した新規機能の反映:mainブランチに対してPull Request(PR)してください。
- バグ報告,新規機能の要望・提案など:本リポジトリのIssuesからお願いします。