Модуль топ 5 переводчиков (free)
Я никого не удивлю, если скажу, что как обычно было овердохуя проблем, которые пришлось решать. Поэтому, просто опустим их, ибо кому какая разница..
Шучу, у меня об этом блять и канал, о проблемах и их решениях. Похуярили!
И так, не мудрствуя лукаво, я открыл гугел и вбил "top online translators".
1. Google
Сайт переводчика
Сасает: https://translate.google.com/
Как обычно, открыл дев тулзу, совершил целевое действие, чекнул запрос
На самом деле, потом я нашел как работает этот кек (хотя это и так было очевидно), оно оно мне уже было не нужно
Тем не менее, решил обозреть более интересный подход. Я вспомнил, что ранее уже тыкал гугл переводчик и делал я тогда чуть иначе.
Реверс версии из веб архива
https://web.archive.org/web/20190201002656/https://translate.google.com/#view=home&op=translate&sl=auto&tl=en&text=%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
Наверное, кто-то может подумать
Ну штош, потыкаем архивную версию:
На самом деле, так как я ранее уже под нее делал, знаю что tk эт подпись и генерится она просто на основе фул текста без пробелов.
Ставим брек и видим, что из этой функции улетает наш запрос, поэтому начинаем идти по стеку в функцию Jo, которая судя по всему должна вернуть наш tk, тк на вход принимает наш текст.
Тут видим, что из всей многоэтажной поеботы нам нужен был только наш текст из массива в переменной q, который сливается в 1 строку и дальше передается в Ho
Ну а вот и подпись, всего пару строк для шифрования текста (в виде строки) с использованием переменной b
Чекаем че за b и находим, что это дефолт значение.
Ну тут все логично, есть пару строк шифрования и строка, на выходе контрольная сумма от текста.
Я просто перенес код в бас, чутка его поправив.
Это было слишком просто, тем более я уже так делал, будет не интересно добивать. Поэтому перейдем к следующему способу.
Кто-то может подумать, что я выебываюсь. Да, я выебываюсь, но перед собой. Спешить мне некуда, статью я мог вообще не публиковать, так шо чисто сам перед своим отражением (собой в прошлом), как в зеркале выебываюсь.
Встроенный переводчик
Попробуем еще один способ, заснифаем встроенный переводчик.
Накидал простой сайт, чтоб было удобнее тестить без лишних запросов (взял шаб туть)
Опять открыл дев тулс, опять выполнил целевое действие (в данном случае нажал перевести), зачекал запрос.
В этот раз я обратил внимание, что само апи и настройки гугл получает подгрузив сторонний файл
Стартовое значение для контрольной суммы тут другое, но сути это не меняет. Кароче, та же самая хуйня..
В запросах есть еще ключ key, но самом деле он вообще не нужен, без него запросы улетают
Кароче, работает все довольно просто) И в бас тоже.
Гуглительная пауза
Чет я потыкал код, увидел этот апи ключ, но просто посмотреть мне показалось мало.
Забил в поиск на гит хабе (о другом хабе в конце статьи есть дополнение)
Выдало либу и инструкцию по использованию апи для распознавания речи
https://github.com/onionc/py-snippet/wiki/Python%E7%AE%80%E5%8D%95%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E5%B9%B6%E5%93%8D%E5%BA%94
https://pypi.org/project/SpeechRecognition/
Сам запрос к гуглу был в сурсах либы.
https://github.com/Uberi/speech_recognition/blob/master/speech_recognition/__init__.py
На самом деле, я нашел и запрос для перевода, и синтеза речи в гугле, без всяких подписей.
https://translate.google.com/translate_tts?ie=UTF-8&tl=ru-Ru&client=tw-ob&q=%D1%85%D1%83%D0%B9
https://translate.google.com/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=auto&q=test&tl=ru-RU
Перерыв окончен
Начнем с простого
Пока вроде все ясненько, поэтому начнем с простого, как я тогда думал, с нарезки текста.
Почекаем стек вызовов отправленного запросека перевода
Акей, это функция подписи текста, с ней я уже несколько раз виделся.
Топаем назад, видим отправку текста на подпись. Судя по всему, тут происходит какая-то магия предобработки текста в массив.
Ииииии... дальше я 2 дня ковырял код и нихера не мог понять и найти, как же он режет текст. Звучит как шутка, но это не шутка, это моя жызень.
Я мог бы написать, какой я дохуя молодец и сразу тыкал везде где нужно, но это был бы пиздеж, тк я тупой и просто 2 дня чекал код, пытался понять че происходит с массивами в 5 этажей вложенности, тупо перебирая выполнение кода по 1 строчке.
Потом я решил начать с того же места (там где предобработка текста) и пройтись назад по стеку вызовов.
И вот, я наконец нашел рыбу моей мечты. В целом, понятно с ходу примерно нихуя, поэтому нужно всего лишь переписать на читаемый язык.
Как не трудно догадаться (ну все же очевидно), f это отрезанный текст, d фулл + всякие флаги, которые контролят процесс, чтоб резало по буквам, пробелам и тд, там где надо, позже я все читаемо переименовал.
А сама мэджик нарезочка воть. И тут я такой: ебать, это шо за хуйня, это какие-то странные палочки, тернарники, как это блять вообще можно нахуй понять.
Сначала я был сильно обескуражен, но потом сел, успокоился и начал делать все последовательно.
И так. Юзает оно вот такие правила. Возможно, не сразу очевидно, но это знаки препинания и мусор, который может быть среди них.
Чекаем шо тут за символы шифрованые.
Захожу я такой в гугл и заседаю часов на 6, чтоб понять как убрать тернарники со всех этих лесенок ебучих и привести все это говно в читаемый вид с комментариями
Фиксим тернарники и чекаем че за граничные символы
Кароч, границы это по сути там где не буквы в юникоде, учитывая его огромный размер и некоторые странные приколы (хотя приколов в юникоде прям дохуя), как например в случае с буквой ё (статья1, статья2).
А вот довольно интересная статья про невидимый исполняемый код на js, статью на хабре почему-то удалили, зато есть кэшированная версия
https://webcache.googleusercontent.com/search?q=cache:5FTSfwOziRkJ:https://habr.com/ru/articles/334980/&cd=10&hl=en&ct=clnk&gl=ru
Пример граничного символа https://www.fileformat.info/info/unicode/char/55296/index.htm
0-127 в utf-8 эт символы из аски. На самом деле, если почекать где какие символы, сразу становится ясно нахуя их фильтровать и как по сути работает фильтр.
Вот такие всякие приколы - это обычные логические операторы, но используются для сокращенного вычисления
Про них написано туть https://learn.javascript.ru/logical-operators
Ну и про тернарник тоже есть инфа https://learn.javascript.ru/ifelse
На основе этих приколов я переписал фул код в читаемый для меня вид.
Как закончил нарезку, решил потестить перевод. Подумал, а че б не пощупать лимиты хрома.
600к символов он не вывез, а чуть более 400к вывез, поэтому лимит где-то пол ляма. Нинаю, на сколько качественно он это все переведет, но впечатляет. Лимит пост запроса по идее 60кк, так что явно лимит хрома, ну либо бас курлы.
Кароч, эксперимент очевидно удачный, идем дальше.
2. Байду
Решил не обделять вниманием братьев китайцев и чекнуть в том числе и их переводчик.
Сайт: https://fanyi.baidu.com/
В заголовке уже какая-то блядская подпись-заголовок Acs и кукисы, одна из которых тоже подпись - ab_sr.
Кек, sign как и у гугла подпись
Чет я потестил, без куков оно нормально работать не хочет, а их генерация это прям много кода, который мне уже не хочется чекать.
Разве что.. чуть-чуть. Начнем зачек с куки-подписи.
Кароч, в запросе шифрованая хуйня и в ответе шифрованая хуйня. Та что в запросе - подписанный фингер.
Ну и ладно, поэтому я взял оф апи из гит
Дока апишки https://api.fanyi.baidu.com/product/141
Кроче, тут не шибко красиво, но как-то получилось.
3.1. Яндекс/Yadex (rest)
Сайт: https://translate.yandex.ru/
3.2. Яндекс/Yadex(api)
Дока: https://yandex.com/dev/translate/doc/dg/reference/getLangs.html
Подставим ключ апи и почекаем список доступных для перевода гео.
Кароч, с апи все слишком просто. Список языков по идее тот же.
4. Deepl
Сайт: https://www.deepl.com/ru/translator
Линка на расширение: https://chrome.google.com/webstore/detail/cofdbpoegempjloogbagkncekinflcnj
Чекаем расширение как страницу сайта
Снифаем запросеки, как с обычным сайтом
Айди рандом, предопределение языка я не передаю, чет тыкал код часа 3, так и не нашел как оно его делает, а таймштамп как обычно.
5. Bing
Сайт: https://www.bing.com/translator
Тут все тоже банально и максимально просто
Далее ноу коментс, все очевидно
Пример использования
Уникализатор текста используя переводчик
Фичи
Чек заголовков отправляемого запроса
Если нужно чекнуть заголовки без использования снифера, можно отправить запрос сюда (пару раз пригождалось).
Удалил фон с гифки https://onlinegiftools.com/remove-gif-background
Уменьшил размер до 32 на 32 https://www.iloveimg.com/ru/resize-image/resize-gif#resize-options,pixels
Потом добавил просто картинкой, для тех кто не любит гифки (привет фоксу)
Еще, пока делал, словил странную багу (но для бас видимо это фича). Когда переменная объявлена через var, а следом идет запрос, переменная var теряет контекст нахуй. Довольно странно, учитывая что она в рамках одной функции. Поэтому, в ряде мест, оставил как обычно бас по дефолту их ставит (без var).
Итог:
Оказывается, сложное делать сложно. Особенно, если ты тупой=/
Кто-то спросит: Почему ты продолжаешь делать это с нами? Ведь, на гитхабе есть готовые отснифаные апи, даже целые либы, есть функции нарезки текста.
Я отвечу: Не знаю морти, может я просто ненавижу себя.. или мне просто нехуй делать
А если серьезно, то реверс довольно медитативный процесс, тихо, планомерно, под хорошую музыку идешь к поставленной цели. А заодно, более точно оттачиваешь скил работы с дев тулз для более сложных проектов.
В качестве домашнего задания, тем кто прочитал, - сделать регер Гугла на запросах.
Форматирование кода онлаен - https://beautifier.io/
Форматирование json онлаен - https://jsonformatter.org/
Декод uri - https://meyerweb.com/eric/tools/dencoder/
Расширение с набором апи перевода - https://github.com/archlinuxcn/wiki-scripts/blob/fd06daa8c961e4268aa611086f808a471234393e/WikiTranslate.user.js
Скрипт под рест дипла - https://github.com/xyqfer/deepl-web-api/blob/4bdbfb7915bdbc6f76e498d5e8501e991289a866/index.js
Набор рест апи переводчиков - https://github.com/fishjar/smart-translator/blob/861b1a3859eb657518d6c768dfb620f67bbd15ef/src/api/index.js
Переводчики с подписями - https://github.com/hujingshuang/MTrans/tree/e7efa476bf0a20735cd9d916d0171daf5d511d26/src/main/java/com/swjtu/trans/impl
Дополнение (Бонус)
Все чаще слышу про всякие нейронки (писал я в январе..), которые упрощают жизнь и вспомнил, что не так давно вышла от яндекса фича для перевода видосов с озвучкой прям в браузере (сейчас добавили даже китайский язык), но только специально для яндекс браузера. К счастью, оказалось, эту штуку уже подрезали и запилили расширу под популярные браузеры.
Я сильно обрадовался, когда увидел, что поддерживаемых сайтов больше чем один. Не трудно догадаться, о чем я подумал в первую очередь..
Да, все верно, наконец то я смогу насладиться прекрасными диалогами на русском языке.
Однако, на пути встретилось несколько проблем:
1) Прочек я начал с xvideos, на котором, к большому сожалению расшира не работала.
Подходящее видео с аудио (диалогами) хуй найдешь чтоб перевело, так еще и я нажимал перевести, кнопка перевода включалась, но при запуске видео оно не переводило. Кароче, видимо беды с плеером.
2) Я пошел чекать пх. Впервые вижу этот сайт (с пк), вообще никогда раньше о нем не слышал, поэтому меня смутила вот такая хуета на главной.
Товарищ дал вполне логичный кусок кода для тамперманки плагина, который убирает банер нахуй. Тк убирать руками каждый раз через код элемента можно затрахаться и без всяких видео.
// ==UserScript==
// @name BONEFISH: PH FIX+
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://rt.pornhub.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=pornhub.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
document.getElementById('age-verification-container').style.display = 'none';
document.getElementById('age-verification-wrapper').style.display = 'none';
})();
На самом деле, я мог бы и через адблок заблочить, но яж дохуя программист, поэтому юзал код (не свой, но понимаю как оно работает).
Акей, проблема с ркн решена, нажимаю опять перевести.
Оно, как обычно, начинает переводить.
А в итоге, нихуя не перевело, тк аудио не нашло. Вот я и послушал лингвистические курсы..
Вертел переводчик по всякому, и когда очевидными запросами выбирая видео нихуя не переводилось, я совсем отчаялся. Но товарищ предложил следующее решение:
И, в общем то, его идея сработало, получилось ахуенчик.
На самом деле, часть слов в прон контексте переводит прям кринжово:
"Начинай сосать мой глюк"
"Потри свою копеечку"
"Сыр для киски"
С другой стороны, по своему прикольно.
3) Я также попробовал ютуб, да, переводит, нареканий особых нет. После прона, даже добавить нечего, не удивительно, что на ют все работает. Кстати, доклад действительно интересный.
Кароче, резюмирую:
Прикольно, но переводит не идеально и периодически наваливает кринжа, особенно в ситуациях обсуждения спец теминологии.
Простыми словами: перевод не очень, а остальное нормалек. И на прн сайтах не всегда может перевести видео, а жаль.
Важно отметить, что с переводом чет смотреть действительно на много интереснее.
Хочется сказать "учите язык" и вставить рекламу какого-нибудь сервиса англ языка, но тут жыесть софт, который все делает сам и бесплатно и нихуя учить не надо.
Ну и еще немного про нейроночки
После выхода чат гпт я обратил внимание не только на спиздинг (юз рест апи), но и в целом на то как это технически реализовано.
На хабре выходило много статей по юзу gpt как переводчика или сравнения ее с другими популярными:
- Локализация игр при помощи ChatGPT - https://habr.com/ru/articles/747226/
- Я перевел книгу с помощью нейросети ChatGPT - https://habr.com/ru/articles/758406/
- Сравнение нейросетей для перевода - https://habr.com/ru/articles/737950/
И че дальше?
Однако я cтарый пират, я не хочу ни за что платить, поэтому хочу бесплатно и заебись, а для этого есть:
- llama - https://github.com/abetlen/llama-cpp-python
- nllb
Ориг: https://huggingface.co/facebook/nllb-200-distilled-600M
1) https://github.com/thammegowda/nllb-serve
2) https://github.com/translatorswb/TWB-MT-fastapi
LoRA: https://huggingface.co/IlyaGusev/saiga_mistral_7b_lora
gguf: https://huggingface.co/IlyaGusev/saiga_mistral_7b_gguf
gguf демка: https://huggingface.co/spaces/IlyaGusev/saiga_mistral_7b_gguf
GUI для всяких LLM https://github.com/oobabooga/text-generation-webui
и еще хуева туча всякого добра...
Из русских опенсурс реп есть репа, где собраны рест апишки и всяких диплов и гуглов, а ответ это мердж и выбор лучшего, за счет чего качество выше чем у оных сервисов. https://github.com/janvarev/OneRingTranslator
Еще есть порты нейрогена https://t.me/neurogen_news наверное эт самый простой вариант, но эт просто при юз чат гпт, так шо..