Texte übertragen ?

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von baibai.

    Texte übertragen ?

    Hallo ich habe vor eine Anwendung zu schreiben, bei der ich ein Gespräch ,,simulieren'' will.


    Dies hat den Zweck, ein Video zu drehen und auf YT hochzuladen.
    Ich will sozusagen es folgendermaßen machen:

    Ich habe eine Textbox in die ich etwas schreibe und darüber sind 6 labels und darunter 2 buttons.
    zudem ist hinter einem button 2 label versteckt.

    Wenn ich nun in die Textbox schreibe ,,Hallo'', soll dieses Hallo in das Label1 übertragen werden.
    Das Programm soll wissen, dass wenn ein ,,Hallo'' geschrieben wird, er entsprechend etwas antworten soll.
    Das er das weiß und so werde ich dann selber mit IF,ELSE und TRUE,FALSE machen.
    Wichtig ist, dass wenn das programm dann entsprechend eine antwort an das ,,Hallo'' schicken soll,
    dass der Text der nun in Label1 ist nun zu Label2 übertragen werden soll.
    Das nun leerstehende Label1 bekommt nun die Antwort des Programms, also beispielsweise ein ,,Wie geht's ?''.
    Zwischendurch, wenn der Bot antworten soll, soll zudem eine kleine ,,Ruhepause'' herrschen, sodass er beispielsweise 2 Sekunden
    nicht reagiert und erst dann eine Antwort schickt.

    Der Text soll sozusagen folgendermaßen verlaufen:

    Textbox1 (Button1 drücken) --> Label1 (Warten, Antwort von Programm) --> Label2 --> Label3 --> Label4 --> Label5 --> Label6 (Text verschwindet nach erneuter Antwort).

    Es soll sozusagen wie ein Chatbot aufgebaut sein, ich wollte mich an diesem hier orientieren:

    cleverbot.com

    Wisst ihr wie das machbar ist mit der Übertragung der Texte ?

    Danke im Vorraus.
    Leg eine Dictonary of String an, habe mal ein kleines Beispiel gemacht:
    Dafür musst du eine Textdatei erstellen die so aufgebaut ist:

    Usereingabe-Botantwort
    Hallo-Wie gehts?
    Morgen-Guten Morgen
    Mittag-Guten Mittag
    Wie geht es dir?-Gut und dir?
    Auch gut-Schön zu wissen
    Hast du hunger?-Ja ich habe hunger

    Der Code:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Public Class Form1
    4. Private words As New Dictionary(Of String, String)
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Using sr As New StreamReader("Pfad")
    7. For Each item As String In readlines(sr)
    8. words.Add(item.Split("-"c)(0).ToLower, item.Split("-"c)(1))
    9. Next
    10. End Using
    11. End Sub
    12. Private Iterator Function readlines(ByVal message As StreamReader) As IEnumerable(Of String)
    13. While message.Peek >= 0
    14. Yield message.ReadLine
    15. End While
    16. End Function
    17. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    18. If words.ContainsKey(TextBox1.Text.ToLower) Then
    19. MessageBox.Show(words(TextBox1.Text.ToLower))
    20. End If
    21. End Sub
    22. End Class


    Brauchst eine Textbox und einen Button. Jetzt wird, wenn du ein Wort das an der linken Seite der Textdatei steht eingibst und anschliessend den Button drückst, eine Messagebox mit dem Satz von der rechten Seite herausgegeben. Müsstest halt alle Begriffe in die Textdatei einfügen und alle antworten

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

    baibai schrieb:

    Hallo ich habe vor eine Anwendung zu schreiben, bei der ich ein Gespräch ,,simulieren'' will.


    Dies hat den Zweck, ein Video zu drehen und auf YT hochzuladen.
    Das ist doch schon totale geistige Wirrsal.
    Eine Gespräch-Simulations-Anwendung kann kein Video auf YT hochladen.

    Folgendes...

    Rushden hat Recht, ich will sowas wie Cleverbot nachmachen.
    Also ich habe den Code den du mir gegeben hast benutzt:

    Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Public Class Form1
    4. Private words As New Dictionary(Of String, String)
    5. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    6. Using sr As New StreamReader("C:\Users\Koopa\Desktop\cleverbot")
    7. For Each item As String In readlines(sr)
    8. words.Add(item.Split("-"c)(0).ToLower, item.Split("-"c)(1))
    9. Next
    10. End Using
    11. End Sub
    12. Private Iterator Function readlines(ByVal message As StreamReader) As IEnumerable(Of String)
    13. While message.Peek >= 0
    14. Yield message.ReadLine
    15. End While
    16. End Function
    17. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    18. If words.ContainsKey(TextBox1.Text.ToLower) Then
    19. MessageBox.Show(words(TextBox1.Text.ToLower))
    20. End If
    21. End Sub
    22. End Class


    Doch da sind ein paar Fehler aufgetaucht (siehe Code & Fehlerliste im angehängten Bild).
    Habe auch selber ein bisschen versucht etwas umzustellen, hat jedoch nicht geklappt.
    Bilder
    • 1.PNG

      85,1 kB, 1.365×728, 141 mal angesehen
    • 2.PNG

      81,03 kB, 1.365×728, 136 mal angesehen
    • Button1=Think about it!.PNG

      118,8 kB, 1.365×696, 153 mal angesehen
    Danke sehr für den Tipp mit VB 2012, dieses habe ich mir nun installiert und den Code probiert und es hat aber noch nicht ganz geklappt.

    Bei dem Code den du mir gegeben hast, kommt ein Fehler beim Erstellen dieser Zeile:

    Quellcode

    1. words.Add(item.Split("-"c)(0).ToLower, item.Split("-"c)(1))


    Da steht...

    ArgumentException wurde nicht behandelt.
    Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.

    Was meinst du dazu ?
    ?( ?( ?(
    Danke zuerst einmal für die Hilfe, doch da ist noch eine Sache die ich nicht verstehe.

    Ich habe den Code ein wenig umgeändert, sodass nun die Antwort nicht mehr in einer Messagebox sondern in einem der Label auftaucht.

    Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Public Class Form1
    4. Private words As New Dictionary(Of String, String)
    5. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    6. Using sr As New StreamReader("C:\Users\Benutzername\Desktop\newcleverbot.txt")
    7. For Each item As String In readlines(sr)
    8. words.Add(item.Split("-"c)(0).ToLower, (1))
    9. Next
    10. End Using
    11. End Sub
    12. Private Iterator Function readlines(ByVal message As StreamReader) As IEnumerable(Of String)
    13. While message.Peek >= 0
    14. Yield message.ReadLine
    15. End While
    16. End Function
    17. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    18. If words.ContainsKey(TextBox1.Text.ToLower) Then
    19. Label1.Text = (words(TextBox1.Text.ToLower))
    20. End If
    21. End Sub
    22. End Class


    Jedoch ist das Problem, dass mir der ,,Bot'' als Antwort eine "1" gibt und ich weiß nicht wie ich den Wert 1 als Textantwort zurückgebe.
    Ich habe viel mit der If-Variable herumgespielt und dabei solche Dinge gemacht:

    Quellcode

    1. Label6.Text = Label5.Text & Label5.Text = Label4.Text & Label4.Text = Label3.Text & Label3.Text = Label2.Text & Label2.Text = Label1.Text


    Jedoch hilft mir das nie weiter wenn ich ewig lange If-Zeilen mache.
    ;( ;( ;(

    Auf den angehängten Fotos kannst du ja sehen, dass das Programm mir nur eine "1" zurückgibt als Antwort und keinen Text.
    Bilder
    • nummer1.PNG

      48,07 kB, 419×557, 133 mal angesehen
    • nummer2.PNG

      48 kB, 416×554, 128 mal angesehen
    Ich habe den Code von RushDen erhalten und wenn ich mir Zeile 10 ansehe würde ich sagen,
    dass hierbei die Wörter voneinander durch das "-" getrennt werden und hinzugefügt werden.
    Wieso ?
    Ich habe leidiglich Zeile 21 umgeändert von "Messagebox.Show" in "Label1.Text = ".

    Ist diese Zeile denn falsch ?
    :?: :?: :?:
    Nein, meine Zeile sieht so aus;

    VB.NET-Quellcode

    1. words.Add(item.Split("-"c)(0).ToLower, item.Split("-"c)(1))


    Deine ist aber so:

    VB.NET-Quellcode

    1. words.Add(item.Split("-"c)(0).ToLower, (1))


    Ein Key (der erste Parameter in der dictionary) darf nur einmal vorkommen (also in der textdatei, da die Wörter aus dieser stammen), heisst;

    Hallo-Welt
    Hallo-Leben

    Geht nicht.

    Hallo-Welt
    Tschüss-Leben

    Geht.

    Hallo-Welt
    Tschüss-Welt

    Geht auch.

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

    Dann habe ich das wohl auch mal umgeändert, aber übersehen, aber das Problem ist durch die neue Zeile aber auch immernoch nicht weg.
    Das Programm gibt mir als Antwort nur eine "1", das bestätigt zwar das alles mit dem Text und der Funktionsweise in Ordnung ist, jedoch
    möchte ich ja auch anstelle der 1 lieber den Text haben welcher als Antwort gilt.
    Momentan ist es ja folgendermaßen:

    Hallo-1
    Willkommen-1

    Es soll aber so sein (nur ein Beispiel):

    Hallo-Welt

    Willkommen-Leben

    Weiß einer von euch dazu eine Lösung ?
    :huh: :huh: :huh: