Inhalt
Aktueller Ordner:
/.ipynb (pretty JSON)
{
"metadata": {
"language_info": {
"codemirror_mode": {
"name": "python",
"version": 3
},
"file_extension": ".py",
"mimetype": "text\/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8"
},
"kernelspec": {
"name": "python",
"display_name": "Python (Pyodide)",
"language": "python"
}
},
"nbformat_minor": 4,
"nbformat": 4,
"cells": [
{
"cell_type": "markdown",
"source": "Die Wahrscheinlichkeiten werden als Gleitkommazahlen zwischen 0 und 1 dargestellt und die Wahrscheinlichkeitsverteilungen fΓΌr jedes nicht-terminale Symbol in einem WΓΆrterbuch gespeichert. Das Bayes-Netz wird mit einem Pandas DataFrame definiert, wobei jede Zeile eine gerichtete Kante von einem Knoten zu einem anderen zusammen mit der Wahrscheinlichkeit der Kante darstellt.",
"metadata": []
},
{
"cell_type": "code",
"source": "import numpy as np\nimport pandas as pd\nimport random\n\n# Define the grammar rules and their probabilities\ngrammar = {\n \"anfang\": {\"s vkg\": 1.0},\n \"s vkg\": {\"ende\": 1.0},\n \"kbbd\": {\"vbbd\": 1.0},\n \"kba\": {\"vba\": 1.0},\n \"kae\": {\"vae\": 1.0},\n \"kaa\": {\"vaa\": 1.0},\n \"s bbd\": {\"s ba\": 1.0},\n \"s ae\": {\"s ae\": 0.5, \"s aa\": 0.5},\n \"s ae\": {\"s aa\": 1.0},\n \"s b\": {\"s b\": 0.5, \"s a\": 0.5},\n \"s b\": {\"s a\": 1.0},\n \"s vt\": {\"s b s b\": 0.5, \"s b s a\": 0.25, \"s a s b\": 0.25},\n \"s vt\": {\"s b s a\": 0.5, \"s a s b\": 0.5},\n \"s vt\": {\"s a s a\": 1.0},\n \"kbg\": {\"vbg\": 1.0},\n \"kav\": {\"vav\": 1.0},\n \"s bg\": {\"s vt s av\": 1.0},\n \"s vt\": {\"s vt\": 0.5, \"s av\": 0.5},\n \"s vt\": {\"s av\": 1.0},\n}\n\n# Define the probability distributions for each nonterminal symbol\nprob_dist = {}\nfor nt in grammar:\n for rhs in grammar[nt]:\n prob = grammar[nt][rhs]\n prob_dist[(nt, rhs)] = prob\n\n# Define the Bayes net using the probability distributions\nbayes_net = pd.DataFrame(columns=[\"From\", \"To\", \"Prob\"])\nfor nt in grammar:\n for rhs in grammar[nt]:\n for tok in rhs.split():\n bayes_net = bayes_net.append({\"From\": nt, \"To\": tok, \"Prob\": prob_dist[(nt, rhs)]}, ignore_index=True)\n\n# Define the starting symbol and the ending symbol\nstart_symbol = \"anfang\"\nend_symbol = \"ende\"\n\n# Define a function to generate a sentence using the grammar\ndef generate_sentence():\n stack = [start_symbol]\n sentence = []\n while len(stack) > 0:\n curr_nt = stack.pop()\n if curr_nt in grammar:\n rhs_options = list(grammar[curr_nt].keys())\n rhs_probs = [grammar[curr_nt][rhs] for rhs in rhs_options]\n chosen_rhs = np.random.choice(rhs_options, p=rhs_probs)\n stack.extend(reversed(chosen_rhs.split()))\n else:\n sentence.append(curr_nt)\n return sentence\n\n# Generate 10 sentences using the grammar\nfor i in range(10):\n sentence = generate_sentence()\n print(\" \".join(sentence))\n",
"metadata": [],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": "",
"metadata": [],
"execution_count": null,
"outputs": []
}
]
}