•  unsoreh-light

MTR: декілька перекладів

обгорткові послуги для внутрішнього використання

Публікуючи веб -сайт, ви можете запропонувати різні переклади. Деякі люди не люблять автоматизованих перекладачів, я думаю, що автоматичний переклад досить хороший і краще, ніж нічого, а автоматизовані перекладачі з часом досягли кращого результату НЛП та ML.

Поширені послуги перекладу - google, bing, yandex. Вони пропонують безкоштовний рівень, який ми хочемо обгортати для власного особистого використання. Є й інші менш відомі послуги перекладу , а деякі з них вимикаються під час написання статті ...

Кешування тексту

Якщо ми хочемо кешувати переклади, нам потрібно було розділити запитуваний текст на менші рядки, щоб вони були достатньо маленькими, щоб забезпечити звернення для можливих майбутніх запитів. Файл компроміс полягає в тому, що переклад менших речень має менший контекст, що погіршує якість перекладу.

Як розділити вхідний текст таким чином, що ми можемо відновити оригінал з перекладеного тексту, - це доволі хитрість .. або хакерство. Ми хочемо знайти рядок досить дивним, щоб служба перекладу залишила його так як є у своєму виході. Я знайшов варіанти символ абзацу працювати більшість часу

$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

Я також написав а версія на голангу. Версію PHP буде використано при імпорті її у ваш проект PHP, тоді як версія go працює як автономна (мікро) служба. Версія go набагато більш детальна, оскільки вимагає суворої перевірки типів, і оскільки ми підтримуємо запит відразу кількох рядків, нам доводиться відкривати API, який працює з різними комбінаціями введення, а брак загальних даних go робить реалізацію дуже болючою, але вона пропонувала одночасну обробку, і взагалі було набагато швидше.

Очищення входів

У поєднанні з перекладом я також створив службу очистити html . Ми додаємо в білий список деякі HTML -теги, а інші відкидаємо. Ми також видаляємо дублюючі розділові знаки, подібні до спаму, та невідомі атрибути html, і переносимо посилання у відповідні якірні теги.

Самостійно розміщений:

Висновки

Сьогодні я думаю, що я б просто використав самостійне рішення, яке надається або joshua, або argos, оскільки я не прагну до найкращого перекладу, я хочу запропонувати читабельний переклад для веб -сайту, щоб ним можна було переміщатися без будь -яких помилок.

Теги дописів: