Koreksi soal pilihan ganda menggunakan PHP udah sering kan, dan lumayan tidak terlalu sulit. Karena soal pilihan ganda memang sudah pasti jawabannya (kalo ga A, B, C, D atau E). Tapi bagaimana dengan essay?
Memang tidak ada perhitungan yang pasti dengan soal essay, banyak metode dan cara untuk otomatisasi koreksi jawaban essay. Saya ingin membagi script PHP untuk penilaian soal essay. Saya akui script saya ini belum sempurna, tapi lumayan akurat lah. O iya, saya menggunakan metode parsing dan keyword. Artinya string jawaban dan kunci jawaban essay di bagi-bagi dalam beberapa kata dan dimasukkan ke array lalu dicocokkan. Langsung saja ya..
function koreksiEssay($words,$wer,$max){ //$words -> untuk keyword jawaban dari guru; $wer -> jawaban dari siswa; $max -> bobot soal
/*
Script ini ditulis oleh Ibonk
url : http://buatkamusaja.wordpress.com/
laporan kesalahan dan perbaikan kirim email ke i-bonk@hotmail.com
*/
$j = 0;
$key = explode(",",$words);
$ans = explode(" ",$wer);
foreach($ans as $jaw){
$n = strlen($jaw);
$sub = substr($jaw,$n-1,$n);
if(($sub == ',') or ($sub == '.') or ($sub == '!') or ($sub == '?')){
$kata['ans'][] = substr($jaw,0,$n-1);
}else{
$kata['ans'][] = $jaw;
}
}
foreach($key as $kunci){
$n = strlen($kunci);
$sub = substr($jaw,$n-1,$n);
if(($sub == ',') or ($sub == '.') or ($sub == '!') or ($sub == '?')){
$kata['key'][] = substr($kunci,0,$n-1);
}else{
$kata['key'][] = $kunci;
}
}
foreach($kata['ans'] as $tempo){
foreach($kata['key'] as $rary){
if(strtolower($tempo) == strtolower($rary)){
$j++; //hitung kecocokkan kata kunci dan jawaban siswa
}
}
}
if($j >= count($kata['key'])){
$j = count($kata['key']);
$nilai = $max;
}else{
$nilai = $max * ($j / count($kata['key'])); //menentukan nilai akhir
}
return (int)$nilai;
}
Penjelasan script
<pre>$key = explode(",",$words);
$ans = explode(" ",$wer);
</pre>
Membagi-bagi jawaban dan kunci jawaban dan memasukkannya ke dalam array.
<pre>foreach($ans as $jaw){
$n = strlen($jaw);
$sub = substr($jaw,$n-1,$n);
if(($sub == ',') or ($sub == '.') or ($sub == '!') or ($sub == '?')){
$kata['ans'][] = substr($jaw,0,$n-1);
}else{
$kata['ans'][] = $jaw;
}
}
foreach($key as $kunci){
$n = strlen($kunci);
$sub = substr($jaw,$n-1,$n);
if(($sub == ',') or ($sub == '.') or ($sub == '!') or ($sub == '?')){
$kata['key'][] = substr($kunci,0,$n-1);
}else{
$kata['key'][] = $kunci;
}
}</pre>
Menjamin kata-kata dalam array dari jawaban dan kunci jawaban bebas dari beberapa tanda baca seperti titik (.), koma (,), tanda seru (!), dan tanda tanya (?). Setelah itu dimasukan ke dalam array yang berbeda.
<pre>foreach($kata['ans'] as $tempo){
foreach($kata['key'] as $rary){
if(strtolower($tempo) == strtolower($rary)){
$j++; //hitung kecocokkan kata kunci dan jawaban siswa
}
}
}
if($j >= count($kata['key'])){
$j = count($kata['key']);
$nilai = $max;
}else{
$nilai = $max * ($j / count($kata['key'])); //menentukan nilai akhir
}
return (int)$nilai;</pre>
Menghitung nilai akhirnya dengan nilai akhir bertipe integer. Mengapa integer? Biar gampang menhitung nilai keseluruhan dari beberapa soal.
O iya, Terdapat batasan-batasan yang saya utarakan untuk script di atas, antara lain keyword kunci jawaban berupa kata-kata yang dipisahkan oleh koma (,) dan tidak boleh ada kata yang sama.
Untuk lebih jelasnya silahkan download source code -nya.
Kritik dan sarannya saya sangat harapkan.. Terima kasih..


14 komentar
Pengumpan komentar untuk artikel ini
19 Juni 2011 pada 16:08
iip
Mantap Bonk,,, akurat 100% bonk???
21 Juni 2011 pada 06:34
Ibonk
can akurat 100% sih Ip..
16 Juli 2011 pada 11:49
Riny
KK,,tanya donk..ini fungsinya ditaruh dimana..y..maaf sy krang ngerti mhn pnjelasannya..lg
18 Juli 2011 pada 06:39
Ibonk
Yang pasti ditaruh di file php.. ^_^
Itukan fungction jadi pemanggilannya sama pemanggilan function biasa yang parameternya jawaban, kunci jawaban, sama skor (kalau jawaban benar)..
contoh :
18 Juli 2011 pada 07:59
Riny
iahh,,kk..qlo skrip sya kyak gini untuk soalnya..
No
Soal Essay
yang ini cuma tampilin doang
nahh untuk ngecek jawabannya..sya msh blank..kk..mhn bantuannya..jdi,jawaban.php blum sy buat…terima kasih sebelumnya ^.^
18 Juli 2011 pada 08:02
Riny
contoh skrip soal sya sperti ini
$link = mysql_connect(“localhost”,”root”,”");
if ($link) {
mysql_selectdb(“test”,$link);
//kirim query nya
$query = “SELECT * FROM kuis LIMIT 5″;
$result = mysql_query($query);
//tampilin hasilnya
?>
No
Soal Essay
<?
18 Juli 2011 pada 08:04
Riny
}
?>
trus jawaban.php..blm sya buat kk..mhn bantuannya terima kasih
18 Juli 2011 pada 08:06
Riny
}
?>
8 September 2011 pada 04:35
Zulkifli Muhtar
googling dan mendarat di sini, eh, punya ibonk ternyata
pantas alamatnya asa kenal…
dicoba ya…
9 September 2011 pada 15:30
Ibonk
Silahkan.. Script yg sy buat waktu lg iseng.. Semoga bermanfaat..
18 Oktober 2011 pada 16:53
article-blogging
mampir di sini bro,
kunjungi balik article-blogging
11 Desember 2011 pada 07:04
Dayat
Mt siang mas,, msalah saya sama dengan Riny,,
saya bner2 masih newbie bljar php,
kalo berkenan, mohon kirim contoh program jadi,, yang simple aja.
ni email saya: areklamongan.kampoeng@gmail.com
mkasih…
11 Desember 2011 pada 10:55
Dayat
mas kog hasilnya kurang valid.
ex :’dilarang parkir’ sama ‘silahkan parkir’ tetep diberi nilai 1/2.
pdahal seharusnya 0.
apa pemanggilan function saya yang salah, atau mank programnya gitu ??
15 Desember 2011 pada 20:36
Ibonk
Nah ini mas, jadi program yang saya tuliskan ini untuk soal essay yang terstruktur. Jadi belum bisa mengidentifikasi kosa kata, atau karakter kalimat (positif/negatif). Insya Allah saya juga sedang mengembangkan sistem yang lebih kompleks lagi untuk masalah ini. Terima kasih ya.. Best Regards:)