Perancangan Proses Perangkat Lunak

4.1 Perancangan Proses Perangkat Lunak

Pada bagian ini dipaparkan interaksi antar objek yang penyajiannya berdasarkan setiap fungsi yang ada pada aplikasi dengan menggunakan sequence diagram. Sequence diagram dibuat berdasarkan pemodelan interaksi antar class yang dibangun.

4.1.1 Proses Membaca Teks

Interaksi antar objek pada proses membaca teks disajikan pada Gambar 14 dan Tabel 23, sedangkan logika proses untuk proses membaca teks dapat dilihat pada Tabel 24 hingga Tabel 26.

Gambar 14 Sequence diagram membaca teks Tabel 23 Deskripsi sequence diagram membaca teks

ID Sequence Diagram

SD-MT-1.0

Nama Sequence Diagram SD – Membaca Teks

ID Use Case

UC –1

ID Requirement

REQ-001

Nama Class Terkait

checker, textPreprocessing Sequence diagram ini menjelaskan proses yang

Deskripsi

dilakukan untuk membaca teks pada aplikasi. readText(inputText), textPreprocessing(token),

Method yang Terkait

tokenizing(token), filtering(token), caseFolding(token)

Pada Tabel 24 hingga Tabel 26 disajikan penjelasan dari setiap proses yang terdapat pada proses membaca teks dalam bentuk logika proses.

Tabel 24 Logika proses untuk proses tokenizing

Class

textPreprocessing

Nama Method

Tokenizing Proses yang dilakukan untuk memecah teks menjadi token-

Teks: String

Output

Token[]: Token

Logika Proses

Deklarasi tokens : Token[] sentences,t : String[] i,j : integer Begin

sentences ← split(teks, ‘([.|?|!]\s|\n)’) for i ← 0 to size(sentences) t ← split(sentences[i], ‘(\s)’) for j ← 0 to size(t) tokens[i].value ← t[j] tokens[i].sentence ← i+1

end for end for return token[]

end

Tabel 25 Logika proses untuk proses filtering

Class

TextPreprocessing

Nama Method

Filtering Proses yang dilakukan untuk mem-filter token yang dianggap

Deskripsi

penting, sehingga tidak semua token dilakukan pemeriksaan

Input

token[]: Token

Output

token[]: Token

Logika Proses

Deklarasi sentences,t : String[] i,j : integer Begin

token ← stopwordRemoval(token) for i ← 0 to size(token)

if length(token[i]) = 1 if length(token[i]) = 1

if not match( ‘^[a-zA-Z-]+(.|,|?|!|[a-z])’, token[])

token[i].status ← ‘X’ Else token[i].status ← 1 end if End if end for return token[]

end

Tabel 26 Logika proses untuk proses stopword removal

Class

TextPreprocessing

Nama Method

stopwordRemoval Proses yang dilakukan untuk mem-filter token yang

Deskripsi

merupakan stopword

Input

token[]: Token

Output

token[]: Token

Logika Proses

Deklarasi Stopword : String[] Begin

Stopword ← getStopword() for i ← 0 to size(token)

if contain(stopword, token[i].value) token[i].status ← 0 Else end for return token[]

end

4.1.2 Proses Membaca Dokumen

Dalam proses membaca dokumen, tahapan pertama yang dilakukan ialah membaca dokumen, kemudian teks yang terbaca ditampilkan. Selanjutnya dilakukan proses text preprocessing seperti yang dijelaskan pada

Gambar 15 dan Tabel 27.

Gambar 15 Sequence diagram upload dokumen Tabel 27 Deskripsi sequence diagram membaca teks (dokumen)

ID Sequence Diagram

SD-MTU-1.0

Nama Sequence Diagram SD – Membaca Teks (Dokumen)

ID Use Case

UC –2

ID Requirement

REQ-001

Nama Class Terkait

documentReader, storage, textPreprocessing Sequence diagram ini menjelaskan proses yang

Deskripsi

dilakukan dalam proses upload dokumen pada aplikasi. readDocument(doc), showText(docText),

Method yang Terkait

textPreprocessing(token), tokenizing(token), filtering(token), caseFolding(token)

4.1.3 Proses Pemeriksaan Ejaan

Sequence diagram pada Gambar 16 dan Gambar 17 menggambarkan urutan proses pemeriksaan pada aplikasi, yaitu pemeriksaan kesalahan tipografi dan morfologis, kemudian pemeriksaan kesalahan penggabungan dan pemisahan kata.

Gambar 16 Sequence diagram pemeriksaan ejaan Tabel 28 Deskripsi sequence diagram pemeriksaan ejaan

ID Sequence Diagram

SD-PE-1.0

Nama Sequence Diagram SD – Pemeriksaan Ejaan

ID Use Case ID Requirement

REQ-002

Nama Class Terkait

checker

Deskripsi

Sequence Diagram ini menjelaskan urutan proses pemeriksaan yang dilakukan aplikasi.

Method yang Terkait

check(token), checkTypoMorfology(token), checkPenggabungan(token)

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 Sequence diagram pemeriksaan kesalahan tipografi dan morfologis

Tabel 29 Deskripsi sequence diagram pemeriksaan kesalahan tipografi dan morfologis

ID Sequence Diagram

SD-TM-1.0

Nama Sequence Diagram SD – Pemeriksaan Kesalahan Tipografi dan Morfologis

ID Use Case

UC –3

ID Requirement

REQ-002

Nama Class Terkait

checker, textPreprocessing, morphologicalAnalyzer

Deskripsi

Sequence Diagram ini menjelaskan proses yang dilakukan aplikasi pada saat pemeriksaan kesalahan tipografi dan morfologis.

analyze(token), setError(token), setCorrect(token) Pada Tabel 30 sampai dengan Tabel 47 merupakan penjelasan dari setiap proses

Method yang Terkait

yang terdapat pada pemeriksaan kesalahan tipografi dan morfologi yang dijelaskan dalam bentuk logika proses.

Tabel 30 Logika proses untuk proses mark as correct

Class

Checker

Nama Method

setCorrect Proses yang dilakukan untuk mengubah status token menjadi

Deskripsi

benar dalam setiap pemeriksaan kesalahan ejaan

Logika Proses

Begin If token.status = 3 token.status ← 0 Else token.status++ End if End

Tabel 31 Logika proses untuk proses mark as error

Class

Checker

Nama Method

setError Proses yang dilakukan untuk mengubah status token menjadi

Deskripsi

salah dalam setiap pemeriksaan kesalahan ejaan

Input

Token

Output

Logika Proses

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

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 regular expression ^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 possessive pronoun dan partikel.

4. Remove Derivational Suffix, penghilangan akhiran.

5. Remove Derivational Prefix, penghilangan prefix plain 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

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 Untuk menghilangkan partikel dan kata ganti kepunyaan

Deskripsi

(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

Class

MorphologycalAnalyzer

Nama Method

deleteDerSuffix Untuk menghilangkan afiks yang termasuk derivational suffix (-i,-

Deskripsi

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

Tabel 35 Logika proses untuk proses remove derivational prefix

Class

MorphologycalAnalyzer

Nama Method

deleteDerPrefix Untuk menghilangkan prefix pada satu kata. Prefix yang

Deskripsi

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

Class

MorphologycalAnalyzer

Nama Method

deletePersonalPronoun Untuk menghilangkan prefix yang termasuk pada kategori kata

Deskripsi

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

Tabel 37 Logika proses untuk proses rule precedence checking

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 break; while(data NOT EOF) if(match(word, data.rule)) then status ← true break;

Query – Q1

SELECT * FROM morphology_rule WHERE id_type = 7

Tabel 38 Logika proses untuk proses allowed combination checking

Class

MorphologycalAnalyzer

Nama Method

checkAllowedCombination Untuk memeriksa prefix yang dihilangkan termasuk kombinasi

Deskripsi

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

SELECT * FROM morphology_rule WHERE id_type=7 AND rule=[param]

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

SELECT * FROM morphology_rule WHERE id_type=[param]

Tabel 40 Logika proses untuk proses generate rule

Class

MorphologycalAnalyzer

Nama Method

generateRule Untuk menghasilkan rule dalam notasi regular expression (regex)

Deskripsi

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

Tabel 41 Logika proses untuk proses analisis morfologi

Class

MorphologycalAnalyzer

Nama Method

Analyze

Untuk melakukan proses analisis morfologi dengan pengilangan

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 t rack ← {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 break

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

Tabel 42 Logika proses untuk proses lookup

Class

MorphologycalAnalyzer

Nama Method

Lookup Untuk memeriksa ketersediaan suatu kata pada daftar kata dasar

Deskripsi

Bahasa Indonesia

Input

word : String

Output

found : String

Logika Proses

Deklarasi result : string check : array of string data : record[ id : integer lemma : string pos : string ] {representasi data untuk table lemma di database}

Begin resul t ← 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 da ta ← 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]

Tabel 43 Logika proses untuk proses recoding

Class

MorphologycalAnalyzer

Nama Method

Recoding untuk mengembalikan dan mengubah afiks yang telah dihilangkan

Deskripsi

menjadi afiks lain

Input

word : String

Output

result : String

Logika Proses

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

Tabel 44 Logika proses untuk proses generate word

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

newWord ← word newWord ← word

End

Tabel 45 Logika proses untuk proses disallowed pair

Class

MorphologycalAnalyzer

Nama Method

hasDisallowedPairs Untuk memeriksa sebuah kata memiliki pasangan prefix-suffix

Deskripsi

yang tidak diperbolehkan.

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

SELECT * FROM morphology_rule WHERE id_type=8

Tabel 46 Logika proses untuk proses search affix

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

Tabel 47 Logika proses untuk proses get recoding rule

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 Declare recodingTrack : Array of Affix[ id : String affix : String stemRule : String

For i = 0 to size(recodingTrack) If recodingTrack[j].id = id then return recodingTrack[j].stemRule end if End for return ‘‘

End

4.1.5 Proses Pemeriksaan Kesalahan Penggabungan dan Pemisahan Kata

Proses ini merupakan proses pemeriksaan ejaan untuk kesalahan pemisahan dan penggabungan kata. Proses pemeriksaan dilakukan dengan memeriksa aturan kelas kata pada rule word. Kemudian pemeriksaan dilanjutkan dengan pemeriksaan kata gabung. Pemeriksaan dilakukan pada setiap token yang tidak memiliki kesalahan tipografi atau morfologis. Pada Gambar 16 dijelaskan lebih detail mengenai alur dari proses pemeriksaan untuk kasus kesalahan pemisahan dan penggabungan.

Gambar 18 Sequence diagram pemeriksaan kesalahan penggabungan dan pemisahan kata

Tabel 48 Deskripsi sequence diagram pemeriksaan kesalahan penggabungan dan

pemisahan kata

ID Sequence Diagram

SD-PK-1.0

Nama Sequence

SD – Pemeriksaan Kesalahan Penggabungan dan

Diagram

Pemisahan Kata

ID Use Case

UC –4

ID Requirement

REQ-002

Nama Class Terkait

checker, model, ruleWord Sequence Diagram ini menjelaskan proses yang

Deskripsi

dilakukan aplikasi pada saat pemeriksaan kesalahan penulisan kata (penggabungan dan pemisahan kata). checkPenggabungan(token), checkRuleWord(token, getKelasKata(token), nextToken),

Method yang Terkait

getKataGabung(token), isKataGabung(token), checkKataGabung(token), setError(token), setCorrect(token)

Berikut merupakan logika proses dari pemeriksaan kesalahan penggabungan dan pemisahan kata.

Tabel 49 Logika proses untuk proses check penggabungan

Class

Checker

Nama Method

checkPenggabungan

Deskripsi

Untuk melakukan pemeriksaan kesalahan penggabungan kata

Input

token : String[]

Output

Logika Proses

Declare kataGabung : String Begin

For i = 0 to size(token)-1 kataGabung ← getKataGabung(token[i]) If isKataGabung(kataGabung,token[i+1]) setError() else setCorrect() end if

End for End

Tabel 50 Logika proses untuk proses pemeriksaan kata gabung

Class

Checker

Nama Method

isKataGabung

Deskripsi

Untuk melakukan pemeriksaan kata gabung

Input

Token : String, nextToken : String

Output

Boolean

Logika Proses

Declare newToken : String Begin

newToken ← token + nextToken {Pemeriksaan ke database}

if(Model.checkKataGabung(newToken)) then return true else return false end if End

Tabel 51 Logika proses untuk proses pemeriksaan kata gabung ke database

Class

Model

Nama Method

checkKataGabung

Deskripsi

Untuk melakukan pemeriksaan kata gabung ke database

Input

Word : String

Output

Boolean

Logika Proses

Declare newToken : String data : record[ id : integer lemma : String pos : String ] Begin Declare newToken : String data : record[ id : integer lemma : String pos : String ] Begin

Return true Else Return false end if End

Query – Q1

SELECT * FROM lemma WHERE lemma = [param]

Tabel 52 Logika proses untuk proses get kelas kata

Class

Model

Nama Method

getKelasKata

Deskripsi

Untuk mengambil kelas kata dari data kata di database

Input

token : String

Output

String

Logika Proses

Declare data : record[ id : integer lemma : String pos : String ] Begin

data ← getQuery(Q1, word) If data NOT null then

Return data.pos Else Return ‘‘ end if End

Query – Q1

SELECT * FROM lemma WHERE lemma = [param]

Tabel 53 Logika proses untuk proses pemeriksaan yang memanfaatkan kelas kata

Class

RuleWord

Nama Method

checkRuleWord

Untuk memeriksa aturan pemisahan/penggabungan kata yang

Deskripsi

memanfaatkan kelas kata

Input

token : String, nextToken : String

Output

status : Boolean

Logika Proses

Declare Data : record[ Id : int Rule : String Pos : string ] {representasi data dari database} Begin {Get Aturan Pengabungan}

data ← getQuery(Q1) while data !EOF

if data.rule = token then pos ← Model.getKelas(nextToken) if pos = data.pos then return true end if end if end while

{Get Aturan Pemisahan} data ← getQuery(Q2)

while data !EOF if token.contain(data.rule) then pos ← Model.getKelas(token.replace(data.rule)) if pos = data.pos then return true end if end if end while

return false End

Query – Q1

SELECT * FROM rule_word WHERE id_type = 10

Query – Q2

SELECT * FROM rule_word WHERE id_type = 11