50. pepsi-stage-detect-language

Erkennt die menschliche(n) Sprache(n) eines Nachrichtentexts und hält sie im State fest.

50.1. Rolle

pepsi-stage-detect-language identifiziert die natürliche(n) Sprache(n) in einem Nachrichtentext und hält sie unter state.language fest, damit spätere Stages oder Vorlagen sie verwenden, und schaltet die Nachricht dann zu NEXT_STAGE weiter. Es annotiert nur den State — es verändert, verwirft, bounct oder pausiert die Nachricht nie. Referenz: pepsi-stage-detect-language(1).

50.2. Funktionen

  • Gemeinsame MIME-Textextraktion: Ein vollständiger MIME-Parser in pepsi-common zieht den eingebetteten Nachrichtentext aus der Nachricht — text/plain-Teile wörtlich und text/html-Teile auf Klartext reduziert — jeweils aus ihrer Content-Transfer-Encoding und ihrem Zeichensatz nach UTF-8 dekodiert. Bei einem multipart/alternative wird die Klartext-Alternative der HTML-Variante vorgezogen — es sei denn, sie enthält keine Prosa, die Form, die ein Massenversender erzeugt, wenn er zwei nackte URLs dorthin setzt, wo die Nachricht stehen sollte; dann wird die HTML-Variante verwendet.

  • Prosafilterung: Der extrahierte Text wird auf das reduziert, was ein Mensch in Worten geschrieben hat, bevor überhaupt klassifiziert wird. Tokens, die keine Wörter sein können (URLs, Adressen, Base64-Schlüssel, Bezeichner, alles mit einer Ziffer oder einem innenliegenden Punkt), werden verworfen, danach Zeilen mit zu wenigen Buchstaben für einen Satz. Das ist keine Ordnungsliebe: Ein Nachrichtentext, der überwiegend Maschinentext ist, wird sonst anhand dieses Maschinentexts klassifiziert, und ein Dump von DNS-Einträgen oder ein Nachrichtentext aus zwei nackten URLs erhält ein zuversichtliches Urteil für eine Sprache, in der niemand darin geschrieben hat. Die Regeln überspringen die Längen-, Ziffern- und Großschreibungstests für Schriften, die Wörter nicht durch Leerzeichen trennen (Han, Kana, Hangul, Thai, …), die sonst eine chinesische oder thailändische Nachricht vollständig löschen würden.

  • Überspringt, was es nicht lesen kann: Anhänge (einschließlich Text-Anhänge) und verschlüsselte oder undurchsichtige Nachrichtentexte (multipart/encrypted, application/pkcs7-mime, …) tragen keinen lesbaren Text, sodass eine solche Nachricht — oder eine, deren Nachrichtentext keine Prosa enthält oder zu wenig davon zum Klassifizieren — unverändert weiterschaltet, ohne dass ein language-Schlüssel hinzugefügt wird. Ein Nachrichtentext, der nur aus URLs besteht, hat keine Sprache, und keine festzuhalten ist die ehrliche Antwort.

  • Statistische Erkennung: Die verbliebene Prosa wird mit dem lingua-Detektor klassifiziert, gebaut aus den Kandidatensprachen der LANGUAGES-Option. Ihm werden nur die ersten 20 000 Zeichen Prosa übergeben — eine Sprache entscheidet sich an den ersten paar Kilobyte — und die wahrscheinlichsten höchstens drei Sprachen, deren Wahrscheinlichkeit mindestens 5 % beträgt, werden behalten.

  • Accept-Language-Ausgabe: Das Ergebnis wird als Zeichenkette im HTTP-Accept-Language-Stil gespeichert, z. B. en;q=1, de;q=0.45, wobei jedes q die Erkennungswahrscheinlichkeit dieser Sprache ist.

  • Einmal pro Worker gebaut, mit voller Genauigkeit: Der Detektor ist teuer zu konstruieren, daher baut ihn jeder Worker-Prozess ein einziges Mal (je Kandidatensprachensatz) und verwendet ihn für jede Nachricht wieder. Der Modus geringer Genauigkeit von lingua wird bewusst nicht genutzt: Er bricht bei einem einzigen N-Gramm ab, das nur ein Kandidat besitzt, sodass eine einzige Adresse oder ein einziger Schlüssel das Urteil für einen ganzen Nachrichtentext entscheiden kann, und er lädt zusätzliche N-Gramm-Zählmodelle vorab, sodass er nichts einbringt.

50.3. Konfiguration

[stage-<name>]: PROGRAM = pepsi-stage-detect-language, NEXT_STAGE (erforderlich) und LANGUAGES (optional; durch Leerraum/Komma getrennte ISO-639-1-Codes, mindestens zwei verschiedene, standardmäßig eine breite gängige Menge — schränken Sie sie auf die erwarteten Sprachen ein, da jede aktivierte Sprache Worker-Speicher kostet). Das einzelne Token * steht für jede Sprache, die der Detektor unterstützt. Siehe pepsi-stage-detect-language(1).

50.4. State

  • Eingaben: keine aus state; die Stage liest den gespeicherten Nachrichtentext.

  • Ausgaben: Wenn eine Sprache erkannt wird, wird die Accept-Language-artige Zeichenkette unter language in state zusammengeführt; andernfalls bleibt state unberührt.

50.5. Siehe auch

pepsi-detect-language (das Offline-Diagnose- und Tuning-Werkzeug: dieselbe ausführbare Datei unter einem zweiten Namen, die meldet, was diese Stage für eine aus einer Datei gelesene Nachricht festhalten würde), pepsi-stage-check-whitelist, pepsi-stage-anti-spam, Unterstützte Funktionen, pepsi-stage-detect-language(1).