• Tidak ada hasil yang ditemukan

Proses Pemeriksaan Kesalahan Tipografi dan Morfologis

Dalam dokumen Aplikasi Pemeriksa Ejaan untuk Tulisan I (Halaman 95-111)

BAB IV PERANCANGAN

4.1 Perancangan Proses Perangkat Lunak

4.1.4 Proses Pemeriksaan Kesalahan Tipografi dan Morfologis

Pada Gambar 17 dan Tabel 29 menggambarkan urutan proses pemeriksaan tipografi dan morfologis. Proses pemeriksaan tipografi dan morfoloogis menggunakan algoritma Lemmatization yang telah dimodifikasi sesuai dengan hasil analisis dari

Gambar 17 Sequencediagram pemeriksaan kesalahan tipografi dan morfologis Tabel 29 Deskripsi sequencediagram pemeriksaan kesalahan tipografi dan

morfologis

Nama SequenceDiagram SD – Pemeriksaan Kesalahan Tipografi dan Morfologis

IDUseCase UC – 3

IDRequirement REQ-002

Nama Class Terkait checker, textPreprocessing, morphologicalAnalyzer Deskripsi Sequence Diagram ini menjelaskan proses yang

dilakukan aplikasi pada saat pemeriksaan kesalahan tipografi dan morfologis.

Method yang Terkait analyze(token), setError(token), setCorrect(token)

Pada Tabel 30 sampai dengan Tabel 47 merupakan penjelasan dari setiap proses yang terdapat pada pemeriksaan kesalahan tipografi dan morfologi yang dijelaskan dalam bentuk logika proses.

Tabel 30 Logika proses untuk proses markascorrect

Tabel 31 Logika proses untuk proses mark as error

Class Checker

Nama Method setCorrect

Deskripsi Proses yang dilakukan untuk mengubah status token menjadi benar dalam setiap pemeriksaan kesalahan ejaan

Input Token Output - Logika Proses Begin If token.status = 3 token.status ← 0 Else token.status++ End if End Class Checker

Nama Method setError

Deskripsi Proses yang dilakukan untuk mengubah status token menjadi salah dalam setiap pemeriksaan kesalahan ejaan

Proses pemeriksaan untuk kesalahan tipografi dan morfologis menggunakan proses analisis morfologi dengan cara menghilangkan setiap kemungkinan imbuhan pada suatu kata. Aturan pemeriksaan imbuhan ditransformasi ke dalam notasi regular expression. Hal ini dilakukan agar memudahkan proses pemeriksaan.

Sebagai contoh, aturan pemeriksaan untuk imbuhan be- (berV…) ditransformasi menjadi notasi regularexpression^ber[aiueo].

Dalam proses analisis morfologi, terdapat proses-proses yang diperlukan sesuai dengan hasil analisis (Lihat Bab 3, subbab 3.9.4). Proses-proses yang dimaksud adalah sebagai berikut.

1. Remove Personal Pronoun, penghilangan prefiks kata ganti orang. 2. Check Rule Precedence, penentuan urutan penghapusan.

3. Remove Inflectional Suffix, penghilangan possessivepronoun dan partikel. 4. Remove Derivational Suffix, penghilangan akhiran.

5. Remove Derivational Prefix, penghilangan prefixplain dan complex. 6. Recoding, pengubahan (transformasi) prefiks yang dihilangkan. 7. Affix Backtracking, pengembalian afiks.

8. Lookup, pencarian kata pada daftar kata dasar.

9. Dissalowed Affix Pair Check, pemeriksaan pasangan afiks yang tidak diperbolehkan.

Dari hasil analisis, terdapat 8 tipe aturan yang dideskripsikan pada knowledge base morphology rule yang dijelaskan pada Tabel 32.

Tabel 32 Daftar rule type pada morphology rule

Output - Logika Proses Begin If token.status >= 1 token.status ← token.status + 3 Else token.status ← ‘X’ End if End

No. Rule Type 1. Personal Pronoun 2. Prefix Plain 3. Prefix Complex 4. Derivational Suffix 5. Posessive Pronoun 6. Particle 7. Precedence Rule 8. Allowed Combination 9. Dissalowed Affix Pairs

Logika proses dari setiap proses-proses yang dibutuhkan oleh Morphologycal Analyser disajikan pada Tabel 33 hingga Tabel 53.

Tabel 33 Logika proses untuk proses delete inflectional suffix

Class MorphologycalAnalyzer

Nama Method deleteInflectionalSuffix

Deskripsi Untuk menghilangkan partikel dan kata ganti kepunyaan (possessive pronoun) secara berurutan.

Input word :String

Output result : String

Logika Proses

Declare

result : String Begin

result ← word

{Delete Particle (id type = 6)}

result ← affixRemoval(result, 6)

{Delete Possesive Pronoun (id type = 5)}

result ← affixRemoval(result, 5)

return result End

Tabel 34 Logika proses untuk proses delete derivational suffix

Tabel 35 Logika proses untuk proses remove derivational prefix

Class MorphologycalAnalyzer

Nama Method deleteDerSuffix

Deskripsi Untuk menghilangkan afiks yang termasuk derivational suffix (-i,-an,-kan) pada satu kata.

Input word :String

Output result : String

Logika Proses

Declare

result : String Begin

result ← word

{Delete Derivational Suffix (id type = 4)}

result ← affixRemoval(result, 4)

return result End

Class MorphologycalAnalyzer

Nama Method deleteDerPrefix Deskripsi

Untuk menghilangkan prefix pada satu kata. Prefix yang

dihilangkan ialah prefix yang termasuk kategori prefix plain dan juga prefix complex

Input word :String

Output result : String

Logika Proses

Declare

result : String Begin

result ← word

{Delete Prefix Plain (id type = 2)}

result ← affixRemoval(result, 2)

{Delete Prefix Complex (id type = 3)}

result ← affixRemoval(result, 3)

return result End

Tabel 36 Logika proses untuk proses remove personal pronoun

Tabel 37 Logika proses untuk proses rule precedence checking

Class MorphologycalAnalyzer

Nama Method deletePersonalPronoun

Deskripsi Untuk menghilangkan prefix yang termasuk pada kategori kata ganti orang (personal pronoun) (ku-, dank kau-)

Input word :String

Output result : String

Logika Proses

Declare

result : String Begin

result ← word

{Delete Prefix Plain (id type = 1)}

result ← affixRemoval(result, 1)

return result End

Class MorphologycalAnalyzer

Nama Method checkRulePrecedence

Deskripsi Untuk menentukan urutan penghilangan afiks dari suatu kata

Input word :String

Output status : Boolean

Logika Proses Declare status : Boolean data : record[ id_rule : Integer rule : String stem_rule : String type : Integer description : String

] {representasi data yang diambil dari database} Begin

status ← false data ← getQuery(Q1)

while(data NOT EOF)

if(match(word, data.rule)) then status ← true

Tabel 38 Logika proses untuk proses allowed combination checking end if end while return status End Query – Q1

SELECT * FROM morphology_rule WHERE id_type = 7

Class MorphologycalAnalyzer

Nama Method checkAllowedCombination

Deskripsi Untuk memeriksa prefix yang dihilangkan termasuk kombinasi prefix yang diperbolehkan

Input affix :String

Output status : Boolean

Logika Proses Declare status : Boolean data : record[ id_rule : Integer rule : String stem_rule : String type : Integer description : String

] {representasi data yang diambil dari database}

prefix : Affix[] {variable penampung prefix yang telah terhapus} comb : String {variable penampung kombinasi prefix-prefix}

Begin

If size(prefix) >= 2

comb ← prefix[size(prefix)-1].affix + prefix[size(prefix)-2].affix

data ← getQuery(Q1,affix) {query, param}

while data NOT EOF

if data.rule = comb return true end while

return false End

Query – Q1

Tabel 39 Logika proses untuk proses remove affix

Class MorphologycalAnalyzer Nama Method affixRemoval

Deskripsi Untuk menghilangkan prefix atau suffix

Input word : String, type : integer

Output status : Boolean

Logika Proses Declare data : record[ id_rule : Integer rule : String stem_rule : String type : Integer description : String

] {representasi data yang diambil dari database}

Prefix, suffix, recodingTrack : Affix[] {variable penampung prefix, suffix yang telah terhapus, dan track recoding } comb : String {variable penampung kombinasi prefix-prefix} result : String

Begin

result ← word

while data NOT EOF

if match(result, data.rule) then {remove affix}

result ← removing(data.stem_rule[0], data.rule, result)

if type < 4 then if(!checkAllowedCombination(split(data.stem_rule[0],’ -’)) then return result end if prefix.add(data.id_rule,data.stem_rule[0], data.id_type) else

suffix.add(data.id_rule, match(0), data.id_type) end if

{add recoding track}

If(size(data.stem_rule) > 1) then recodingTrack.add(data.id_rule, data.stem_rule[1]) End if Return result end while return result End Query – Q1

Tabel 40 Logika proses untuk proses generate rule

Tabel 41 Logika proses untuk proses analisis morfologi

Class MorphologycalAnalyzer

Nama Method generateRule

Deskripsi Untuk menghasilkan rule dalam notasi regular expression (regex) dari suatu rule

Input rule: String, type : String

Output newRule : String

Logika Proses Deklarasi newRule : String alpha : String vowel : String consonant : String Begin

{Regex untuk alfabel, huruf vocal, dan konsonan}

alpha ← ‘[a-z]+-?[a-z]*’ vowel ← ‘[aiueo]’

consonant ← ‘[bcdfghjklmnpqrstvwxyz]’ newRule ← rule

if type = 1 OR type = 2 OR type = 3 then newRule ← ‘^’ + newRule

else if type = 4 OR type = 5 OR type = 6 newRule ← newRule + ‘$’

else if type = 7

newRule ← ‘^’ + newRule + ‘$’

else if type = 8

newRule ← ‘^’ + replace(newRule,’stem’,’’)+ ‘$’

end if

newRule ← replace(newRule,’+V’,vowel)

newRule ← replace(newRule,’+A’,alpha)

newRule ← replace(newRule,’+C’,consonant)

newRule ← replace(newRule,’+’,’’)

newRule ← replace(newRule,’{‘,’(‘)

newRule ← replace(newRule,’}’,’)+’) return newRule

End

Class MorphologycalAnalyzer

Deskripsi Untuk melakukan proses analisis morfologi dengan pengilangan afiks

Input Word : String, backtrack : Boolean

Output result : String

Logika Proses

Declare

result : String

stem : String {variable yang menampung kata dasar dari sebuah kata}

isPrecedence : Boolean

track : array of integer {variable yang menampung tahapan proses penghapusan affix}

back : Boolean {variable untuk menampung status bactracking} Begin result ← word if lookup(result) != ‘‘ then stem ← result return true end if

{1. Delete Personal Pronoun}

result ← deletePersonalPronoun(result)

{2. Check Rule Precedence}

isPrecedence ← checkRulePrecedence(result) if backtrack then track ← {5,6} else if isPrecedence then track ← {5,6,3,4,7} else track ← {3,4,5,6,7} end if end if for i = 0 to size(track) switch track[i]

{3. Delete Inflectional Suffix} case 3 :

temp ← deleteInflectionalSuffix(result) break

{4. Delete Derivational Suffix} case 4 :

temp ← deleteDerSuffix(result)

break

{5. Delete Derivational Prefix} case 5 : temp ← result maxRemoving ← 3 for i = 0 to maxRemoving temp ← deleteDerPrefix(temp) if hasDissalowedPairs() OR lookup(temp) break

Tabel 42 Logika proses untuk proses lookup end if end for break {6. Recoding} case 6 :

temp ← recoding(result) break

{7. Affix Backtracking} case 7 :

for i = size(prefix)-1 down to 0

temp ← generateWord(prefix[i].stemRule), temp)

end for prefix ← null back ← analyze(temp,true) if lookup(temp) then break end if {Suffix Backtracking} If size(suffix) > 0 then

for i = size(suffix)-1 down to 0

temp ← generateWord(suffix[i].stemRule,temp) prefix ← null back ← analyze(temp,true) if lookup(temp) then break end if end for End if break end switch if lookup(temp)

return true {kata benar} end if

result ← temp

end for

return false {kata salah} End

Class MorphologycalAnalyzer

Nama Method Lookup

Deskripsi Untuk memeriksa ketersediaan suatu kata pada daftar kata dasar Bahasa Indonesia

Input word : String

Output found : String

Tabel 43 Logika proses untuk proses recoding

Deklarasi

result : string

check : array of string data : record[

id : integer lemma : string pos : string

] {representasi data untuk table lemma di database} Begin result ← word if length(word) > 2 then if isKataBerulang(word) then check ← split(word, ‘-’) else check ← searchLemma(word) end if if(size(check) > 1) then

data ← getQuery(Q1, [check[0],check[i])

else data ← getQuery(Q2, check[0]) end if if data != null return true else return false end if End Query – Q1

SELECT * FROM kata_dasar WHERE kata_dasar = [param1] AND kata_dasar = [param2]

Query – Q2

SELECT * FROM kata_dasar WHERE kata_dasar = [param]

Class MorphologycalAnalyzer

Nama Method Recoding

Deskripsi untuk mengembalikan dan mengubah afiks yang telah dihilangkan menjadi afiks lain

Input word : String

Output result : String

Tabel 44 Logika proses untuk proses generate word

Deklarasi

Result, temp : String

recode : String {variable penampung recode rule dari suatu affix}

Begin

result ← word

for i ← size(prefix)-1 down to 0

recode ← getRecodingRule(prefix[i].id) {return recoding rule

dari recoding track} if recode != ‘‘ then

result ← generateWord(prefix[i].stemRule, result)

{Mencoba melakukan penghilangan dengan rule lain} temp ← removing(recode, result)

if lookup(temp)

prefix[i].stemRule ← recode {mengganti stem rule}

end if log ← temp

{Delete Der. Prefix} For I = 0 to 3 then

temp ← deleteDerPrefix(log)

if hasDissalowedPairs() then break {error} else if lookup(temp) then return log {success} end if

End if

deleteUnusedPrefix()

if(lookup(temp)) return temp {success}

result ← temp

else

result ← generateWord(prefix[i].stemRule, result) end if

return result End

Class MorphologycalAnalyzer

Nama Method generateWord

Deskripsi Untuk membentuk kata dari aturan penghapusan

Input stemRule : String, word :String

Output newWord : String

Logika Proses

Declare

newWord : String

affix : Array of String Begin

Tabel 45 Logika proses untuk proses disallowed pair affix ← split(stemRule, ‘-’)

{Jika awalan merupakan tanda *, newWord = word + affix}

If affix[0] = ‘*’ then

newWord ← newWord + affix[1]

else

newWord ← affix[0] + newWord

end if

return newWord End

Class MorphologycalAnalyzer

Nama Method hasDisallowedPairs

Deskripsi Untuk memeriksa sebuah kata memiliki pasangan prefix-suffix yang tidak diperbolehkan.

Input -

Output Boolean

Logika Proses

Declare

pref, suff : String Begin

{mengambil prefix plain atau prefix complex yang telah terhapus}

pref ← searchAffix(2,3)

{mengambil derivational suffix yang telah terhapus}

suff ← searchAffix(3)

data ← getQuery(Q1)

if data NOT null then while data NOT EOF

{check pasangan prefix dan suffix}

if match(data.stem_rule, pref+suff) then return true end if end while return false else return false end if End Query – Q1

Tabel 46 Logika proses untuk proses search affix

Tabel 47 Logika proses untuk proses get recoding rule

Class MorphologycalAnalyzer

Nama Method searchAffix

Deskripsi Untuk mengambil afiks yang telah terhapus berdasarkan tipe afiks

Input type : array of integer

Output String

Logika Proses

Declare

track : Array of Affix[ id : String affix : String stemRue : String type : integer ] Begin For i = 0 to size(type)

If type[i] < 3 then track ← prefix

Else track ← suffix

End if For j = 0 to size(track) If track[j].type = t then return track[j].affix end if End for End for End Class MorphologycalAnalyzer

Nama Method getRecodingRule

Deskripsi Untuk mengambil afiks yang telah terhapus berdasarkan tipe afiks

Input id : String

Output String

Logika Proses

Declare

recodingTrack : Array of Affix[ id : String

affix : String stemRule : String

Dalam dokumen Aplikasi Pemeriksa Ejaan untuk Tulisan I (Halaman 95-111)

Dokumen terkait