{"id":170,"date":"2019-07-11T15:29:39","date_gmt":"2019-07-11T15:29:39","guid":{"rendered":"http:\/\/gigers.com\/blog\/?p=170"},"modified":"2024-06-24T17:33:04","modified_gmt":"2024-06-24T17:33:04","slug":"vom-buchstabe-zur-sprachgenerierung","status":"publish","type":"post","link":"https:\/\/gigers.com\/blog\/vom-buchstabe-zur-sprachgenerierung\/","title":{"rendered":"Vom Buchstabe zur Sprachgenerierung"},"content":{"rendered":"<p>Der Sprachwissenschaftler Fran\u00e7ois Conrad f\u00fchrt den harten Klang der deutschen Sprache unter anderem auf die Silbenstruktur des Deutschen zur\u00fcck. Diese Aussage bietet sich an, um ein einfaches Computerprogramm zu schreiben, welches mittels einer Menge von Buchstaben Morpheme (Laute mit Bedeutung) bildet und daraus W\u00f6rter (und S\u00e4tze) zusammensetzt.<\/p>\n<figure id=\"attachment_171\" aria-describedby=\"caption-attachment-171\" style=\"width: 960px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-171 size-full\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Hauptbildschirm.png\" alt=\"\" width=\"960\" height=\"720\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Hauptbildschirm.png 960w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Hauptbildschirm-300x225.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Hauptbildschirm-768x576.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-171\" class=\"wp-caption-text\">Hauptbildschirm des mit Snap! geschriebenen Programms: Am oberen Bildrand sind einige Listen zu sehen, welche die Zufallsgenerierung erm\u00f6glichen. Unten rechts sind die Werte einiger im Programm verwendeten Variablen sichtbar.<\/figcaption><\/figure>\n<p>Bei der Programmierung des Sprachengenerators k\u00f6nnen folgende informatorischen Konzepte eingesetzt werden:<\/p>\n<ul>\n<li>Variablen (und Listen),<\/li>\n<li>Schleifen,<\/li>\n<li>Funktionen (wiederkehrende Programmbl\u00f6cke).<\/li>\n<\/ul>\n<p>Bevor man mit der Programmierung beginnt, ist es lohnenswert, sich den Programmablauf vor Augen zu f\u00fchren.<\/p>\n<figure id=\"attachment_173\" aria-describedby=\"caption-attachment-173\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-173\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/laut_zu_sprache-598x1024.png\" alt=\"Flowchart des Programms\" width=\"525\" height=\"899\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/laut_zu_sprache-598x1024.png 598w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/laut_zu_sprache-175x300.png 175w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/laut_zu_sprache-768x1316.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/laut_zu_sprache.png 826w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-173\" class=\"wp-caption-text\">Das Flussdiagramm zeigt den Ablauf des Programms. Zwei ineinander verschachtelte Schlaufen erzeugen zuerst einzelne W\u00f6rter und dann ganze S\u00e4tze.<\/figcaption><\/figure>\n<p>In einem ersten Arbeitsschritt sollen Morpheme (bedeutungstragende Laute gebildet und zu W\u00f6rtern zusammengesetzt werden. Dazu werden Konsonanten und Vokale nach vorgegebenen Regeln (im Programm die morphemes-Liste) aneinandergereiht. Die Anzahl der gebildeten Morpheme bestimmt die Wortl\u00e4nge.<\/p>\n<p>Das gleiche Verfahren wenden kann dann auch f\u00fcr die Bildung von ganzen S\u00e4tzen verwendet werden.<\/p>\n<p>Um das Programm etwas attraktiver zu gestalten, werden die S\u00e4tze mit einer Erweiterung von Snap! in gesprochene Sprache umgewandelt.<\/p>\n<p>Das h\u00f6rt sich dann beispielsweise so an:<\/p>\n<audio class=\"wp-audio-shortcode\" id=\"audio-170-1\" preload=\"none\" style=\"width: 100%;\" controls=\"controls\"><source type=\"audio\/mpeg\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/sprachprogrammierungt.mp3?_=1\" \/><a href=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/sprachprogrammierungt.mp3\">https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/sprachprogrammierungt.mp3<\/a><\/audio>\n<p>Nat\u00fcrlich ist die Ausgabe abh\u00e4ngig von den generierten Zeichenketten und der Einstellung der Sprachausgabe.<\/p>\n<h2>Das Programm im Detail<\/h2>\n<p>Das Programm besteht aus einem Anfangsblock und einer einer bedingten Anweisung, welche immer dann ausgef\u00fchrt wird, wenn die Leertaste (space) gedr\u00fcckt wird.<\/p>\n<figure id=\"attachment_175\" aria-describedby=\"caption-attachment-175\" style=\"width: 525px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-175\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Programmierung-958x1024.png\" alt=\"Code des Hauptprogramms in Snap!\" width=\"525\" height=\"561\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Programmierung-958x1024.png 958w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Programmierung-281x300.png 281w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Programmierung-768x821.png 768w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Programmierung.png 1052w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><figcaption id=\"caption-attachment-175\" class=\"wp-caption-text\">Einmal abgesehen von der Initialisierung der Variablen, kann das eigentliche Programm in Snap! mit wenigen Zeilen geschrieben werden.<\/figcaption><\/figure>\n<p>Die eigentliche Schleife wurde in einen sogenannten &#8222;warp&#8220;-Block eingef\u00fcgt, weil damit dieser Programmteil schneller l\u00e4uft. Ansonsten kann der Ablauf des Programms Schritt f\u00fcr Schritt studiert werden, was vor allem bei der Fehlersuche hilfreich ist.<\/p>\n<p>Abgesehen vom Hauptprogramm kommen noch zwei Funktionen zum Einsatz. Die mehrfach verwendete Funktion randomitem() ist \u00e4usserst einfach gehalten:<\/p>\n<figure id=\"attachment_176\" aria-describedby=\"caption-attachment-176\" style=\"width: 412px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-176\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_random_item.png\" alt=\"\" width=\"412\" height=\"142\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_random_item.png 412w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_random_item-300x103.png 300w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><figcaption id=\"caption-attachment-176\" class=\"wp-caption-text\">randomitem() w\u00e4hlt ein zuf\u00e4lliges Element aus einer Liste aus.<\/figcaption><\/figure>\n<p>Etwas komplexer ist die Funktion zur Generierung der einzelnen Morpheme:<\/p>\n<figure id=\"attachment_177\" aria-describedby=\"caption-attachment-177\" style=\"width: 938px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-177\" src=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_build_morph.png\" alt=\"\" width=\"938\" height=\"444\" srcset=\"https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_build_morph.png 938w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_build_morph-300x142.png 300w, https:\/\/gigers.com\/blog\/wp-content\/uploads\/2019\/07\/Funktion_build_morph-768x364.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption id=\"caption-attachment-177\" class=\"wp-caption-text\">buildmorph() generiert einzelne Morpheme. Dabei verwendet die Funktion die vorgegebene Morphem-Struktur, z.B. CV oder CVC.<\/figcaption><\/figure>\n<p>Die Morpheme werden also aus einzelnen Konsonanten (C) und Vokalen (V) zusammengesetzt, je nachdem an welcher Stelle eines einzelnen Morphems sich die for-Schleife gerade befindet.<\/p>\n<h2>Verwendung im Unterricht<\/h2>\n<p>Im Medien- und Informatikunterricht der Sekundarstufe I stehen jeweils im 1. und 3. Schuljahr je eine Jahreslektion zu Verf\u00fcgung. Deshalb lohnt es sich nicht, Sch\u00fclerinnen und Sch\u00fcler das ganze Programm selbst\u00e4ndig erarbeiten zu lassen. In Snap! ist es aber m\u00f6glich, Programmvorlagen zu Verf\u00fcgung zu stellen, auf denen die Lernenden dann aufbauen k\u00f6nnen. Je nach Schwerpunkt kann dann ein anderer Teil des Codes erg\u00e4nzt oder erweitert werden.<\/p>\n<p>L\u00e4uft das Programm erst einmal, kann es im Sprachunterricht zum Einsatz kommen, um die Struktur verschiedener Sprachen auf spielerische Weise zu entdecken. Welche Elemente m\u00fcssen vorgegeben werden, damit der Computer &#8222;Italienisch&#8220;, &#8222;Tamil&#8220; oder &#8222;Polnisch&#8220; erzeugt? Die Lernenden k\u00f6nnen dazu Hypothesen aufstellen und diese anschliessend in kleinen Experimenten \u00fcberpr\u00fcfen.<\/p>\n<p>M\u00f6glich w\u00e4re auch eine Erweiterung zu einer Art Gedichtgenerator f\u00fcr k\u00fcnstliche Sprachen. F\u00fcr Sch\u00fclerinnen und Sch\u00fcler der Sekundarstufe II k\u00f6nnte die Herausforderung darin liegen, das Programm in Hinblick auf eine k\u00fcnstliche Grammatik zu erweitern.<\/p>\n<h2>Quellen:<\/h2>\n<p>Conrad (2019). <a href=\"https:\/\/youtu.be\/w4uQznE8Bfk\" target=\"_blank\" rel=\"noopener noreferrer\">Warum klingt das Deutsche so (sch\u00f6n) hart?<\/a><\/p>\n<p><a href=\"https:\/\/mermaidjs.github.io\/mermaid-live-editor\" target=\"_blank\" rel=\"noopener noreferrer\">Mermaid Live Editor<\/a> (erzeugt Flussdiagramme aus Textdateien)<\/p>\n<p><a href=\"https:\/\/snap.berkeley.edu\/snapsource\/snap.html\" target=\"_blank\" rel=\"noopener noreferrer\">Online-Editor<\/a> der Programmiersprache <a href=\"https:\/\/snap.berkeley.edu\/site\/\" target=\"_blank\" rel=\"noopener noreferrer\">Snap!<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Sprachwissenschaftler Fran\u00e7ois Conrad f\u00fchrt den harten Klang der deutschen Sprache unter anderem auf die Silbenstruktur des Deutschen zur\u00fcck. Diese Aussage bietet sich an, um ein einfaches Computerprogramm zu schreiben, welches mittels einer Menge von Buchstaben Morpheme (Laute mit Bedeutung) bildet und daraus W\u00f6rter (und S\u00e4tze) zusammensetzt. Bei der Programmierung des Sprachengenerators k\u00f6nnen folgende informatorischen &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gigers.com\/blog\/vom-buchstabe-zur-sprachgenerierung\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eVom Buchstabe zur Sprachgenerierung\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-170","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":2,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":179,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/posts\/170\/revisions\/179"}],"wp:attachment":[{"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gigers.com\/blog\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}