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