Meng-custom Perintah di Terminal Ubuntu

Beberapa waktu lalu saya mendapat kesempatan untuk ikut Grand Final Kode Indonesia di Jakarta. Kode Indonesia adalah kontes pemrograman yang diadakan oleh Kalibrr.

Berbeda dengan kontes pemrograman pada umumnya, pada kontes ini panitia tidak menyediakan komputer atau laptop untuk para finalis. Jadi para finalis dipersilakan untuk menggunakan komputernya masing-masing di Grand Final. Sebenarnya ini peraturan yang aneh karena ini membuat setiap peserta bisa jadi punya “starting-point” yang berbeda kan? misal kualitas komputer, file-file yang tersedia, dsb.

Tapi ya sudah, karena ini aturan panitia sendiri maka saya juga mencoba menyiapkan laptop saya. Hal sederhana yang saya pikirkan adalah:

Coba buat perintah sederhana untuk meng-compile sekaligus menjalankan program C++!

Tujuannya tentu untuk mempersingkat proses compile. Karena saya sendiri tidak menggunakan IDE yang bisa meng-compile program, maka cara saya biasanya untuk meng-compile file C++ adalah dengan menjalankan perintah (commands):

Lalu setelah di-compile, dijalankan dengan perintah:

Nah, misi sederhana saya adalah menyederhanakan kedua perintah di atas menjadi sebuah perintah sederhana. Begini langkah-langkahnya:

  1. Buat sebuah script file, misalnya kita beri nama customcpp.sh
  2. Pada baris pertama, tuliskan #!/bin/bash lalu tuliskan perintah yang ingin dijalankan di bawahnya seperti di bawah. Pada perintah di bawah CPPFILE adalah variabel yang menyimpan argumen yang akan diinputkan saat pemanggilan. Nantinya akan menerima nama file yang akan di-compile.
  3. Simpan file tersebut, lalu pindahkan ke /usr/local/bin, pemindahannya bisa menggnakan perintah di bawah. SCRIPTNAME adalah nama perintah yang akan dipanggil ketika script di atas di jalankan.
  4. Atur permission agar program bisa diakses

Dan selesai!

Setelah selesai, sekarang untuk mengcompile sekaligus menjalankan program C++, saya cukup mengetikkan di terminal perintah berikut:

ya.. setidaknya sedikit lebih cepat dari sebelumnya kan 😉

Sumber:

Parser Kalimat Sederhana untuk Bahasa Indonesia

Beberapa waktu lalu saya mendapat tugas kerja untuk membuat sebuah text summarizer (perangkum bacaan) menjadi sebuah kalimat sederhana. Istri saya yang lebih mendalami bidang NLP menyarankan untuk menggunakan teknik yang sederhana:

Temukan kalimat utama, dan jadikan kalimat tersebut sebagai rangkuman.

Saya setuju ide itu, selain tidak serumit jika mengunakan machine learning yang kompleks, rasanya cara itu sudah cukup cocok untuk kasus saya. Istri saya memberi tahu saya beberapa algoritma yang bisa digunakan dan sebuah peringatan bahwa bagian paling sulit adalah nanti bagaimana membuat parser kalimat (program yang dapat mengekstrak kalimat-kalimat yang menyusuk sebuah dokumen teks).

Saya buat parser ini menggunakan bahasa pemrograman Python, dengan bantuan beberapa package (re untuk regex, dsb.).

Split berdasar penanda akhir kalimat

Percobaan pertama yang saya lakukan adalah menggunakan regex untuk men-split data teks berdasarkan beberapa karakter yang biasa menjadi penanda akhir dari sebuah kalimat. Karakter pemisah yang saya gunakan awalanya aadalah tanda titik (“.”), tanda tanya (“?”), dan tanda seru (“!”) yang setelahnya terdapat sebuah spasi atau sudah di akhir dokumen.

Setelah coba dijalankan, saya menemukan beberapa fakta menarik. Pertama, seharusnya saya tidak perlu memisahkan berdasarkan tanda tanya dan tanda seru karena kedua tanda tersebut hanya muncul di kalimat langsung yang tidak perlu di split. Jadi berikutnya kita cukup split di tanda titik.

Kedua, asumsi saya menggunakan tambahan “sebuah spasi setelah karakter” ternyata benar-benar bermanfaat karena parser akhirnya tidak men-split tanda titik yang bukan akhir kalimat, misalnya 6.700 korban.

Kalimat langsung

“Roses are red. Violets are Blue,” said Hugo.

Dalam kasus saya, kalimat di dalam kalimat langsung tidak boleh dipisah. Untuk menghindari pemisahan, perlu dibuat aturan khusus (saya rasa ini bisa di-handle menggunakan regex). Ide saya sementara ini dengan membuat variabel untuk mengecek sebuah simbol pemisah ada di dalam double quote atau tidak, lalu jika tanda titik misalnya ada di antara double quote, maka kita beri “tanda” agar tidak di split.

“Tanda” agar tidak di-split

Untuk menandai sebuah simbol tidak boleh di split, saya sisipkan simbol yang unik (yang saya yakin tidak akan muncul di dokumen saya) sebelum dan setelah tanda titik. Saya gunakan simbol @#...@#.

“Roses are red@#.@# Violets are Blue,” said Hugo.

Mengatasi Singkatan

Ini adalah bagian yang juga sulit, misalnya ada kalimat:

Tadi malam saya bertemu H. Akbar M. dan drs. Rian. Kami adalah sahabat dekat dulunya.

Jika diperhatikan tanda titik setelah huruf “H” dan huruf “M”, bukanlah tanda akhir dari kalimat, begitu juga tanda titik setelah “drs”. Tanda titik yang digunakan untuk memisah kalimat adalah setelah kata “Rian”.

Awalnya saya berpikir untuk tidak mensplit tanda titik yang sebelumnya hanya satu huruf, tapi “drs” lebih dari satu huruf dan juga merupakan singkatan. Kita harus menemukan sebuah kata adalah singkatan atau bukan.

Deteksi singkatan

Pada projek ini ada dua aturan yang gunakan:

  1. Jika kata sebelum tanda titik hanya terdiri dari satu huruf, maka itu adalah singkatan. Contoh: “M.”, “H.”
  2. Jika tidak, maka cek terlebih dahulu di kamus singkatan (saya buat sendiri), jika ditemukan, maka kata tersebut singkatan. Contoh: “Prof.”, “Dr.”, “Hj.”, “dll.”, “Moch.”

Secara tidak langsung, aturan ini juga menangani singkatan panjang seperti “S.W.A.T.”. Setelah berhasil mendeteksi singkatan, dengan ide yang sama kita kasih “tanda” pada tanda titiknya, lalu split dengan fungsi regex seperti sebelumnya.

Hapus “tanda”

Setelah berhasil split kalimat, jangan lupa untuk menghilangkan simbol yang tadi kita gunakan sebagai “tanda”. Caranya bisa dengan manual seach atau dengan regex.

Program

Program bisa diakses di Google Colab berikut

Image from: https://museafrica.com

Menuliskan Huruf Arab di Latex

Catatan: Artikel ini khusus untuk pengguna template Latex MIPA UGM SKRIPSI

Jadi ketika saya menulis skripsi dan tesis beberapa waktu lalu saya perlu menuliskan beberapa huruf Arab di laporan saya. Saya menggunakan template Latex dari MIPA UGM (download di sini).

Template tersebut dibuat awalnya oleh Pak Drs. Pekik Nurwantoro, Ph.D. lalu dimodifikasi oleh teman saya, Yusuf Syaifudin. Dan saya modif lagi di repo github saya. Dan karena menggunakan template ini lah menulis huruf Arab jadi sedikit tricky dari biasanya.

Compiler

Problem pertama adalah selama ini saya meng-compile file Latex saya menggunakan perintah pdflatex yang ternyata bisa dibilang tidak support untuk menampilkan tulisan dengan huruf yang aneh-aneh (unicode). Karenanya salah satu opsi yang saya gunakan adalah pindah menggunakan xelatex.

Compiler ini sebenarnya tidak perlu diinstall lagi bagi pengguna texlive Ubuntu. Dan kalau di online editor, biasanya juga disediakan opsi untuk mengatur compiler yang digunakan.

Package

Masalah lain adalah template dari MIPA UGM sudah tertata rapi, ini membuatnya sulit untuk sekadar menambah pengaturan package agar bisa menuliskan huruf Arab tanpa merusak apapun. Saya sudah mencoba menggunakan babel atau polyglossia tetapi selalu berakhir compiler error 🙁

Lalu bagaimana solusinya? setelah beberapa kali mencoba solusi, saya temukan solusi yang menurut saya paling pas, berikut langkah-langkahnya:

1. Install XeTeX kalau anda belum memiliki xelatex. Di buntu bisa menggunakan perintah:

2. Download font yang menyediakan tampilan huruf Arab. Misalnya, yang saya gunakan adalah font Scheherazade.

3. Definisikan font tersebut ke dokumen kalian (di template MIPA UGM perinah ini dituliskan di ADDITIONAL_PACKAGE.tex):

4. Selanjutnya untuk setiap akan menuliskan huruf Arab, tinggal gunakan perintah \arabicfont:

5. Lalu untuk meng-compile, kita gunakan Xelatex, dengan perintah

6. Ketika proses compile selesai, maka akan muncul huruf Arab yang di posisi yang diinginkan. Tapi coba perhatikan, ada yang aneh dengan tulisan tersebut, yakni tulisan tidak dalam format RTL (right to left), atau tertulis dari kanan ke kiri, sehingga tulisannya jadi terbaca aneh. Lalu bagaimana caranya membuatnya format RTL?

7. Download file bidi.tex dari texdoc.net/texmf-dist/tex/xelatex/bidi/bidi.tex, jangan gunakan package bidi menggunakan perintah \usepackage{bidi} Saya tidak tahu pasti kenapa, tapi menggunakan package bidi seperti itu akan merusak template MIPA UGM. Dengan menggunakan bidi.tex langsung dari filenya kita memperoleh versi sederhana dari bidi yang lebih aman.

8. Inputkan file bidi tersebut setelah kita definisikan huruf Arab kita:

9. Untuk mengaktifkan RTL gunakan perintah \RL:

10. Dan coba compile ulang, maka kali ini akan benar-benar berhasil:

Sekian! Semoga bermanfaat, jika ada yang ditanyakan atau ada usulan solusi lain silakan komentar di kolom yang tersedia! 🙂

Sumber: