Wer als letztes antwortet kriegt viel mehr als nur 128 Dias

Hier ist übrigens der relevante code um auf Regelkonformität zu prüfen:
Python:
# ...

def _count_words(string_: str) -> int:
    return len(re.split(rf"[\s{string.punctuation}]", string_))

# ...

def check_rules_compliance(
    content: str, word_count_: int
) -> tuple[bool, list[Optional[str]]]:
    # Rules:
    # - At least 5 words (word_count)
    # - First letter must be capitalized (first_letter)
    # - Trailing punctuation (punctuation)
    compliance = {
        "word_count": True,
        "first_letter": True,
        "punctuation": True,
    }
    if word_count_ < 5:
        compliance["word_count"] = False
    try:
        first_letter_index = _find_first_letter_index(content)
        if first_letter_index is None:  # No letter in msg
            compliance["first_letter"] = False
        elif not content[first_letter_index].isupper():
            compliance["first_letter"] = False
        if content[-1] not in string.punctuation:
            compliance["punctuation"] = False
    except IndexError:
        # Content is empty. Example: https://uwmc.de/p108813
        compliance["first_letter"] = False
        compliance["punctuation"] = False

    broken_rules: list[Optional[str]] = [
        key for key, value in compliance.items() if not value
    ]
    return (not any(broken_rules), broken_rules)

# ...

def _find_first_letter_index(string_: str):
    for char in string_:
        if char in string.ascii_letters:
            return string_.index(char)
    return None
.
Gibt es einen Grund für re.split statt string_.split?

Ansonsten fällt halt nur das mit den Umlauten auf. Ich entferne Schlichtweg die gängigen Zeichen und prüfe dann auf upper.

Wie wäre es mit Bond, Jane Bond?

@Fscript, @Cer66, was für Satzzeichen zählen eigentlich am Satzende? Und wie sieht es mit den Klammern von BBCode-Befehlen aus, oder wir nur der für Benutzer:innen direkt lesbare Text ausgewertet und Spoiler etc. ignoriert? Smileys würden laut Startpost als Satzzeichen zählen, aber was ist mit der elektronischen Statistik?

So, Testzeit: Welche dieser Beiträge würden für sich als Regelkonform zählen?











xoxo, Jane Bond im Dienste ihrer Sparktrtät
Einige von denen wären vermutlich nicht konform. Die mit den deutschen oder französischen Anführunszeichen, die hochgestellte 1 und das Unicode Smily dürften nicht als korrekt erkannt werden.

@Cer66 könnte volle unicode Unterstützung implementieren. ^^

EDIT: Nur der Text dürfte ausgewertet werden, nicht der BB-Code (zumindest bei mir).
 
Einige von denen wären vermutlich nicht konform. Die mit den deutschen oder französischen Anführunszeichen, die hochgestellte 1 und das Unicode Smily dürften nicht als korrekt erkannt werden.
Gut zu wissen. (Der gesamte Beitrag war wegen der Fake-Signatur übrigens nicht regelkonform, das letzte Zeichen war "t".)
 
ich habe eine ganze Liste von Fake-Signaturen.

xoxo, Linnéa Sparktr, von Beruf Signaturenfälscherin sowie ihre Geheimagentin Jane Bond, die ihr die Kunst des Signaturenfälschens beigebracht hat
 
  • Gefällt mir
Wertungen: paulisttot
Gibt es einen Grund für re.split statt string_.split?
Ja da war etwas signifikantes, definitiv. Weiß aber grad nicht was. Ich glaube str.split() hatte irgendeinen doofen Nebeneffekt?

Ansonsten fällt halt nur das mit den Umlauten auf. Ich entferne Schlichtweg die gängigen Zeichen und prüfe dann auf upper.
Also ein Regex mit \w hätte doch nur Vorteile, oder?

@Cer66 könnte volle unicode Unterstützung implementieren. ^^
Also emojis dürften einfach sein, allerdings ist die Frage ob auch Kaomojis wie C: oder :x zählen dürfen. Dazu bräuchte man dann eine umfassende Liste. Leider sind die Regeln da nicht klar definiert, unsere Skripte sind ja nur (inoffizielle) Implementationen. Zu schade, dass @IceCubiee nicht mehr da ist.

Und natürlich eine umfassendere Zeichentabelle, Sparktr hat ja ein (paar?) genannt.
 
Anscheinend.
Leider sind die Regeln da nicht klar definiert, unsere Skripte sind ja nur (inoffizielle) Implementationen. Zu schade, dass @IceCubiee nicht mehr da ist.
Wie wäre es mit einer regelgebenden Versammlung? Zu schade, dass der Startpost nicht mehr geändert werden kann.
 
So kann man das auch sehen. Für Statistiken, die mit Skript erstellt werden, ist es aber ehre unpraktisch.
Übrigens sind es strenggenommen vier.
 
Er hat doch schon wieder Schule.

Mindestens 5 Wörter:
Ein Wort ([vɔrt]; Plural: Wörter [ʼvœrtɐ]; von althochdeutsch wort „feierlich Gesprochenes“) ist eine selbständige sprachliche Einheit. In der natürlichen Sprache besitzt es – im Gegensatz zu einem Laut oder einer Silbe – eine eigenständige Bedeutung.

Eine allgemein akzeptierte Definition existiert nicht und gilt auch als schwierig, da der Begriff bzw. das Konzept „Wort“ lexikalisch mehrdeutig bzw. (konkreter) vage ist und sowohl vom Untersuchungsgesichtspunkt und von der jeweils interessierenden sprachlichen Ebene abhängt als auch von den diesbezüglichen Theorien. Ob „Wort“ in der Sprachwissenschaft überhaupt eine brauchbare Kategorie ist, ist umstritten. So stellte Ferdinand de Saussure den Begriff „Wort“ völlig zurück und sprach stattdessen schlicht vom „Zeichen“.[1] Mit einem Wort ist mitunter auch eine Abstraktion von der konkreten Wortform gemeint („Baum“ und „Bäume“ als Formen ein und desselben Wortes), solche Vorstellungen erfahren in der Semantik unter dem Begriff des Lexems präzisere Beschreibungen.

Das „Wort“ wird begrifflich vom Phonem, vom Morphem, dem Syntagma sowie dem Satz abgegrenzt. Allerdings kann tatsächlich auch ein einziges Wort einen Satz bilden, genauso wie ein Wort aus nur einem einzigen Morphem und dieses wiederum aus nur einem einzigen Phonem bestehen kann. Ein Beispiel ist die lateinische Form ī „geh!“ (der Imperativ zum Verb ire „gehen“).
- Wikipedia
Also da muss man glaube ich nicht viel machen. Man könnte natürlich prüfen, ob ein Wort, das aus str.split oder re.split hervorgeht, auch Buchstaben enthält. Allerdings, kann es ja auch Namen geben, die nur aus Zahlen und Zeichen bestehen.

Keine 100% Sinnfreien Posts: So etwas kennen wir gar nicht.

Erste Buchstabe des ersten Worts groß: Da es keine Definition für Wort gibt müssen wir wohl nach dem ersten Buchstaben suchen. Das ist nicht optimal mit Namen, steht so aber in den Regeln.
Definition Buchstabe:
Ein Buchstabe ist ein Schriftzeichen, das in einer Alphabetschrift verwendet wird. Die Gesamtheit der Buchstaben einer Phonem-basierten Schriftsprache ergibt ein Alphabet, wobei die Laute (Phoneme) in Gestalt von Zeichen (Graphemen) fixiert werden. In vielen Schriften werden Großbuchstaben (Majuskeln) und Kleinbuchstaben (Minuskeln) unterschieden.
- Wikipedia

Definition Alphabetschrift:
Als alphabetische Schrift oder Buchstabenschrift bezeichnet man eine Schrift, der die Phoneme (Laute) einer Sprache als diskrete Zeicheneinheiten zugrunde liegen. Diese Einheiten – meist handelt es sich um etwa 20 bis 40 verschiedene Zeichen – werden als Buchstaben bezeichnet. Sie haben keine inhaltliche Bedeutung und lassen sich in ihrer Gesamtheit in einem Alphabet zusammenfassen.

Jede alphabetische Schrift ist eine phonographische Schrift, deren Prinzip am strengsten von der Lautschrift vertreten wird: Ein Zeichen bezeichnet einen Sprachlaut. Den Gegensatz dazu bilden die Silbenschriften, die auf visualisierten Silben (Lautkombinationen) basieren, und die logographischen Schriften, die Zeichen für semantische Einheiten (Wörter, Begriffe, „Ideen“) kennen.
- Wikipedia

Es wird sich nicht auf eine Alphabetschrift festgelegt, daher muss wohl jeder "Buchstabe" jedes Alphabets durchgehen. Das \w bei Regexps beinhaltet nur A-Za-z_. Im Locale Modus noch Umlaute, aber keine Zeichen aus anderen Sprachen (kommt hier ja schon mal vor).

Satzzeichen oder Smiley am Ende:
Satzzeichen sind Sonderzeichen einer Schrift, die der Strukturierung und auch der Sinngebung des Satzbaus dienen. Die Setzung der Satzzeichen wird Zeichensetzung oder Interpunktion genannt.

Nicht dazu gehören Buchstaben und Ziffern sowie informationstragende Sonderzeichen (Währungszeichen, mathematische Symbole usw.) sowie – nach einigen Autoren – Wortzeichen. Hier werden letztere mitbehandelt. Im Falle der Unterscheidung fasst man Satz- und Wortzeichen als Interpunktionszeichen zusammen, siehe dort.
- Wikipedia
Hier wird es interessant. Unser aktuelles string.punctuation enthält nämlich auch Währungszeichen ($) und evtl. andere nicht Satzzeichen. Hier könnte man die obige Tabelle übernehmen.

Definition Smiley:
Der Wikipedia Artikel schließt wenig aus, allerding zählen Kaomojis oder auch Dinge wie :D denke ich nicht dazu. Hier ist eine Liste mit Unicode Emojis, die zu viele Bilder enthält als dass ich sie mir ansehen kann:

Edit zu Satzzeichen:

Im Deutschen verwendete Satzzeichen​


Die am häufigsten verwendeten Satzzeichen, in deutschen Texten, sind im Kasten am rechten Rand aufgelistet. In anderssprachigen Texten gibt es zum Teil andere Satzzeichen, oder sie werden anders verwendet.

Beispiel: In englischen Texten zeigt der Apostroph – zusammen mit einem „s“ – oft den Genitiv an (Beispiel: Miller’s garden). Diese Anwendung findet sich heute oft auch in vom Standard abweichenden deutschen Texten.


  • Der Punkt (.) steht am Ende eines Aussagesatzes. Er kann auch zur Gliederung von Tausender-Zahlen (1.000.000) oder zur Kennzeichnung von Abkürzungen (usw.) verwendet werden, dient aber in diesen Fällen nicht als Satzzeichen.
  • Das Fragezeichen (?) steht am Ende einer Frage.
  • Das Ausrufezeichen (!) oder Rufzeichen steht am Ende eines Ausrufesatzes, eines wichtigen, zu betonenden Satzes oder einer Aufforderung bzw. einem Befehl.
  • Das Anführungszeichen ( und bzw. » und «, handschriftlich und im Schreibmaschinensatz auch das Schreibmaschinenanführungszeichen ") steht am Anfang und am Ende einer wörtlichen Rede. Es kann auch benutzt werden, um einen Begriff, ein Zitat oder eine Phrase in einschränkender Weise darzustellen.
  • Das Komma (,), auch Beistrich genannt, früher Virgel, steht zwischen Teil- oder Gliedsätzen; dabei kann es sich um Haupt- oder Nebensätze handeln. Außerdem trennt es vorangestellte, eingeschobene oder nachgestellte Wörter oder Wortgruppen vom Kernsatz ab und gliedert die Teile einer Aufzählung, wenn diese nicht durch „und“ oder „oder“ verbunden sind. Unabhängig von seiner Funktion als Satzzeichen kann es auch als Trennzeichen für Dezimalzahlen (3,14) verwendet werden.
  • Das Semikolon (;) oder der Strichpunkt trennt zwei zusammengehörige Sätze.
  • Der Doppelpunkt (:) oder das Kolon beendet einen Satz und lässt gleichzeitig eine wörtliche Rede, ein Zitat, eine Aufzählung oder einen erklärenden Text beginnen.
  • Das Leerzeichen ( ) steht zwischen zwei Wörtern und nach verschiedenen Satzzeichen wie Punkt oder Komma.
  • Der Bindestrich oder Trennstrich wird zur Trennung eines Wortes beim Zeilenumbruch oder zur Bildung zusammengesetzter Wörter verwendet.
  • Der Apostroph () ist ein Auslassungszeichen.
  • Der Gedankenstrich (), oder auch Halbgeviertstrich, auch als Bis-Strich und Streckenstrich verwendet, klammert einen eingeschobenen Gedanken. Das typographisch richtige Minuszeichen entspricht nicht dem Gedankenstrich. Er ist unter Windows mit der Tastenkombination [Alt] + „0150“ aufzurufen, auf dem Macintosh mit der Tastenkombination [Wahltaste] + [-], und mit der Neo-Tastaturbelegung mittels [Umschalttaste] + [Komma].
  • Der Geviertstrich (—), auch Spiegelstrich, steht zu Beginn von Aufzählungen als Anstrich. Er ist unter Windows mit der Tastenkombination [Alt] + „0151“ aufzurufen, auf dem Macintosh mit der Tastenkombination [Umschalttaste] + [Wahltaste] + [-], und mit der Neo-Tastaturbelegung mittels [Umschalttaste] + [-].
  • Der Hochpunkt (·) dient im Griechischen als Semikolon; im Deutschen als typografisches Element zwischen gleichrangigen Wörtern, die ohne zusammenhängenden Satz aufscheinen (meistens wird stattdessen der Mittelpunkt verwendet).
  • Schrägstrich (/)
  • Klammern ((, ), [, ], <, >, {, })
  • Auslassungspunkte ()

Andere Satzzeichen​


  • Das Symbol eines Zeigefingers () wurde bis ins 18. Jahrhundert als Satzzeichen verwendet, siehe Index (Satzzeichen)
  • Das Interrobang () vereinigt die Funktionen eines Frage- und eines Ausrufezeichens
  • Im Spanischen werden Sätze, die mit einem Ausrufe- bzw. Fragezeichen oder einem Interrobang abgeschlossen werden, mit einem umgekehrten Ausrufezeichen (¡, signo de exclamación invertido) bzw. einem umgekehrten Fragezeichen (¿, signo de interrogación invertido) oder einem Gnaborretni () eingeleitet.
  • Das Aufzählungskomma () wird in der chinesischen Schrift verwendet.
Vielleicht ist das eine bessere Liste.
 
Zuletzt bearbeitet:
Ups, vergessen. Ich hab noch zwei Wochen Ferien.
Wobei das die Frage nicht beantwortet. Wenn ich Schule habe, schwanke ich unregelmäßig zwischen den ersteren beiden gleichzeitig oder dem letzteren hin und her. Und momentan bin ich seit so etwa 25½ Stunden wach, verspüre kaum Müdigkeit und plane, in so etwa vierzehn Stunden zu einschlafen. Mein Schlafrhythmus ist kein Rhythmus, es sind die Nachkommastellen von √2.
 
Hast du dir meinen Edit schon angesehen?

Als ich das letzte Mal >24 Stunden wach war bin ich um 12 Uhr Mittags auf dem Boden eingeschlafen...
 
Ich hab hier mal ein Json Paste mit so ziemlich allen Unicoide emojis, aus der Python emoji lib. Hier gibt es sie auch als dict.

Allerdings sieht es so aus als könnte man hier gar keine Emojis schreiben, oder? Astrokatze: ‍ Normale Katze: . Nichts!

Edit: Diese Art von unicode emojis geht tatsächlich: ☺. Die stehen aber in der Liste drin:
Python:
>>> "☺" in emojis
True  # .
 
Zuletzt bearbeitet:
Ist auch ein anderer Unicode-Block. Aber ja, es ist eigentlich angedacht, dass man die eigenen Emojis benutzt und keine Unicode-Emojis. Ist mir schon früher aufgefallen, als ich eine Teetasse einfügen wollte.
 
Hab jetzt mal eine Funktion geschrieben, die das besser machen sollte:
Python:
import regex as re
from .emojis import is_emoji  # Makes use of https://pypi.org/project/emoji/


# Source: https://de.m.wikipedia.org/wiki/Satzzeichen
PUNCTUATION = r".?!\"„“‚‘»«‹›,;:'’–—‐\-·/\()\[\]<>{}…☞‽¡¿⸘、"


def rules_reworked(content: str) -> dict[str, bool]:
    content = content.strip()  # Remove trailing and leading whitespaces
    compliance = {
        "word_count": True,
        "first_letter": True,
        "punctuation": True,
    }
    if not content:
        return {
            k: False for k in compliance.keys()
        }
    # Word count
    # Using re.split() instead of str.split() as re supports all whitespaces
    # out of the box.
    word_count = len(re.split(
        fr"[\s{PUNCTUATION}]",  # Split words by whitespace and punctuation
        content,
    ))
    if word_count < 5:
        compliance["word_count"] = False
    # First Letter
    # Get index of first letter
    # This requires the third party regex module to work
    # Therefore `import regex as re`
    # This works with all Unicode letters, including äöü, ß and âáà.
    first_letter_match = re.search('\\p{L}', content, re.UNICODE)
    if (
        first_letter_match is None  # No letter in content
        or not first_letter_match.captures()[0].isupper()  # noqa  # letter not uppercase
    ):
        compliance["first_letter"] = False
    # Punctuation
    # Last forum emoji has already been replaced with a dot
    last_char = content[-1]
    if (
        last_char not in PUNCTUATION
        and not is_emoji(last_char)  # noqa
    ):
        compliance["punctuation"] = False
    return compliance

Hier sind ein paar Tests:
Python:
>>> from uw_stats.stats import scraper
>>> rw = scraper.rules_reworked
>>> rw("Hi")
{'word_count': False, 'first_letter': True, 'punctuation': False}
>>> rw("Hi.")
{'word_count': False, 'first_letter': True, 'punctuation': True}
>>> rw("Hi ich bin Cer GPT.")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Hi.ich.bin.Cer.GPT.")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Hi.ich.bin.Cer.GPT☺")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("hi.ich.bin.Cer.GPT☺")
{'word_count': True, 'first_letter': False, 'punctuation': True}
>>> rw("Das hier ist ein sehr, sehr, sehr langer text ohne einem Punkt am Ende")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("Das sind fünf ganze Wörter,")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter;")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter:")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter>")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter)")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter!")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter$$$")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("Das sind fünf ganze Wörter-")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter_")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("Das sind fünf ganze Wörter/")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter\\")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Das sind fünf ganze Wörter^")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("Das sind fünf ganze Wörter°")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("Das sind fünf ganze Wörter#")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("Das sind fünf ganze Wörter'")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Hier ist ein Zitat: „Das Wetter ist schlecht.“")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Hier ist ein Zitat: »Das Wetter ist schlecht.«")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("Ü <- Hier ein Umlaut als erster Buchstabe")
{'word_count': True, 'first_letter': True, 'punctuation': False}
>>> rw("ß <- sz hat keine große Version")
{'word_count': True, 'first_letter': False, 'punctuation': False}
>>> rw("Ô <- ein besonderes großes o.")
{'word_count': True, 'first_letter': True, 'punctuation': True}
>>> rw("")
{'word_count': False, 'first_letter': False, 'punctuation': False}

Sieht soweit ganz gut aus, oder?

Edit: Fehler bei leerem content behoben, hier ist noch die is_emoji() Funktion:
Python:
import emoji

EMOJI_LIST = list(emoji.EMOJI_DATA.keys())


def is_emoji(string: str) -> bool:
    try:
        return string in EMOJI_LIST
    except IndexError:  # Empty string
        return False #.
 
Zuletzt bearbeitet:

Benutzer, die dieses Thema gerade lesen

  • ONLINE 31 Spieler