Alief’s Update — Week 8
Di awal sprint ini, saya berniat untuk mengerahkan seluruh kekuatan yang saya punya. Niat ini saya awali dengan, melihat daftar kompetensi yang diberikan. Kemudian men-list seluruh kompetensi yang saya bisa ambil dan membuat daftar pekerjaan apa saja yang saya lakukan untuk mendapatkan itu. Setelah itu saya langsung mengerjakan task-task yang diberikan kepada saya, terutama task yang masih bawaan sprint berikutnya. Namun semangat ini hanya bertahan selama 1–2 hari. Anyway, Berikut informasi detilnya :
Spent Time : 210 minutes
Completed
- Membangun Code Filter
Kelas yang saya buat
a. TreeNode
Code : TreeNode.java
Kelas ini berfungsi untuk merubah kata-kata yang menyerupai struktur tree, menjadi kata-kata yang menyerupai struktur tree namun hanya sampai level 2.
Misal (*hanya ilustrasi)
input : (ROOT (NP (NNP Ibu) (NNP Membeli)) (VP (NNP Sayur) (NNP Dipasar))
jika divisualisasikan sebagai tree makan akan seperti
ROOT — NP — NNP — Ibu
````````````NNP — Membeli
````````VP — NNP — Sayur
`````````````NNP — Dipasar
output : (NP Ibu Membeli) (VP Sayur Dipasar)
Untuk implementasinya saya menggunakan struktur data n-ary tree, yang setiap node nya menyimpan label(jenis katanya) dan value(katanya).
Tree dibentuk melalui method construct yang akan mem-parse input menjadi tree yang diinginkan. Dalam algoritma saya, parsing dilakukan secara linear dengan tanpa pengulangan, oleh karena itu kompleksitasnya hanya O(n). Namun ini belum selesai, karena hasil yang diinginkan ialah value yang ada pada level 2.
Barulah pada method getChildrenOfLv2 hasil akhir diperoleh. Cara kerja method ini yaitu, mengambil input dari method construct(yang berupa tree). Kemudian melakukan traversing secara level order sampai level 2 dan dilanjutkan dengan memanggil method getLeaves untuk setiap node level 2-nya. Tetapi ada kasus khsus, yakni ketika ada node yang valuenya mengandung “/PERSON” yang berarti value tersebut mengandung nama orang. Untuk kasus ini value tersebut harus di replace sesuai format yang disepakati anggota tim.
Untuk kompleksitasnya method getChildrenOfLv2 membutuhkan traversing level order sampai level ke 2, pemanggilan getLeaves, dan pemanggilan replace.
Untuk traversing sampai lv 2 + pemanggilan getLeaves kompleksitasnya dijamin tidak melebihi panjang kata-katanya, hal ini sama saja dengan melakukan level order dari root sampai leaf, sehingga kita bisa ambil upperbound-nya yaitu n.
Sedangkan untuk method replace tidak dispesifikasikan dalam javadoc.
**disclaimer: ketika menulis ini, saya baru sadar kalau getLeaves seharusnya getLeafs
b. SentenceIdentifier
Code : SentenceIdentifier.java
Kelas ini berfungsi untuk men-tag kata-kata yang didapat dari crawler sesuai jenis dari katanya.
misal (*hanya ilustrasi)
input : Ani membeli ikan dipasar
output : (PERSON Ani) (VP Membeli) (NP Ikan dipasar)
Input yang diterima sebenarnya berasal dari boilerpipe ; yang terdiri dari banyak kalimat. Oleh karenanya, jika dilakukan identifikasi jenis kata secara langsung, akan menyebabkan memory out of bound. Maka dari itu saya menambahkan kelas partialIdentify yang hanya akan mengidentifikasi jenis kata setiap dua kalimat, sehingga error memory out of bound tidak terjadi.
2. Mengintegrasikan Code
Bagian pengintegrasian code berada pada kelas QuoteFilter.java. Untuk pengintegrasian kelas-kelas yang saya buat diatas cukup mudah, yaitu hanya dengan memanggil kelas sentence identifier.
berdasarkan hasil pekejaan saya diatas, saya meng-claim kompetensi-kompetensi berikut :
- Appliying efficient algorithm and data structure
- Software Profiling
- Software Integration