Spellcheck fehler errechnen

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von VBHunter.

    Nofear23m schrieb:

    Willst du bei Fehlern auch über das Contextmenü Vorschläge anbieten?


    Nein, die RTB_OrgText sieht der User wenn er auf "Abgeben" klickt ... Da sieht er den Originaltext komplett mir Punkt und Komma (.Enabled = False) So kann der User sein Text Links (RTB_UserText) mit der Box rechts vergleichen wo die Fehler sind.

    Nofear23m schrieb:

    Wenn ja, wie soll das aussehen bei einem Kommafehler? Wenn "Hallo, ich bins" richtig ist und der User schreibt "Hallo ich bins". Soll dann "Hallo," vorgeschlagen werden oder ","?


    Dann soll er den RTB_UserText ja so belassen "Hallo ich bins" nur es dann so Maktieren da die restlichen Wörter ja richtig sind "Hallo ich bins" also ein Leerzeichen hinter "Hallo" setzen und Rot untersteichen.

    Nofear23m schrieb:

    Es soll in solch einem Fall ja auch das ganze Wort unterstrichen werden oder? Denn das "unterstreichen" erfolgt ja in der TextBox wo der User schreibt und nicht in der mit dem Originaltext oder?


    Richtig, die Falschen Wörter werden dennoch komplett unterstrichen nur im RTB_UserText ....

    Nofear23m schrieb:

    Wenn das Komma Fehlt kannst du aber dieses auch nicht Unterstreichen da ja keines da ist, richtig? Also muss ja das Wort davor unterstrichen werden richtig?


    Genau das will ich ja nicht, so ist es ja momentan ... es soll ein Leerzeichen gesetzt werden dann Rot unterstrichen

    Nofear23m schrieb:

    Selbes gilt bei fehlendem Satzzeichen wie Punkt, Rufzeichen, Fragezheichen usw. - oder auch bei "ich bin's" das "'".


    Das sind Texte wo folgendes vorkommt : , . ! " ?



    Ich danke dir das du dir die Zeit nimmst ^^
    OK, verstehe.

    Noch was: Was ist wenn folgendes der Originaltext ist: Ich gehe in den Park
    Und der User schreibt: Ich Park gehe in den

    Was wird hier alles unterstrichen? Wird hier was unterstrichen? Denn die Worte an sich sind ja richtig.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich will ja wissen wie es sein soll.
    Also wie du es haben möchtest.

    Also soll es dann so sein das alles nach "Ich" unterstrichen werden soll?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Genau @Nofear23m

    EDIT: hattest du mal meinen gesendeten Code getestet mit 2 RTBs und 1 Button? Da ist ja fast alles perfekt nur halt die eine Sache nicht das er wenn das Komma fehlt unterstreicht er das Wort davor statt es schwarz zu lassen(wenn es richtig ist) dann hinter dem Wort ein Leerzeichen setzen was rot unterstrichen ist. Schon wäre die Welt perfekt :D

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

    VBHunter schrieb:

    hattest du mal meinen gesendeten Code getestet mit 2 RTBs und 1 Button?

    Ne, der kompiliert bei mir gar nicht.

    VBHunter schrieb:

    Da ist ja fast alles perfekt

    Achso?

    Werden folgende Beispiele korrekt als Fehler gekennzeichnet?

    Vorgabetext: "Es ist ein schöner Tag, ich werde etwas spazieren gehen!"

    Usertext1: "Es istein schöner Tag, ich werde etwas spazieren gehen!"
    Usertext2: "Es ist ein schöner Tag, ich werde etwas spazieren gehen"
    Usertext3: "Es ein ist schöner Tag, ich werde etwas spazieren gehen!"
    Usertext4: "Ein schöner Tag, ich werde etwas spazieren gehen!"
    Usertext5: "Es ist ein schöner Tag, ich werde etwas spazieren gehen."
    Usertext6: "Es ist ein schöner Tag, ich werde etwas spazieren gehen !"

    Ich denke nicht oder? wie gesagt, wäre echt interessant was dein "SpellChecker" im endeffekt alles können MUSS.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Ne, der kompiliert bei mir gar nicht.


    Achso Okay.... ich Teste es mal durch

    Nofear23m schrieb:

    Werden folgende Beispiele korrekt als Fehler gekennzeichnet?


    Als Vorgabe habe ich jetzt dein Text drin, dass sind die Ergebnisse: Nach dem = sind die Fehlerpunkte die der User gezeigt bekommt

    Usertext1: "Es istein schöner Tag, ich werde etwas spazieren gehen!" = Fehler 2
    Usertext2: "Es ist ein schöner Tag, ich werde etwas spazieren gehen" = Fehler 1
    Usertext3: "Es ein ist schöner Tag, ich werde etwas spazieren gehen!" = Fehler 0
    Usertext4: "Ein schöner Tag, ich werde etwas spazieren gehen!" = Fehler 3
    Usertext5: "Es ist ein schöner Tag, ich werde etwas spazieren gehen." = Fehler 1
    Usertext6: "Es ist ein schöner Tag, ich werde etwas spazieren gehen !" = Fehler 1

    Ich habe es immer so Kopiert wie er es Maktiert.

    Hoffe kannst damit was anfangen.

    Können muss es eigendlich nur die Fehler Makieren:
    - bei Fehler im Wort das ganze Wort
    - bei Zeichenfehler Leertaste und Rot unterstreichen
    - bei zusammenschreiben wie bei Usertext1 (dein Beispiel), beide wörter maktieren

    im großen und ganzen bei abweichung von den vorgabetext Maktieren. Der User sieht danach den Text um zu sehen was er falsch gemacht hat so spare ich mir die Korrektur.

    hier ein Bild:

    OK, also so wie in UserText3 - Das muss er also gar nicht können?

    Da sind zwei Wörter komplett vertauscht!!!

    Versuch mal bitte dein Beispiel hochzuladen, mal sehen ob man das etwas optimieren kann.
    Also wird auch nur die Anzahl der Fehler und die Markierung benötigt. Gut.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    PHA !!!... das ist ja Witzig ... hab garnicht ebend auf den Unterschied bei 3 geachtet... Sorry, sah beim schnell lesen gleich aus X/

    Das ist ja Ka**e das es nicht als fehler angezeigt wird ... denke mal es liegt daran da die Wörter als String Liste ja richtig sind.

    Nofear23m schrieb:

    Das muss er also gar nicht können?


    Aber um das zu beantworten, doch er müsste dann beide Wörter Rot makieren da sie nicht überseinstimmen bin der Orgi RTB

    Nofear23m schrieb:

    Also wird auch nur die Anzahl der Fehler und die Markierung benötigt.


    Jap, nur die Fehler sollen gezählt werden. Ein Fehlerpunkt pro Wort und pro Zeichen ...

    in diesen beispiel:

    Usertext1: "Es istein schöner Tag, ich werde etwas spazieren gehen!" = Fehler 2 RICHTIG

    Usertext2: "Es ist ein schöner Tag, ich werde etwas spazieren gehen" = Fehler 1 RICHTIG

    Usertext3: "Es ein ist schöner Tag, ich werde etwas spazieren gehen!" = Fehler 0 FALSCH da die Wörter verdreht sind

    Usertext4: "Ein schöner Tag, ich werde etwas spazieren gehen!" = Fehler 3 RICHTIG EIN ist Groß Ist und ein fehlt

    Usertext5: "Es ist ein schöner Tag, ich werde etwas spazieren gehen." = Fehler 1 RICHTIG

    Usertext6: "Es ist ein schöner Tag, ich werde etwas spazieren gehen !" = Fehler 1 RICHTIG


    so nun mal mein Code aber ich habe es wieder in Split gemacht also das er nach " " <--- Leerzeichen es als StingListe speichert

    VB.NET-Quellcode

    1. Dim UserText As New List(Of String)
    2. Dim OrgText As New List(Of String)


    bei abgabe (Klick)

    VB.NET-Quellcode

    1. For Each line1 As String In RTB_UserText.Lines
    2. Dim split1 As String() = line1.Split(New [Char]() {" "c, CChar(vbTab)})
    3. For Each Liste1 As String In split1
    4. If Liste1.Trim() <> "" Then
    5. UserText.Add(Liste1)
    6. End If
    7. Next
    8. Next
    9. For Each line2 As String In RTB_OrgText.Lines
    10. Dim split2 As String() = line2.Split(New [Char]() {" "c, CChar(vbTab)})
    11. For Each Liste2 As String In split2
    12. If Liste2.Trim() <> "" Then
    13. OrgText.Add(Liste2)
    14. End If
    15. Next
    16. Next
    17. Dim Fehlerliste = OrgText.Except(UserText)
    18. For Each Highlight As String In Fehlerliste
    19. Dim matches As MatchCollection = Regex.Matches(RTB_UserText.Text.ToLower, Highlight.ToLower)
    20. For Each Match As Match In matches
    21. RTB_UserText.Select(Match.Index, Match.Length)
    22. RTB_UserText.SelectionColor = Color.Red
    23. Next
    24. Next


    das hab ich noch als Fehlerrechner:

    VB.NET-Quellcode

    1. If Fehlerliste.Count = 0 Then
    2. lbl_Fehler.Text = "Fehler: " & Fehlerliste.Count
    3. lbl_Fehler.ForeColor = Color.Green
    4. lbl_Fehler.Visible = True
    5. Else
    6. lbl_Fehler.Text = "Fehler: " & Fehlerliste.Count
    7. lbl_Fehler.ForeColor = Color.Red
    8. lbl_Fehler.Visible = True
    9. End If
    10. Fehlerpunkte = Fehlerliste.Count


    Hoffe es hilft weiter

    VBHunter schrieb:

    hab garnicht ebend auf den Unterschied bei 3 geachtet

    Ja, das ist es ja.

    Deine Methode ist ja im Grunde schon sehr gut. Aber wenn du wirklich alles abdecken willst braucht es hier schon einiges. Ich habe heute bei der Heimfahrt ein wenig darüber nachgedachte, da gibt es sooo viel an das man denken muss. Sobals verdrehte wörter auch ins spiel kommen wird schon knifflig. Denn dann müsste man auch die beiden Wortlisten untereinander abgleichen und dann gehts ja weiter. Da gibt es sicher noch zig Varianten.

    Ist/wird das nur so ein spaßprojekt oder soll das tatsächlich den Aufwand rechtfertigen? Da haste dir schon was kompliziertes ausgedacht 8o
    Sieht ja Anfangs gar nicht so kompliziert aus, aber ist schon ne menge an was man da denken muss.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke erstmal das du dir so gedanken machst ^^ ... @Nofear23m

    Okay verdammt das klingt ja dann nicht so gut ... kann man das nicht irgendwie Regeln mir dem toChararry() oder das er eine Zeichenkette hat die er nacheinander durchgehen muss ?

    also erst 1... vergleichen, Richtig/Falsch, weiter 2... vergleichen, Richtig/Falsch, weiter usw

    oder irgendwie nummerrieren da wir feste Wörterzahl haben bzw. Zeichenzahl

    VB.NET-Quellcode

    1. Dim WordCount As String = CType(RTB_UserText.Text.Split(New String() {" ", vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries).Length, String)


    Beispiel: "Ein" ..... E = 1 .... i = 2 ... n = 3

    also Zeichen für zeichen überpüfen mit RTB_Ori mein ich....

    Oder als .txt datei? Das er den gesamten Text per StreamIO liest?

    ach man, mir qwalmt die Birne ...

    Edit:
    Hab mal was getestet in der Hoffnung das er den kompletten Text vergleicht statt die einzelnen Worte in Strings.

    VB.NET-Quellcode

    1. Dim Fehlerliste = RTB_OrgText.Text.Except(RTB_UserText.Text)
    2. For Each Highlight As String In Fehlerliste
    3. Dim matches As MatchCollection = Regex.Matches(RTB_UserText.Text.ToLower, Highlight.ToLower)
    4. For Each Match As Match In matches
    5. RTB_UserText.Select(Match.Index, Match.Length)
    6. RTB_UserText.SelectionColor = Color.Red
    7. Next
    8. Next


    Aber leider keine Veränderung nur weniger Code.... Das mit line1 etc einfällt

    Edit: hab erstmal eine Lösung Thema Close

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