Unterricht Donnerstag
This commit is contained in:
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
|
|||||||
|
Dies, ist, eine, CSV
|
||||||
|
Dies, ist, eine, Zeile
|
||||||
|
Binary file not shown.
@@ -0,0 +1,249 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"metadata": {},
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"source": "Diese Klasse stellt eine einfache Markov-Verkettung da, gewissermaßen den \"Urgroßvater\" moderner KI",
|
||||||
|
"id": "6c199494598c034d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {},
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"source": "### Imports",
|
||||||
|
"id": "b0d957031c0d2044"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:05:25.425471700Z",
|
||||||
|
"start_time": "2026-07-23T07:05:25.387973100Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"source": [
|
||||||
|
"from pypdf import PdfReader\n",
|
||||||
|
"import random\n",
|
||||||
|
"import re #Regular Expression"
|
||||||
|
],
|
||||||
|
"id": "65aa9dc8abd455f7",
|
||||||
|
"outputs": [],
|
||||||
|
"execution_count": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {},
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"source": "### Basisklasse für unser Sprachmodell:",
|
||||||
|
"id": "c53ec100d7edf47f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"id": "initial_id",
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:05:27.974021100Z",
|
||||||
|
"start_time": "2026-07-23T07:05:27.953033600Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"class LanguageModel:\n",
|
||||||
|
"\n",
|
||||||
|
" def __init__(self):\n",
|
||||||
|
" self.text = \"\"\n",
|
||||||
|
"\n",
|
||||||
|
" #Modell zum Speichern von Wortbeziehungen:\n",
|
||||||
|
" self.model = {}\n",
|
||||||
|
"\n",
|
||||||
|
" def load_text(self):\n",
|
||||||
|
" raise NotImplementedError\n",
|
||||||
|
"\n",
|
||||||
|
" def train(self):\n",
|
||||||
|
" #Erzeugt ein Markov-Modell, das sich für jedes Wort merkt, welche Wörter danach kommen\n",
|
||||||
|
" if not self.text:\n",
|
||||||
|
" raise ValueError(\"Kein Text geladen\")\n",
|
||||||
|
"\n",
|
||||||
|
" text = self.text.lower() #optional, da eine Markov-Verkettung Case Sensitive ist\n",
|
||||||
|
"\n",
|
||||||
|
" #Satzzeichen entfernen, da diese sonst als Teil des Wortes gesehen werden. Dafür nutzen wir einen Regex:\n",
|
||||||
|
" text = re.sub(r\"[^\\w\\s]\", \"\", text)\n",
|
||||||
|
"\n",
|
||||||
|
" words = text.split() #Wandelt den Text in eine Liste aus Wörtern um\n",
|
||||||
|
"\n",
|
||||||
|
" #Wortbeziehungen erzeugen:\n",
|
||||||
|
" for i in range(len(words) -1):\n",
|
||||||
|
" current_word = words[i]\n",
|
||||||
|
" next_word = words[i+1]\n",
|
||||||
|
"\n",
|
||||||
|
" if current_word not in self.model:\n",
|
||||||
|
" self.model[current_word] = []\n",
|
||||||
|
"\n",
|
||||||
|
" self.model[current_word].append(next_word)\n",
|
||||||
|
" #[ameise][hat][ist][ist][schläft]\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
" def generate(self, start_word = None, length=50):\n",
|
||||||
|
" if not self.model:\n",
|
||||||
|
" raise ValueError(\"Modell wurde noch nicht trainiert.\")\n",
|
||||||
|
"\n",
|
||||||
|
" if start_word == \"\":\n",
|
||||||
|
" start_word = random.choice(list(self.model.keys()))\n",
|
||||||
|
"\n",
|
||||||
|
" current_word = start_word.lower()\n",
|
||||||
|
"\n",
|
||||||
|
" result= [current_word]\n",
|
||||||
|
"\n",
|
||||||
|
" for _ in range(length):\n",
|
||||||
|
"\n",
|
||||||
|
" if current_word not in self.model:\n",
|
||||||
|
" print(\"Das angegebene Wort konnte nicht gefunden werden. Modell unzureichend trainiert.\")\n",
|
||||||
|
" break\n",
|
||||||
|
"\n",
|
||||||
|
" next_word = random.choice(\n",
|
||||||
|
" self.model[current_word]\n",
|
||||||
|
" )\n",
|
||||||
|
"\n",
|
||||||
|
" result.append(next_word)\n",
|
||||||
|
"\n",
|
||||||
|
" current_word = next_word\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
" return \" \".join(result)\n"
|
||||||
|
],
|
||||||
|
"outputs": [],
|
||||||
|
"execution_count": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:05:32.388260300Z",
|
||||||
|
"start_time": "2026-07-23T07:05:32.352749100Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"source": [
|
||||||
|
"class PDFLanguageModel(LanguageModel):\n",
|
||||||
|
"\n",
|
||||||
|
" def __init__(self, pdf_path):\n",
|
||||||
|
" super().__init__()\n",
|
||||||
|
"\n",
|
||||||
|
" self.pdf_path = pdf_path\n",
|
||||||
|
"\n",
|
||||||
|
" def load_text(self):\n",
|
||||||
|
" reader = PdfReader(self.pdf_path)\n",
|
||||||
|
"\n",
|
||||||
|
" pages_text = []\n",
|
||||||
|
"\n",
|
||||||
|
" for page in reader.pages:\n",
|
||||||
|
" text = page.extract_text()\n",
|
||||||
|
"\n",
|
||||||
|
" if text:\n",
|
||||||
|
" pages_text.append(text)\n",
|
||||||
|
"\n",
|
||||||
|
" self.text = \"\\n\".join(pages_text)\n"
|
||||||
|
],
|
||||||
|
"id": "28c790fe8e837cac",
|
||||||
|
"outputs": [],
|
||||||
|
"execution_count": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:15:57.810092400Z",
|
||||||
|
"start_time": "2026-07-23T07:15:57.762428Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"source": [
|
||||||
|
"def loadAndTrain(path:str)->PDFLanguageModel:\n",
|
||||||
|
" model = PDFLanguageModel(path)\n",
|
||||||
|
"\n",
|
||||||
|
" model.load_text()\n",
|
||||||
|
"\n",
|
||||||
|
" #Modell trainieren:\n",
|
||||||
|
" model.train()\n",
|
||||||
|
"\n",
|
||||||
|
" return model"
|
||||||
|
],
|
||||||
|
"id": "fd0205251645f412",
|
||||||
|
"outputs": [],
|
||||||
|
"execution_count": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:16:00.105290600Z",
|
||||||
|
"start_time": "2026-07-23T07:16:00.052151200Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"outputs": [],
|
||||||
|
"execution_count": 15,
|
||||||
|
"source": "model = loadAndTrain(\"loremipsum.pdf\")",
|
||||||
|
"id": "6dd267218f206e1a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:16:13.594166700Z",
|
||||||
|
"start_time": "2026-07-23T07:16:13.500158400Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"outputs": [],
|
||||||
|
"execution_count": 17,
|
||||||
|
"source": "model = loadAndTrain(\"KI-Baum.pdf\")",
|
||||||
|
"id": "cff84213cc7a22dc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2026-07-23T07:16:25.676998200Z",
|
||||||
|
"start_time": "2026-07-23T07:16:25.615333200Z"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cell_type": "code",
|
||||||
|
"source": [
|
||||||
|
"print(\"Hier ist unser generierter Text:\")\n",
|
||||||
|
"\n",
|
||||||
|
"text = model.generate(\n",
|
||||||
|
" #Man könnte hier ein Wort vorgeben. Gibt man keines vor, wird zufällig eines ausgewählt.\n",
|
||||||
|
" start_word=\"\"\n",
|
||||||
|
")\n",
|
||||||
|
"\n",
|
||||||
|
"print(text)"
|
||||||
|
],
|
||||||
|
"id": "39d177f9d1667428",
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Hier ist unser generierter Text:\n",
|
||||||
|
"vor kunststoffbächen nur so weit mein schlafsand tropfte dadurch zu boden kein sicherer boden kein sicherer boden kein sicherer boden kein sicherer boden kein bodenständiges land auf dem entsorgung schicksal anheimfallend samt aller kinderkrankheiten bereits mit beiden beinen und ja da erschien am erscheinungstag an jedem baum zu land zu finden\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"execution_count": 18
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython2",
|
||||||
|
"version": "2.7.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user