•  ανοικτό φως

MTR: πολλαπλές μεταφράσεις

περιτύλιξη μεταφραστικών υπηρεσιών για εσωτερική χρήση

Κατά τη δημοσίευση ενός ιστότοπου μπορεί να θέλετε να προσφέρετε διαφορετικές μεταφράσεις. Σε ορισμένους δεν αρέσουν οι αυτοματοποιημένοι μεταφραστές, νομίζω ότι μια αυτοματοποιημένη μετάφραση είναι αρκετά καλή και καλύτερη από το τίποτα, και οι αυτόματοι μεταφραστές έχουν βελτιωθεί προοδευτικά με την πρόοδο NLP και ML.

Κοινές υπηρεσίες μετάφρασης είναι το google, το bing, το yandex. Αυτά προσφέρουν μια δωρεάν βαθμίδα την οποία θέλουμε να τυλίξουμε για τη δική μας προσωπική χρήση. Υπάρχουν επίσης και άλλα λιγότερο γνωστά υπηρεσίες μετάφρασης , και μερικά από αυτά τερματίζονται τη στιγμή της γραφής ...

Αποθήκευση κειμένου

Αν θέλουμε να αποθηκεύσουμε προσωρινά τις μεταφράσεις, έπρεπε να χωρίσουμε το κείμενο που ζητήσαμε σε μικρότερες συμβολοσειρές, ώστε να είναι αρκετά μικρές ώστε να παρέχουν επισκέψεις για πιθανά μελλοντικά αιτήματα. ο συμβιβασμός είναι ότι η μετάφραση μικρότερων προτάσεων έχει λιγότερο πλαίσιο, γεγονός που μειώνει την ποιότητα της μετάφρασης.

Το πώς χωρίζουμε το εισερχόμενο κείμενο έτσι ώστε να μπορούμε να ανασυγκροτήσουμε το πρωτότυπο από το μεταφρασμένο κείμενο είναι ένα τέχνασμα ή ένα hack. Θέλουμε να βρούμε μια συμβολοσειρά αρκετά περίεργη ώστε η υπηρεσία μετάφρασης να την εγκαταλείψει ως έχει στην έξοδο του. Βρήκα παραλλαγές του χαρακτήρα παραγράφου να δουλεύω τις περισσότερες φορές

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

οglue η συμβολοσειρά χρησιμοποιείται για τη συγκόλληση όλα τις συμβολοσειρές (χωρισμένες από το αρχικό αίτημα) σε ένας ενιαίο σώμα για το ανάντη αίτημα μετάφρασης που στέλνουμε π.χ. google οsplitGlue χρησιμοποιείται αντ 'αυτού για να χωρίσει πίσω τη ληφθείσα μετάφραση στις συμβολοσειρές που πρόκειται να αποθηκεύσουμε. Βλέπουμε εδώ ότι ο διαχωρισμός συμβολοσειρών δεν είναι μόνο χρήσιμος για την προσωρινή αποθήκευση, αλλά και για μείωση του αριθμού των αιτημάτων, επειδή σε περίπτωση που το κατάντη αίτημά μας εκτελεί πολλά μικρά ερωτήματα, χρησιμοποιούμε τα μηχανήματά μας για να συγχωνεύσουμε αιτήματα έως το μέγιστο μέγεθος ωφέλιμου φορτίου που επιτρέπεται από την ανάντη υπηρεσία.

Η διεπαφή

Για την υποστήριξη πολλαπλών υπηρεσιών διαφανώς Έγραψα μια διεπαφή που εγκαταστάθηκε σε αυτό το api

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

Έτσι, μια υπηρεσία για να είναι λειτουργική πρέπει να προσφέρει μια λειτουργία μετάφρασης, πώς να μεταφράζει αιτήματα και να παρέχει τη λίστα των υποστηριζόμενων γλωσσών. Με τη λίστα των υποστηριζόμενων γλωσσών μπορούμε να δημιουργήσουμε μια μήτρα τέτοια ώστε να γνωρίζουμε πόσες υπηρεσίες υποστηρίζουν ένα συγκεκριμένο ζεύγος γλωσσών, για την ανάλυση των γλωσσικά ζεύγη μετατρέπουμε την αναπαράσταση που επιστρέφει η υπηρεσία σε μια κοινήiso639-1.

Η δημιουργία της παρουσίας μετάφρασης επιτρέπει επίσης τη διαμόρφωση των επιλογών αιτημάτων που χρησιμοποιούνται απόGuzzle παράδειγμα πελάτη έτσι ώστε να μπορούμε για παράδειγμα να χρησιμοποιήσουμε διακομιστές μεσολάβησης για την εκτέλεση των αιτημάτων. Οι υπηρεσίες είναι αποθηκευμένο στην κρυφή μνήμη αφού δημιουργήθηκε για πρώτη φορά, αυτό είναι χρήσιμο, δεδομένου ότι ορισμένες υπηρεσίες απαιτούν τη δημιουργία ορισμένων αρχικών μάρκων και δεν θέλουμε να τα αναγεννάμε κάθε φορά.

Η έκδοση Go

Έγραψα επίσης ένα έκδοση στο golangΤο Η έκδοση PHP θα χρησιμοποιηθεί με την εισαγωγή της στο έργο PHP, ενώ η έκδοση go λειτουργεί ως αυτόνομη (μικρο) υπηρεσία. Η έκδοση go είναι πολύ πιο λεπτομερής καθώς απαιτεί αυστηρό έλεγχο τύπου και δεδομένου ότι υποστηρίζουμε την ταυτόχρονη αναζήτηση πολλών συμβολοσειρών, πρέπει να εκθέσουμε το api που λειτουργεί με διαφορετικούς συνδυασμούς εισόδου, και τα ελλείμματα των γενικών προδιαγραφών καθιστούν την εφαρμογή πολύ επίπονη, αλλά προσέφερε ταυτόχρονη επεξεργασία και ήταν πολύ πιο γρήγορη γενικά.

Καθαρισμός εισόδων

Σε συνδυασμό με τη μετάφραση δημιούργησα επίσης μια υπηρεσία καθαρίστε το html Το Βάζουμε στη λίστα επιτρεπόμενων ορισμένες ετικέτες html και απορρίπτουμε τις υπόλοιπες. Καταργούμε επίσης διπλά σημεία στίξης που μοιάζουν με ανεπιθύμητα μηνύματα και άγνωστα χαρακτηριστικά html και τυλίγουμε συνδέσμους σε κατάλληλες ετικέτες αγκύρωσης.

Φιλοξενία:

Συμπεράσματα

Σήμερα νομίζω ότι θα χρησιμοποιούσα απλώς μια λύση που φιλοξενείται από τον joshua ή τον argos, καθώς δεν στοχεύω στην καλύτερη μετάφραση, θέλω να προσφέρω μια αναγνώσιμη μετάφραση για έναν ιστότοπο, έτσι ώστε να μπορεί να περιηγηθεί χωρίς τριβές.

Ετικέτες ανάρτησης: