Kilat! Konversi Word ke format GIFT dengan Notepad++

Proses migrasi bank soal dari dokumen Microsoft Word ke dalam Learning Management System (LMS) Moodle seringkali membutuhkan waktu yang signifikan, terutama jika dilakukan secara manual. Format Moodle yang paling fleksibel dan umum digunakan untuk import soal adalah GIFT format.

Artikel ini akan membedah penggunaan sekumpulan perintah Regular Expression (Regex) pada aplikasi teks editor Notepad++ yang dirancang untuk mengotomatisasi perubahan soal dari teks biasa (hasil salinan Word) menjadi struktur baku Moodle GIFT.

Daftar Isi

Kondisi Awal

  1. Setiap soal memiliki nomor soal
  2. Berikan tanda di kunci jawaban dengan salah satu karakter *=&@#$^+

Contoh soal

1. Berapa 1+1
a. *2
b. 11
c. 1
d. 3
e. 0
2. Arah jam setengah dua dari utara adalah
a. barat daya
b. tenggara
c. barat laut
d. =timur laut
e. selatan

3. Kombinasi antara warna merah dan biru akan menghasilkan warna sekunder
A. =Ungu
B. Hijau
C. Jingga
D. Kuning muda
E. Hitam

Konversi Word ke format GIFT

Salin semua soal ke dalam notepad++.

Tekan ctrl+h atau find and replace. 
Pada bagian Search Mode, pilih Regular expression.
Hilangkan centang pada matches newline (unchecked).
Lakukan langkah di bawah ini secara urut.

find: 
[ \t]+|(\r?\n[ \t]+\r?\n)|(\r?\n){3,}
replace: 
(?1\r\n\r\n:(?2\r\n\r\n: ))

find: 
(?<![\r\n])\r?\n(\d+\.)
replace: 
\r\n\r\n$1

find: 
\r?\n\r?\n(\d+\.)
replace: 
\r\n}\r\n\r\n::$1::

find: 
\r?\n[Aa]\.\s*[*=&@#$^+]?(.*)
replace: 
(?1\r\n{\r\n=$2:\r\n{\r\n~$2)

find: 
\r?\n[B-Eb-e]\.\s*[*=&@#$^+]?(.*)
replace: 
(?1\r\n=$2:\r\n~$2)

find:
(?:\G(?!^)|::\d+\.::).*?\K\r?\n(?!\s*\{)
replace:
( )

Bedah Perintah Regex Tahap demi Tahap

Proses transformasi ini dibagi menjadi enam tahap eksekusi. Berikut adalah penjelasan teknis untuk setiap perintah yang dijalankan.

Tahap 1: Pembersihan Spasi dan Baris Kosong (Normalisasi)

Langkah pertama bertujuan untuk membersihkan format teks dari spasi berlebih, tabulasi, dan jeda baris kosong yang tidak beraturan akibat proses penyalinan dari Microsoft Word.

  • Find: [ \t]+|(\r?\n[ \t]+\r?\n)|(\r?\n){3,}
  • Replace: (?1\r\n\r\n:(?2\r\n\r\n: ))

Makna Perintah:

  • [ \t]+: Mencari satu atau lebih karakter spasi atau tab.
  • (\r?\n[ \t]+\r?\n): Ini adalah Grup 1. Mencari baris kosong yang hanya berisi spasi atau tab.
  • (\r?\n){3,}: Ini adalah Grup 2. Mencari tiga atau lebih jeda baris (Enter) yang terjadi secara berturut-turut.
  • (?1...:(?2...: ...)): Ini merupakan perintah conditional replacement (penggantian bersyarat).
    • Jika Grup 1 ditemukan, gantikan dengan dua jeda baris bersih (\r\n\r\n).
    • Jika Grup 2 ditemukan, gantikan juga dengan dua jeda baris (\r\n\r\n).
    • Jika keduanya tidak ditemukan (berarti hanya spasi/tab biasa yang ditemukan), maka gantikan dengan satu spasi tunggal ( ).

Tahap 2: Standardisasi Jarak Antar Soal

Perintah ini memastikan bahwa setiap nomor soal diawali pada baris atau paragraf yang baru, mencegah nomor soal menempel pada teks sebelumnya.

  • Find: (?<![\r\n])\r?\n(\d+\.)
  • Replace: \r\n\r\n$1

Makna Perintah:

  • (?<![\r\n]): Negative lookbehind. Memastikan karakter sebelum pola ini bukanlah sebuah jeda baris (Enter).
  • \r?\n: Mencari karakter jeda baris.
  • (\d+\.): Grup 1. Mencari satu atau lebih angka yang diikuti oleh tanda titik (misal: “1.”, “2.”).
  • \r\n\r\n$1: Mengganti temuan tersebut dengan dua jeda baris (memberikan jarak), lalu memanggil kembali angka soal dan titiknya ($1).

Tahap 3: Pembuatan Format Judul Soal GIFT

Format GIFT membutuhkan struktur penamaan soal yang diapit oleh titik ganda (misal: ::1.::). Langkah ini juga menyiapkan penutup kurung kurawal } untuk soal sebelumnya.

  • Find: \r?\n\r?\n(\d+\.)
  • Replace: \r\n}\r\n\r\n::$1::

Makna Perintah:

  • \r?\n\r?\n: Mencari dua jeda baris kosong.
  • (\d+\.): Grup 1. Mencari nomor soal (angka beserta titik).
  • \r\n}\r\n\r\n::$1::: Menyisipkan kurung kurawal tutup } untuk menutup opsi jawaban pada soal nomor sebelumnya, memberikan jarak, lalu membungkus nomor soal (dari $1) dengan titik ganda :: sebagai judul soal. (Catatan: Kurung kurawal tutup yang muncul di baris paling atas sebelum soal nomor 1 dapat dihapus secara manual di akhir proses).

Tahap 4: Format Opsi A dan Pembuka Blok Jawaban

Dalam format GIFT, seluruh pilihan ganda harus berada di dalam tanda kurung kurawal {. Jawaban benar ditandai dengan tanda sama dengan =, sedangkan jawaban salah dengan tanda tilde ~.

  • Find: \r?\n[Aa]\.\s*[*=&@#$^+]?(.*)
  • Replace: (?1\r\n{\r\n=$2:\r\n{\r\n~$2)

Makna Perintah:

  • [Aa]\.\s*: Mencari huruf A atau a yang diikuti tanda titik dan spasi opsional.
  • [*=&@#$^+]?: Grup 1. Mencari tanda salah satu karakter tersebut (opsional). Umumnya dosen/guru menandai jawaban yang benar dengan lambang ini di master soal.
  • (.*): Grup 2. Menangkap seluruh sisa teks dari pilihan jawaban tersebut.
  • (?1...:... ): Penggantian bersyarat.
    • Jika ada tanda = (Grup 1), maka cetak baris baru, buka kurung kurawal {, baris baru lagi, lalu tanda = beserta teks jawabannya (=$2). Ini menandakan Opsi A adalah jawaban benar.
    • Jika tidak ada tanda =, maka cetak kurung kurawal {, baris baru, dan tanda ~ beserta teks jawabannya (~$2). Ini menandakan Opsi A adalah jawaban salah.

Tahap 5: Format Opsi Jawaban Lanjutan (B hingga E)

Langkah terakhir mengeksekusi pilihan ganda sisanya tanpa perlu membuka kurung kurawal baru.

  • Find: \r?\n[B-Eb-e]\.\s*[*=&@#$^+]?(.*)
  • Replace: (?1\r\n=$2:\r\n~$2)

Makna Perintah:

  • [B-Eb-e]\.\s*: Mencari huruf B, C, D, atau E (besar atau kecil) yang diikuti tanda titik dan spasi.
  • [*=&@#$^+]?: Grup 1. Menangkap tanda salah satu karakter tersebut jika itu adalah kunci jawaban yang benar.
  • (.*): Grup 2. Menangkap teks pilihan jawaban.
  • (?1\r\n=$2:\r\n~$2): Penggantian bersyarat yang serupa dengan Tahap 4. Bedanya, di sini tidak ada penambahan tanda kurung kurawal buka {. Jika Grup 1 ditemukan, beri awalan =, jika tidak beri awalan ~.

Tahap 6: Menggabungkan Teks Soal Menjadi Satu Baris

Perintah ini memastikan seluruh baris teks soal yang terpisah di antara nomor soal, misalnya ::1:: dan awal pilihan jawaban { tergabung menjadi satu baris utuh, tanpa mengganggu posisi tanda { di bawahnya.

Find: (?:\G(?!^)|::\d+\.::).*?\K\r?\n(?!\s*\{)

Replace: ( )

Makna Perintah:

  • (?:\G(?!^)|::\d+\.::): Memastikan pencarian dimulai dari nomor soal (seperti ::1.::) atau melanjutkan (continuous match) dari posisi pergantian baris sebelumnya.
  • .*?: Mencari karakter/teks apa saja di dalam soal secara bertahap.
  • \K: Reset pencarian. Memerintahkan Notepad++ untuk memproses/menghapus bagian setelah tanda ini saja, sehingga teks soal yang sudah dilewati tidak akan hilang.
  • \r?\n: Mencari karakter jeda baris (Enter/newline).
  • (?!\s*\{): Negative lookahead. Memastikan jeda baris yang akan dihapus bukan jeda baris yang berada tepat di atas tanda {.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.