diff options
| author | Shulhan <m.shulhan@gmail.com> | 2020-03-28 16:33:47 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2020-03-28 16:33:47 +0700 |
| commit | 7ba65e8fa06ab9212e4a7028863f6d33adedd5a0 (patch) | |
| tree | b4d12487767e78fbba5a6156092e149829160dac | |
| parent | 23a277ba6c3513346e29d39c5b2226219981fce0 (diff) | |
| download | kamusku-7ba65e8fa06ab9212e4a7028863f6d33adedd5a0.tar.xz | |
kbbi: urai dan cetak contoh kalimat dalam definisi kata
| -rw-r--r-- | cmd/kbbi/main.go | 12 | ||||
| -rw-r--r-- | definisi_kata.go | 38 |
2 files changed, 44 insertions, 6 deletions
diff --git a/cmd/kbbi/main.go b/cmd/kbbi/main.go index 2f7a322..f05e139 100644 --- a/cmd/kbbi/main.go +++ b/cmd/kbbi/main.go @@ -87,8 +87,16 @@ func main() { } fmt.Println("===", kata, ":", pesan) - for _, defKata := range daftarDefinisi { - fmt.Printf("\t%s: %s\n", defKata.Nomina, defKata.Isi) + for x, defKata := range daftarDefinisi { + fmt.Printf(" Definisi %d: %s\n", x+1, defKata.Isi) + + for y, nomina := range defKata.Kelas { + fmt.Printf(" Kelas #%d: %s\n", y+1, nomina) + } + for z, contoh := range defKata.Contoh { + fmt.Printf(" Contoh #%d: %s\n", z+1, contoh) + } + fmt.Println() } } } diff --git a/definisi_kata.go b/definisi_kata.go index 9bd3368..f1ac008 100644 --- a/definisi_kata.go +++ b/definisi_kata.go @@ -5,12 +5,15 @@ package kbbi import ( + "strings" + "golang.org/x/net/html" ) type DefinisiKata struct { - Nomina []string - Isi string + Kelas []string `json:"kelas"` + Isi string `json:"isi"` + Contoh []string `json:"contoh"` } func parseDefinisiKata(li *html.Node) (defKata *DefinisiKata) { @@ -31,13 +34,40 @@ func parseDefinisiKata(li *html.Node) (defKata *DefinisiKata) { if attr.Key != attrNameTitle { continue } - defKata.Nomina = append(defKata.Nomina, attr.Val) + attrVal := strings.Trim(attr.Val, "[]") + defKata.Kelas = append(defKata.Kelas, attrVal) } elSpan = getNextSibling(elSpan) } el := getNextSibling(elFont) - defKata.Isi = el.Data + defKata.Isi = strings.TrimSpace(el.Data) + + if defKata.Isi[len(defKata.Isi)-1] != ':' { + return defKata + } + + defKata.Isi = defKata.Isi[:len(defKata.Isi)-1] + + // Parse the example of kata in the next sibling. + el = getNextSibling(el) + for el != nil { + if el.Data != tagNameFont { + break + } + + elItalic = getFirstChild(el) + if elItalic.Data != tagNameItalic { + break + } + + elText := getFirstChild(elItalic) + if elText != nil { + defKata.Contoh = append(defKata.Contoh, elText.Data) + } + + el = getNextSibling(el) + } return defKata } |
