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-commonzieht den eingebetteten Nachrichtentext aus der Nachricht —text/plain-Teile wörtlich undtext/html-Teile auf Klartext reduziert — jeweils aus ihrer Content-Transfer-Encoding und ihrem Zeichensatz nach UTF-8 dekodiert. Bei einemmultipart/alternativewird 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 einlanguage-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 jedesqdie 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
linguawird 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 unterlanguageinstatezusammengeführt; andernfalls bleibtstateunberü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).