diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f17e541..1c2e55f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -31,8 +31,8 @@ jobs: - name: Lint with flake8 run: | pip install flake8 - flake8 kbbi tests --count --ignore=E203 --show-source --statistics + flake8 kbbi tests --count --ignore=E203,W503 --show-source --statistics - name: Lint with isort run: | pip install isort - isort -c -df -rc -o pytest . + isort -c -df -rc -o pytest -p kbbi . diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 23e828f..c8aa387 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,6 +25,9 @@ jobs: python -m pip install --upgrade pip pip install -r requirements.txt - name: Test with pytest + env: + KBBI_POSEL: ${{ secrets.KBBI_POSEL }} + KBBI_SANDI: ${{ secrets.KBBI_SANDI }} run: | pip install pytest pytest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b5dbefa..30e9544 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,9 +9,10 @@ repos: rev: "3.7.9" hooks: - id: flake8 - args: ["--ignore=E203"] + args: ["--ignore=E203,W503"] - repo: https://github.com/timothycrosley/isort rev: "4.3.21-2" hooks: - id: isort + args: ["-o=pytest", "-p=kbbi"] diff --git a/README.md b/README.md index c5204e3..5396e1f 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,72 @@ tak.sir (2) } ``` +Untuk memanfaatkan fitur khusus pengguna, buat objek `AutentikasiKBBI` terlebih +dahulu, lalu gunakan objek tersebut dalam pembuatan objek `KBBI`. + +```python +>>> auth = AutentikasiKBBI("posel@saya.tld", "password_saya") +>>> roh = KBBI("roh", auth) +>>> print(roh) +roh +bentuk tidak baku: ruh +Etimologi: [Arab] (n) (sg) (f/m) رُوْحٌ rūh: tiupan; sesuatu yang membuat manusia dapat hidup +1. (n) sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan); nyawa: jika -- sudah berpisah dari badan, berakhirlah kehidupan seseorang +2. (n) makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya) +3. (n) (ki) semangat; spirit: kedamaian bagi seluruh warga sesuai dengan -- Islam +Gabungan Kata +roh Kudus; roh suci +``` + +Fitur khusus pengguna yang didukung saat ini adalah etimologi, entri terkait +(kata turunan, gabungan kata, peribahasa, dan kiasan), dan batas pencarian yang +lebih besar. + +Untuk mendapatkan representasi `str`-nya tanpa fitur entri terkait, gunakan +`__str__(terkait=False)`. + +```python +>>> print(roh.__str__(contoh=False, terkait=False)) +roh +bentuk tidak baku: ruh +Etimologi: [Arab] (n) (sg) (f/m) رُوْحٌ rūh: tiupan; sesuatu yang membuat manusia dapat hidup +1. (n) sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan); nyawa +2. (n) makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya) +3. (n) (ki) semangat; spirit +``` + +Untuk menonaktifkan fitur khusus pengguna (selain batas pencarian yang lebih +besar), tambahkan argumen `fitur_pengguna=False` pada pemanggilan `__str__` +atau `serialisasi`. + +Apabila ingin menyimpan kuki autentikasi, panggil *method* `simpan_kuki()` pada +objek `AutentikasiKBBI`. + +```python +>>> auth.simpan_kuki() +``` + +Berikutnya, objek `AutentikasiKBBI` dapat dibuat tanpa menggunakan alamat posel +dan sandi. Autentikasi dilakukan dengan memanfaatkan kuki yang telah disimpan. + +```python +>>> auth_baru = AutentikasiKBBI() +``` + +Lokasi penyimpanan/pembacaan kuki bisa diatur dengan parameter `lokasi_kuki` +ketika membuat objek `AutentikasiKBBI`. + +```python +>>> auth = AutentikasiKBBI("posel@saya.tld", "sandi_saya", lokasi_kuki="~/kuki_kbbi.json") +>>> auth_baru = AutentikasiKBBI(lokasi_kuki="~/kuki_kbbi.json") +``` + +Secara *default*, lokasi tersebut adalah: + +- Unix: `~/.config/kbbi/kuki.json` +- Windows: `%localappdata%\laymonage\kbbi\kuki.json` +- Mac: `~/Library/Application Support/kbbi/kuki.json` + ### Melalui CLI ``` @@ -153,7 +219,7 @@ tanda petik. $ kbbi "tanggung jawab" ``` -Apabila tidak ingin menampilkan contoh, gunakan `--tanpa-contoh` atau `-t`. +Apabila tidak ingin menampilkan contoh, gunakan `--tanpa-contoh` atau `-c`. ``` $ kbbi "tanggung jawab" --tanpa-contoh @@ -173,7 +239,37 @@ atau `-i N`. $ kbbi "tanggung jawab" --json --indentasi 2 ``` -> **Catatan:** **`kbbi`** juga bisa dipanggil dengan **`python kbbi.py`**. +Untuk memanfaatkan fitur khusus pengguna, lakukan autentikasi terlebih dahulu +dengan bantuan `kbbi-autentikasi`. + +``` +$ kbbi-autentikasi $KBBI_POSEL $KBBI_SANDI +``` + +Penggunaan `kbbi` berikutnya akan otomatis menggunakan kuki hasil autentikasi. + +Untuk menonaktifkan fitur entri terkait, gunakan `--tanpa-terkait` atau `-t`. + +``` +$ kbbi alam --tanpa-terkait +``` + +Untuk menonaktifkan semua fitur khusus pengguna (selain batas pencarian yang +lebih besar dan tanpa menghapus kuki), gunakan `--nonpengguna` atau `-n`. + +``` +$ kbbi alam --nonpengguna +``` + +Untuk menghapus kuki, gunakan opsi `--bersihkan` atau `-c`. + +``` +$ kbbi-autentikasi --bersihkan +``` + +> **Catatan:**\ +> **`kbbi`** juga bisa dipanggil dengan **`python kbbi.py`**.\ +> **`kbbi-autentikasi`** juga bisa dipanggil dengan **`python -c "import kbbi; kbbi.autentikasi()"`** ## Berkontribusi diff --git a/kbbi/kbbi.py b/kbbi/kbbi.py index 1613445..95a0bc0 100644 --- a/kbbi/kbbi.py +++ b/kbbi/kbbi.py @@ -10,30 +10,54 @@ import argparse import json +import re import sys +from pathlib import Path from urllib.parse import quote import requests +from appdirs import AppDirs from bs4 import BeautifulSoup +APPDIR = AppDirs("kbbi", "laymonage") +CONFIG_DIR = Path(APPDIR.user_config_dir) +CONFIG_DIR.mkdir(parents=True, exist_ok=True) + class KBBI: """Sebuah laman dalam KBBI daring.""" host = "https://kbbi.kemdikbud.go.id" - def __init__(self, kueri): + def __init__(self, kueri, auth=None): """Membuat objek KBBI baru berdasarkan kueri yang diberikan. :param kueri: Kata kunci pencarian :type kueri: str + :param auth: objek AutentikasiKBBI + :type auth: AutentikasiKBBI """ self.nama = kueri self._init_pranala() - laman = requests.get(self.pranala) + self._init_sesi(auth) + laman = self.sesi.get(self.pranala) + self._cek_autentikasi(laman) self._cek_galat(laman) self._init_entri(laman) + def _init_sesi(self, auth): + if auth is not None: + if not isinstance(auth, AutentikasiKBBI): + raise ValueError( + 'KBBI: "auth" harus merupakan objek AutentikasiKBBI' + ) + self.sesi = auth.sesi + else: + self.sesi = requests.Session() + + def _cek_autentikasi(self, laman): + self.terautentikasi = "loginLink" not in laman.text + def _init_pranala(self): kasus_khusus = [ "." in self.nama, @@ -61,7 +85,7 @@ def _init_entri(self, laman): for label in sup.find("hr").next_siblings: if label.name == "hr": if label.get("style") is None: - self.entri.append(Entri(estr)) + self.entri.append(Entri(estr, self.terautentikasi)) break else: continue @@ -69,11 +93,11 @@ def _init_entri(self, laman): if label.get("style") == "color:gray": continue if estr: - self.entri.append(Entri(estr)) + self.entri.append(Entri(estr, self.terautentikasi)) estr = "" estr += str(label).strip() - def serialisasi(self): + def serialisasi(self, fitur_pengguna=True): """Mengembalikan hasil serialisasi objek KBBI ini. :returns: Dictionary hasil serialisasi @@ -81,12 +105,15 @@ def serialisasi(self): """ return { "pranala": self.pranala, - "entri": [entri.serialisasi() for entri in self.entri], + "entri": [ + entri.serialisasi(fitur_pengguna) for entri in self.entri + ], } - def __str__(self, contoh=True): + def __str__(self, contoh=True, terkait=True, fitur_pengguna=True): return "\n\n".join( - entri.__str__(contoh=contoh) for entri in self.entri + entri.__str__(contoh, terkait, fitur_pengguna) + for entri in self.entri ) def __repr__(self): @@ -96,14 +123,17 @@ def __repr__(self): class Entri: """Sebuah entri dalam sebuah laman KBBI daring.""" - def __init__(self, entri_html): + def __init__(self, entri_html, terautentikasi=False): entri = BeautifulSoup(entri_html, "html.parser") judul = entri.find("h2") + self.terautentikasi = terautentikasi self._init_nama(judul) self._init_nomor(judul) self._init_kata_dasar(judul) self._init_pelafalan(judul) self._init_varian(judul) + self._init_terkait(entri) + self._init_etimologi(entri) self._init_makna(entri) def _init_nama(self, judul): @@ -131,29 +161,81 @@ def _init_pelafalan(self, judul): self.pelafalan = lafal.text.strip() if lafal else "" def _init_varian(self, judul): - varian = judul.find("small") + if self.terautentikasi: + variasi = judul.find_all("small") + varian = None + for v in variasi: + spanv = v.find("span") + if spanv and "entrisButton" in spanv.get("class", []): + continue + varian = v + else: + varian = judul.find("small") self.bentuk_tidak_baku = [] self.varian = [] - if varian: - bentuk_tidak_baku = varian.find_all("b") - if bentuk_tidak_baku: - self.bentuk_tidak_baku = "".join( - e.text.strip() for e in bentuk_tidak_baku - ).split(", ") - else: - self.varian = ( - varian.text[len("varian: ") :].strip().split(", ") - ) + if varian is None: + return + bentuk_tidak_baku = varian.find_all("b") + if bentuk_tidak_baku: + self.bentuk_tidak_baku = "".join( + e.text.strip() for e in bentuk_tidak_baku + ).split(", ") + else: + self.varian = varian.text[len("varian: ") :].strip().split(", ") + + def _init_etimologi(self, entri): + self.etimologi = None + if not self.terautentikasi: + return + etimologi = entri.find(text="Etimologi:") + if etimologi is None: + return + etimologi = etimologi.parent + etistr = "" + for eti in etimologi.next_siblings: + if eti.name == "br": + break + etistr += str(eti).strip() + self.etimologi = Etimologi(etistr) + + def _init_terkait(self, entri): + self.terkait = { + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [], + } + if not self.terautentikasi: + return + terkait = entri.find_all("h4") + for le in terkait: + if not le: + continue + le_txt = le.text.strip() + for jenis in self.terkait: + if jenis.replace("_", " ").title() in le_txt: + kumpulan = le.next_sibling + if kumpulan: + kumpulan = kumpulan.find_all("a") + self.terkait[jenis] = [k.text for k in kumpulan if k] def _init_makna(self, entri): - if entri.find(color="darkgreen"): - makna = [entri] + prakategorial = entri.find(color="darkgreen") + if prakategorial: + makna = [prakategorial] else: makna = entri.find_all("li") + if self.terautentikasi and not prakategorial: + makna = [ + m for m in makna if m and "Usulkan makna baru" not in m.text + ] + terkait = sum([bool(t) for t in self.terkait.values()]) + if terkait: + makna = makna[:-terkait] self.makna = [Makna(m) for m in makna] - def serialisasi(self): - return { + def serialisasi(self, fitur_pengguna=True): + entri = { "nama": self.nama, "nomor": self.nomor, "kata_dasar": self.kata_dasar, @@ -162,6 +244,13 @@ def serialisasi(self): "varian": self.varian, "makna": [makna.serialisasi() for makna in self.makna], } + if self.terautentikasi and fitur_pengguna: + if self.etimologi is not None: + entri.update({"etimologi": self.etimologi.serialisasi()}) + else: + entri.update({"etimologi": None}) + entri.update(self.terkait) + return entri def _makna(self, contoh=True): if len(self.makna) > 1: @@ -190,14 +279,34 @@ def _varian(self, varian): return "" return f"{nama}: {', '.join(varian)}" - def __str__(self, contoh=True): + def _terkait(self): + nama_murni = self.nama.replace(".", "") + hasil = "" + header = { + "kata_turunan": "\nKata Turunan", + "gabungan_kata": "\nGabungan Kata", + "peribahasa": f"\nPeribahasa (mengandung [{nama_murni}])", + "kiasan": f"\nKiasan (mengandung [{nama_murni}])", + } + for key, head in header.items(): + if self.terkait[key]: + hasil += f"{head}\n{'; '.join(self.terkait[key])}" + return hasil + + def __str__(self, contoh=True, terkait=True, fitur_pengguna=True): hasil = self._nama() if self.pelafalan: hasil += f" {self.pelafalan}" for var in (self.bentuk_tidak_baku, self.varian): if var: hasil += f"\n{self._varian(var)}" - return f"{hasil}\n{self._makna(contoh)}" + if self.terautentikasi and fitur_pengguna and self.etimologi: + hasil += f"\nEtimologi: {self.etimologi}" + if self.makna: + hasil += f"\n{self._makna(contoh)}" + if self.terautentikasi and fitur_pengguna and terkait: + hasil += self._terkait() + return hasil def __repr__(self): return f"" @@ -212,13 +321,26 @@ def __init__(self, makna_label): self._init_contoh(makna_label) self.submakna = self.submakna.split("; ") + def _init_prakategorial(self, prakategorial): + cari = prakategorial.next_sibling + self.submakna = cari.strip() + self.submakna += f" {cari.next_sibling.text.strip()}" + + def _init_rujukan(self, rujukan): + self.submakna = f"→ {ambil_teks_dalam_label(rujukan)}" + nomor = rujukan.find("sup") + if nomor: + self.submakna += f" ({nomor.text.strip()})" + def _init_submakna(self, makna_label): - baku = makna_label.find("a") - if baku: - self.submakna = f"→ {ambil_teks_dalam_label(baku)}" - nomor = baku.find("sup") - if nomor: - self.submakna += f" ({nomor.text.strip()})" + rujukan = makna_label.find("a") + entris = makna_label.find("span", class_="entrisButton") + if entris: + entris.extract() + if rujukan and not rujukan.find("span", style="color:red"): + self._init_rujukan(rujukan) + elif makna_label.get("color") == "darkgreen": + self._init_prakategorial(makna_label) else: self.submakna = ( "".join( @@ -230,17 +352,12 @@ def _init_submakna(self, makna_label): def _init_kelas(self, makna_label): kelas = makna_label.find(color="red") - lain = makna_label.find(color="darkgreen") info = makna_label.find(color="green") if kelas: kelas = kelas.find_all("span") - if lain: - kelas = [lain] - self.submakna = lain.next_sibling.strip() - self.submakna += ( - f" {makna_label.find(color='grey').get_text().strip()}" - ) + if makna_label.get("color") == "darkgreen": # prakategorial + kelas = [makna_label] self.kelas = [] for k in kelas: @@ -294,6 +411,67 @@ def __repr__(self): return f"" +class Etimologi: + """Sebuah etimologi dalam sebuah entri KBBI daring.""" + + def __init__(self, etimologi_html): + etimologi_html = etimologi_html.lstrip("[").rstrip("]") + etimologi = BeautifulSoup(etimologi_html, "html.parser") + self._init_bahasa(etimologi) + self._init_kelas(etimologi) + self._init_asal_kata(etimologi) + self._init_pelafalan(etimologi) + self._init_arti(etimologi) + + def _init_bahasa(self, etimologi): + bahasa = etimologi.find("i", style="color:darkred") + self.bahasa = ekstraksi_aman(bahasa) + + def _init_kelas(self, etimologi): + kelas = etimologi.find_all("span", style="color:red") + self.kelas = [ekstraksi_aman(k) for k in kelas] + + def _init_asal_kata(self, etimologi): + asal = etimologi.find("b") + self.asal_kata = ekstraksi_aman(asal) + + def _init_pelafalan(self, etimologi): + lafal = etimologi.find("span", style="color:darkgreen") + self.pelafalan = ekstraksi_aman(lafal) + + def _init_arti(self, etimologi): + self.arti = etimologi.text.strip().strip("'\"").split("; ") + + def serialisasi(self): + return { + "kelas": self.kelas, + "bahasa": self.bahasa, + "asal_kata": self.asal_kata, + "pelafalan": self.pelafalan, + "arti": self.arti, + } + + def _kelas(self): + return " ".join(f"({k})" for k in self.kelas) + + def _asal_kata(self): + return " ".join((self.asal_kata, self.pelafalan)) + + def _arti(self): + return "; ".join(self.arti) + + def __str__(self): + hasil = f"[{self.bahasa}]" if self.bahasa else "" + hasil += f" {self._kelas()}" if self.kelas else "" + if self.asal_kata or self.pelafalan: + hasil += f" {self._asal_kata()}" + hasil += f": {self._arti()}" if self.arti else "" + return hasil + + def __repr__(self): + return f"" + + def ambil_teks_dalam_label(sup, ambil_italic=False): """Mengambil semua teks dalam sup label HTML (tanpa anak-anaknya). @@ -309,18 +487,91 @@ def ambil_teks_dalam_label(sup, ambil_italic=False): return "".join(i.strip() for i in sup.find_all(text=True, recursive=False)) -class TidakDitemukan(Exception): - """ - Galat yang menunjukkan bahwa laman tidak ditemukan dalam KBBI. - """ +def ekstraksi_aman(sup): + """Mengekstraksi sup dan mengembalikan .text.strip()-nya secara aman.""" + if sup: + return sup.extract().text.strip() + return "" + + +class AutentikasiKBBI: + """Gunakan fitur pengguna terdaftar.""" + + host = "https://kbbi.kemdikbud.go.id" + lokasi_kuki = CONFIG_DIR / "kuki.json" + + def __init__(self, posel=None, sandi=None, lokasi_kuki=None): + """Melakukan autentikasi dengan alamat posel dan sandi yang diberikan. + Objek AutentikasiKBBI dapat digunakan dalam pembuatan objek KBBI + untuk mendapatkan fitur pengguna terdaftar. + + Jika posel dan sandi tidak diberikan, autentikasi akan menggunakan kuki + yang tersimpan (jika ada). + + :param posel: Alamat posel yang terdaftar di KBBI Daring + :type email: str + :param sandi: Kata sandi untuk akun dengan alamat surel yang diberikan + :type sandi: str + :param lokasi_kuki: Lokasi kuki yang akan dimuat/disimpan + :type lokasi_kuki: str atau PathLike + """ + self.sesi = requests.Session() + self.lokasi_kuki = lokasi_kuki or self.lokasi_kuki + if posel is None and sandi is None: + try: + self.ambil_kuki() + except FileNotFoundError as e: + raise GagalAutentikasi( + "Posel dan sandi tidak diberikan, " + f"tetapi kuki tidak ditemukan di {self.lokasi_kuki}" + ) from e + else: + self._autentikasi(posel, sandi) + + def simpan_kuki(self): + kuki_aspnet = self.sesi.cookies.get(".AspNet.ApplicationCookie") + kuki_sesi = {".AspNet.ApplicationCookie": kuki_aspnet} + with open(self.lokasi_kuki, "w") as kuki: + json.dump(kuki_sesi, kuki) + + def ambil_kuki(self): + with open(self.lokasi_kuki) as kuki: + self.sesi.cookies.update(json.load(kuki)) + + def _autentikasi(self, posel, sandi): + laman = self.sesi.get(f"{self.host}/Account/Login") + token = re.findall( + r"", + laman.text, + ) + if not token: + raise TerjadiKesalahan() + payload = { + "__RequestVerificationToken": token[0], + "Posel": posel, + "KataSandi": sandi, + "IngatSaya": True, + } + laman = self.sesi.post(f"{self.host}/Account/Login", data=payload) + if "Beranda/Error" in laman.url: + raise TerjadiKesalahan() + if "Account/Login" in laman.url: + raise GagalAutentikasi() + + +class Galat(Exception): + pass + + +class TidakDitemukan(Galat): + """Galat ketika laman tidak ditemukan dalam KBBI.""" def __init__(self, kueri): super().__init__(f"{kueri} tidak ditemukan dalam KBBI!") -class TerjadiKesalahan(Exception): - """ - Galat yang menunjukkan bahwa terjadi kesalahan dari pihak KBBI. +class TerjadiKesalahan(Galat): + """Galat ketika terjadi kesalahan dari pihak KBBI. Laman: https://kbbi.kemdikbud.go.id/Beranda/Error """ @@ -328,10 +579,8 @@ def __init__(self): super().__init__("Terjadi kesalahan saat memproses permintaan Anda.") -class BatasSehari(Exception): - """ - Galat yang menunjukkan bahwa pencarian telah mencapai - batas maksimum dalam sehari. +class BatasSehari(Galat): + """Galat ketika pencarian telah mencapai batas maksimum dalam sehari. Laman: https://kbbi.kemdikbud.go.id/Beranda/BatasSehari """ @@ -341,21 +590,140 @@ def __init__(self): ) -def _parse_args(args): - parser = argparse.ArgumentParser() +class GagalAutentikasi(Galat): + """Galat ketika gagal melakukan autentikasi dengan KBBI.""" + + def __init__(self, pesan=None): + if pesan is None: + pesan = ( + "Gagal melakukan autentikasi dengan alamat surel dan sandi " + "yang diberikan." + ) + super().__init__(pesan) + + +def _parse_args_autentikasi(args): + parser = argparse.ArgumentParser( + description=( + "Melakukan autentikasi dengan alamat posel dan sandi " + "yang diberikan." + ), + epilog=( + "Setelah autentikasi berhasil, kuki akan disimpan dan " + "otomatis digunakan dalam penggunaan KBBI berikutnya." + ), + add_help=False, + ) parser.add_argument( - "laman", help='Laman yang ingin diambil, contoh: "cinta"' + "posel", + help="alamat posel (pos elektronik) akun KBBI Daring", + nargs="?", ) parser.add_argument( - "-t", + "sandi", + help="kata sandi akun KBBI Daring dengan posel yang diberikan", + nargs="?", + ) + parser.add_argument( + "-h", + "-b", + "--help", + "--bantuan", + action="help", + default=argparse.SUPPRESS, + help="tampilkan pesan bantuan ini dan keluar", + ) + parser.add_argument( + "-c", + "--bersihkan", + help="bersihkan kuki yang tersimpan", + action="store_true", + ) + return parser.parse_args(args) + + +def _bersihkan_kuki(): + lokasi_kuki = AutentikasiKBBI.lokasi_kuki + try: + lokasi_kuki.unlink() + except FileNotFoundError: + print(f"Kuki tidak ditemukan pada {lokasi_kuki}!") + return 1 + else: + print(f"Kuki {lokasi_kuki} berhasil dihapus.") + return 0 + + +def autentikasi(argv=None): + """Program CLI untuk autentikasi.""" + if argv is None: + argv = sys.argv[1:] + args = _parse_args_autentikasi(argv) + if args.posel is None and args.sandi is None: + if args.bersihkan: + return _bersihkan_kuki() + else: + _parse_args_autentikasi(["-h"]) + try: + auth = AutentikasiKBBI(args.posel, args.sandi) + except Galat as e: + print(e) + return 1 + else: + auth.simpan_kuki() + print( + "Autentikasi berhasil dan kuki telah disimpan di " + f"{auth.lokasi_kuki}.\n" + "Kuki akan otomatis digunakan pada penggunaan KBBI berikutnya." + ) + return 0 + + +def _parse_args_utama(args): + parser = argparse.ArgumentParser( + description=("Mengambil sebuah laman dalam KBBI Daring."), + add_help=False, + ) + parser.add_argument( + "laman", help='laman yang ingin diambil, contoh: "cinta"' + ) + parser.add_argument( + "-h", + "-b", + "--help", + "--bantuan", + action="help", + default=argparse.SUPPRESS, + help="tampilkan pesan bantuan ini dan keluar", + ) + parser.add_argument( + "-c", "--tanpa-contoh", help="jangan tampilkan contoh (bila ada)", - action="store_true", + action="store_false", + dest="contoh", + ) + parser.add_argument( + "-t", + "--tanpa-terkait", + help="jangan tampilkan entri terkait (bila ada)", + action="store_false", + dest="terkait", + ) + parser.add_argument( + "-n", + "--nonpengguna", + help="nonaktifkan fitur khusus pengguna", + action="store_false", + dest="pengguna", ) parser.add_argument( "-j", "--json", - help="tampilkan hasil (selalu dengan contoh) dalam bentuk JSON", + help=( + "tampilkan hasil (selalu dengan contoh dan entri terkait bila ada)" + " dalam bentuk JSON" + ), action="store_true", ) parser.add_argument( @@ -370,19 +738,24 @@ def _parse_args(args): def _keluaran(laman, args): if args.json: - return json.dumps(laman.serialisasi(), indent=args.indentasi) + return json.dumps( + laman.serialisasi(args.pengguna), indent=args.indentasi + ) else: - return laman.__str__(contoh=not args.tanpa_contoh) + return laman.__str__(args.contoh, args.terkait, args.pengguna) def main(argv=None): - """Program utama dengan CLI.""" + """Program CLI utama.""" if argv is None: argv = sys.argv[1:] - args = _parse_args(argv) + args = _parse_args_utama(argv) + auth = None + if AutentikasiKBBI.lokasi_kuki.exists() and args.pengguna: + auth = AutentikasiKBBI() try: - laman = KBBI(args.laman) - except (TidakDitemukan, TerjadiKesalahan, BatasSehari) as e: + laman = KBBI(args.laman, auth) + except Galat as e: print(e) return 1 else: diff --git a/requirements.txt b/requirements.txt index 30e2859..a4796ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ +appdirs>=1.4.3,<2.0 beautifulsoup4>=4.8.2,<5.0 requests>=2.23.0,<3.0 diff --git a/setup.py b/setup.py index 4cd06a5..e27e3fe 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,8 @@ name="kbbi", version="0.4.0", description=( - "A module that scraps a page in the online Indonesian dictionary (KBBI)" + "A module that scraps a page in the online Indonesian dictionary " + "(KBBI)" ), long_description=long_description, long_description_content_type="text/markdown", @@ -28,6 +29,11 @@ "kbbi kamus bahasa indonesia indonesian natural language scraper" ), packages=find_packages(), - entry_points={"console_scripts": ["kbbi=kbbi:main"],}, - install_requires=["requests", "beautifulsoup4",], + entry_points={ + "console_scripts": [ + "kbbi=kbbi:main", + "kbbi-autentikasi=kbbi:autentikasi", + ] + }, + install_requires=["requests", "beautifulsoup4"], ) diff --git a/tests/conftest.py b/tests/conftest.py index 551b1f9..061107e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,14 @@ import json +import os import pytest -from kbbi import KBBI +from kbbi import KBBI, AutentikasiKBBI + + +@pytest.fixture(scope="session") +def autentikasi(): + return AutentikasiKBBI(os.getenv("KBBI_POSEL"), os.getenv("KBBI_SANDI")) @pytest.fixture(scope="session") @@ -10,6 +16,11 @@ def laman(): return dict() +@pytest.fixture(scope="session") +def laman_terautentikasi(): + return dict() + + @pytest.fixture def ekspektasi_str(request): path = request.param @@ -24,11 +35,23 @@ def ekspektasi_serialisasi(request): return json.load(berkas) +def ambil_atau_simpan(dct, key, func): + try: + return dct[key] + except KeyError: + dct[key] = func(key) + return dct[key] + + @pytest.fixture def aktual_objek(request, laman): kueri = request.param - try: - return laman[kueri] - except KeyError: - laman[kueri] = KBBI(kueri) - return laman[kueri] + return ambil_atau_simpan(laman, kueri, lambda a: KBBI(a)) + + +@pytest.fixture +def aktual_objek_terautentikasi(request, autentikasi, laman_terautentikasi): + kueri = request.param + return ambil_atau_simpan( + laman_terautentikasi, kueri, lambda a: KBBI(a, autentikasi) + ) diff --git a/tests/kasus/serialisasi-auth/alam.json b/tests/kasus/serialisasi-auth/alam.json new file mode 100644 index 0000000..bc7b27e --- /dev/null +++ b/tests/kasus/serialisasi-auth/alam.json @@ -0,0 +1,259 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/alam", + "entri": [ + { + "nama": "alam", + "nomor": "1", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "segala yang ada di langit dan di bumi (seperti bumi, bintang, kekuatan)" + ], + "info": "", + "contoh": [ + "-- sekeliling" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "lingkungan kehidupan" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "segala sesuatu yang termasuk dalam satu lingkungan (golongan dan sebagainya) dan dianggap sebagai satu keutuhan" + ], + "info": "", + "contoh": [ + "-- pikiran", + "-- tumbuh-tumbuhan" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "segala daya (gaya, kekuatan, dan sebagainya) yang menyebabkan terjadinya dan seakan-akan mengatur segala sesuatu yang ada di dunia ini" + ], + "info": "", + "contoh": [ + "hukum --", + "ilmu --" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "yang bukan buatan manusia" + ], + "info": "", + "contoh": [ + "karet --" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "dunia" + ], + "info": "", + "contoh": [ + "-- semesta", + "syah --" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "kerajaan", + "daerah", + "negeri" + ], + "info": "", + "contoh": [ + "-- Minangkabau" + ] + } + ], + "etimologi": { + "kelas": [ + "n", + "sg", + "m" + ], + "bahasa": "Arab", + "asal_kata": "\u0639\u064e\u0627\u0644\u064e\u0645\u064c", + "pelafalan": "\u2018\u0101lam", + "arti": [ + "manusia", + "seluruh makhluk" + ] + }, + "kata_turunan": [ + "beralam", + "kealaman" + ], + "gabungan_kata": [ + "alam akhirat", + "alam arwah", + "alam astral", + "alam baka", + "alam barzakh", + "alam besar", + "alam fana", + "alam gaib", + "alam kabir", + "alam kecil", + "alam kekal", + "alam kelanggengan", + "alam kubur", + "alam malakut", + "alam misal", + "alam nabati", + "alam pikiran", + "alam rahim", + "alam raya", + "alam sagir", + "alam samar", + "alam semesta", + "alam semesta datar", + "alam semesta terbuka", + "alam semesta tertutup" + ], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "alam", + "nomor": "2", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "prakategorial", + "nama": "prakategorial", + "deskripsi": "kata tidak dipakai dalam bentuk dasarnya" + } + ], + "submakna": [ + "cari: berpengalaman, mengalami, pengalam, pengalaman" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": { + "kelas": [ + "n", + "sg", + "m" + ], + "bahasa": "Arab", + "asal_kata": "\u0639\u064e\u0644\u064e\u0645\u064c", + "pelafalan": "\u2018alam", + "arti": [ + "gunung", + "tanda", + "lukisan pada baju", + "plang jalan", + "bendera pasukan perang" + ] + }, + "kata_turunan": [ + "berpengalaman", + "mengalami", + "pengalam", + "pengalaman" + ], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "alam", + "nomor": "3", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "bendera (panji-panji) sebagai tanda (pada pasukan dan sebagainya)" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [ + "negeri (alam) yang baka", + "pergi ke alam baka" + ] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/beruang.json b/tests/kasus/serialisasi-auth/beruang.json new file mode 100644 index 0000000..0a0b204 --- /dev/null +++ b/tests/kasus/serialisasi-auth/beruang.json @@ -0,0 +1,93 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/beruang", + "entri": [ + { + "nama": "ber.u.ang", + "nomor": "", + "kata_dasar": [ + "uang" + ], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "mempunyai uang" + ], + "info": "", + "contoh": [ + "sepeser pun saya tidak ~" + ] + }, + { + "kelas": [ + { + "kode": "a", + "nama": "Adjektiva", + "deskripsi": "kata yang menjelaskan nomina atau pronomina" + }, + { + "kode": "ki", + "nama": "kiasan", + "deskripsi": "" + } + ], + "submakna": [ + "kaya" + ], + "info": "", + "contoh": [ + "orang yang dapat menikmati makanan semahal itu hanyalah orang yang ~" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "be.ru.ang", + "nomor": "", + "kata_dasar": [], + "pelafalan": "/b\u00earuang/", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "binatang buas jenis Ursus, berbulu tebal, dapat berdiri di atas kedua kaki belakangnya, bercakar, dan bermoncong panjang (banyak macamnya, seperti -- bukit, -- damar, -- putih)" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [ + "beruang es", + "beruang kutub" + ], + "peribahasa": [ + "hilang rona karena penyakit, hilang bangsa tidak beruang" + ], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/bin.json b/tests/kasus/serialisasi-auth/bin.json new file mode 100644 index 0000000..ca566da --- /dev/null +++ b/tests/kasus/serialisasi-auth/bin.json @@ -0,0 +1,114 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/Cari/Hasil?frasa=bin", + "entri": [ + { + "nama": "bin", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "Ar", + "nama": "Arab", + "deskripsi": "-" + } + ], + "submakna": [ + "kata untuk menyatakan anak laki-laki dari seseorang (biasa dipakai untuk keterangan antara nama seseorang dan nama ayah)", + "anak laki-laki dari" + ], + "info": "", + "contoh": [ + "Amat -- Soleh Amat anak dari Soleh" + ] + }, + { + "kelas": [ + { + "kode": "p", + "nama": "Partikel", + "deskripsi": "kelas kata yang meliputi kata depan, kata sambung, kata seru, kata sandang, ucapan salam" + }, + { + "kode": "cak", + "nama": "Cakapan", + "deskripsi": "menandai kata yang digunakan dalam ragam takbaku" + }, + { + "kode": "Ar", + "nama": "Arab", + "deskripsi": "-" + } + ], + "submakna": [ + "kata untuk menguatkan atau mengungkapkan dengan perkataan lain" + ], + "info": "", + "contoh": [ + "aneh -- ajaib" + ] + } + ], + "etimologi": { + "kelas": [ + "n", + "sg", + "m" + ], + "bahasa": "Arab", + "asal_kata": "\u0627\u0650\u0628\u0652\u0646\u064c", + "pelafalan": "ibn", + "arti": [ + "anak lelaki" + ] + }, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "BIN", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "sing", + "nama": "singkatan", + "deskripsi": "" + } + ], + "submakna": [ + "Badan Intelijen Negara (lembaga pemerintah nonkementerian Indonesia yang bertugas di bidang intelijen)" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/civitas academica.json b/tests/kasus/serialisasi-auth/civitas academica.json new file mode 100644 index 0000000..285f2aa --- /dev/null +++ b/tests/kasus/serialisasi-auth/civitas academica.json @@ -0,0 +1,39 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/civitas%20academica", + "entri": [ + { + "nama": "civitas academica", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "ukp", + "nama": "Ungkapan", + "deskripsi": "" + }, + { + "kode": "Lt", + "nama": "Latin", + "deskripsi": "-" + } + ], + "submakna": [ + "kelompok (warga) masyarakat akademik yang terdiri atas dosen dan mahasiswa dengan perwakilannya yang terbentuk melalui senat masing-masing" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/kan.json b/tests/kasus/serialisasi-auth/kan.json new file mode 100644 index 0000000..6c550db --- /dev/null +++ b/tests/kasus/serialisasi-auth/kan.json @@ -0,0 +1,208 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/kan", + "entri": [ + { + "nama": "kan", + "nomor": "1", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "ark", + "nama": "Arkais", + "deskripsi": "menandai kata yang tidak lazim" + } + ], + "submakna": [ + "langkan (pada perahu)" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "kan", + "nomor": "2", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "adv", + "nama": "Adverbia", + "deskripsi": "kata yang menjelaskan verba, adjektiva, adverbia lain, atau kalimat" + }, + { + "kode": "kp", + "nama": "kependekan", + "deskripsi": "" + } + ], + "submakna": [ + "bukan" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "kan", + "nomor": "3", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "adv", + "nama": "Adverbia", + "deskripsi": "kata yang menjelaskan verba, adjektiva, adverbia lain, atau kalimat" + }, + { + "kode": "kp", + "nama": "kependekan", + "deskripsi": "" + } + ], + "submakna": [ + "akan" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "kan", + "nomor": "4", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "tempat memasak air teh", + "morong", + "teko" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "-kan", + "nomor": "5", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "sufiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "menjadikan" + ], + "info": "", + "contoh": [ + "jalankan", + "datangkan", + "hitamkan" + ] + }, + { + "kelas": [ + { + "kode": "sufiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "sungguh-sungguh" + ], + "info": "", + "contoh": [ + "dengarkan", + "camkan" + ] + }, + { + "kelas": [ + { + "kode": "sufiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "untuk", + "kepada orang lain" + ], + "info": "", + "contoh": [ + "sewakan", + "bacakan" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [ + "tak kan lari gunung dikejar, hilang kabut tampaklah dia" + ], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/keratabasa.json b/tests/kasus/serialisasi-auth/keratabasa.json new file mode 100644 index 0000000..e4233f6 --- /dev/null +++ b/tests/kasus/serialisasi-auth/keratabasa.json @@ -0,0 +1,35 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/keratabasa", + "entri": [ + { + "nama": "ke.ra.ta.ba.sa", + "nomor": "", + "kata_dasar": [], + "pelafalan": "/k\u00e9ratabasa/", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "perihal menerangkan arti kata dengan memperlakukannya sebagai singkatan, biasanya untuk lelucon (misalnya kata benci ditafsirkan sebagai \u2018benar-benar cinta\u2019)", + "etimologi rakyat" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/khayal.json b/tests/kasus/serialisasi-auth/khayal.json new file mode 100644 index 0000000..5d1c8eb --- /dev/null +++ b/tests/kasus/serialisasi-auth/khayal.json @@ -0,0 +1,75 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/khayal", + "entri": [ + { + "nama": "kha.yal", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [ + "kayal" + ], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "lukisan (gambar) dalam angan-angan", + "fantasi" + ], + "info": "", + "contoh": [ + "apa yang diceritakan itu -- belaka" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "yang diangan-angankan seperti benar-benar ada" + ], + "info": "", + "contoh": [ + "cerita --" + ] + } + ], + "etimologi": { + "kelas": [ + "n", + "sg", + "m" + ], + "bahasa": "Arab", + "asal_kata": "\u062e\u064e\u064a\u064e\u0627\u0644\u064c", + "pelafalan": "khay\u0101l", + "arti": [ + "bayang-bayang" + ] + }, + "kata_turunan": [ + "berkhayal", + "khayalan", + "mengkhayal", + "mengkhayalkan", + "pengkhayal", + "pengkhayalan", + "terkhayal" + ], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/lah.json b/tests/kasus/serialisasi-auth/lah.json new file mode 100644 index 0000000..58580d7 --- /dev/null +++ b/tests/kasus/serialisasi-auth/lah.json @@ -0,0 +1,108 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/lah", + "entri": [ + { + "nama": "-lah", + "nomor": "1", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "bentuk terikat", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "yang digunakan untuk menekankan makna kata yang di depannya" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "lah", + "nomor": "2", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "adv", + "nama": "Adverbia", + "deskripsi": "kata yang menjelaskan verba, adjektiva, adverbia lain, atau kalimat" + }, + { + "kode": "kp", + "nama": "kependekan", + "deskripsi": "" + } + ], + "submakna": [ + "telah" + ], + "info": "", + "contoh": [ + "hari -- larut senja" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "lah", + "nomor": "3", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "p", + "nama": "Partikel", + "deskripsi": "kelas kata yang meliputi kata depan, kata sambung, kata seru, kata sandang, ucapan salam" + }, + { + "kode": "cak", + "nama": "Cakapan", + "deskripsi": "menandai kata yang digunakan dalam ragam takbaku" + } + ], + "submakna": [ + "kata seru untuk memberi tekanan atau menyungguhkan" + ], + "info": "", + "contoh": [ + "\u201c--, itu orangnya\u201d, katanya sambil menunjuk seseorang yang baru datang" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [ + "mensiang yang baru dicari, kampil \u2018lah sudah dahulu" + ], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/lampir.json b/tests/kasus/serialisasi-auth/lampir.json new file mode 100644 index 0000000..1801eae --- /dev/null +++ b/tests/kasus/serialisasi-auth/lampir.json @@ -0,0 +1,39 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/lampir", + "entri": [ + { + "nama": "lam.pir", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "prakategorial", + "nama": "prakategorial", + "deskripsi": "kata tidak dipakai dalam bentuk dasarnya" + } + ], + "submakna": [ + "cari: lampiran, melampiri, melampirkan, terlampir" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [ + "lampiran", + "melampiri", + "melampirkan", + "terlampir" + ], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/makin.json b/tests/kasus/serialisasi-auth/makin.json new file mode 100644 index 0000000..69fd7b5 --- /dev/null +++ b/tests/kasus/serialisasi-auth/makin.json @@ -0,0 +1,68 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/makin", + "entri": [ + { + "nama": "ma.kin", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [ + "mangkin", + "semakin" + ], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "adv", + "nama": "Adverbia", + "deskripsi": "kata yang menjelaskan verba, adjektiva, adverbia lain, atau kalimat" + } + ], + "submakna": [ + "kian bertambah" + ], + "info": "", + "contoh": [ + "tangisnya -- menjadi-jadi", + "pesawat itu terbang -- tinggi" + ] + }, + { + "kelas": [ + { + "kode": "p", + "nama": "Partikel", + "deskripsi": "kelas kata yang meliputi kata depan, kata sambung, kata seru, kata sandang, ucapan salam" + }, + { + "kode": "kl", + "nama": "Klasik", + "deskripsi": "menandai kata yang digunakan dalam kesusastraan Melayu Klasik" + } + ], + "submakna": [ + "lebih-lebih", + "apalagi" + ], + "info": "", + "contoh": [ + "segala gembala gajah semuanya kasih akan Laksamana Khoja Hassan, -- kepada gembala Kepenjang itu jangan dikata lagi" + ] + } + ], + "etimologi": null, + "kata_turunan": [ + "semakin" + ], + "gabungan_kata": [], + "peribahasa": [ + "ilmu padi, makin berisi makin runduk", + "jika pisau tiada berbaja, makin dikikir bertambah tumpul", + "lagi murah, lagi menawar (makin murah, makin menawar)" + ], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/me-.json b/tests/kasus/serialisasi-auth/me-.json new file mode 100644 index 0000000..6e153d5 --- /dev/null +++ b/tests/kasus/serialisasi-auth/me-.json @@ -0,0 +1,226 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/me-", + "entri": [ + { + "nama": "me-", + "nomor": "", + "kata_dasar": [], + "pelafalan": "/m\u00ea-/", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [], + "submakna": [ + "\u2192 meng-" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "meng-", + "nomor": "", + "kata_dasar": [], + "pelafalan": "/m\u00eang-/", + "bentuk_tidak_baku": [], + "varian": [ + "me-", + "mem-", + "men-", + "menge-", + "meny-" + ], + "makna": [ + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "menjadi" + ], + "info": "", + "contoh": [ + "mencair", + "menguning", + "mengkristal" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "berfungsi sebagai atau menyerupai" + ], + "info": "", + "contoh": [ + "menyupir", + "menggunung" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "makan atau minum" + ], + "info": "", + "contoh": [ + "menyatai", + "mengopi", + "mengeteh" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "menuju" + ], + "info": "", + "contoh": [ + "mengutara", + "melaut", + "menepi" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "mencari atau mengumpulkan" + ], + "info": "", + "contoh": [ + "mendamar", + "merumput" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "mengeluarkan bunyi" + ], + "info": "", + "contoh": [ + "mengeong", + "mengaum", + "mencicit" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "menimbulkan kesan seperti seseorang atau sesuatu yang" + ], + "info": "", + "contoh": [ + "membisu", + "membatu", + "merendah hati" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "dasar verba" + ], + "info": "", + "contoh": [ + "membaca", + "menulis", + "membajak" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "membuat", + "menghasilkan" + ], + "info": "", + "contoh": [ + "menyambal", + "menggulai", + "membatik" + ] + }, + { + "kelas": [ + { + "kode": "prefiks pembentuk verba", + "nama": "-", + "deskripsi": "-" + } + ], + "submakna": [ + "menyatakan" + ], + "info": "", + "contoh": [ + "mengaku" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/menjadikan.json b/tests/kasus/serialisasi-auth/menjadikan.json new file mode 100644 index 0000000..0583f39 --- /dev/null +++ b/tests/kasus/serialisasi-auth/menjadikan.json @@ -0,0 +1,106 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/menjadikan", + "entri": [ + { + "nama": "men.ja.di.kan", + "nomor": "", + "kata_dasar": [ + "jadi (1)" + ], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "membuat sebagai", + "merupakan" + ], + "info": "", + "contoh": [ + "ia ~ sakit adiknya sebagai alasan untuk tidak pergi kuliah" + ] + }, + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "menyebabkan" + ], + "info": "", + "contoh": [ + "hal itu akan ~ orang lain marah-marah" + ] + }, + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "mengangkat (memilih) sebagai" + ], + "info": "", + "contoh": [ + "rakyat telah ~ dia kepala desa" + ] + }, + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "melaksanakan (rencana, janji, dan sebagainya)" + ], + "info": "", + "contoh": [ + "ia ~ penawarannya untuk membeli rumah itu" + ] + }, + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "menciptakan", + "mengadakan" + ], + "info": "", + "contoh": [ + "Tuhan yang ~ langit dan bumi beserta isinya" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [ + "menjadikan hati" + ], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/quo vadis?.json b/tests/kasus/serialisasi-auth/quo vadis?.json new file mode 100644 index 0000000..f55e164 --- /dev/null +++ b/tests/kasus/serialisasi-auth/quo vadis?.json @@ -0,0 +1,39 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/Cari/Hasil?frasa=quo%20vadis%3F", + "entri": [ + { + "nama": "quo vadis?", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "ukp", + "nama": "Ungkapan", + "deskripsi": "" + }, + { + "kode": "Lt", + "nama": "Latin", + "deskripsi": "-" + } + ], + "submakna": [ + "hendak pergi ke mana? (dipakai untuk mengingatkan seseorang agar memperbaiki dirinya)" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/ranah.json b/tests/kasus/serialisasi-auth/ranah.json new file mode 100644 index 0000000..3a6dcc7 --- /dev/null +++ b/tests/kasus/serialisasi-auth/ranah.json @@ -0,0 +1,113 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/ranah", + "entri": [ + { + "nama": "ra.nah", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "tanah rata", + "dataran rendah", + "lembah" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "tanah yang berpaya-paya" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "elemen atau unsur yang dibatasi", + "bidang disiplin" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "Ling", + "nama": "Linguistik", + "deskripsi": "-" + } + ], + "submakna": [ + "lingkungan yang memungkinkan terjadinya percakapan, merupakan kombinasi antara partisipan, topik, dan tempat (misalnya keluarga, pendidikan, tempat kerja, keagamaan, dan sebagainya)" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "Psi", + "nama": "Psikologi", + "deskripsi": "-" + } + ], + "submakna": [ + "bagian (satuan) perilaku manusia" + ], + "info": "", + "contoh": [ + "-- afektif berbagai perilaku yang berkaitan dengan perasaan", + "-- kognitif perilaku yang menjadi kegiatan kognisi atau pikiran" + ] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [ + "ranah afektif", + "ranah eminen", + "ranah frekuensi", + "ranah kognitif", + "ranah politik", + "ranah psikomotor" + ], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/roh.json b/tests/kasus/serialisasi-auth/roh.json new file mode 100644 index 0000000..d803b9d --- /dev/null +++ b/tests/kasus/serialisasi-auth/roh.json @@ -0,0 +1,91 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/roh", + "entri": [ + { + "nama": "roh", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [ + "ruh" + ], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan)", + "nyawa" + ], + "info": "", + "contoh": [ + "jika -- sudah berpisah dari badan, berakhirlah kehidupan seseorang" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya)" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "ki", + "nama": "kiasan", + "deskripsi": "" + } + ], + "submakna": [ + "semangat", + "spirit" + ], + "info": "", + "contoh": [ + "kedamaian bagi seluruh warga sesuai dengan -- Islam" + ] + } + ], + "etimologi": { + "kelas": [ + "n", + "sg", + "f/m" + ], + "bahasa": "Arab", + "asal_kata": "\u0631\u064f\u0648\u0652\u062d\u064c", + "pelafalan": "r\u016bh", + "arti": [ + "tiupan", + "sesuatu yang membuat manusia dapat hidup" + ] + }, + "kata_turunan": [], + "gabungan_kata": [ + "roh Kudus", + "roh suci" + ], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/sage.json b/tests/kasus/serialisasi-auth/sage.json new file mode 100644 index 0000000..aafdc4a --- /dev/null +++ b/tests/kasus/serialisasi-auth/sage.json @@ -0,0 +1,63 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/sage", + "entri": [ + { + "nama": "sa.ge", + "nomor": "1", + "kata_dasar": [], + "pelafalan": "/sag\u00e9/", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "cerita rakyat berdasarkan cerita sejarah yang sudah ditambah imajinasi masyarakat" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "sa.ge", + "nomor": "2", + "kata_dasar": [], + "pelafalan": "/sag\u00e9/", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "tanaman yang termasuk keluarga min, tingginya dapat mencapai 70 cm, daunnya berbentuk oval, keras, berbulu halus, beraroma tajam, dan biasa digunakan sebagai bumbu masakan" + ], + "info": "\u3008Salvia officinalis\u3009", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/semakin.json b/tests/kasus/serialisasi-auth/semakin.json new file mode 100644 index 0000000..d18ec4d --- /dev/null +++ b/tests/kasus/serialisasi-auth/semakin.json @@ -0,0 +1,44 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/semakin", + "entri": [ + { + "nama": "se.ma.kin", + "nomor": "", + "kata_dasar": [ + "makin" + ], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "se.ma.kin", + "nomor": "", + "kata_dasar": [], + "pelafalan": "/s\u00eamakin/", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [], + "submakna": [ + "\u2192 makin" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + } + ] +} diff --git a/tests/kasus/serialisasi-auth/tampak.json b/tests/kasus/serialisasi-auth/tampak.json new file mode 100644 index 0000000..c9d6f95 --- /dev/null +++ b/tests/kasus/serialisasi-auth/tampak.json @@ -0,0 +1,99 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/tampak", + "entri": [ + { + "nama": "tam.pak", + "nomor": "1", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [ + "nampak" + ], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "dapat dilihat", + "kelihatan" + ], + "info": "", + "contoh": [ + "pulau itu sudah -- dari sini" + ] + }, + { + "kelas": [ + { + "kode": "v", + "nama": "Verba", + "deskripsi": "kata kerja" + } + ], + "submakna": [ + "memperlihatkan diri", + "muncul" + ], + "info": "", + "contoh": [ + "sudah lama dia tidak --" + ] + } + ], + "etimologi": null, + "kata_turunan": [ + "ketampakan", + "menampak", + "menampakkan", + "penampakan", + "tampak-tampak", + "tampaknya", + "tertampak" + ], + "gabungan_kata": [], + "peribahasa": [], + "kiasan": [] + }, + { + "nama": "tam.pak", + "nomor": "2", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [], + "submakna": [ + "\u2192 campak (2)" + ], + "info": "", + "contoh": [] + } + ], + "etimologi": null, + "kata_turunan": [], + "gabungan_kata": [], + "peribahasa": [ + "buka kulit, ambil (tampak) isi", + "datang tampak muka, pulang tampak punggung", + "datang tampak muka, pulang tampak punggung", + "hilang sepuh tampak senam", + "kuman di seberang lautan tampak, gajah di pelupuk mata tidak tampak", + "tampak gabak di hulu (gabak di hulu tanda akan hujan)", + "tampak tembelangnya", + "terpijak benang arang hitam tampak", + "yang tinggi tampak jauh, yang dekat jolong bersua" + ], + "kiasan": [ + "tidak tampak batang hidungnya" + ] + } + ] +} diff --git a/tests/kasus/serialisasi/alam.json b/tests/kasus/serialisasi/alam.json new file mode 100644 index 0000000..9e7ebbc --- /dev/null +++ b/tests/kasus/serialisasi/alam.json @@ -0,0 +1,178 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/alam", + "entri": [ + { + "nama": "alam", + "nomor": "1", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "segala yang ada di langit dan di bumi (seperti bumi, bintang, kekuatan)" + ], + "info": "", + "contoh": [ + "-- sekeliling" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "lingkungan kehidupan" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "segala sesuatu yang termasuk dalam satu lingkungan (golongan dan sebagainya) dan dianggap sebagai satu keutuhan" + ], + "info": "", + "contoh": [ + "-- pikiran", + "-- tumbuh-tumbuhan" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "segala daya (gaya, kekuatan, dan sebagainya) yang menyebabkan terjadinya dan seakan-akan mengatur segala sesuatu yang ada di dunia ini" + ], + "info": "", + "contoh": [ + "hukum --", + "ilmu --" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "yang bukan buatan manusia" + ], + "info": "", + "contoh": [ + "karet --" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "dunia" + ], + "info": "", + "contoh": [ + "-- semesta", + "syah --" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "kerajaan", + "daerah", + "negeri" + ], + "info": "", + "contoh": [ + "-- Minangkabau" + ] + } + ] + }, + { + "nama": "alam", + "nomor": "2", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "prakategorial", + "nama": "prakategorial", + "deskripsi": "kata tidak dipakai dalam bentuk dasarnya" + } + ], + "submakna": [ + "cari: berpengalaman, mengalami, pengalam, pengalaman" + ], + "info": "", + "contoh": [] + } + ] + }, + { + "nama": "alam", + "nomor": "3", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "bendera (panji-panji) sebagai tanda (pada pasukan dan sebagainya)" + ], + "info": "", + "contoh": [] + } + ] + } + ] +} diff --git a/tests/kasus/serialisasi/ranah.json b/tests/kasus/serialisasi/ranah.json new file mode 100644 index 0000000..b344e9b --- /dev/null +++ b/tests/kasus/serialisasi/ranah.json @@ -0,0 +1,101 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/ranah", + "entri": [ + { + "nama": "ra.nah", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "tanah rata", + "dataran rendah", + "lembah" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "tanah yang berpaya-paya" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "elemen atau unsur yang dibatasi", + "bidang disiplin" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "Ling", + "nama": "Linguistik", + "deskripsi": "-" + } + ], + "submakna": [ + "lingkungan yang memungkinkan terjadinya percakapan, merupakan kombinasi antara partisipan, topik, dan tempat (misalnya keluarga, pendidikan, tempat kerja, keagamaan, dan sebagainya)" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "Psi", + "nama": "Psikologi", + "deskripsi": "-" + } + ], + "submakna": [ + "bagian (satuan) perilaku manusia" + ], + "info": "", + "contoh": [ + "-- afektif berbagai perilaku yang berkaitan dengan perasaan", + "-- kognitif perilaku yang menjadi kegiatan kognisi atau pikiran" + ] + } + ] + } + ] +} diff --git a/tests/kasus/serialisasi/roh.json b/tests/kasus/serialisasi/roh.json new file mode 100644 index 0000000..74dcb0a --- /dev/null +++ b/tests/kasus/serialisasi/roh.json @@ -0,0 +1,70 @@ +{ + "pranala": "https://kbbi.kemdikbud.go.id/entri/roh", + "entri": [ + { + "nama": "roh", + "nomor": "", + "kata_dasar": [], + "pelafalan": "", + "bentuk_tidak_baku": [ + "ruh" + ], + "varian": [], + "makna": [ + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan)", + "nyawa" + ], + "info": "", + "contoh": [ + "jika -- sudah berpisah dari badan, berakhirlah kehidupan seseorang" + ] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + } + ], + "submakna": [ + "makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya)" + ], + "info": "", + "contoh": [] + }, + { + "kelas": [ + { + "kode": "n", + "nama": "Nomina", + "deskripsi": "kata benda" + }, + { + "kode": "ki", + "nama": "kiasan", + "deskripsi": "" + } + ], + "submakna": [ + "semangat", + "spirit" + ], + "info": "", + "contoh": [ + "kedamaian bagi seluruh warga sesuai dengan -- Islam" + ] + } + ] + } + ] +} diff --git a/tests/kasus/str-auth/alam.txt b/tests/kasus/str-auth/alam.txt new file mode 100644 index 0000000..003e0f1 --- /dev/null +++ b/tests/kasus/str-auth/alam.txt @@ -0,0 +1,24 @@ +alam (1) +Etimologi: [Arab] (n) (sg) (m) عَالَمٌ ‘ālam: manusia; seluruh makhluk +1. (n) segala yang ada di langit dan di bumi (seperti bumi, bintang, kekuatan): -- sekeliling +2. (n) lingkungan kehidupan +3. (n) segala sesuatu yang termasuk dalam satu lingkungan (golongan dan sebagainya) dan dianggap sebagai satu keutuhan: -- pikiran; -- tumbuh-tumbuhan +4. (n) segala daya (gaya, kekuatan, dan sebagainya) yang menyebabkan terjadinya dan seakan-akan mengatur segala sesuatu yang ada di dunia ini: hukum --; ilmu -- +5. (n) yang bukan buatan manusia: karet -- +6. (n) dunia: -- semesta; syah -- +7. (n) kerajaan; daerah; negeri: -- Minangkabau +Kata Turunan +beralam; kealaman +Gabungan Kata +alam akhirat; alam arwah; alam astral; alam baka; alam barzakh; alam besar; alam fana; alam gaib; alam kabir; alam kecil; alam kekal; alam kelanggengan; alam kubur; alam malakut; alam misal; alam nabati; alam pikiran; alam rahim; alam raya; alam sagir; alam samar; alam semesta; alam semesta datar; alam semesta terbuka; alam semesta tertutup + +alam (2) +Etimologi: [Arab] (n) (sg) (m) عَلَمٌ ‘alam: gunung; tanda; lukisan pada baju; plang jalan; bendera pasukan perang +(prakategorial) cari: berpengalaman, mengalami, pengalam, pengalaman +Kata Turunan +berpengalaman; mengalami; pengalam; pengalaman + +alam (3) +(n) bendera (panji-panji) sebagai tanda (pada pasukan dan sebagainya) +Kiasan (mengandung [alam]) +negeri (alam) yang baka; pergi ke alam baka diff --git a/tests/kasus/str-auth/beruang.txt b/tests/kasus/str-auth/beruang.txt new file mode 100644 index 0000000..86867ce --- /dev/null +++ b/tests/kasus/str-auth/beruang.txt @@ -0,0 +1,10 @@ +uang » ber.u.ang +1. (v) mempunyai uang: sepeser pun saya tidak ~ +2. (a) (ki) kaya: orang yang dapat menikmati makanan semahal itu hanyalah orang yang ~ + +be.ru.ang /bêruang/ +(n) binatang buas jenis Ursus, berbulu tebal, dapat berdiri di atas kedua kaki belakangnya, bercakar, dan bermoncong panjang (banyak macamnya, seperti -- bukit, -- damar, -- putih) +Gabungan Kata +beruang es; beruang kutub +Peribahasa (mengandung [beruang]) +hilang rona karena penyakit, hilang bangsa tidak beruang diff --git a/tests/kasus/str-auth/bin.txt b/tests/kasus/str-auth/bin.txt new file mode 100644 index 0000000..8ab172f --- /dev/null +++ b/tests/kasus/str-auth/bin.txt @@ -0,0 +1,7 @@ +bin +Etimologi: [Arab] (n) (sg) (m) اِبْنٌ ibn: anak lelaki +1. (n) (Ar) kata untuk menyatakan anak laki-laki dari seseorang (biasa dipakai untuk keterangan antara nama seseorang dan nama ayah); anak laki-laki dari: Amat -- Soleh Amat anak dari Soleh +2. (p) (cak) (Ar) kata untuk menguatkan atau mengungkapkan dengan perkataan lain: aneh -- ajaib + +BIN +(n) (sing) Badan Intelijen Negara (lembaga pemerintah nonkementerian Indonesia yang bertugas di bidang intelijen) diff --git a/tests/kasus/str-auth/civitas academica.txt b/tests/kasus/str-auth/civitas academica.txt new file mode 100644 index 0000000..a9b7f28 --- /dev/null +++ b/tests/kasus/str-auth/civitas academica.txt @@ -0,0 +1,2 @@ +civitas academica +(ukp) (Lt) kelompok (warga) masyarakat akademik yang terdiri atas dosen dan mahasiswa dengan perwakilannya yang terbentuk melalui senat masing-masing diff --git a/tests/kasus/str-auth/kan.txt b/tests/kasus/str-auth/kan.txt new file mode 100644 index 0000000..a1c902e --- /dev/null +++ b/tests/kasus/str-auth/kan.txt @@ -0,0 +1,18 @@ +kan (1) +(n) (ark) langkan (pada perahu) + +kan (2) +(adv) (kp) bukan + +kan (3) +(adv) (kp) akan + +kan (4) +(n) tempat memasak air teh; morong; teko + +-kan (5) +1. (sufiks pembentuk verba) menjadikan: jalankan; datangkan; hitamkan +2. (sufiks pembentuk verba) sungguh-sungguh: dengarkan; camkan +3. (sufiks pembentuk verba) untuk; kepada orang lain: sewakan; bacakan +Peribahasa (mengandung [-kan]) +tak kan lari gunung dikejar, hilang kabut tampaklah dia diff --git a/tests/kasus/str-auth/keratabasa.txt b/tests/kasus/str-auth/keratabasa.txt new file mode 100644 index 0000000..5c0e318 --- /dev/null +++ b/tests/kasus/str-auth/keratabasa.txt @@ -0,0 +1,2 @@ +ke.ra.ta.ba.sa /kératabasa/ +(n) perihal menerangkan arti kata dengan memperlakukannya sebagai singkatan, biasanya untuk lelucon (misalnya kata benci ditafsirkan sebagai ‘benar-benar cinta’); etimologi rakyat diff --git a/tests/kasus/str-auth/khayal.txt b/tests/kasus/str-auth/khayal.txt new file mode 100644 index 0000000..0c5fc5b --- /dev/null +++ b/tests/kasus/str-auth/khayal.txt @@ -0,0 +1,7 @@ +kha.yal +bentuk tidak baku: kayal +Etimologi: [Arab] (n) (sg) (m) خَيَالٌ khayāl: bayang-bayang +1. (n) lukisan (gambar) dalam angan-angan; fantasi: apa yang diceritakan itu -- belaka +2. (n) yang diangan-angankan seperti benar-benar ada: cerita -- +Kata Turunan +berkhayal; khayalan; mengkhayal; mengkhayalkan; pengkhayal; pengkhayalan; terkhayal diff --git a/tests/kasus/str-auth/lah.txt b/tests/kasus/str-auth/lah.txt new file mode 100644 index 0000000..5b443f1 --- /dev/null +++ b/tests/kasus/str-auth/lah.txt @@ -0,0 +1,10 @@ +-lah (1) +(bentuk terikat) yang digunakan untuk menekankan makna kata yang di depannya + +lah (2) +(adv) (kp) telah: hari -- larut senja + +lah (3) +(p) (cak) kata seru untuk memberi tekanan atau menyungguhkan: “--, itu orangnya”, katanya sambil menunjuk seseorang yang baru datang +Peribahasa (mengandung [lah]) +mensiang yang baru dicari, kampil ‘lah sudah dahulu diff --git a/tests/kasus/str-auth/lampir.txt b/tests/kasus/str-auth/lampir.txt new file mode 100644 index 0000000..8cb553e --- /dev/null +++ b/tests/kasus/str-auth/lampir.txt @@ -0,0 +1,4 @@ +lam.pir +(prakategorial) cari: lampiran, melampiri, melampirkan, terlampir +Kata Turunan +lampiran; melampiri; melampirkan; terlampir diff --git a/tests/kasus/str-auth/makin.txt b/tests/kasus/str-auth/makin.txt new file mode 100644 index 0000000..cec405f --- /dev/null +++ b/tests/kasus/str-auth/makin.txt @@ -0,0 +1,8 @@ +ma.kin +bentuk tidak baku: mangkin, semakin +1. (adv) kian bertambah: tangisnya -- menjadi-jadi; pesawat itu terbang -- tinggi +2. (p) (kl) lebih-lebih; apalagi: segala gembala gajah semuanya kasih akan Laksamana Khoja Hassan, -- kepada gembala Kepenjang itu jangan dikata lagi +Kata Turunan +semakin +Peribahasa (mengandung [makin]) +ilmu padi, makin berisi makin runduk; jika pisau tiada berbaja, makin dikikir bertambah tumpul; lagi murah, lagi menawar (makin murah, makin menawar) diff --git a/tests/kasus/str-auth/me-.txt b/tests/kasus/str-auth/me-.txt new file mode 100644 index 0000000..500028b --- /dev/null +++ b/tests/kasus/str-auth/me-.txt @@ -0,0 +1,15 @@ +me- /mê-/ +→ meng- + +meng- /mêng-/ +varian: me-, mem-, men-, menge-, meny- +1. (prefiks pembentuk verba) menjadi: mencair; menguning; mengkristal +2. (prefiks pembentuk verba) berfungsi sebagai atau menyerupai: menyupir; menggunung +3. (prefiks pembentuk verba) makan atau minum: menyatai; mengopi; mengeteh +4. (prefiks pembentuk verba) menuju: mengutara; melaut; menepi +5. (prefiks pembentuk verba) mencari atau mengumpulkan: mendamar; merumput +6. (prefiks pembentuk verba) mengeluarkan bunyi: mengeong; mengaum; mencicit +7. (prefiks pembentuk verba) menimbulkan kesan seperti seseorang atau sesuatu yang: membisu; membatu; merendah hati +8. (prefiks pembentuk verba) dasar verba: membaca; menulis; membajak +9. (prefiks pembentuk verba) membuat; menghasilkan: menyambal; menggulai; membatik +10. (prefiks pembentuk verba) menyatakan: mengaku diff --git a/tests/kasus/str-auth/menjadikan.txt b/tests/kasus/str-auth/menjadikan.txt new file mode 100644 index 0000000..44ca616 --- /dev/null +++ b/tests/kasus/str-auth/menjadikan.txt @@ -0,0 +1,8 @@ +jadi (1) » men.ja.di.kan +1. (v) membuat sebagai; merupakan: ia ~ sakit adiknya sebagai alasan untuk tidak pergi kuliah +2. (v) menyebabkan: hal itu akan ~ orang lain marah-marah +3. (v) mengangkat (memilih) sebagai: rakyat telah ~ dia kepala desa +4. (v) melaksanakan (rencana, janji, dan sebagainya): ia ~ penawarannya untuk membeli rumah itu +5. (v) menciptakan; mengadakan: Tuhan yang ~ langit dan bumi beserta isinya +Gabungan Kata +menjadikan hati diff --git a/tests/kasus/str-auth/quo vadis?.txt b/tests/kasus/str-auth/quo vadis?.txt new file mode 100644 index 0000000..0d50f54 --- /dev/null +++ b/tests/kasus/str-auth/quo vadis?.txt @@ -0,0 +1,2 @@ +quo vadis? +(ukp) (Lt) hendak pergi ke mana? (dipakai untuk mengingatkan seseorang agar memperbaiki dirinya) diff --git a/tests/kasus/str-auth/ranah.txt b/tests/kasus/str-auth/ranah.txt new file mode 100644 index 0000000..dc6f457 --- /dev/null +++ b/tests/kasus/str-auth/ranah.txt @@ -0,0 +1,8 @@ +ra.nah +1. (n) tanah rata; dataran rendah; lembah +2. (n) tanah yang berpaya-paya +3. (n) elemen atau unsur yang dibatasi; bidang disiplin +4. (n) (Ling) lingkungan yang memungkinkan terjadinya percakapan, merupakan kombinasi antara partisipan, topik, dan tempat (misalnya keluarga, pendidikan, tempat kerja, keagamaan, dan sebagainya) +5. (n) (Psi) bagian (satuan) perilaku manusia: -- afektif berbagai perilaku yang berkaitan dengan perasaan; -- kognitif perilaku yang menjadi kegiatan kognisi atau pikiran +Gabungan Kata +ranah afektif; ranah eminen; ranah frekuensi; ranah kognitif; ranah politik; ranah psikomotor diff --git a/tests/kasus/str-auth/roh.txt b/tests/kasus/str-auth/roh.txt new file mode 100644 index 0000000..6f8b5ea --- /dev/null +++ b/tests/kasus/str-auth/roh.txt @@ -0,0 +1,8 @@ +roh +bentuk tidak baku: ruh +Etimologi: [Arab] (n) (sg) (f/m) رُوْحٌ rūh: tiupan; sesuatu yang membuat manusia dapat hidup +1. (n) sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan); nyawa: jika -- sudah berpisah dari badan, berakhirlah kehidupan seseorang +2. (n) makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya) +3. (n) (ki) semangat; spirit: kedamaian bagi seluruh warga sesuai dengan -- Islam +Gabungan Kata +roh Kudus; roh suci diff --git a/tests/kasus/str-auth/sage.txt b/tests/kasus/str-auth/sage.txt new file mode 100644 index 0000000..5ba5a1b --- /dev/null +++ b/tests/kasus/str-auth/sage.txt @@ -0,0 +1,5 @@ +sa.ge (1) /sagé/ +(n) cerita rakyat berdasarkan cerita sejarah yang sudah ditambah imajinasi masyarakat + +sa.ge (2) /sagé/ +(n) tanaman yang termasuk keluarga min, tingginya dapat mencapai 70 cm, daunnya berbentuk oval, keras, berbulu halus, beraroma tajam, dan biasa digunakan sebagai bumbu masakan 〈Salvia officinalis〉 diff --git a/tests/kasus/str-auth/semakin.txt b/tests/kasus/str-auth/semakin.txt new file mode 100644 index 0000000..9133ac6 --- /dev/null +++ b/tests/kasus/str-auth/semakin.txt @@ -0,0 +1,4 @@ +makin » se.ma.kin + +se.ma.kin /sêmakin/ +→ makin diff --git a/tests/kasus/str-auth/tampak.txt b/tests/kasus/str-auth/tampak.txt new file mode 100644 index 0000000..0c6347e --- /dev/null +++ b/tests/kasus/str-auth/tampak.txt @@ -0,0 +1,13 @@ +tam.pak (1) +bentuk tidak baku: nampak +1. (v) dapat dilihat; kelihatan: pulau itu sudah -- dari sini +2. (v) memperlihatkan diri; muncul: sudah lama dia tidak -- +Kata Turunan +ketampakan; menampak; menampakkan; penampakan; tampak-tampak; tampaknya; tertampak + +tam.pak (2) +→ campak (2) +Peribahasa (mengandung [tampak]) +buka kulit, ambil (tampak) isi; datang tampak muka, pulang tampak punggung; datang tampak muka, pulang tampak punggung; hilang sepuh tampak senam; kuman di seberang lautan tampak, gajah di pelupuk mata tidak tampak; tampak gabak di hulu (gabak di hulu tanda akan hujan); tampak tembelangnya; terpijak benang arang hitam tampak; yang tinggi tampak jauh, yang dekat jolong bersua +Kiasan (mengandung [tampak]) +tidak tampak batang hidungnya diff --git a/tests/kasus/str/alam.txt b/tests/kasus/str/alam.txt new file mode 100644 index 0000000..f760d1c --- /dev/null +++ b/tests/kasus/str/alam.txt @@ -0,0 +1,14 @@ +alam (1) +1. (n) segala yang ada di langit dan di bumi (seperti bumi, bintang, kekuatan): -- sekeliling +2. (n) lingkungan kehidupan +3. (n) segala sesuatu yang termasuk dalam satu lingkungan (golongan dan sebagainya) dan dianggap sebagai satu keutuhan: -- pikiran; -- tumbuh-tumbuhan +4. (n) segala daya (gaya, kekuatan, dan sebagainya) yang menyebabkan terjadinya dan seakan-akan mengatur segala sesuatu yang ada di dunia ini: hukum --; ilmu -- +5. (n) yang bukan buatan manusia: karet -- +6. (n) dunia: -- semesta; syah -- +7. (n) kerajaan; daerah; negeri: -- Minangkabau + +alam (2) +(prakategorial) cari: berpengalaman, mengalami, pengalam, pengalaman + +alam (3) +(n) bendera (panji-panji) sebagai tanda (pada pasukan dan sebagainya) diff --git a/tests/kasus/str/ranah.txt b/tests/kasus/str/ranah.txt new file mode 100644 index 0000000..0da1b46 --- /dev/null +++ b/tests/kasus/str/ranah.txt @@ -0,0 +1,6 @@ +ra.nah +1. (n) tanah rata; dataran rendah; lembah +2. (n) tanah yang berpaya-paya +3. (n) elemen atau unsur yang dibatasi; bidang disiplin +4. (n) (Ling) lingkungan yang memungkinkan terjadinya percakapan, merupakan kombinasi antara partisipan, topik, dan tempat (misalnya keluarga, pendidikan, tempat kerja, keagamaan, dan sebagainya) +5. (n) (Psi) bagian (satuan) perilaku manusia: -- afektif berbagai perilaku yang berkaitan dengan perasaan; -- kognitif perilaku yang menjadi kegiatan kognisi atau pikiran diff --git a/tests/kasus/str/roh.txt b/tests/kasus/str/roh.txt new file mode 100644 index 0000000..7968d31 --- /dev/null +++ b/tests/kasus/str/roh.txt @@ -0,0 +1,5 @@ +roh +bentuk tidak baku: ruh +1. (n) sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan); nyawa: jika -- sudah berpisah dari badan, berakhirlah kehidupan seseorang +2. (n) makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya) +3. (n) (ki) semangat; spirit: kedamaian bagi seluruh warga sesuai dengan -- Islam diff --git a/tests/kasus/str/semakin.txt b/tests/kasus/str/semakin.txt index 2cdedf8..9133ac6 100644 --- a/tests/kasus/str/semakin.txt +++ b/tests/kasus/str/semakin.txt @@ -1,5 +1,4 @@ makin » se.ma.kin - se.ma.kin /sêmakin/ → makin diff --git a/tests/kasus/str_tanpa_contoh-auth/alam.txt b/tests/kasus/str_tanpa_contoh-auth/alam.txt new file mode 100644 index 0000000..597b73b --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/alam.txt @@ -0,0 +1,24 @@ +alam (1) +Etimologi: [Arab] (n) (sg) (m) عَالَمٌ ‘ālam: manusia; seluruh makhluk +1. (n) segala yang ada di langit dan di bumi (seperti bumi, bintang, kekuatan) +2. (n) lingkungan kehidupan +3. (n) segala sesuatu yang termasuk dalam satu lingkungan (golongan dan sebagainya) dan dianggap sebagai satu keutuhan +4. (n) segala daya (gaya, kekuatan, dan sebagainya) yang menyebabkan terjadinya dan seakan-akan mengatur segala sesuatu yang ada di dunia ini +5. (n) yang bukan buatan manusia +6. (n) dunia +7. (n) kerajaan; daerah; negeri +Kata Turunan +beralam; kealaman +Gabungan Kata +alam akhirat; alam arwah; alam astral; alam baka; alam barzakh; alam besar; alam fana; alam gaib; alam kabir; alam kecil; alam kekal; alam kelanggengan; alam kubur; alam malakut; alam misal; alam nabati; alam pikiran; alam rahim; alam raya; alam sagir; alam samar; alam semesta; alam semesta datar; alam semesta terbuka; alam semesta tertutup + +alam (2) +Etimologi: [Arab] (n) (sg) (m) عَلَمٌ ‘alam: gunung; tanda; lukisan pada baju; plang jalan; bendera pasukan perang +(prakategorial) cari: berpengalaman, mengalami, pengalam, pengalaman +Kata Turunan +berpengalaman; mengalami; pengalam; pengalaman + +alam (3) +(n) bendera (panji-panji) sebagai tanda (pada pasukan dan sebagainya) +Kiasan (mengandung [alam]) +negeri (alam) yang baka; pergi ke alam baka diff --git a/tests/kasus/str_tanpa_contoh-auth/beruang.txt b/tests/kasus/str_tanpa_contoh-auth/beruang.txt new file mode 100644 index 0000000..202abe5 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/beruang.txt @@ -0,0 +1,10 @@ +uang » ber.u.ang +1. (v) mempunyai uang +2. (a) (ki) kaya + +be.ru.ang /bêruang/ +(n) binatang buas jenis Ursus, berbulu tebal, dapat berdiri di atas kedua kaki belakangnya, bercakar, dan bermoncong panjang (banyak macamnya, seperti -- bukit, -- damar, -- putih) +Gabungan Kata +beruang es; beruang kutub +Peribahasa (mengandung [beruang]) +hilang rona karena penyakit, hilang bangsa tidak beruang diff --git a/tests/kasus/str_tanpa_contoh-auth/bin.txt b/tests/kasus/str_tanpa_contoh-auth/bin.txt new file mode 100644 index 0000000..f9751fd --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/bin.txt @@ -0,0 +1,7 @@ +bin +Etimologi: [Arab] (n) (sg) (m) اِبْنٌ ibn: anak lelaki +1. (n) (Ar) kata untuk menyatakan anak laki-laki dari seseorang (biasa dipakai untuk keterangan antara nama seseorang dan nama ayah); anak laki-laki dari +2. (p) (cak) (Ar) kata untuk menguatkan atau mengungkapkan dengan perkataan lain + +BIN +(n) (sing) Badan Intelijen Negara (lembaga pemerintah nonkementerian Indonesia yang bertugas di bidang intelijen) diff --git a/tests/kasus/str_tanpa_contoh-auth/civitas academica.txt b/tests/kasus/str_tanpa_contoh-auth/civitas academica.txt new file mode 100644 index 0000000..a9b7f28 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/civitas academica.txt @@ -0,0 +1,2 @@ +civitas academica +(ukp) (Lt) kelompok (warga) masyarakat akademik yang terdiri atas dosen dan mahasiswa dengan perwakilannya yang terbentuk melalui senat masing-masing diff --git a/tests/kasus/str_tanpa_contoh-auth/kan.txt b/tests/kasus/str_tanpa_contoh-auth/kan.txt new file mode 100644 index 0000000..0bdafd8 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/kan.txt @@ -0,0 +1,18 @@ +kan (1) +(n) (ark) langkan (pada perahu) + +kan (2) +(adv) (kp) bukan + +kan (3) +(adv) (kp) akan + +kan (4) +(n) tempat memasak air teh; morong; teko + +-kan (5) +1. (sufiks pembentuk verba) menjadikan +2. (sufiks pembentuk verba) sungguh-sungguh +3. (sufiks pembentuk verba) untuk; kepada orang lain +Peribahasa (mengandung [-kan]) +tak kan lari gunung dikejar, hilang kabut tampaklah dia diff --git a/tests/kasus/str_tanpa_contoh-auth/keratabasa.txt b/tests/kasus/str_tanpa_contoh-auth/keratabasa.txt new file mode 100644 index 0000000..5c0e318 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/keratabasa.txt @@ -0,0 +1,2 @@ +ke.ra.ta.ba.sa /kératabasa/ +(n) perihal menerangkan arti kata dengan memperlakukannya sebagai singkatan, biasanya untuk lelucon (misalnya kata benci ditafsirkan sebagai ‘benar-benar cinta’); etimologi rakyat diff --git a/tests/kasus/str_tanpa_contoh-auth/khayal.txt b/tests/kasus/str_tanpa_contoh-auth/khayal.txt new file mode 100644 index 0000000..a76856d --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/khayal.txt @@ -0,0 +1,7 @@ +kha.yal +bentuk tidak baku: kayal +Etimologi: [Arab] (n) (sg) (m) خَيَالٌ khayāl: bayang-bayang +1. (n) lukisan (gambar) dalam angan-angan; fantasi +2. (n) yang diangan-angankan seperti benar-benar ada +Kata Turunan +berkhayal; khayalan; mengkhayal; mengkhayalkan; pengkhayal; pengkhayalan; terkhayal diff --git a/tests/kasus/str_tanpa_contoh-auth/lah.txt b/tests/kasus/str_tanpa_contoh-auth/lah.txt new file mode 100644 index 0000000..00418cc --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/lah.txt @@ -0,0 +1,10 @@ +-lah (1) +(bentuk terikat) yang digunakan untuk menekankan makna kata yang di depannya + +lah (2) +(adv) (kp) telah + +lah (3) +(p) (cak) kata seru untuk memberi tekanan atau menyungguhkan +Peribahasa (mengandung [lah]) +mensiang yang baru dicari, kampil ‘lah sudah dahulu diff --git a/tests/kasus/str_tanpa_contoh-auth/lampir.txt b/tests/kasus/str_tanpa_contoh-auth/lampir.txt new file mode 100644 index 0000000..8cb553e --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/lampir.txt @@ -0,0 +1,4 @@ +lam.pir +(prakategorial) cari: lampiran, melampiri, melampirkan, terlampir +Kata Turunan +lampiran; melampiri; melampirkan; terlampir diff --git a/tests/kasus/str_tanpa_contoh-auth/makin.txt b/tests/kasus/str_tanpa_contoh-auth/makin.txt new file mode 100644 index 0000000..4ace5d5 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/makin.txt @@ -0,0 +1,8 @@ +ma.kin +bentuk tidak baku: mangkin, semakin +1. (adv) kian bertambah +2. (p) (kl) lebih-lebih; apalagi +Kata Turunan +semakin +Peribahasa (mengandung [makin]) +ilmu padi, makin berisi makin runduk; jika pisau tiada berbaja, makin dikikir bertambah tumpul; lagi murah, lagi menawar (makin murah, makin menawar) diff --git a/tests/kasus/str_tanpa_contoh-auth/me-.txt b/tests/kasus/str_tanpa_contoh-auth/me-.txt new file mode 100644 index 0000000..6cd9c06 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/me-.txt @@ -0,0 +1,15 @@ +me- /mê-/ +→ meng- + +meng- /mêng-/ +varian: me-, mem-, men-, menge-, meny- +1. (prefiks pembentuk verba) menjadi +2. (prefiks pembentuk verba) berfungsi sebagai atau menyerupai +3. (prefiks pembentuk verba) makan atau minum +4. (prefiks pembentuk verba) menuju +5. (prefiks pembentuk verba) mencari atau mengumpulkan +6. (prefiks pembentuk verba) mengeluarkan bunyi +7. (prefiks pembentuk verba) menimbulkan kesan seperti seseorang atau sesuatu yang +8. (prefiks pembentuk verba) dasar verba +9. (prefiks pembentuk verba) membuat; menghasilkan +10. (prefiks pembentuk verba) menyatakan diff --git a/tests/kasus/str_tanpa_contoh-auth/menjadikan.txt b/tests/kasus/str_tanpa_contoh-auth/menjadikan.txt new file mode 100644 index 0000000..705f621 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/menjadikan.txt @@ -0,0 +1,8 @@ +jadi (1) » men.ja.di.kan +1. (v) membuat sebagai; merupakan +2. (v) menyebabkan +3. (v) mengangkat (memilih) sebagai +4. (v) melaksanakan (rencana, janji, dan sebagainya) +5. (v) menciptakan; mengadakan +Gabungan Kata +menjadikan hati diff --git a/tests/kasus/str_tanpa_contoh-auth/quo vadis?.txt b/tests/kasus/str_tanpa_contoh-auth/quo vadis?.txt new file mode 100644 index 0000000..0d50f54 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/quo vadis?.txt @@ -0,0 +1,2 @@ +quo vadis? +(ukp) (Lt) hendak pergi ke mana? (dipakai untuk mengingatkan seseorang agar memperbaiki dirinya) diff --git a/tests/kasus/str_tanpa_contoh-auth/ranah.txt b/tests/kasus/str_tanpa_contoh-auth/ranah.txt new file mode 100644 index 0000000..b0fb555 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/ranah.txt @@ -0,0 +1,8 @@ +ra.nah +1. (n) tanah rata; dataran rendah; lembah +2. (n) tanah yang berpaya-paya +3. (n) elemen atau unsur yang dibatasi; bidang disiplin +4. (n) (Ling) lingkungan yang memungkinkan terjadinya percakapan, merupakan kombinasi antara partisipan, topik, dan tempat (misalnya keluarga, pendidikan, tempat kerja, keagamaan, dan sebagainya) +5. (n) (Psi) bagian (satuan) perilaku manusia +Gabungan Kata +ranah afektif; ranah eminen; ranah frekuensi; ranah kognitif; ranah politik; ranah psikomotor diff --git a/tests/kasus/str_tanpa_contoh-auth/roh.txt b/tests/kasus/str_tanpa_contoh-auth/roh.txt new file mode 100644 index 0000000..78c5ffd --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/roh.txt @@ -0,0 +1,8 @@ +roh +bentuk tidak baku: ruh +Etimologi: [Arab] (n) (sg) (f/m) رُوْحٌ rūh: tiupan; sesuatu yang membuat manusia dapat hidup +1. (n) sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan); nyawa +2. (n) makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya) +3. (n) (ki) semangat; spirit +Gabungan Kata +roh Kudus; roh suci diff --git a/tests/kasus/str_tanpa_contoh-auth/sage.txt b/tests/kasus/str_tanpa_contoh-auth/sage.txt new file mode 100644 index 0000000..5ba5a1b --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/sage.txt @@ -0,0 +1,5 @@ +sa.ge (1) /sagé/ +(n) cerita rakyat berdasarkan cerita sejarah yang sudah ditambah imajinasi masyarakat + +sa.ge (2) /sagé/ +(n) tanaman yang termasuk keluarga min, tingginya dapat mencapai 70 cm, daunnya berbentuk oval, keras, berbulu halus, beraroma tajam, dan biasa digunakan sebagai bumbu masakan 〈Salvia officinalis〉 diff --git a/tests/kasus/str_tanpa_contoh-auth/semakin.txt b/tests/kasus/str_tanpa_contoh-auth/semakin.txt new file mode 100644 index 0000000..9133ac6 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/semakin.txt @@ -0,0 +1,4 @@ +makin » se.ma.kin + +se.ma.kin /sêmakin/ +→ makin diff --git a/tests/kasus/str_tanpa_contoh-auth/tampak.txt b/tests/kasus/str_tanpa_contoh-auth/tampak.txt new file mode 100644 index 0000000..839ea49 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh-auth/tampak.txt @@ -0,0 +1,13 @@ +tam.pak (1) +bentuk tidak baku: nampak +1. (v) dapat dilihat; kelihatan +2. (v) memperlihatkan diri; muncul +Kata Turunan +ketampakan; menampak; menampakkan; penampakan; tampak-tampak; tampaknya; tertampak + +tam.pak (2) +→ campak (2) +Peribahasa (mengandung [tampak]) +buka kulit, ambil (tampak) isi; datang tampak muka, pulang tampak punggung; datang tampak muka, pulang tampak punggung; hilang sepuh tampak senam; kuman di seberang lautan tampak, gajah di pelupuk mata tidak tampak; tampak gabak di hulu (gabak di hulu tanda akan hujan); tampak tembelangnya; terpijak benang arang hitam tampak; yang tinggi tampak jauh, yang dekat jolong bersua +Kiasan (mengandung [tampak]) +tidak tampak batang hidungnya diff --git a/tests/kasus/str_tanpa_contoh/alam.txt b/tests/kasus/str_tanpa_contoh/alam.txt new file mode 100644 index 0000000..f160287 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh/alam.txt @@ -0,0 +1,14 @@ +alam (1) +1. (n) segala yang ada di langit dan di bumi (seperti bumi, bintang, kekuatan) +2. (n) lingkungan kehidupan +3. (n) segala sesuatu yang termasuk dalam satu lingkungan (golongan dan sebagainya) dan dianggap sebagai satu keutuhan +4. (n) segala daya (gaya, kekuatan, dan sebagainya) yang menyebabkan terjadinya dan seakan-akan mengatur segala sesuatu yang ada di dunia ini +5. (n) yang bukan buatan manusia +6. (n) dunia +7. (n) kerajaan; daerah; negeri + +alam (2) +(prakategorial) cari: berpengalaman, mengalami, pengalam, pengalaman + +alam (3) +(n) bendera (panji-panji) sebagai tanda (pada pasukan dan sebagainya) diff --git a/tests/kasus/str_tanpa_contoh/ranah.txt b/tests/kasus/str_tanpa_contoh/ranah.txt new file mode 100644 index 0000000..50aa5fc --- /dev/null +++ b/tests/kasus/str_tanpa_contoh/ranah.txt @@ -0,0 +1,6 @@ +ra.nah +1. (n) tanah rata; dataran rendah; lembah +2. (n) tanah yang berpaya-paya +3. (n) elemen atau unsur yang dibatasi; bidang disiplin +4. (n) (Ling) lingkungan yang memungkinkan terjadinya percakapan, merupakan kombinasi antara partisipan, topik, dan tempat (misalnya keluarga, pendidikan, tempat kerja, keagamaan, dan sebagainya) +5. (n) (Psi) bagian (satuan) perilaku manusia diff --git a/tests/kasus/str_tanpa_contoh/roh.txt b/tests/kasus/str_tanpa_contoh/roh.txt new file mode 100644 index 0000000..f72bff2 --- /dev/null +++ b/tests/kasus/str_tanpa_contoh/roh.txt @@ -0,0 +1,5 @@ +roh +bentuk tidak baku: ruh +1. (n) sesuatu (unsur) yang ada dalam jasad yang diciptakan Tuhan sebagai penyebab adanya hidup (kehidupan); nyawa +2. (n) makhluk hidup yang tidak berjasad, tetapi berpikiran dan berperasaan (malaikat, jin, setan, dan sebagainya) +3. (n) (ki) semangat; spirit diff --git a/tests/kasus/str_tanpa_contoh/semakin.txt b/tests/kasus/str_tanpa_contoh/semakin.txt index 2cdedf8..9133ac6 100644 --- a/tests/kasus/str_tanpa_contoh/semakin.txt +++ b/tests/kasus/str_tanpa_contoh/semakin.txt @@ -1,5 +1,4 @@ makin » se.ma.kin - se.ma.kin /sêmakin/ → makin diff --git a/tests/test_kbbi.py b/tests/test_kbbi.py index 4686a92..ab2fefe 100644 --- a/tests/test_kbbi.py +++ b/tests/test_kbbi.py @@ -20,25 +20,108 @@ def idfn(val): @pytest.mark.parametrize( "aktual_objek,ekspektasi_str", kasus["str"], indirect=True, ids=idfn ) -def test_str(aktual_objek, ekspektasi_str): +def test_str_nonauth_dgn_eksp_nonauth(aktual_objek, ekspektasi_str): assert str(aktual_objek) == ekspektasi_str +@pytest.mark.parametrize( + "aktual_objek_terautentikasi,ekspektasi_str", + kasus["str"], + indirect=True, + ids=idfn, +) +def test_str_auth_dgn_eksp_nonauth( + aktual_objek_terautentikasi, ekspektasi_str +): + assert ( + aktual_objek_terautentikasi.__str__(fitur_pengguna=False) + == ekspektasi_str + ) + + +@pytest.mark.parametrize( + "aktual_objek_terautentikasi,ekspektasi_str", + kasus["str-auth"], + indirect=True, + ids=idfn, +) +def test_str_auth_dgn_eksp_auth(aktual_objek_terautentikasi, ekspektasi_str): + assert str(aktual_objek_terautentikasi) == ekspektasi_str + + @pytest.mark.parametrize( "aktual_objek,ekspektasi_str", kasus["str_tanpa_contoh"], indirect=True, ids=idfn, ) -def test_str_tanpa_contoh(aktual_objek, ekspektasi_str): +def test_str_tanpa_contoh_nonauth_dgn_eksp_nonauth( + aktual_objek, ekspektasi_str +): assert aktual_objek.__str__(contoh=False) == ekspektasi_str +@pytest.mark.parametrize( + "aktual_objek_terautentikasi,ekspektasi_str", + kasus["str_tanpa_contoh"], + indirect=True, + ids=idfn, +) +def test_str_tanpa_contoh_auth_dgn_eksp_nonauth( + aktual_objek_terautentikasi, ekspektasi_str +): + assert ( + aktual_objek_terautentikasi.__str__(contoh=False, fitur_pengguna=False) + == ekspektasi_str + ) + + +@pytest.mark.parametrize( + "aktual_objek_terautentikasi,ekspektasi_str", + kasus["str_tanpa_contoh-auth"], + indirect=True, + ids=idfn, +) +def test_str_tanpa_contoh_auth_dgn_eksp_auth( + aktual_objek_terautentikasi, ekspektasi_str +): + assert aktual_objek_terautentikasi.__str__(contoh=False) == ekspektasi_str + + @pytest.mark.parametrize( "aktual_objek,ekspektasi_serialisasi", kasus["serialisasi"], indirect=True, ids=idfn, ) -def test_serialisasi(aktual_objek, ekspektasi_serialisasi): +def test_serialisasi_nonauth_dgn_eksp_nonauth( + aktual_objek, ekspektasi_serialisasi +): assert aktual_objek.serialisasi() == ekspektasi_serialisasi + + +@pytest.mark.parametrize( + "aktual_objek_terautentikasi,ekspektasi_serialisasi", + kasus["serialisasi"], + indirect=True, + ids=idfn, +) +def test_serialisasi_auth_dgn_eksp_nonauth( + aktual_objek_terautentikasi, ekspektasi_serialisasi +): + assert ( + aktual_objek_terautentikasi.serialisasi(fitur_pengguna=False) + == ekspektasi_serialisasi + ) + + +@pytest.mark.parametrize( + "aktual_objek_terautentikasi,ekspektasi_serialisasi", + kasus["serialisasi-auth"], + indirect=True, + ids=idfn, +) +def test_serialisasi_auth_dgn_eksp_auth( + aktual_objek_terautentikasi, ekspektasi_serialisasi +): + assert aktual_objek_terautentikasi.serialisasi() == ekspektasi_serialisasi