Hasil Karya Siswa | Kursus Python Django | Membuat DB Quiz Interaktif Menggunakan Django Dan Library SPARQL Wrapper
## Proses menghasilkan quiz
- Ketika user melakukan konfirmasi dengan menekan tombol “add quiz”, maka request tersebut akan di-handle oleh method add_quiz yang berada di file app/admin/routes.py
- Request yang diterima oleh method tersebut adalah request jenis post. Parameter yang dikirimkan yaitu name, topic, deadline (date), max attempt dan lang. data parameter akan dibuatkan sebuah entry data baru quiz di database dengan model Quiz
- Selanjutnya proses pembuatan sebuah pertanyaan akan ditangani oleh object dari class Article yang source codenya berada di app/quiz_generator
- Proses instansiasi object Article akan melakukan proses pengambilan data abstrak dengan bantuan SPARQLWrapper. Yang dijadikan acuan dalam pengambilan data abstrak yaitu parameter ‘topic’
- Kemudian pada pemanggilan proses generate_questions_for, terdapat proses untuk melakukan cleaning word dari berbagai simbol yang tidak dibutuhkan serta membagi data abstrak menjadi beberapa kalimat yang disimpan di array.
- Per kalimatnya akan didapatkan sebuah pertanyaan dengan memanggil method get_question_data dan create_question
- Pada method get_question_data, hal yang dilakukan pertama kali adalah melakukan tokenisasi. Setelah ditoken, setiap token kata akan diberikan pos tag. Kemudian, jika ada token kata yang membentuk struktur pos tag tertentu, maka gabungan token kata tersebut akan diidentifikasi sebagai Number atau Location. Sebagai contoh: jika ada sebuah kombinasi token yang sesuai dengan pola <$>*<CD>+<NN>*, maka kombinasi token tersebut dikategorikan sebagai Number. Jika polanya <IN><NNP>+<,|IN><NNP>+, maka diidentifikasi sebagai Location
- Kalimat yang memiliki kedua pola tersebut akan ditambahkan di array sementara. Kemudian dari semua kalimat yang telah ditambahkan diambil 10 pertanyaan random yang memiliki tag Number dan Location
- Proses pembuatan opsi jawaban dari pertanyaan dilakukan pada method get_question_set di file app/quiz_generator/article. Pada method ini, kata yang merupakan sebuah jawaban akan digantikan dengan tanda ‘___’ terlebih dahulu. Kemudian dilakukan proses pembuatan 3 jawaban lain yang salah. Tag number akan menggunakan method get_wrong_answer sedangkan tag location akan menggunakan method get_wrong locations.
- Pada get_wrong_answers, untuk mendapatkan angka jawaban yang salah dilakukan dengan mengambil sampel nilai random dengan rentang antara (angka – 50) hingga angka (angka + 30). jika sampel ternyata kebetulan sama dengan jawaban salah sebelumnya atau sama dengan jawaban yang benar. maka proses tersebut akan diulangi sebanyak 20 kali hingga mendapatkan 3 jawaban salah yang berbeda.
- Pada get_wrong_locations, untuk mendapatkan jawaban lokasi yang salah dilakukan dengan melakukan pemanggilan API nearbyCities dari google map dengan query jawaban lokasi yang benar. hasil kembalian API Google map terdiri dari daftar kota yang terdekat denga jawaban yang benar. Jika tidak ada hasil yang ditemukan, maka jawaban salah akan diambil dari daftar kota yang telah didefinisikan sebelumnya.
- Setelah kalimat pertanyaan, jawaban benar dan jawaban salah telah berhasil digenerate, data tersebut akan disimpan di database.
-
Pada beberapa kasus, proses pembuatan quiz tidak dapat dilakukan. hal ini umumnya dikarenakan tidak dideteksi tag jenis number maupun location pada abstract yang didapatkan dari SPARQLWrapper.
-
Kode join quiz secara acak
-
Proses ini dilakukan pada file models.py tepatnya pada method set_enroll_code. Enroll code yang dihasilkan memiliki format string yaitu Q + karakter_awal_dari_field_nama + karakter_awal_dari_field_topik + nilai_id_yang sudah diencode ke dalam b32encode (karakter = dibuang dan diambil karakter angka saja)
-
Rancangan database
-
Rancangan database terdapat pada file models.py dengan detail sebagai berikut
-
– User memiliki relasi terhadap Role. Seorang user bisa memiliki role lebih dari satu (user_biasa, user_admin)
-
– User memiliki relasi terhadap Quiz Many to Many. Karena sifatnya Many to Many maka terbentuk sebuah tabel dengan nama StudentEnroll antara User dengan Quiz (Quiz dapat diambil banyak user dan user dapat mengambil berbagai macam quiz)
-
– Setiap quiz memiliki relasi terhadap question, satu quiz dapat memiliki banyak question (one to many)