•  untoreh-light

MTR: mehrere Übersetzungen

Wrapping-Übersetzungsdienste für den internen Gebrauch

Wenn Sie eine Website veröffentlichen, möchten Sie möglicherweise verschiedene Übersetzungen anbieten. Manche Leute mögen keine automatisierten Übersetzer, ich denke, dass eine automatisierte Übersetzung gut genug ist und besser als nichts, und automatisierte Übersetzer sind mit den Fortschritten in immer besser geworden NLP und ML.

Gängige Übersetzungsdienste sind Google, Bing, Yandex. Diese bieten eine kostenlose Stufe, die wir für unseren persönlichen Gebrauch einschließen möchten. Es gibt auch andere weniger bekannte Übersetzungsdienst , und einige von ihnen sind zum Zeitpunkt des Schreibens geschlossen ...

Text zwischenspeichern

Wenn wir Übersetzungen zwischenspeichern möchten, mussten wir den angeforderten Text in kleinere Strings aufteilen, damit sie klein genug sind, um Treffer für mögliche zukünftige Anforderungen bereitzustellen. Die Abtausch ist, dass die Übersetzung kleinerer Sätze weniger Kontext hat, was die Qualität der Übersetzung verringert.

Wie wir eingehenden Text so aufteilen, dass wir aus dem übersetzten Text das Original rekonstruieren können, ist ein ziemlicher Trick oder ein Hack. Wir möchten eine Zeichenfolge finden, die so seltsam ist, dass der Übersetzungsdienst sie verlässt wie es ist in seiner Ausgabe. Ich habe Variationen des gefunden Absatzzeichen die meiste Zeit arbeiten

$this->misc['glue'] = ' ; ¶ ; ';
$this->misc['splitGlue'] = '/\s?;\s?¶\s?;?\s?/';

Dieglue string wird verwendet, um zu verketten alle die Strings (aufgeteilt aus der ursprünglichen Anfrage) in einer einzige Stelle für die Upstream-Übersetzungsanfrage, die wir z.B. Google. DiesplitGlue wird stattdessen verwendet, um die empfangene Übersetzung in die Zeichenfolgen aufzuteilen, die wir zwischenspeichern werden. Wir sehen hier, dass das Aufteilen von Strings nicht nur zum Caching nützlich ist, sondern auch um die Anzahl der Anfragen reduzieren , denn für den Fall, dass unsere Downstream-Anfrage viele kleine Abfragen ausführt, verwenden wir unsere Maschinen, um Anfragen bis zur maximalen Nutzlastgröße zusammenzuführen, die der Upstream-Dienst erlaubt.

Die Schnittstelle

Um mehrere Dienste zu unterstützen transparent Ich habe eine Schnittstelle geschrieben, die auf dieser API basiert

function__construct(
    Mtr &$mtr,
    Client &$gz,
    TextReq &$txtrq,
    LanguageCode &$ld);
functiontranslate($source, $target, $input);
functiongenReq(array$params);
functionpreReq(array &$input);
functiongetLangs();

Um betriebsbereit zu sein, muss ein Dienst also eine Übersetzungsfunktion bieten, wie Anfragen übersetzt werden und eine Liste der unterstützten Sprachen bereitgestellt werden. Mit der Liste der unterstützten Sprachen können wir eine Matrix erstellen, damit wir wissen, wie viele Dienste ein bestimmtes Sprachpaar unterstützen, um die Sprachpaare wir wandeln die vom Dienst zurückgegebene Darstellung in ein Common umiso639-1.

Die Erstellung der Übersetzungsinstanz ermöglicht auch die Konfiguration der Anfrageoptionen, die von . verwendet werdenGuzzle Client-Instanz, sodass wir beispielsweise Proxys verwenden können, um die Anfragen auszuführen. Die Dienstleistungen sind zwischengespeichert Nach der ersten Generierung ist dies nützlich, da einige Dienste einige anfängliche Token generieren müssen und wir sie nicht jedes Mal neu generieren möchten.

Die Go-Version

Ich habe auch geschrieben a Version in Golang . Die PHP-Version wird durch den Import in Ihr PHP-Projekt verwendet, während die go-Version als eigenständiger (Mikro-)Dienst funktioniert. Die go-Version ist viel ausführlicher, da sie eine strenge Typprüfung erfordert gleichzeitige Verarbeitung und war im Allgemeinen viel schneller.

Reinigungseingänge

Gekoppelt mit der Übersetzung habe ich auch einen Dienst gebaut, um html aufräumen . Wir setzen einige HTML-Tags auf die Whitelist und verwerfen den Rest. Wir entfernen auch Spam-ähnliche doppelte Satzzeichen und unbekannte HTML-Attribute und packen Links in die richtigen Anker-Tags.

Selbst gehostet:

Schlussfolgerungen

Heutzutage denke ich, dass ich einfach eine selbst gehostete Lösung verwenden würde, die entweder von Joshua oder Argos bereitgestellt wird, da ich nicht die beste Übersetzung anstrebe, möchte ich eine lesbare Übersetzung für eine Website anbieten, damit sie reibungslos navigiert werden kann.

Post-Tags: