Meine KI antwortet mir nicht :D

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von KnifeHunter.

    Meine KI antwortet mir nicht :D

    Hallo leute, ^^

    ich habe ein Programm geschrieben, welches selbstständig lernen sollte. aber das auslesen des gelernten will irgendwie nicht so recht.
    ich habe kein plan, was ich da falsch gemacht habe.

    vieleicht könnt ihr mir da ja helfen.

    der fehlerhafte abschnitt zum lesen der informationen ist dieser hier:

    VB.NET-Quellcode

    1. For Each file In IO.Directory.GetFiles("C:\Dokumente und Einstellungen\eraidni\Desktop\KI") 'für jede vorhandene datei:
    2. If TextBox2.Text & ".txt" = file Then 'wenn die benutzernachricht mit einer datei übereinstimmt, werden aus der datei antwortmöglichkeiten ausgelesen.
    3. For Each line In IO.File.ReadAllLines("C:\Dokumente und Einstellungen\eraidni\Desktop\KI\" & TextBox2.Text & ".txt") 'auslesen der antwortmöglichkeiten
    4. think(i) = line
    5. i += 1
    6. Next
    7. i = 0 'zurücksetzten des zählers
    8. lastline = think(r.Next(0, think.Length)) 'Auswählen der antwort und schreiben der antwort
    9. TextBox1.AppendText("[Bot]: " & lastline & vbNewLine)
    10. End If
    11. Next


    warum der das nicht macht, ist mir auch nicht so ganz klar...

    grüße Knifehunter aka. EsTari
    Meine KI schläft noch.

    KnifeHunter schrieb:

    vieleicht könnt ihr mir da ja helfen.

    Vielleicht kannst Du uns ja helfen. :D
    Was soll passieren und was passiert statt dessen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also folgendes:

    Das programm sieht vom ablauf ca. so aus:

    man schreibt wie bei einem chat in eine textbox, und die nachricht wird oben aufgelisten(2.textbox) BSP: Hallo
    der bot prüft, ob eine datei mit dem namen Hallo.txt vorhanden ist. wenn nein, wird sie erstellt und in der sub für themenwechsel wieder ausgewählt - er sagt Hallo du wiederum antwortest mit: Hallo, wie geht es dir?
    der bot erstellt dafür eine neue Datei mit dem namen Hallo, wie geht es dir? und trägt den satz gleichzeitig als mögliche antwort in die Hallo.txt ein und so weiter... also soll der bot alles was er neu hört speichern, nach dem verfahren, das ich hier gerade angedeutet habe, sodass irgendwann viele viele dateien mit vielen vielen antworten vorhanden sind.

    das dumme ist jetzt nur, dass der bot in der ooben geposteten schleife, in der er eigentlich die antwortmöglichkeiten aus der Hallo.txt auslesen sollte, einfach garnix macht - er überspring diesen teil komplett, obwohl im angegebenen Pfad eine Hallo.txt mit dem inhalt: Hallo, wie geht es dir? ist.

    also wenn ich ihm nun Hallo schreibe, sollte er die Hallo.txt finden, auslesen und Hallo, wie geht es dir? als antwort bringen, da das derzeit die einzige abgespeicherte mögliche antwort ist.



    EDIT: da die beschreibung doch seht verworren ist, werde ich einegrafi hochladen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KnifeHunter“ ()

    Mach mal aus den beiden Schleifen

    VB.NET-Quellcode

    1. For Each file In IO.Directory.GetFiles("C:\Dokumente und Einstellungen\eraidni\Desktop\KI") 'für jede vorhandene datei:
    2. If TextBox2.Text & ".txt" = file Then 'wenn die benutzernachricht mit einer datei übereinstimmt, werden aus der datei antwortmöglichkeiten ausgelesen.
    3. ' ...
    4. End If
    5. Next

    folgendes:

    VB.NET-Quellcode

    1. If IO.FiliInfo(TextBox2.Text & ".txt").Exist Then
    2. ' ...
    3. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    TSchuldigung:

    VB.NET-Quellcode

    1. If New IO.FileInfo(TextBox2.Text & ".txt").Exist Then
    2. ' ...
    3. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich würde dir generell raten, dass nicht mit Dateien zu lösen sondern das ganze über eine DB (zB Access)
    Sonst hast du irgendwann mal hunderte Dateien. Performancetechnisch wird dir da die db auch eine Steigerung dabei bieten können.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Das ist mir klar, wird auch dann mit ner DB gemacht aber es wäre denkbar günstig, wenn ich dieses Prinzip überhaupt mal zum laufen beklommen würde

    EDIT: Er findet die datei - hat aber probleme beim lesen:

    VB.NET-Quellcode

    1. For Each line In IO.File.ReadAllLines("C:\Dokumente und Einstellungen\eraidni\Desktop\KI\" & TextBox2.Text & ".txt") 'auslesen der antwortmöglichkeiten
    2. think(i) = line
    3. i += 1
    4. Next


    Der objektverweis wurde nicht auf eine Objektinstnz festgelegt.

    in der zeile:

    VB.NET-Quellcode

    1. think(i) = line


    EDIT 2: In der datei ist eine mögliche antwort vorhanden: Hallo, wie gehet es dir?
    die müsste er doch dann in das array bei index 0 reinpacken... 8| ?( 8|

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „KnifeHunter“ ()

    VB.NET-Quellcode

    1. Dim think() As String
    2. 'think(4) = "hahaha" ' der knallt natürlich
    3. ReDim think(17)
    4. think(4) = "hahaha"

    oder

    VB.NET-Quellcode

    1. Dim think(17) As String
    2. think(4) = "hahaha"

    oder

    VB.NET-Quellcode

    1. Dim think As New List(Of String) ' ist für Deine weitere Arbeit besser
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das Array hat keine Längenangabe, das muss man bei einem Array aber machen z.B.

    Dim think(5) As String

    für 6 Elemente in diesem Array, ein Tip da die Länge ja Dynamisch ist könnte man ReDim nutzen, aber das auch nicht gut, nutze dazu einfach eine List(Of String)

    VB.NET-Quellcode

    1. Dim think As New List(Of String)
    2. 'wert setzten
    3. think.Add("irgendwas")
    4. 'Element mit dem Index 2 auslesen
    5. textbox1.text = think(2)
    könntest du mal bitte das erklären, was du da geschrieben hast?

    die Deklaration

    VB.NET-Quellcode

    1. Dim think() As String


    bildet doch ein array, welches sich von der größe her nach den daten richtet, mit denen man es füttert.

    und (korrigiere mich wenn ich falsch liege) man kann ja in jeden part des arrays also in (0), (1), (2) usw. jeweils ein ganzes wort beliebiger länge schreiben...

    EDIT: Geiler ansatz Danke!!! probier ich sofort aus!
    EDIT 2: Ich versuch das mit der List
    habs schon danke :D

    jetzt hat er nur noch das problem, dass er das verdammte thema nicht wechseln will - und wenn eiene datei leer ist - also noch keine antwormöglichkeiten beinhaltet, dann crasht er. das muss vermieden werden.

    ich versuche mich gerade an einer schleife, die checkt, ob die datei leer ist, wenn ja soll er das thema wechseln.

    aber das geht auch noch nicht reibungslos
    er soll ja einen Dateinamen aussuchen(zufällig) und dann schreiben. - stattdessen kommt gleich der ganze pfad der datei, obwohl das so vom code fast nicht sein kann, - es sei denn, er liest die dateinamen mit der gesammten scheiße aus, die vorne und hinten dranhänt(Pfad und dateiendung .txt)


    EDIT: Es lernt!!! - der Bot stellt sich zwar noch ein wenig dumm an, aber bekommt schon nach wenigen Minuten bis zu 3 Sätze in eine sinnvolle Reihe!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „KnifeHunter“ ()