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