Metadata-Version: 2.4
Name: ninmeni
Version: 0.1.0a1
Summary: NINMENI - Adaptive Knowledge & Semantic Architecture for Bahasa Representation & Autonomy
Author: Emylton Leunufna
Author-email: Emylton Leunufna <emylton@leunufna.dev>
License: MIT
Keywords: nlp,indonesian,bahasa,linguistics,semantic,morphology
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Natural Language :: Indonesian
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: torch>=2.0.0
Requires-Dist: numpy>=1.24.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pyyaml>=6.0; extra == "dev"
Dynamic: author
Dynamic: license-file
Dynamic: requires-python

# NINMENI

> **Status:** Alpha Release (v0.1.0-alpha) — Framework siap untuk riset dan analisis. Generasi kalimat masih dalam training.

**Adaptive Knowledge & Semantic Architecture for Bahasa Representation & Autonomy**

> *"Kami tidak mengajarkan model bahasa Indonesia. Kami membuat model lahir sebagai bahasa Indonesia."*
>
> — Emylton Leunufna

---

## Apa itu NINMENI?

NINMENI adalah **framework linguistik deterministik** untuk bahasa Indonesia. Bukan model bahasa, bukan fine-tuned Transformer — ini adalah pipeline yang menganalisis, memvalidasi, dan **memahami** kalimat bahasa Indonesia dari prinsip linguistik pertama.

NINMENI menghasilkan `NinmeniState` — representasi linguistik lengkap yang bisa dikonsumsi oleh **head apapun** yang developer definisikan sendiri.

---

## Pipeline — Enam Primitif

```
Kalimat (string)
   ↓
[ LPS ] Linguistic Parse System        → dekomposisi morfem deterministik (TBBBI)
   ↓
[ SFM ] Semantic Field Manifold        → representasi semantik Riemannian dari KBBI
   ↓
[ CPE ] Constraint Propagation Engine  → evaluasi constraint linguistik, hitung energi
   ↓
[ CMC ] Categorical Meaning Composer   → verifikasi komposisi makna via category theory
   ↓
[ TDA ] Topological Dependency Analyzer→ deteksi anomali topologis multi-skala
   ↓
[ KRL ] Knowledge Representation Layer → proposisi + frame semantik + resolusi referensi
   ↓
[ NinmeniState ]                        → output lengkap: energi, pelanggaran, skor, KRL
```

---

## Oposisi terhadap Transformer

| Aspek | Transformer | NINMENI |
|---|---|---|
| Unit dasar | Subword token (statistik) | Morfem + root + afiks (linguistik) |
| Representasi | Dense embedding Euclidean | Riemannian manifold (SFM) |
| Mekanisme inti | Self-attention O(n²) | Constraint propagation O(n·d) |
| Semantic grounding | Tidak ada (distribusional) | KBBI 71K kata, 10 domain |
| "Pemahaman" | Hidden state tidak interpretable | Proposisi eksplisit + frame semantik |
| Referensi | Attention weight tidak transparan | Aturan kompatibilitas + recency |
| Pelanggaran | Tidak bisa dijelaskan | Tercatat beserta lokasi dan penjelasan |

---

## Cara Pakai

```python
from ninmeni import NinmeniFramework

fw = NinmeniFramework.dari_kbbi("kbbi_core_v2.json")

# Proses kalimat
state = fw.proses("Hakim menjatuhkan hukuman kepada terdakwa.")

# Skor linguistik
print(state.skor_linguistik)   # 0.72

# Pelanggaran + lokasi
for span in state.violation_spans:
    print(span)

# KRL — pemahaman semantik
krl = state.krl_result
print(krl.proposisi)    # JATUH(agen=Hakim, pasien=hukuman, penerima=terdakwa)
print(krl.frame_nama)   # "HUKUM_PIDANA"
print(krl.jelaskan())   # Penjelasan bahasa Indonesia lengkap
```

---

## KRL — Knowledge Representation Layer

KRL adalah Primitif ke-6 yang menjembatani gap antara **validasi linguistik** dan **pemahaman makna**:

- **PropositionalEncoder** — kalimat → `AKSI(agen=X, pasien=Y, lokasi=Z)`
- **FrameBank** — 12 frame semantik inti Indonesia (JUAL_BELI, HUKUM_PIDANA, KESEHATAN, dst.)
- **FrameMatcher** — cocokkan proposisi ke frame terbaik (deterministik, bukan similarity embedding)
- **ReferenceResolver** — "Dia" → anteseden persona terakhir dalam wacana

---

## Struktur Proyek

```
ninmeni/
  primitives/
    lps/     ← Linguistic Parse System
    sfm/     ← Semantic Field Manifold
    cpe/     ← Constraint Propagation Engine
    cmc/     ← Categorical Meaning Composer
    tda/     ← Topological Dependency Analyzer
    krl/     ← Knowledge Representation Layer
  base/
    state.py ← NinmeniState (output pipeline)
    head.py  ← NinmeniHead (base class untuk custom head)
  heads/
    correctness.py ← CorrectnessEvaluatorHead + LearnedCorrectnessHead
  config.py        ← NinmeniConfig (domain-specific configuration)
  framework.py     ← NinmeniFramework (orkestrator utama)
```

---

## Test Suite

```bash
# Semua test suite harus PASS sebelum deploy
py -3.11 tools/framework_diagnostic.py   # 6/6 PASS
py -3.11 tools/_test_integrasi.py        # PASS
py -3.11 tools/test_jalur_b.py           # 6/6 PASS
py -3.11 tools/test_krl.py               # 5/5 PASS
```

---

## Domain yang Didukung

```python
from ninmeni import NinmeniFramework, NinmeniConfig

# Domain hukum
fw = NinmeniFramework.dari_kbbi("kbbi_core_v2.json",
     config=NinmeniConfig.untuk_domain("hukum"))

# Domain: hukum | kesehatan | militer | pertanahan | pendidikan | bisnis
```

---

## Instalasi

### Dari PyPI (direkomendasikan):

```bash
pip install ninmeni
```

### Dari source:

```bash
git clone https://github.com/rafaelsistems/ninmeni.git
cd ninmeni
pip install -e .
```

### Requirements:

- Python 3.9+
- PyTorch 2.0+
- NumPy 1.24+

---

## Quick Start

```python
from ninmeni.core.model import NinmeniModel, NinmeniConfig
from ninmeni.linguistic.lps import build_root_vocab

# Build vocab dari corpus
corpus = ["petani menanam padi di sawah", "ibu memasak nasi di dapur"]
vocab = build_root_vocab(corpus, min_freq=1)

# Buat model
config = NinmeniConfig()
model = NinmeniModel(config, vocab)

# Evaluasi kebenaran kalimat
scores = model.score(["petani menanam padi di sawah"])
print(f"Skor kebenaran: {scores['total']}")
```

---

## Data

- **KBBI:** `kbbi_core_v2.json` — 71,211 kata, 10 domain semantik (tidak termasuk di package)
- **Python:** 3.9+, PyTorch 2.0+

---

## Penulis

Emylton Leunufna

---

## Lisensi

MIT
