
【Python】クイズを作問するアルゴリズムを考えたよ【試作版】
唯坂 優(たださか ゆう)です。
皆さん、クイズ好きですか?
あなたはどうか知りませんけど、世間の人ってみんなクイズ好きなんですよ。
TVをザッピングしてみてください。絶対どっかしらの局でクイズやってますから。
…しかしながら。
こんなペースでクイズを消費しまくっていたら、
そのうち問題が枯渇するのでは…?
想像してみてください。
ありとあらゆるクイズがベタ問と成り果てた、
知識の荒野であえぐクイズ亡者たちの姿を。
そんな未来を否定すべく、
クイズを自動生成するコードを書きましたのでお披露目いたします!
コード概観
import func
import wikipedia
import ast
import random
import re
wikipedia.set_lang("ja")
def quiz(word=False):
if not word:
_list=[]
for i in [v for k,v in eval(func.txtfile("word.txt")).items() if "名詞" in k]:
_list.extend(i)
word=random.choice(_list)
for i in wikipedia.search(word):
code_regex=re.compile('[!"#$%&\'\\\\()*+,-./:;<=>?@[\\]^_`{|}~「」〔〕“”〈〉『』【】&*・()$#@。、?!`+¥%]')
i2=code_regex.sub('',i)
if i2!=i:
continue
try:
wp=wikipedia.page(i)
break
except wikipedia.exceptions.DisambiguationError:
pass
quiz_list=wp.summary.split("。")
hint_a=quiz_list[0]
hint_b=[qi for qi in quiz_list if i not in qi and len(qi)>0]
if len(hint_b)!=0:
hint_b=random.choice(hint_b)+"、"
inp=input(hint_b+hint_a.split("、")[-1]+"。これは何?\n")
if wikipedia.search(inp)[0]==wikipedia.search(i)[0]:
print("正解!答えは "+i)
else:
print("残念!答えは "+i)
まだバグも出ますが試作品ってことでご勘弁いただきたく。
現代の集合知たるWikipedia様から情報を引っ張ってきてクイズの定型文に突っ込む感じですね。
細かく解説するのめんどくさいので、
ここからはさっさと実際に生成された問題に挑戦してみたいと思います!
第一問
その真贋については江戸時代から議論の対象となっている、いわゆる「神代文字」の一種。これは何?
知らね〜!!
ちゃんと問題文のテイにはなってますけど、シンプルにこっちの知識が足りてない。
全然わかんないんで、適当に『ルーン文字』って答えておきます。
残念!答えは ヲシテ
結局知らね〜〜!!
聞いたこともないぞそんな文字…
なんか『ムー』的な話に興味ある人はチェックしてみては。(脱線)
第二問
他人を呼ぶ時に使うと敬う意味になり、自身を呼ぶ時に使うとへりくだる意味になる、老人を親しみ敬って呼ぶ語。これは何?
待って。
これ下手するとめちゃくちゃ失礼になっちゃうやつだ。
いろんな言葉が過りますけどことごとく失礼な気しかしない。
無難に『ご老体』とでもしておきますか。
残念!答えは 翁
…翁ってそうなんだ。
『翁』なんて言葉、竹取物語でしか聞いたことないぞ。
そんな細かいニュアンス知らんがな。
第三問
スリーサイズB84cm-W61cm-H89cm、韓国の女優。これは何?
知らんがな!!!!!!!!
Wikipediaにスリーサイズを載せるな。
仮にコレで当てたとしたら僕もナニモンなんだよ。
韓国の女優で知ってるの一人しかいないし、『チェジウ』でいいか。
残念!答えは スエ
…知らんがなって言いにくい!!!
ぶっちゃけ聞いたこともない…韓国女優好きの方、読んでたらホントすみません。
っていうかスエさんに一番すみません。
第四問
1961年にパリ地域圏として作られたものが1972年に「イル=ド=フランス」に改名された、フランスの首都パリを中心とした地域圏。これは何?
知らんけど、クイズ王とかなら即答できそうな雰囲気がすごい。
東○王とかで出てても違和感ない感じだ。かなり満足!
けどシンプルにわからんので、解答は『エッフェル』で。
残念!答えは イル=ド=フランス地域圏
…やられたッッ!!!!
たまにある、「まんまやないかい問題」!!!
第五問
日本作詩家協会副会長、放送作家である。これは何?
情報量が少なすぎるッ…!
とはいえ、「日本作詩家協会副会長」って肩書きがあれば一意に定まる…のか?
設計上、情報の抜き出しはほぼランダムなので
物によっちゃ解答不可能みたいな問題文も出かねないですが。
一応の答えは作詞家でパッと思いついた『滝廉太郎』で。
残念!答えは 吉岡治
人物が答えになると「知らんがな」ツッコミが使いにくいな!
第六問
川上 アキラ(かわかみ アキラ、1974年9月10日 - )は、日本の芸能事務所スターダストプロモーションの執行役員、プロデューサー、プロデューサー。これは何?
じゃあ川上アキラじゃねぇか!!!!!
たまにこのバグ出るんですよね。
一応解説しますと、
hint_b=[qi for qi in quiz_list if i not in qi and len(qi)>0]
ここで解答となる文字列を含んでる文章は問題文として採用しないように弾いてるはずなんですが、
人名がタイトルの記事だと本文中にその人の名前がスペース区切りで苗字と下の名前に分けられてるパターンがちょいちょいあるんですよね。
そうなっちゃうと、同じ文字列だと認識できずに問題文が語るに落ちちゃう今回のようなバグが発生するわけです。まぁ伸びしろですわな!
もちろん解答は『川上アキラ』です。
正解!答えは 川上アキラ
やったぁぁぁぁぁぁぁぁぁ!!!!!!(大ヤラセ)
正解をもぎ取れて溜飲も下がりましたので今回はこの辺で。
またちょいちょい改良を加えて精度を高めていきたいですね。
僕ばっかり楽しんでてもアレなんで、
せっかくここまで読んでくれた方のために、このコードで生成した問題をいくつか追加で掲載しておきます。
※下記の問題は全て本記事内で紹介したコードによって自動生成されたものであり、出力をそのままペーストしたので複数解や誤った解答が含まれている可能性があります。予めご了承ください。
Q1
かつては「侵分」とも呼んだが、現在では一般的ではない、通常対局終盤に打たれる地の境界に関する着手のこと。これは何?
Q2
日本最初の本格的水族館で、当時東洋一の水族館といわれた、大阪府堺市大浜公園にかつて存在した水族館である。これは何?
Q3
ドイツ・ニーダーザクセン州・ホルツミンデンに本拠を置き、世界約40カ国に拠点を持つ、食品成分などを取り扱う化学品メーカー。これは何?
Q4
指原莉乃の冠番組、2015年10月15日から2016年9月15日まで毎週木曜日0:25 - 0:55(水曜日深夜)にフジテレビ系列で放送されていたバラエティ番組。これは何?
Q5
上映時間は99分、1997年4月19日に公開されたクレヨンしんちゃんの劇場映画版シリーズ第5作目(映画化5周年記念作品)。これは何?
Q6
サン人とともにアフリカの最古の住民であると考えられており、最も古くに分岐したY染色体ハプログループA系統が高頻度に見られる、カラハリ砂漠などに居住している民族である。これは何?
Q7
面積約857km2の78以上の環礁からなり、世界で最も環礁が多い地域である、南太平洋にあるフランス領ポリネシアに属する諸島である。これは何?
Q8
台湾にも出店しており、台湾での店名表記は「虎之穴」、同人誌を中心とした漫画関連商品などを通信販売および店頭販売する同人ショップ。これは何?
Q9
1990年3月から1991年3月まで日本テレビ他で放送、サンライズ制作による日本のテレビアニメ。これは何?
Q10
日本統治時代(1905年 – 1945年)の泊居町(とまりおるちょう)に当たる、サハリン南部の西海岸に面した都市。これは何?
全ての正解は↓下記↓
Q1:答えは ヨセ
Q2:答えは 堺水族館
Q3:答えは シムライズ
Q4:答えは 指原カイワイズ
Q5:答えは クレヨンしんちゃん 暗黒タマタマ大追跡
Q6:答えは コイコイ人
Q7:答えは トゥアモトゥ諸島
Q8:答えは コミックとらのあな
Q9:答えは 魔神英雄伝ワタル2
Q10:答えは トマリ
お楽しみいただけましたでしょうか。
それではまた次回!