{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "JVPdWpz3hhbj" }, "source": [ "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "4Mvva3v65h1v" }, "source": [ "# **UNIGRAM**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "1cub_VJnUJMl", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "a712acbd-01e2-4c9e-f2c0-d7d33f3bc9fb" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Corpus: Jangan pernah berhenti belajar, karena hidup tak pernah berhenti mengajarkan\n", "Tokens (10): ['jangan', 'pernah', 'berhenti', 'belajar,', 'karena', 'hidup', 'tak', 'pernah', 'berhenti', 'mengajarkan']\n", "\n", "Frekuensi Unigram dalam kalimat\n", " ('jangan'): 1\n", " ('pernah'): 2\n", " ('berhenti'): 2\n", " ('belajar,'): 1\n", " ('karena'): 1\n", " ('hidup'): 1\n", " ('tak'): 1\n", " ('mengajarkan'): 1\n", "\n", "Total unigram dalam 1 kalimat: 10\n", "\n", "Probabilitas masing-masing unigram:\n", " P(jangan) = 0.10 (10.00%)\n", " P(pernah) = 0.20 (20.00%)\n", " P(berhenti) = 0.20 (20.00%)\n", " P(belajar,) = 0.10 (10.00%)\n", " P(karena) = 0.10 (10.00%)\n", " P(hidup) = 0.10 (10.00%)\n", " P(tak) = 0.10 (10.00%)\n", " P(mengajarkan) = 0.10 (10.00%)\n", "\n", "Probabilitas Keseluruhan Kalimat (Model Unigram):\n", " P(jangan pernah berhenti belajar, karena hidup tak pernah berhenti mengajarkan) = P(jangan)=0.10 x P(pernah)=0.20 x P(berhenti)=0.20 x P(belajar,)=0.10 x P(karena)=0.10 x P(hidup)=0.10 x P(tak)=0.10 x P(pernah)=0.20 x P(berhenti)=0.20 x P(mengajarkan)=0.10 = 0.0000 (0.00%)\n" ] } ], "source": [ "from collections import Counter\n", "from IPython.display import clear_output\n", "import math\n", "\n", "# 1. Input Kalimat dan Tokenisasi\n", "kalimat = input(\"Masukkan kalimat: Jangan pernah berhenti belajar, karena hidup tak pernah berhenti mengajarkan \").strip()\n", "\n", "# Bersihkan output (khusus lingkungan notebook)\n", "try:\n", " clear_output()\n", "except:\n", " pass\n", "\n", "print(f\"Corpus: {kalimat}\")\n", "\n", "# Tokenize\n", "tokens = kalimat.lower().split()\n", "print(f\"Tokens ({len(tokens)}): {tokens}\")\n", "\n", "# 2. Hitung Frekuensi Unigram\n", "unigram_counts = Counter(tokens)\n", "total_tokens = sum(unigram_counts.values())\n", "\n", "print(\"\\nFrekuensi Unigram dalam kalimat\")\n", "for pair, count in unigram_counts.items():\n", " print(f\" ('{pair}'): {count}\")\n", "print(f\"\\nTotal unigram dalam 1 kalimat: {total_tokens}\")\n", "\n", "# 3. Hitung Probabilitas Unigram: P(wi) = Count(wi) / Total Kata\n", "unigram_probabilities = {}\n", "for word, count in unigram_counts.items():\n", " prob = count / total_tokens\n", " unigram_probabilities[word] = prob\n", "\n", "print(\"\\nProbabilitas masing-masing unigram:\")\n", "for word, prob in unigram_probabilities.items():\n", " print(f\" P({word}) = {prob:.2f} ({prob*100:.2f}%)\")\n", "\n", "# 4. Hitung Probabilitas Kalimat Keseluruhan (P(kalimat) = P(w1) * P(w2) * ...)\n", "p_kalimat = 1\n", "prob_parts = []\n", "\n", "# Loop untuk menghitung probabilitas total dan membangun string rumus detail\n", "for word in tokens:\n", " prob_value = unigram_probabilities[word]\n", " p_kalimat *= prob_value\n", " # Format: P(word)=prob_value\n", " prob_parts.append(f\"P({word})={prob_value:.2f}\")\n", "\n", "# Gabungkan bagian-bagian rumus untuk mendapatkan prob_str detail\n", "prob_str = \" x \".join(prob_parts)\n", "\n", "print(\"\\nProbabilitas Keseluruhan Kalimat (Model Unigram):\")\n", "print(f\" P({' '.join(tokens)}) = {prob_str} = {p_kalimat:.4f} ({p_kalimat*100:.2f}%)\")" ] }, { "cell_type": "markdown", "metadata": { "id": "Vstwt996-FrS" }, "source": [ "# **BIGRAM**" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "XRIY4qgTVbjl", "outputId": "4eff35ea-8a13-4b4a-fd8f-e0f3518c1add" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Corpus: ilmu adalah cahaya, dan belajar adalah menyalakan lentera dalam kegelapan\n", "Tokens (10): ['ilmu', 'adalah', 'cahaya,', 'dan', 'belajar', 'adalah', 'menyalakan', 'lentera', 'dalam', 'kegelapan']\n", "\n", "Frekuensi Bigram dalam kalimat:\n", " ('ilmu', 'adalah'): 1\n", " ('adalah', 'cahaya,'): 1\n", " ('cahaya,', 'dan'): 1\n", " ('dan', 'belajar'): 1\n", " ('belajar', 'adalah'): 1\n", " ('adalah', 'menyalakan'): 1\n", " ('menyalakan', 'lentera'): 1\n", " ('lentera', 'dalam'): 1\n", " ('dalam', 'kegelapan'): 1\n", "\n", "Total bigram dalam 1 kalimat: 9\n", "\n", "Probabilitas masing-masing bigram:\n", " P(adalah|ilmu) = 1.00 (100.00%)\n", " P(cahaya,|adalah) = 0.50 (50.00%)\n", " P(dan|cahaya,) = 1.00 (100.00%)\n", " P(belajar|dan) = 1.00 (100.00%)\n", " P(adalah|belajar) = 1.00 (100.00%)\n", " P(menyalakan|adalah) = 0.50 (50.00%)\n", " P(lentera|menyalakan) = 1.00 (100.00%)\n", " P(dalam|lentera) = 1.00 (100.00%)\n", " P(kegelapan|dalam) = 1.00 (100.00%)\n", "\n", "Probabilitas Keseluruhan Kalimat (Model Bigram):\n", " P(ilmu adalah cahaya, dan belajar adalah menyalakan lentera dalam kegelapan) = P(ilmu)=0.10 x P(adalah|ilmu)=1.00 x P(cahaya,|adalah)=0.50 x P(dan|cahaya,)=1.00 x P(belajar|dan)=1.00 x P(adalah|belajar)=1.00 x P(menyalakan|adalah)=0.50 x P(lentera|menyalakan)=1.00 x P(dalam|lentera)=1.00 x P(kegelapan|dalam)=1.00 = 0.025000 (2.50%)\n" ] } ], "source": [ "from collections import Counter\n", "from IPython.display import clear_output\n", "import math\n", "\n", "# 1. Input Kalimat dan Tokenisasi\n", "kalimat = input(\"Masukkan kalimat: Ilmu adalah cahaya, dan belajar adalah menyalakan lentera dalam kegelapan \").strip()\n", "\n", "# Bersihkan output (khusus lingkungan notebook)\n", "try:\n", " clear_output()\n", "except:\n", " pass\n", "\n", "print(f\"Corpus: {kalimat}\")\n", "\n", "# Tokenisasi\n", "tokens = kalimat.lower().split()\n", "print(f\"Tokens ({len(tokens)}): {tokens}\")\n", "\n", "# 2. Hitung Frekuensi Unigram dan Bigram\n", "unigram_counts = Counter(tokens)\n", "bigrams = [(tokens[i], tokens[i+1]) for i in range(len(tokens) - 1)]\n", "bigram_counts = Counter(bigrams)\n", "\n", "print(\"\\nFrekuensi Bigram dalam kalimat:\")\n", "for pair, count in bigram_counts.items():\n", " print(f\" {pair}: {count}\")\n", "print(f\"\\nTotal bigram dalam 1 kalimat: {sum(bigram_counts.values())}\")\n", "\n", "# 3. Hitung Probabilitas Bigram: P(w2 | w1) = Count(w1,w2) / Count(w1)\n", "bigram_probabilities = {}\n", "for (w1, w2), count in bigram_counts.items():\n", " prob = count / unigram_counts[w1]\n", " bigram_probabilities[(w1, w2)] = prob\n", "\n", "print(\"\\nProbabilitas masing-masing bigram:\")\n", "for (w1, w2), prob in bigram_probabilities.items():\n", " print(f\" P({w2}|{w1}) = {prob:.2f} ({prob*100:.2f}%)\")\n", "\n", "# 4. Hitung Probabilitas Kalimat Keseluruhan (Model Bigram)\n", "# P(kalimat) = P(w1) * P(w2|w1) * P(w3|w2) * ...\n", "total_tokens = sum(unigram_counts.values())\n", "p_w1 = unigram_counts.get(tokens[0], 0) / total_tokens # P(w1)\n", "p_kalimat = p_w1 # Inisialisasi dengan P(w1)\n", "\n", "prob_str_parts = [f\"P({tokens[0]})={p_w1:.2f}\"] # Tambahkan P(w1) ke rumus\n", "\n", "for i in range(1, len(tokens)):\n", " pair = (tokens[i-1], tokens[i])\n", " p = bigram_probabilities.get(pair, 0)\n", " p_kalimat *= p\n", " prob_str_parts.append(f\"P({pair[1]}|{pair[0]})={p:.2f}\")\n", "\n", "# Gabungkan rumus perkalian untuk ditampilkan\n", "prob_str = \" x \".join(prob_str_parts)\n", "\n", "print(\"\\nProbabilitas Keseluruhan Kalimat (Model Bigram):\")\n", "print(f\" P({' '.join(tokens)}) = {prob_str} = {p_kalimat:.6f} ({p_kalimat*100:.2f}%)\")" ] }, { "cell_type": "markdown", "metadata": { "id": "E6n1IU8X-G9S" }, "source": [ "# **TRIGRAM**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "BIRARsj2FHJg", "outputId": "6e09b998-b787-4c91-a710-57a809bf2223" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Corpus: belajar adalah kunci membuka pintu kesuksesan\n", "Tokens (6): ['belajar', 'adalah', 'kunci', 'membuka', 'pintu', 'kesuksesan']\n", "\n", "Frekuensi Trigram dalam kalimat:\n", " ('belajar', 'adalah', 'kunci'): 1\n", " ('adalah', 'kunci', 'membuka'): 1\n", " ('kunci', 'membuka', 'pintu'): 1\n", " ('membuka', 'pintu', 'kesuksesan'): 1\n", "\n", "Total trigram dalam 1 kalimat: 4\n", "\n", "Probabilitas masing-masing trigram:\n", " P(kunci|belajar,adalah) = 1.00 (100.00%)\n", " P(membuka|adalah,kunci) = 1.00 (100.00%)\n", " P(pintu|kunci,membuka) = 1.00 (100.00%)\n", " P(kesuksesan|membuka,pintu) = 1.00 (100.00%)\n", "\n", "Probabilitas Keseluruhan Kalimat (Model Trigram):\n", " P(belajar adalah kunci membuka pintu kesuksesan) = P(belajar)=0.17 x P(adalah|belajar)=1.00 x P(kunci|belajar,adalah)=1.00 x P(membuka|adalah,kunci)=1.00 x P(pintu|kunci,membuka)=1.00 x P(kesuksesan|membuka,pintu)=1.00 = 0.166667 (16.67%)\n" ] } ], "source": [ "from collections import Counter\n", "from IPython.display import clear_output\n", "import math\n", "\n", "# 1. Input Kalimat dan Tokenisasi\n", "kalimat = input(\"Masukkan kalimat: Belajar adalah kunci membuka pintu kesuksesan\").strip()\n", "\n", "# Bersihkan output (khusus lingkungan notebook)\n", "try:\n", " clear_output()\n", "except:\n", " pass\n", "\n", "print(f\"Corpus: {kalimat}\")\n", "\n", "# Tokenisasi\n", "tokens = kalimat.lower().split()\n", "print(f\"Tokens ({len(tokens)}): {tokens}\")\n", "\n", "# 2. Hitung Frekuensi Bigram dan Trigram\n", "bigrams = [(tokens[i], tokens[i+1]) for i in range(len(tokens) - 1)]\n", "trigrams = [(tokens[i], tokens[i+1], tokens[i+2]) for i in range(len(tokens) - 2)]\n", "\n", "bigram_counts = Counter(bigrams)\n", "trigram_counts = Counter(trigrams)\n", "\n", "print(\"\\nFrekuensi Trigram dalam kalimat:\")\n", "for tg, count in trigram_counts.items():\n", " print(f\" {tg}: {count}\")\n", "print(f\"\\nTotal trigram dalam 1 kalimat: {sum(trigram_counts.values())}\")\n", "\n", "# 3. Hitung Probabilitas Trigram: P(w3 | w1, w2) = Count(w1,w2,w3) / Count(w1,w2)\n", "trigram_probabilities = {}\n", "for (w1, w2, w3), count in trigram_counts.items():\n", " # Hindari pembagian dengan nol (jika ada bigram yang tidak muncul)\n", " if bigram_counts[(w1, w2)] > 0:\n", " prob = count / bigram_counts[(w1, w2)]\n", " else:\n", " prob = 0\n", " trigram_probabilities[(w1, w2, w3)] = prob\n", "\n", "print(\"\\nProbabilitas masing-masing trigram:\")\n", "for (w1, w2, w3), prob in trigram_probabilities.items():\n", " print(f\" P({w3}|{w1},{w2}) = {prob:.2f} ({prob*100:.2f}%)\")\n", "\n", "# Tambahkan perhitungan Unigram Count (dibutuhkan untuk P(w1) dan P(w2|w1))\n", "unigram_counts = Counter(tokens)\n", "total_tokens = sum(unigram_counts.values())\n", "\n", "# 4. Hitung Probabilitas Kalimat Keseluruhan (Model Trigram)\n", "# P(kalimat) = P(w1) * P(w2|w1) * P(w3|w1,w2) * ...\n", "\n", "# a. P(w1)\n", "p_w1 = unigram_counts.get(tokens[0], 0) / total_tokens if total_tokens > 0 else 0\n", "\n", "# b. P(w2|w1) (Menggunakan Bigram tanpa smoothing)\n", "if len(tokens) > 1:\n", " count_w1 = unigram_counts.get(tokens[0], 1) # Hindari pembagian dengan 0\n", " p_w2_w1 = bigram_counts.get((tokens[0], tokens[1]), 0) / count_w1\n", "else:\n", " p_w2_w1 = 1.0 # Jika hanya 1 kata\n", "\n", "p_kalimat = p_w1 * p_w2_w1 # Inisialisasi dengan P(w1) * P(w2|w1)\n", "\n", "# Daftar bagian rumus untuk ditampilkan\n", "prob_str_parts = [f\"P({tokens[0]})={p_w1:.2f}\"]\n", "if len(tokens) > 1:\n", " prob_str_parts.append(f\"P({tokens[1]}|{tokens[0]})={p_w2_w1:.2f}\")\n", "\n", "# c. Perkalian Trigram P(wi | wi-2, wi-1) untuk i >= 3\n", "for i in range(len(tokens) - 2):\n", " triplet = (tokens[i], tokens[i+1], tokens[i+2])\n", " p = trigram_probabilities.get(triplet, 0)\n", " p_kalimat *= p\n", " prob_str_parts.append(f\"P({triplet[2]}|{triplet[0]},{triplet[1]})={p:.2f}\")\n", "\n", "prob_str = \" x \".join(prob_str_parts)\n", "\n", "print(\"\\nProbabilitas Keseluruhan Kalimat (Model Trigram):\")\n", "print(f\" P({' '.join(tokens)}) = {prob_str} = {p_kalimat:.6f} ({p_kalimat*100:.2f}%)\")\n" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 0 }