campweb´s einfaches aber gutes Wortschöpfungsskript [v0.4]

  • Hier ein kleines Skript um neue Wörter zu generieren.

    Immerhin hats bei ca. 100 Versuchen schon 5 deutsche Wörter ausgespuckt: "wein, selig, ein, petzen, dein" :)!
    //EDIT: Sorry hatte vorhin nur die Wörter geändert


    Das Skript ist im Anhang!
    PS: Schreibt doch mal was ihr so rausbekommen habt!

    Versionsverzeichnis:


    V0.4:

    • Ausgabe als Array


    v0.3:

    • Parameterbug behoben
    • Ausgabenvariabelnkennzeichnung angepasst

    v0.2:

    • Bug mit Deklaration entfernt (!!)
    • Doppelvokalkorrektur (!)
    • Ausgabe von Enstehungsinfos (!)
    • Listen ergänzt

    v0.1:

    • Wortschöpfung nach Schema: Päfix/Konsonant + Vokal/"Bridge" + Affix (!!)
    • Kontrolle ob geschöpftes Wort ein dt. Wort ist (!!!)
  • Find ich gut, aber (sorry für OT) ich würde mit vielleicht mal ein einderes Programm zum archivieren hohlen (7zip), weil das hier hinterlässt eine signatur
    Außerdem ist die Wortliste noch ein bischen unvollständig, oder kommt mir das nur so vor?

  • Ansonsten konnte ich bis jetzt (10 Versuche) noch kein Wort generieren.

    Noch kein deutsches Wort, hoffe ich doch!

    //ACHSO:

    Fachterminologisch ist ein Suffix ein Affix, das einem Grundmorphem/Wortstamm angehängt wird.

  • Naja, ob man darauf stolz sein kann...

    Außerdem häufen sich auch die Fehler...

    Okay, ich hab mal ein Testscript gemacht (Funktion umgeschrieben) und 100 Durchläufe und bin auf eine Chance von 0% gekommen, dass ein deutsches Wort generiert wird.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $iCount
    Global $iMax = 100
    Global $sWord
    Global $aDic
    _FileReadToArray(@ScriptDir & "\data\dic.part", $aDic)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $iMax
    $sWord = _CreateWord()
    If _ArraySearch($aDic, $sWord) > -1 Then $iCount += 1
    Next
    ConsoleWrite("Chance: " & Round(($iCount / $iMax) * 100, 2) & " %" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _CreateWord()
    Local $Part1, $Part2
    Local $Word = ""
    Local $Bridge = FileOpen(@ScriptDir & "\data\bri.part")
    Local $Praefix = FileOpen(@ScriptDir & "\data\pre.part")
    Local $Affix = FileOpen(@ScriptDir & "\data\aff.part")
    Local $K = FileOpen(@ScriptDir & "\data\kon.part")
    Local $V = FileOpen(@ScriptDir & "\data\vok.part")
    Local $Param[12]
    $Param[1] = Random(0, 1, 1)
    $Param[2] = Random(0, 1, 1)
    $Param[3] = "Nul"
    $Param[4] = Random(1, _FileCountLines(@ScriptDir & "\data\bri.part"), 1)
    $Param[5] = Random(1, _FileCountLines(@ScriptDir & "\data\aff.part"), 1)
    $Param[6] = Random(1, _FileCountLines(@ScriptDir & "\data\kon.part"), 1)
    $Param[7] = Random(0, 1, 1)
    $Param[8] = Random(1, _FileCountLines(@ScriptDir & "\data\vok.part"), 1)
    $Param[9] = Random(0, 1, 1)
    $Param[10] = Random(1, _FileCountLines(@ScriptDir & "\data\vok.part"), 1)
    $Param[11] = Random(1, _FileCountLines(@ScriptDir & "\data\pre.part"), 1)
    If $Param[1] = 1 Then
    $Part1 = FileReadLine($Praefix, $Param[11]) & FileReadLine($V, $Param[8])
    Else
    $Part1 = FileReadLine($K, $Param[6]) & FileReadLine($V, $Param[8])
    EndIf
    If $Param[2] = 1 Then
    $Part2 = FileReadLine($Bridge, $Param[4]) & FileReadLine($V, $Param[10]) & FileReadLine($Affix, $Param[5])
    Else
    $Part2 = FileReadLine($V, $Param[10]) & FileReadLine($Affix, $Param[5])
    EndIf
    $Word = $Part1 & $Part2
    $Word = StringReplace($Word, "oe", "ö")
    $Word = StringReplace($Word, "ue", "ü")
    $Word = StringReplace($Word, "ae", "ä")
    $Word = StringReplace($Word, "aa", "a")
    $Word = StringReplace($Word, "ee", "eh")
    $Word = StringReplace($Word, "ii", "i")
    $Word = StringReplace($Word, "oo", "o")
    $Word = StringReplace($Word, "uu", "u")
    $Word = StringReplace($Word, "ji", "i")
    $Word = StringReplace($Word, "ij", "j")
    $Word = StringReplace($Word, "kk", "ck")
    FileClose($K)
    FileClose($V)
    FileClose($Bridge)
    FileClose($Praefix)
    FileClose($Affix)
    ConsoleWrite($Word & @CRLF)
    Return $Word
    EndFunc ;==>_CreateWord

    [/autoit]
  • PenGuin, bei deinem Skript (was mir gar nicht gefällt, da alle Info´s gestrichen :P) habe ich 5%, das ist schon sehr hoch für so ein primitives Skript, AUßERDEM sollte das Skript ja auch eher Anwendung im Spaßbereich bringen. Und "racklig" kann man doch in den dt. Wortschatz aufnehmen, so könnte man z.B. die Stimmung einiger Leute ausdrücken :)

  • Einmal gibts var not declared, dann hast du 2 mal $Param[10].
    Außerdem solltest du etwas "returnen" lassen und alle Variablen oben definieren.

    Lieber nicht, erstens muss man die Ausgabe dann noch mal globalisieren um Si auch in anderen Funktionen zu verwenden, und zweitens, ist die Funktion als Stand-Alone gedacht, so das Alle relaventan Ausgaben gleich mit Verarbeitet werden, das mit der MsBox ist doch bloß ein Beispiel.

  • Die Infos kannst du ja als Zusatzfunktionen angeben, sodass diese Funktion eine reine Worterstellungsfunktion bleibt, so bewahrt man die Übersicht

    Man muss ja nicht alle Angaben verwenden.

  • Lieber nicht, erstens muss man die Ausgabe dann noch mal globalisieren um Si auch in anderen Funktionen zu verwenden, und zweitens, ist die Funktion als Stand-Alone gedacht, so das Alle relaventan Ausgaben gleich mit Verarbeitet werden, das mit der MsBox ist doch bloß ein Beispiel.

    Dann gib ein Array zurück mit den Infos, aber globale Variablen in Funktionen zu benutzen ist immer sone Sache,da man recht schnell den Überblick verliert.
    Außerdem war es auch unnötig mehr Speicherplatz für das Array anzufordern als du benötigst, denn du weißt ja wie groß es sein muss...

  • Jop wird noch geändert, nachdem ich die Listen noch erweitert hab, für die Arrayrückgabe, kannst du mir da mal helfen?

    Danke!

  • Jop wird noch geändert, nachdem ich die Listen noch erweitert hab, für die Arrayrückgabe, kannst du mir da mal helfen?

    Danke!

    Du weißt, dass du 3 Parameter zurückggeben willst, also machst du einfach Local $aReturn[3]

    und dann halt

    $aReturn[0] = $Word
    $aReturn[1] = $deutscheswortodernicht
    $aReturn[2] = $Zusammensetzung

    Return $aReturn

  • Ich hab mir dein Skript zwar nicht angeguckt, aber diese Funktion ist die einzigste sinnvolle Version :P . Guck dirs mal an, wird dir bestimmt weiterhelfen. Das Skript ist uhralt und ist desshalb nicht so professionell geskriptet ^^.

    Spoiler anzeigen
    [autoit]


    Func _FantasyName($laenge=5)
    Dim $vok[5] = ["a","e","i","o","u"]
    Dim $kon[21] = ["b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"]
    Dim $zufall,$nam,$zufall_vok,$zufall_kon,$le,$jetztiger_name,$name
    Dim $nam[50]
    If $laenge <= 1 Then
    MsgBox(0,0,"Länge muss größer als 1 sein.")
    Else
    While 1
    $zufall = Round(Random())
    $zufall_kon = Random(0,20)
    $zufall_vok = Random(0,4)
    If $zufall = 0 Then
    $nam[0] = $kon[$zufall_kon]
    $le = 0
    Else
    $nam[0] = $vok[$zufall_vok]
    $le = 1
    For $i = 1 To $laenge-1
    $zufall_kon = Random(0,20)
    $zufall_vok = Random(0,4)
    if $le = 1 Then
    $nam[$i] = $kon[$zufall_kon]
    $le = 0
    else
    $nam[$i] = $vok[$zufall_vok]
    $le = 1
    EndIf
    Next
    $name = _ArrayToString($nam,"")
    EndIf
    If $name<>"" Then ExitLoop
    WEnd
    EndIf
    Return $name
    EndFunc

    [/autoit]


    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug