Delphi vs Perl

Kebetulan sedang bermain-main dengan Perl, saya mencoba membandingkan bagamana bila dibandingkan antara Delphi dan Perl, bolehlah disebut compiler vs interpreter.

Programnya sederhana, membaca file teks, menghitung jumlah seluruh kata dan frekuensi kata (kata ’yang’ ada berapa, ’dan’ ada berapa, dst). Definisi yang digunakan, kata adalah alfabet (a-z) dan dipisah oleh selain alfabet, angka [0-9] dan garis bawah (_). Jadi kalimat: "Mantan enam_ratus 0123ab ab123 a23b presiden ’pending’ alap-alap" hasilnya:

  1. alap = 2
  2. pending = 1
  3. mantan = 1
  4. presiden = 1

File teks sudah ditentukan (anggap sebagai korpus standar), ada di http://wawan.web.id/text/Koleksi.zip (957 KB). Strukturnya: <DOC><TITLE>..</TITLE> <TEXT>..</TEXT></DOC>. Hanya kata-kata yang terdapat di TITLE dan TEXT yang diambil. Struktur file tersebut sudah teratur, dapat dilakukan parsing sederhana yang hanya benar untuk kasus ini.

Antara Delphi dan Perl, secara baris program tentu jomplang, 80 vs 15. Perl dikondisikan selalu benar (menggunakan Regular Expression), Delphi belum tentu (program cepat saji saja). Tidak ada optimasi lebih lanjut untuk Perl, mengingat penguasaan bahasa ini tidak begitu mendalam, sebaliknya untuk Delphi diusahakan secukupnya (khususnya untuk string). Dalam menyimpan kata, Perl menggunakan hashes, Delphi (v7.0) dengan TStringList (sorted).

Ketika dijalankan, skor akhirnya adalah: 0,422s vs 1,000s. Mak nyot, Perl juara. Saya coba kutak-katik TStringList dan konco-konconyanya (seperti THashedStringList), hasilnya sudah mentok. Padahal di situ titik lemahnya. Saya percaya Delphi bisa digenjot lagi, tapi lebih percaya kalo Perl justru bisa lebih menjulang. Jadi upaya lebih lanjut distop saja agar fair.

Berikut program dalam Perl:

open(FH, "Koleksi.dat"or die$!);
$/ = "</DOC>’n"
while (<FH>) {
  while (m/<(TITLE|TEXT)>(.+)<’/’1>/gs) {
    $str = lc $2
    $arr_kata{$1}++ while $str =~ m/’b([a-z]+)’b/gs);
  }
}
# tampilkan hasil, kata terbanyak di urutan atas
printf " %5d. %-30s = %5d’n", ++$no, $_, $arr_kata{$_}
  for sort { $arr_kata{$} <=> $arr_kata{$a} } keys %arr_kata
Hasil 10 kata terbanyak:
  1. yang = 3103
  2. dan = 2250
  3. di = 2237
  4. itu = 1706
  5. ini = 1430
  6. tidak = 1222
  7. untuk = 1127
  8. dengan = 1062
  9. dalam = 1025
  10. dari = 1016

Demikian, semoga bermanfaat.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s