[GELÖST][VB.NET] Alliterationen als Regulären Ausdruck darstellen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von David3103.

    [GELÖST][VB.NET] Alliterationen als Regulären Ausdruck darstellen

    Guten Tag,

    Zu meinem Projekt: Ich schreibe derzeit ein Programm, dass Hausarbeiten (die als PDF gespeichert sind) ausliest und auf Formulierungen überprüft, die in wissenschaftlichen Arbeiten vermieden werden sollten. Den Text lese ich dazu aus der PDF-Datei aus und schreibe ihn in eine RichTextBox, danach werden alle Treffer, die bei einem Abgleich mit dem Inhalt meiner Datenbank mit regulären Ausdrücken gefunden, farbig hervorgehoben.

    Zu meinem Problem: Nun möchte ich das Programm erweitern, so dass auch Alliterationen gefunden werden können und in einer anderen Farbe markiert werden.


    Hier ein Ausschnitt meines Codes:

    VB.NET-Quellcode

    1. Dim regex As Regex = New Regex(Alltierationspattern)
    2. Dim match As Match = regex.Match(tbPDFText.Text)
    3. While match.Success
    4. If (match.Success) Then
    5. tbPDFText.SelectionStart = match.Index
    6. tbPDFText.SelectionLength = match.Length
    7. tbPDFText.SelectionColor = Drawing.Color.Green
    8. End If
    9. match = match.NextMatch
    10. End While


    (In der Schleife überprüfe ich den Text auf das festgelegte Pattern für Alliterationen)

    Als Alliterationspattern habe ich schon folgendes Versucht:

    (Nicht-Gieriger Quantifizierer, Whitespaces zwischen den Wörtern)

    VB.NET-Quellcode

    1. \b([a-zA-Z]).*?\s\1.*?\s\1.*?\b


    (Gieriger Quantifizierer, Whitespaces zwischen den Wörtern)

    VB.NET-Quellcode

    1. \b([a-zA-Z]).*\s\1.*\s\1.*\b


    (Nicht-Gieriger Quantifizierer, je eine Wortgrenze nach jedem Wort)

    VB.NET-Quellcode

    1. \b([a-zA-Z]).*?\b\1.*?\b\1.*?\b


    (Gieriger Quantifizierer, Wortgrenzen nach und vor jedem Wort)

    VB.NET-Quellcode

    1. \b([a-zA-Z]).*\b\1.*\b\1.*\b


    (Nicht-Gieriger Quantifizierer, Wortgrenzen nach und vor jedem Wort)

    VB.NET-Quellcode

    1. \b([a-zA-Z]).*?\b\b\1.*?\b\b\1.*?\b


    (Gieriger Quantifizierer, Wortgrenzen nach und vor jedem Wort)

    VB.NET-Quellcode

    1. \b([a-zA-Z]).*\b\b\1.*\b\b\1.*\b




    Leider finden alle Pattern nicht nur aufeinanderfolgende Wörter, sondern (selbst mit nicht-Gierigen Quantifizierern) Sätze bzw. Satzteile. So kommt Beispielsweise

    Die Trefferanzahl für den Ausdruck ([ABCDEF]) liegt bei zehn, da


    bei jedem der verwendeten Pattern als Ergebnis.



    Weiß von euch jemand eine mögliche Lösung?
    Ok, hat sich erledigt.
    Mit dem Pattern

    Quellcode

    1. \b([a-zA-Z])(\S)*?\b.?\s.?\b\1(\S)*?\b.?\s.?\b\1(\S)*?\b


    hat es endlich funktioniert.





    EDIT:

    Wer Alliterationen beliebiger Länge überprüfen will kann auch

    \b([a-zA-Z])\S*?\b.?\s.?\b\1\S*?\b((.?\s.?\b\1(\S)*?\b)?)*

    für AnzahlWörter >=2, bzw

    \b([a-zA-Z])\S*?\b.?\s.?\b\1\S*?\b.?\s.?\b\1(\S)*?\b((.?\s.?\b\1(\S)*?\b)?)*

    für AnzahlWörter >=3 verwenden.


    Und um es auch Anfängern verständlich zu machen:

    \b

    steht für das Ende eines Wortes,

    ([a-zA-Z])

    steht für einen beliebigen kleinen oder großen Buchstaben,

    \s

    steht für einen Whitespace, also ein Leerzeichen oder einen Tabulator (\S ist die Verneinung davon),

    *

    steht für eine wiederholung des Vorherigen Ausdrucks (0-X mal),

    ?

    sorgt dafür, dass das Zeichen nicht zwingend vorkommen muss. Bei einem Voranstehendem * oder + wird es nur so oft wie nötig wiederholt.

    \b

    steht für das Ende eines Wortes,

    .

    steht für ein beliebiges Zeichen und

    \1

    steht dafür, dass der Wert der ersten Klammer (hier also der Buchstabe, der die Alliteration bildet) wiederholt wird.

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