見出し画像

Suggest Tool

2022年3月2日に『ジャンル配分を考慮したクイズ問題の出題順アルゴリズム』という論考をBOOTHで公開しました。

ここでは、過去の出題ジャンルの履歴をもとに、最近の履歴にあるものはそれに応じて次の問題の出題ジャンルの選択確率を下げる、という方針で、似たジャンルの問題が連続しすぎないような出題順アルゴリズムを提案しました。

一応この論考の中では擬似コードの形でアルゴリズムの詳細を記述してあるので、ある程度プログラミングの知識があれば自力で実装することができるようになっていると思いますが、「ある程度プログラミングの知識がある」人だけのものにしておくのはもったいないので、実装したものを公開します。

上のリンク先はGoogleスプレッドシートになっていて、Google Apps Scriptで出題順サジェストのアルゴリズムが実装されたものが付属しています。スプレッドシートの権限は「閲覧のみ」になっているので、自分のドライブにコピーして使ってください。


使い方は、メニューバーの「Suggest Tool」から「次の行をサジェスト」または「複数行をサジェスト」を選択する形です。(もし「Suggest Tool」がメニューバーに表示されていなかったら、ページを開き直してください。)

「次の行をサジェスト」を選んだ場合、B列の次の行(B13)にサジェスト結果が追加されます。

「複数行サジェスト」を選んだ場合、「繰り返し回数を入力してください」というプロンプトが出るので、回数を数字で入力してください。

その後、OKを押すと、B列の次の行から指定した回数分のサジェスト結果が出ます。


C〜E列に「関連1」などの列を設定していますが、ここに関連する別のジャンル区分を入れれば、それもサジェストの際の履歴判定に使用するようにしています。たとえば「29 地理・歴史・社会/294アフリカ」がサジェストされた時、「2 歴史/240 アフリカ史」も関連するので省きたいと思ったら、C列に「2-240」と入れます。

こうすると、次に「2 歴史」が選ばれる時に、「240 アフリカ史」が選ばれにくくなります。


スプレッドシートに入っているサンプルの分類体系は、日本十進分類(NDC)をベースに作ったものですが、同様の形式で自前の分類体系でも使えるようになっています。

「分類1」と「分類2」のシートに、サンプルで入れているのと同様の形式で分類体系の内容を記述すれば、それを元にしたサジェストが動くはずです。

サンプルでは2段階の分類体系を使っていますが、おそらく3段階以上でも動かそうと思えば動かせると思います。その場合は、分類2と同様の構成でシートを作った後、Apps Scriptのsettings.gsでCLASSIFICATIONSの配列に分類2と同様の要素を追加してください。


付属しているGoogle Apps Scriptのコードは、自由に改変して使ってもらって大丈夫です。他の箇所に転載する場合は、この記事のリンクを合わせて表示してもらえると嬉しいです。

不具合の報告や、使い方についての質問などはTwitter(@nosei_quiz)にお願いします。

この記事が気に入ったらサポートをしてみませんか?