TUTORIAL PERL PERL Practical Extraction and Report Language

  • Slides: 46
Download presentation
TUTORIAL PERL

TUTORIAL PERL

PERL �Practical Extraction and Report Language �Dikembangkan oleh Larry Wall pada tahun 1987 �Perl

PERL �Practical Extraction and Report Language �Dikembangkan oleh Larry Wall pada tahun 1987 �Perl adalah bahasa interpreter sekaligus kompiler (mirip dengan java). Artinya perl akan mendeteksi setiap baris untuk mencari syntax error sebelum program dijalankan. �Bersifat open source �Berguna untuk memanipulasi teks

Karakteristik PERL �Sistem operasi yang didukung �Perl berawal dari Unix systems sebagai perangkat system

Karakteristik PERL �Sistem operasi yang didukung �Perl berawal dari Unix systems sebagai perangkat system administration. �Perl bekerja pada mesin Macintosh - lihat The Mac. Perl Pages dan �Perl juga bekerja di mesin berbasis Microsoft - lihat Active. State Tools Corp.

Fitur dasar PERL �Perl mengambil fitur-fitur terbaik dari bahasa pemrograman lain, seperti C, awk,

Fitur dasar PERL �Perl mengambil fitur-fitur terbaik dari bahasa pemrograman lain, seperti C, awk, sed, sh, dan BASIC. �Perl juga berjalan dengan database third-party seperti Oracle, Sybase, Postgres, dan yang lainnya melalui antar muka database abstrak yang disebut DBI. �Perl dapat bekerja dengan HTML, XML, dan mark-up languages lainnya. �Perl mendukung procedural maupun object-oriented programming. � �Perl dapat berantarmuka dengan library-library C/C++ eksternal melalui XS atau SWIG. �Akan mendukung development Java-Perl Lingo (JPL)

Contoh program PERL #!/usr/local/bin/perl #Program menulis kata ‘Apa kabar’ print “Apa kabar? n”; �Program

Contoh program PERL #!/usr/local/bin/perl #Program menulis kata ‘Apa kabar’ print “Apa kabar? n”; �Program di atas untuk menulis “Apa kabar? ” �Tulis pada suatu file bernama ‘contoh. p’ �Untuk me-run pada Unix/Linux: > perl contoh. p

JENIS DATA �Nama variabel case sensitive ($data ≠ $DATA)

JENIS DATA �Nama variabel case sensitive ($data ≠ $DATA)

JENIS DATA SCALAR �Angka � digits, desimal, eksponensial dll. � $jumlah = 550; �

JENIS DATA SCALAR �Angka � digits, desimal, eksponensial dll. � $jumlah = 550; � $jumlah= 5. 50 �Strings � Berada dalam tanda petik single / double; � Interpolasi dengan backslash � n (newline) ; t (tab) ; � U (Uppercase) ; L (Lower case) � print “Uhalon”; HALO � print “haUlon”; ha. LO �Interpolasi variabel � $harga = ‘Rp 500’ � print “Harga pensil adalah $hargan”; � Hasil : Harga pensil adalah Rp 500

OPERATOR

OPERATOR

OPERATOR

OPERATOR

Array & Data List �Suatu list adalah data scalar yang berturutan �Suatu array adalah

Array & Data List �Suatu list adalah data scalar yang berturutan �Suatu array adalah suatu variabel yang berisi list �Suatu array bisa berisi sejumlah elemen (tidak perlu ditentukan panjangnya)

Contoh Array �@namabulan = (“Januari”, “Februari”, “Maret”); �@john = (47, "brown", 186); �@x =

Contoh Array �@namabulan = (“Januari”, “Februari”, “Maret”); �@john = (47, "brown", 186); �@x = (1, 2, 3) �@y = @x copy nilai x ke y �@y = (@x, 4, 5) nilai @y = (1, 2, 3, 4, 5) �$z = @y panjang dari @y = 5

Akses ke array �Indeks pada array dimulai dari 0 �@nama = (“dani”, “irma”, “jojon”,

Akses ke array �Indeks pada array dimulai dari 0 �@nama = (“dani”, “irma”, “jojon”, “lili”); �$x = $nama[0] # $x = dani �$nama[2] = “gugun” # mengganti “jojon” menjadi “gugun” �@siswa = $nama[0, 1] # @siswa berisi “dani’ dan “irma” �$i = 2 �$x = $nama[$i] # $x= “gugun” �$x = $nama[$i- 1] # $x= “irma”

Akses ke array 2 �@nilai = (1, 2, 3) �$x = $nilai[1]; $x =

Akses ke array 2 �@nilai = (1, 2, 3) �$x = $nilai[1]; $x = 2 �$nilai[2]++; nilai 3 jadi 4 �@nilai[0, 1, 2] = @nilai[1, 1, 1]; @nilai = (2, 2, 2) �@nama = (“dani”, “irma”, “jojon”, “lili”); �reverse(@nama) �@nama = (“lili”, “jojon”, “irma”, “dani”); �@siswa = sort(@nama) �@nama = (“dani, “irma”, “jojon”, “lili”);

Control Structures �Penggunaan IF / UNLESS if ($nilai > 60) { print “Lulus dengan

Control Structures �Penggunaan IF / UNLESS if ($nilai > 60) { print “Lulus dengan ujiann”; } else { print “ Tidak lulus ujiann”; } unless ($nilai > 60) { print “Tidak lulus ujiann”; }

Control Structures if ($nilai >= 80) { print “Lulus ujian dengan nilai baikn”; }

Control Structures if ($nilai >= 80) { print “Lulus ujian dengan nilai baikn”; } elsif ($nilai >= 60) { print “Lulus ujian dengan nilai cukupn”; } else { print “Tidak lulus ujiann”; }

Control Structures �Penggunaan WHILE / UNTIL $i = 10; while ($i > 5) {

Control Structures �Penggunaan WHILE / UNTIL $i = 10; while ($i > 5) { $x = $i**; print “Kuadrat dari $i adalah $xn”; } until ($i < 5) { print “ Kuadrat dari $i adalah $i**n”; }

Control Structures �Penggunaan for ($i = 1; $i <= 10; $i++) { print “$i

Control Structures �Penggunaan for ($i = 1; $i <= 10; $i++) { print “$i n”; } for ($i=0 ; $i<=$#nama; $i++) { $siswa = $nama[$i]; $siswa =~ tr/a-z/A-Z/; print "$siswa"; }

ARRAY �Penggunaan foreach $elemen (@nama) { $elemen =~ tr/a-z/A-Z/; print "$elemenn"; # tulis semua

ARRAY �Penggunaan foreach $elemen (@nama) { $elemen =~ tr/a-z/A-Z/; print "$elemenn"; # tulis semua elemen dengan huruf besar }

ARRAY @array = (“sinta", “tina", “dani", "dino"); �$length = @array; # $length nilainya 4

ARRAY @array = (“sinta", “tina", “dani", "dino"); �$length = @array; # $length nilainya 4 �print $#array; # hasilnya 3 �print $array[$#array] # hasilnya "dino �print scalar(@array) # hasilnya 4

ARRAY �($a, $b) = (“satu", “dua"); �($satu, @banyak) = (1, 2, 3, 4, 5,

ARRAY �($a, $b) = (“satu", “dua"); �($satu, @banyak) = (1, 2, 3, 4, 5, 6) �# $satu = 1 �# @banyak = (2, 3, 4, 5, 6) �($array[0], $array[1]) = $array[1], $array[0]); �# tukar nilainya

Mengubah Isi Array Push �Menambahkan list pada bagian akhir dari array. �@array-1 = ("ani",

Mengubah Isi Array Push �Menambahkan list pada bagian akhir dari array. �@array-1 = ("ani", "berti", "cici", "dino"); �@array-2 = ("eri", "fany"); �push @array-1, @array-2; # @array-1 berisi ("ani", "berti", "cici", "dino", "eri", "fany") �push @array-2, "gusti"; # @array-2 berisi ("eri", "fany", "gusti")

Mengubah Isi Array Pop �Membuang elemen terakhir dari list �@array = ("ani", "berti", "cici",

Mengubah Isi Array Pop �Membuang elemen terakhir dari list �@array = ("ani", "berti", "cici", "dino"); �$nama = pop @array; # $nama = "dino" @array = ( "ani", "berti", "cici")

JOIN FUNCTION Join �@array = ("ani", "berti", "cici", "dino"); �$string = join ": ",

JOIN FUNCTION Join �@array = ("ani", "berti", "cici", "dino"); �$string = join ": ", @array; # $string sekarang mempunyai nilai "ani: berti: cici: dino“ �$string = join "+", "", @array; # $string sekarang mempunyai nilai “+ani+berti+cici+dino"

PENGURUTAN Pengurutan yang sesuai alfabet: �sort { $a cmp $b } @list; Pengurutan sesuai

PENGURUTAN Pengurutan yang sesuai alfabet: �sort { $a cmp $b } @list; Pengurutan sesuai numerik: �sort { $a <=> $b } @list; Pengurutan yang terbalik: �sort { $b <=> $a } @list; Pengurutan associative array �sort { $tabel{$b} <=> $tabel{$a} } ( keys %tabel)

Associative Arrays �Array normal mengasosiasikan nilai dengan posisi �Associative array diindeks dengan string �%nama

Associative Arrays �Array normal mengasosiasikan nilai dengan posisi �Associative array diindeks dengan string �%nama = (); �$nama{“fred”} = “flintstone”; �$nama{“bart”} = “simpson”; �@list = keys(%nama) � @list = (“fred”, “bart”) �@keluarga = values(%nama) � @keluarga = (“flintstone”, “simpson”)

Associative Arrays �foreach $i (keys %nama) { print “$nama{$i} n”; } �while { ($first,

Associative Arrays �foreach $i (keys %nama) { print “$nama{$i} n”; } �while { ($first, $last) = each (%nama) { print “Nama belakang dari $first adalah $lastn”; } �foreach $i (sort keys %nama) { print “$nama{$i} n”; }

INPUT/OUTPUT Membuka dan menutup file � open(IN, “berita. txt”); � open(OUT, “>hasil. txt”); #

INPUT/OUTPUT Membuka dan menutup file � open(IN, “berita. txt”); � open(OUT, “>hasil. txt”); # tulis ke file hasil. txt � open(OUT, “>>hasil. txt”); # append hasil ke file hasil. txt � close(OUT) Contoh program #!/usr/local/bin/perl open(IN, “berita. txt”); open(OUT, “>hasil. txt”); while ($line = <IN>) { chop($line); # buang carriage return print OUT “$linen”; # tulis ke output file } close(IN); close(OUT);

INPUT/OUTPUT #!/usr/local/bin/perl # menghitung umur print “Tuliskan tahun kelahiran Anda"; $tahun-lahir = <>; chomp($tahun-lahir);

INPUT/OUTPUT #!/usr/local/bin/perl # menghitung umur print “Tuliskan tahun kelahiran Anda"; $tahun-lahir = <>; chomp($tahun-lahir); $umur = 2013 - $tahun-lahir; print “Umur Anda adalah ", $umur". n";

INPUT/OUTPUT #!/usr/local/bin/perl # menghitung jumlah baris pada dokumen open INPUTFILE, “<$myfile”; || die “Tidak

INPUT/OUTPUT #!/usr/local/bin/perl # menghitung jumlah baris pada dokumen open INPUTFILE, “<$myfile”; || die “Tidak bisa membuka $myfilen”; $baris = 0; while($baris = <INPUTFILE>) { $hitung++; } print “$hitung baris terdapat pada berkas $myfilen”;

Regular expressions �b: batas kata �d: digit = [0 -9] �n: newline �r: carriage

Regular expressions �b: batas kata �d: digit = [0 -9] �n: newline �r: carriage return �s: karakter white space �t: tab �w: karakter alfanumerik = [A-Za-z 0 -9] �^: awal dari string �$: akhir dari string

Regular expressions �. : karakter apapun �[bdkp] : karakter b, d, k dan p

Regular expressions �. : karakter apapun �[bdkp] : karakter b, d, k dan p �[a- f] : karakter a sampai f �[^a- f] : semua karakter kecuali a sampai f �abc|def : string abc atau string def �* : nol atau beberapa kali �+ : sekali atau beberapa kali �? : nol atau satu kali �qw() : ("quote word") function �qw(ani budi cici) penyingkatan dari (“ani", “budi", “cici").

Regular expressions / (ab)*(de)+ / �abde �abbde �abadde �ababde

Regular expressions / (ab)*(de)+ / �abde �abbde �abadde �ababde

Regular expressions �{ 2, 10} : paling sedikit 2 dan paling banyak 10 �{2,

Regular expressions �{ 2, 10} : paling sedikit 2 dan paling banyak 10 �{2, } : paling sedikit 2 �{2} : tepat 2 �/ a{5}b{1, 4}c{2} / �aaaaabcccc �aaaaabc �aaaabcc

Regular expressions �/c[ad]r/ �car, cdr �cadr, caddddr �/c[ad]*r/ �car, cdr, caaaadr, caaadaaar �/[a-g][t-z][0 -9]*/

Regular expressions �/c[ad]r/ �car, cdr �cadr, caddddr �/c[ad]*r/ �car, cdr, caaaadr, caaadaaar �/[a-g][t-z][0 -9]*/ �au 125

Mencari Pola dari String �Menggunakan / / while ($kata =~ /ba/) { print “$barisn”;

Mencari Pola dari String �Menggunakan / / while ($kata =~ /ba/) { print “$barisn”; } �Maka semua kata yang mengandung ‘ba’ akan ditemukan: baik, kabar, tiba …

Penggantian dan Pencocokan string �s/// : mengubah bagian string � // pertama berisi pola

Penggantian dan Pencocokan string �s/// : mengubah bagian string � // pertama berisi pola yang dicari � // kedua berisi pola pengganti $kalimat = “ daerah jawa barat”; if ($kalimat =~ /barat/) { $kalimat = s/barat/timur/; } print “$kalimatn”; # tertulis “daerah jawa timur” �tr/// : mengubah karakter �g = ubah semua kemunculan �i = tidak membedakan upper-case dan lower-case

contoh # ubah kata “kelas” yang muncul pertama �$teks =~ s/kelas/ruang/; # ubah semua

contoh # ubah kata “kelas” yang muncul pertama �$teks =~ s/kelas/ruang/; # ubah semua kata “kelas” yang muncul �$teks =~ s/kelas/ruang/g; # ubah karakter ke huruf kecil �$teks =~ tr/[A-Z]/[a-z]/; $teks =~ s/rektorat ui/Rektorat UI/gi; �Rektorat ui, rek. TOrat ui, REKtor. AT UI …

contoh �$kalimat : “Saya suka coklat!” �$kalimat =~ tr/a-z/A-Z/; �$kalimat : “SAYA SUKA COKLAT!”

contoh �$kalimat : “Saya suka coklat!” �$kalimat =~ tr/a-z/A-Z/; �$kalimat : “SAYA SUKA COKLAT!” �$kalimat =~ s/!//; �$kalimat : “Saya suka coklat” �$kalimat =~ s/a/A/g; �$kalimat : “SAy. A suk. A cokl. At”

SPLIT FUNCTION �Melakukan tokenisasi pada teks dengan pemisahnya tanda baca (, . ; !?

SPLIT FUNCTION �Melakukan tokenisasi pada teks dengan pemisahnya tanda baca (, . ; !? ()) �$string = “Adi Peter Mari Dian"; �@list = split(/s+/, $string); �# hasilnya ( “Adi", "Peter", "Mari", "Dian" ) �$string = " Adi Peter Mari Dian "; �@list = split(/s+/, $string); �# hasilnya ( "", “Adi", "Peter", "Mari", "Dian", "" )

SPLIT FUNCTION $string = “Adi: Peter; Mari---Dian"; �# gunakan regular expression �@list = split

SPLIT FUNCTION $string = “Adi: Peter; Mari---Dian"; �# gunakan regular expression �@list = split (/[: ; ]|---/, $string/); �# hasilnya (“Adi", "Peter", "Mari", "Dian") $string = “Adi Peter"; �# gunakan regular expression kosong untuk memecah huruf �@letters= split (//, $string); �# hasilnya ( “A", “d", “i", "P", “e", “t", “e“, “r”)

SPLIT FUNCTION �$kalimat = “kelas information retrieval” �($kata, $sisa-kalimat) = split(/ /, $kalimat); �$kata

SPLIT FUNCTION �$kalimat = “kelas information retrieval” �($kata, $sisa-kalimat) = split(/ /, $kalimat); �$kata = “kelas”; �$sisa- kalimat = “information retrieval”;

SUBROUTINES �Nama subroutines dimulai dengan & �Didefinisikan dengan kata sub �Contoh : &hitung- frekuensi;

SUBROUTINES �Nama subroutines dimulai dengan & �Didefinisikan dengan kata sub �Contoh : &hitung- frekuensi; sub hitung- frekuensi { if ($daftar[$kata] eq “”) { $daftar[$kata] = 1; } else { $daftar[$kata] = $daftar[$kata] + +; }

Contoh program #!/usr/local/bin/perl # menghitung jumlah baris pada dokumen $jumlah-kata = 0; while($baris =

Contoh program #!/usr/local/bin/perl # menghitung jumlah baris pada dokumen $jumlah-kata = 0; while($baris = <IN>)) { # buang whitespace $baris =~ s/^s*//; $baris =~ s/s*$//; # masukkan kata pada suatu array @array-kata = split /s+/, $baris; }

Lanjutan. . # proses tiap kata. . . while($kata = pop@array-kata) { # Jika

Lanjutan. . # proses tiap kata. . . while($kata = [email protected]) { # Jika tidak ada maka jadikan indeks baru if(!ada($indeks{$kata})) { $indeks{$kata} = $jumlah-kata++; } # selalu tambahkan frekuensinya $frekuensi{$kata}++; }

Lanjutan. . . # sekarang tulis semua kata yang sudah terurut foreach $kata (sort

Lanjutan. . . # sekarang tulis semua kata yang sudah terurut foreach $kata (sort keys %indeks) { print "$kata mempunyai frekuensi $frekuensi{$kata} dan indeks $indeks{$kata}n"; }

TUGAS � Buat program dalam Perl untuk memroses koleksi dokumen tsb. � Hitung frekuensi

TUGAS � Buat program dalam Perl untuk memroses koleksi dokumen tsb. � Hitung frekuensi kata yang ada pada seluruh dokumen � Dokumen dimulai dengan <DOC> dan diakhiri dengan </DOC> � Bagian dokumen yang dihitung kalimatnya adalah yang dalam <TEXT>. . . </TEXT> dan <TITLE>. . . </TITLE> � Kata merupakan urutan karakter alfabet saja. � Hilangkan semua tanda baca yang terdapat pada kata. � Satu kata adalah yang dibatasi oleh 'whitespace', jadi kata majemuk ataupun pengulangan tetap dianggap 1 kata. � Jawablah pertanyaan di bawah ini: � Tuliskan 10 kata yang frekuensinya paling tinggi pada koleksi (tulis kata dan frekuensinya) � Apakah kata-kata pada koleksi dokumen ini mengikuti distribusi Zipf? (gambar grafiknya) � Berapa jumlah seluruh kata pada koleksi? � Berapa jumlah kata-kata yang unik pada seluruh dokumen? � Berapa jumlah frase Bursa Efek Jakarta yang ada di koleksi? . � Berapa jumlah kata unik yang berakhiran 'nya'? � Selain jawaban pertanyaan di atas, program Perl (source code) juga perlu dikumpulkan � Informasi lanjut mengenai Perl dapat diperoleh di http: //www. perl. com/