KOM 3 4 1
Te m u Ke m ba li I n for m a si
KULI AH # 2 • Pem rosesan Teks • Pengant ar bahasa PERL
Pr ose s Pe r ole h a n
I n for m a si Se de r h a n a
JULIO ADISANTOSO - ILKOM IPB
KORPU S
OFFLI NE PROCESS
Pe n g e r t ia n TEKS
Teks≈ Korpus≈ Koleksi dokum en yang bisa dibaca oleh m esin
Cont oh:
Kum pulan art ikel surat kabar yang diperoleh dari I nt ernet
Kum pulan skripsi m ahasiswa yang t elah dikum pulkan secara digit al oleh perpust akaan
JULIO ADISANTOSO - ILKOM IPB
Kor p u s
Korpus adalah t eks alam i yang dipilih dengan cara t ert ent u.
Masalah pada perancangan korpus Ukuran
Jenis
Bahasa
Media: t eks, audio, video ( m ult im edia) I su pada korpus:
Tokenisasi pada korpus
Anot asi pada korpus
JULIO ADISANTOSO - ILKOM IPB
Con t oh Kor p u s
Fr e e t e x t
Sekurangnya 17 ribu ayam ras m ilik pet ernak di wilayah kabupat en Kot awaringin Tim ur ( Kot im ) , Kalim ant an Tengah m at i dan kuat dugaan akibat t erserang virus avian influenza ( AI ) at au yang lagi ram ai disebut penyakit flu burung. Kasubdin Produksi Pet ernakan Dinas Pert anian Kot im Drh. Mawardi di Sam pit , Selasa m engat akan sebanyak 17 ribu ekor ayam ras yang m at i diduga t erserang flu burung it u sej ak Desem ber 2003.
Dari hasil diagnosa Balai Penyelidikan dan Penguj ian Vet eriner ( BPPV) regional V Banj ar Baru Kalim ant an Selat an yang dit erim a Disnak Kot im , Senin ( 26/ 1) m enyebut kan ayam yang m at i t erserang panyakit it u hanya ada dua kem ungkinan yait u t erserang virus AI dan VVND at au t et elo. " Nam un kasus kem at ian m asal ayas ras di Kot im kem ungkinan besar akibat akibat serangan virus avian influenza yang bila m enular kepada m anusia nam anya m enj adi flu burung," ucapnya.
Con t oh Kor p u s
XM L For m a t
< DOC>
< DOCNO> DOC01< / DOCNO>
< TI TLE> Flu Burung Menyerang Kalim antan Tengah< / TI TLE> < AUTHOR> Ark, Ant< / AUTHOR>
< DATE> 7 Februari 2003 < / DATE> < TEXT>
< P> Sekurangnya 17 ribu ayam ras m ilik peternak di w ilayah kabupaten Kotaw aringin Tim ur ( Kotim ) , Kalim antan Tengah m ati dan kuat dugaan akibat terserang virus avian influenza ( AI ) atau yang lagi ram ai disebut penyakit flu burung. Kasubdin Produksi Peternakan Dinas Pertanian Kotim Drh. Maw ardi di Sam pit, Selasa m engatakan sebanyak 17 ribu ekor ayam ras yang m ati diduga terserang flu burung itu sej ak Desem ber 2003.< / p>
< P> Dari hasil diagnosa Balai Penyelidikan dan Penguj ian Veteriner ( BPPV) regional V Banj ar Baru Kalim antan Selatan yang diterim a Disnak Kotim , Senin ( 26/ 1) m enyebutkan ayam yang m ati terserang panyakit itu hanya ada dua kem ungkinan yaitu terserang virus AI dan VVND atau tetelo. " Nam un kasus kem atian m asal ayas ras di Kotim kem ungkinan besar akibat akibat serangan virus avian influenza yang bila m enular kepada m anusia nam anya m enj adi flu burung," ucapnya.< / P> < / TEXT>
M e la ca k Te k s
Operasi dasar dalam st ring m at ching Cont oh:
Dapat kan sem ua baris yang dim ulai dengan kat a Flu.
Dapat kan sem ua baris yang dim ulai dengan kat a Huruf Besar.
Dapat kan sem ua baris yang m em iliki kat a t erdiri dari huruf besar sem ua.
Hit ung banyaknya kat a Flu pada dokum en t ersebut .
dsb.
JULIO ADISANTOSO - ILKOM IPB
St a t ist ik Te k s
Jum lah Kat a
Seberapa besar korpus yang ada ( N)
Jenis kat a
Berapa j um lah kat a yang unik?
Berapa besar perbendaharaan kat a pada korpus?
Token kat a
Berapa j um lah kat a pada korpus?
Berapa frekuensi dari set iap j enis kat a?
Kat a apa yang paling sering m uncul pada korpus?
JULIO ADISANTOSO - ILKOM IPB
Pr ose d u r M e n g h it u n g
Fr e k u e n si Ka t a
Tokenisasi : m endapat kan kat a Ubah m enj adi huruf kecil Urut kan m enurut abj ad
Hit ung frekuensi kem unculan kat a Urut kan m enurut frekuensinya
Hit ung frekuensi dari frekuensi kem unculan kat a
JULIO ADISANTOSO - ILKOM IPB
Fe n om e n a
Fr e k u e n si Ka t a
Sej um lah kat a m erupakan kat a yang sangat um um ( frekuensi sangat besar) , m isalnya “ t he” , “ of”
Kebanyakan kat a sangat j arang m uncul ( frekuensi sangat kecil) .
Set engah dari kat a- kat a pada korpus hanya m uncul sekali.
JULIO ADISANTOSO - ILKOM IPB
Con t oh
Ka t a Fre k ue nsi Ka t a ( f ) Pe ringk a t ( r) f * r
nam e 21 400 8400
com es 16 500 8000
gr oup 13 600 7800
science 11 700 7700
fam ily 10 800 8000
begin 9 900 8100
br ok e 4 2000 8000
seem s 2 3000 6000
could 2 4000 8000
H u k u m Zip f
Menj elaskan adanya hubungan ant ara frekuensi dan urut an/ rank ( George Kingsley Zipf) .
Urut an/ Rank:
hit ung berapa kali kat a m uncul pada sem ua t eks di dalam korpus ( f) .
urut kan sesuai dengan frekuensi kem unculan kat a m em bent uk rank ( r) .
Luhn ’s I de a s
k a t a - k a t a y a n g p a lin g u m u m d a n p a lin g t id a k u m u m a d a la h t id a k sig n ifik a n u n t u k in d e x in g
JULIO ADISANTOSO - ILKOM IPB
St op w or d s
STOPWORDS:
Terdapat kat a yang m erupakan bagian t erbesar dari t eks yang t idak perlu digunakan sebagai penciri dokum en.
Terdapat banyak ragam kat a yang hanya m uncul sedikit sekali di dalam suat u t eks.
Cont oh: t o, in, form , yang, dan
Kat a- kat a dengan frekuensi cukup ( di bagian t engah) adalah yang paling baik digunakan sebagai penciri dokum en.
JULIO ADISANTOSO - ILKOM IPB
Tok e n isa si
Pengert ian : suat u t ahap pem rosesan di m ana t eks input dibagi m enj adi unit - unit kecil yang disebut t oken, yang dapat berupa suat u kat a, suat u angka, at au suat u t anda baca.
Konsekuensinya:
Perlu m engenali unit secara ot om at is
Apakah suat u kat a it u?
Kalim at ?
Paragraf?
JULIO ADISANTOSO - ILKOM IPB
Ka t a
Karakt er alfanum erik yang saling t erhubung yang dipisahkan oleh whit espace.
Whit espace: spasi, t ab, newline Masalah:
B2B, am azon.com , Micro$oft
isn’t , Jum ’at
pro- akt if, out - of- dat e
t anda sam bung pada akhir baris
JULIO ADISANTOSO - ILKOM IPB
Se g m e n t a si k a t a
Proses t okenisasi sederhana, t et api t idak t erlepas dari kesalahan.
Cont oh:
Kat a m aj em uk: Jurusan Surabaya- Jakart a
Frase: t usuk j arum , keras kepala, sist em inform asi
Nom or t elpon ( 0251) 8356653 + 62 251 8625584
Menj adi t opik dari ekst raksi inform asi
Ka lim a t
Sat u at au lebih st ring kat a yang diakhiri dengan suat u t anda berhent i sepenuhnya, t anda t anya at au t anda seru.
Cont oh: Akhir dari baris.
Akhir dari suat u cerit a!
Apakah kam u sudah punya pacar?
I a sering m engunj ungi friendst er.com .
Dr. I wan pergi ke Surabaya.
Ba t a s k a lim a t
Hi pot esak an bahw a bat as k al i m at sesudah . ? ! Pi ndahk an bat as k al i m at sesudah t anda pet i k ,
buk an set el ah t i t i k .
“ Jangan am bil buku itu. Buku itu m ilik pak Budi. ” , kata ibu kepada Ani.
Jangan gunak an t i t i k j i k a:
Sebelum nya adalah singkatan yg um um yg biasanya bukan akhir kalim at, tp biasanya diikuti oleh nam a dengan huruf besar: Prof.
Didahului oleh singkatan yang um um dan tidak diikuti oleh kata dengan huruf besar: Jr.
Jangan k enal i sebagai bat as j i k a ada ! at au ? y ang di i k ut i ol eh huruf k eci l
JULIO ADISANTOSO - ILKOM IPB
Pe m r ose sa n Te k s
Ot om a t is
Menghit ung kat a pada t eks Mengurut kan kat a
Menghit ung berbagai nilai st at ist ik kat a I nput : berkas t eks ( bisa berupa korpus)
Out put : daft ar kat a besert a frekuensinya
Pert anyaannya:
Bagaim ana program kom put ernya?
Bahasa pem rogram an apa yang digunakan?
JULIO ADISANTOSO - ILKOM IPB
PERL
h t t p:/ / w w w .a ct iv e st a t e .com / a ct ive pe r l/ dow nloa ds
Pract ical Ext ract ion and Report Language Dikem bangkan oleh Larry Wall pada t ahun
1987
Mengem bangkan suat u bahasa script yang lebih baik daripada Unix shell t et api t idak serum it C.
Berguna unt uk m em anipulasi t eks yang t idak dapat dilakukan oleh inst ruksi baris unix
JULIO ADISANTOSO - ILKOM IPB
PERL
Tulis pada suat u file, m isalnya bernam a ‘halo.pl‘ ( Unix) , at au ‘halo.pl ‘ ( Windows) . Unt uk m e- run pada Unix/ Linux:
> perl halo.pl
Unt uk m e- run pada Windows: > perl halo.pl
JULIO ADISANTOSO - ILKOM IPB
#!/usr/local/bin/perl
#Program untuk menulis kata 'hello' print "Hello\n";
PERL d i w e b
Tulis pada suat u file, m isalnya bernam a ‘t est .cgi‘ dan sim pan di folder cgi- bin.
#!"C:\apache\xampp\perl\bin\perl.exe"
print "Content-type: text/html\n\n"; print '<html>';
print '<head>';
print '<meta name="author" content="Kay Vogelgesang">'; print '<link href="/xampp/xampp.css" rel="stylesheet" type="text/css">';
print '</head>';
print "<body> <p><h1>GCI with MiniPerl</h1>"; print "CGI with MiniPerl is ready ...</body></html>";
PERL
Je n is d a t a
Tiga j enis dat a dalam PERL: Skalar
Array
Associat ive array at au hash
Nam a variabel
Nam a variabel skalar dim ulai dengan $ ( m is. $dok)
Nam a variabel array dim ulai dengan @ ( m is. @kat a)
Nam a variabel hash dim ulai dengan % ( m is. % t abel)
PERL
Sk a la r
Angka
digit s, desim al, eksponensial dll.
$nilai = 350;
$nilai = 3.50
St rings
Diapit oleh t anda pet ik single / double;
Escape charact er dengan backslash \ n ( new line) ; \ t ( t ab) ;
\ U ( Upper case) ; \ L ( Low er case)
print " \ Uhalo\ n" ; HALO
print " ha\ Ulo\ n" ; haLO
JULIO ADISANTOSO - ILKOM IPB
PERL
Op e r a t or
Bilangan
Arit m at ika : + , - , / , * , %
Assignm ent : = , + = , = , + + ,
- St ring :
Concat enat ion : .
Repet it ion : x
JULIO ADISANTOSO - ILKOM IPB
PERL
Ar r a y
Suat u array adalah suat u variabel yang berisi list
Suat u array berisi nol at au lebih elem en. Tidak perlu dit ent ukan panj angnya sepert i
pem rogram an lainnya. Cont oh:
(1, 2, 3)
("yang", "dan", "untuk") ()
JULIO ADISANTOSO - ILKOM IPB
PERL
Ar r a y
@kata = ("yang", "dan", "untuk"); @x = (1, 2, 3);
@y = @x; # assign nilai x ke y @y = (@x 4 5); # @y=(1 2 3 4 5) $z = @y; # $z bernilai 5 (panjang @y) ($z) = @y; # $z = 1 (elemen pertama @y) @prefix = $kata[0,1]; # ("yang", "dan")
JULIO ADISANTOSO - ILKOM IPB
PERL
Ar r a y
@array = ("aa", "bb", "cc", "dd"); $length = @array; #4
print $#array; #3
print $array[$#array]; #"dd" print scalar(@array) ; #4 ($a, $b) = ("satu", "dua"); ($satu, @b) = (1,2,3,4,5,6);
# $satu = 1, @b=(2 3 4 5 6) ($a, $b) = ($b, $a); #tukar nilainya
PERL
M e n g u b a h isi a r r a y
Push
m enam bahkan list pada bagian akhir dari array
@a1 = ("aa", "bb", "cc", "dd"); @a2 = ("ee", "ff");
push @a1, @a2;
#@a1=("aa","bb","cc","dd","ee","ff") push @a2, "gg";
PERL
M e n g u b a h isi a r r a y
Pop
Mem buang elem en t erakhir dari list
@array = ("aa","bb","cc","dd"); $elemen = pop @array;
# $elemen= "dd"
# @array = ( "aa","bb","cc")
JULIO ADISANTOSO - ILKOM IPB
PERL
Associa t iv e Ar r a y s
Array yang m em iliki indeks bukan berupa bilangan 0 sam pai dengan n- 1, m elainkan st ring. Cont oh:
%nilai=();
$nilai{"dan"}=200; $nilai{"yang"}=150;
@kata=keys(%nilai); #@kata=("dan", "yang")
@freq=values(%nilai); #@freq=(200, 150)
JULIO ADISANTOSO - ILKOM IPB
PERL
Con t r ol St r u ct u r e s
I F
if ($nilai > 60) { print "Lulus\n"; } else
{ print "Tidak lulus\n"; }
UNLESS
unless ($nilai > 60) { print "Tidak lulus\n"; }
ELSI F
if ($nilai >= 80) { print "A\n"; } elsif ($nilai >= 60)
{ print "B\n"; } else
{ print "Tidak lulus\n"; }
JULIO ADISANTOSO - ILKOM IPB
PERL
Con t r ol St r u ct u r e s
WHI LE
$i = 10; while ($i > 5) {
$x = $i*$i;
print "Kuadrat dari $i adalah $x\n"; $i--;
}
UNTI L
$i = 10; until ($i <= 5) {
$x = $i*$i;
print "Kuadrat dari $i adalah $x\n"; $i--;
}
JULIO ADISANTOSO - ILKOM IPB
PERL
Con t r ol St r u ct u r e s
FOR
for ($i = 1; $i<=10; $i++) { print "$i\n"; }
@kata=("dan", "yang", "untuk"); for ($i=0 ; $i<=$#kata; $i++) {
$prefix = $kata[$i]; print "$prefix\n"; }
FOREACH
foreach $prefix(@kata) { print "$prefix\n"; }
PERL
Associa t iv e Ar r a y s
%nilai=();
$nilai{"dan"}=200; $nilai{"yang"}=150; foreach $i (keys %nilai)
{ print "$nilai{$i}\n"; }
while (($kata, $freq) = each (%nilai)) { print "$kata : $freq\n"; } foreach $i (sort keys %nilai)
PERL
Sor t in g
@kata = ("dan", "itu", "yang", "pada"); reverse(@nama);
@stopwords = sort(@kata);
Sesuai alfabet : sort {$a cmp $b} @list; Sesuai num erik: sort {$a <=> $b} @list; Descending: sort {$b <=> $a} @list; Associat ive array
sort {$tabel{$b} <=> $tabel{$a} } (keys %tabel);
JULIO ADISANTOSO - ILKOM IPB
PERL
I n p u t / Ou t p u t
Mem buka dan m enut up fileopen(IN, "koleksi.txt"); open(OUT, ">hasil.txt"); open(OUT ">>hasil txt"); append close(OUT);
Mem buka dan m enut up file open(IN, "koleksi.txt"); open(OUT, ">hasil.txt"); while ($line = <IN>) {
chop($line); # buang carriage return print OUT "$line\n";
} close(IN); close(OUT);
JULIO ADISANTOSO - ILKOM IPB
PERL
Re g u la r Ex p r e ssion
Ekspresi yang digunakan unt uk m enggam barkan pola dari suat u obyek. Sering digunakan dalam pem rosesan t eks. Bahasa yang banyak m enggunakan RE adalah
PERL.
Pem rogram an m enj adi lebih singkat dan m udah.
JULIO ADISANTOSO - ILKOM IPB
PERL
Re g u la r Ex p r e ssion
\ b bat as kat a \ d digit = [ 0- 9]
\ n newline
\ r carriage ret urn \ s karakt er whit e space \ t t ab
\ w karakt er alfanum erik = [ A- Za- z0- 9] ^ awal dari st ring
$ akhir dari st ring
JULIO ADISANTOSO - ILKOM IPB
PERL
Re g u la r Ex p r e ssion
. karakt er apapun
[ bdkp] karakt er b, d, k dan p [ a- f] karakt er a sam pai f
[ ^ a- f] sem ua karakt er kecuali a sam pai f abc| def st ring abc at au st ring def
* nol at au beberapa kali
+ sekali at au beberapa kali
? nol at au sat u kali
qw( ) ( "quot e word") funct ion
qw( aa bb cc) ( " aa" , " bb" , " cc" )
PERL
Re g u la r Ex p r e ssion
/(ab)*(de)+/ abde abbde bde abadde ababde
PERL
Re g u la r Ex p r e ssion
/c[ad]r/ car, cdr cadr, caddddr
/c[ad]*r/
car, cdr, caaaadr, caaadaaar
/[a-g][t-z][0-9]*/ au125
JULIO ADISANTOSO - ILKOM IPB
PERL
Pe n g ola h a n St r in g
Pola st ring // $kata=~/tan/; $kata=~/^tan/; $kata=~/tan$/;
Mengubah bagian st ring s/// $kalimat=~s/minyak/BBM/; $kalimat=~s/minyak/BBM/g; $kalimat=~s/minyak/BBM/gi; Mengubah karakt ertr///
$kata=~tr/[A-Z]/[a-z]/;
JULIO ADISANTOSO - ILKOM IPB
PERL
Fu n g si SPLI T
Unt uk t okenisasi, m endapat kan kat a dari suat u kalim at dengan pem isah ( delim it er) t ert ent u. split ( / / / ) ;
Cont oh
$kalimat= "Petani alami gagal panen"; @kata=split(/\s+/, $kalimat);
m aka array
@kata=("Petani", "alami", "gagal", "panen")
JULIO ADISANTOSO - ILKOM IPB
PERL
Con t oh Pr og r a m
$kalimat="Harga minyak sekarang turun. Sebelumnya harga minyak naik. Sekarang harga minyak turun lagi";
$kalimat =~ tr/[A-Z]/[a-z]/; @kata = split(/\s+/, $kalimat); foreach $token(@kata) {
print "$token\n"; }
JULIO ADISANTOSO - ILKOM IPB
PERL
Con t oh Pr og r a m
open (IN, "dokumen.txt") || die; while($line = <IN>)
{
chomp($line); #buang carriage return $line =~ s/^\s*//; #buang whitespace $line =~ s/\s*$//;
reset @arraykata;
@arraykata = split /\s+/, $line; #untuk setiap kata
foreach $kata(@arraykata) { $kata =~ tr/[A-Z]/[a-z]/; $kata =~ s/[!.,()*]|\"//g; $freq{$kata}++;
} }
# Mencetak daftar kata, sort by frekuensi foreach $key (sort{$freq{$b}<=>$freq{$a}}keys %freq){
print "$key - $freq{$key}\n"; }