Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Скрипт для перевода выделенного текста  (Прочитано 3163 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Punko

  • Автор темы
  • Гость
Всем превед!
Читаю много литературы на иностранных языках (в основном, конечно, на английском) и встречаю много незнакомых слов.
Каждый раз лазить на сайт и переводить неизвестное слово  - не совсем удобно.
Решил сделать скрипт, который повесил на хоткей.
Как это работает:
Вы выделяете слово (предложение, кусок текста) - нажимаете хоткей (или запускаете скрипт в терминале) и выделенный текст  отправляется в путешествие на сервера яндекса, чтоб потом потом отобразиться через notify.
Я находил подобный скрипт на хабре, но он устаревший - в моём скрипте используется личный yandex.API, который рассчитан на 1 миллион символов\день, но не больше 10 миллионов запросов\месяц (более, чем достаточно, я думаю, для домашнего использования).
По-сути, скрипт можно вместить в одну строку.

выделяем - нажимаем хоткей



получаем ответ.




Если кому нужно, то можно сделать так, чтоб скрипт принимал как параметр языки, то есть, например
yandex_translate fr-ru и забиндить на ctrl+alt+f
yandex_translate en-ru и забиндить на ctrl+alt+e
ccылка на github

Надеюсь, кому-то будет полезно.

Оффлайн Ampermetr

  • Активист
  • *
  • Сообщений: 491
    • Просмотр профиля
Re: Скрипт для перевода выделенного текста
« Ответ #1 : 19 Январь 2016, 13:35:00 »
Сработало один раз. После этого выделенный текст моргает и ничего не происходит. Может надо закрывать всплывающее уведомление?
Женский форум,топик "Плакала всю ночь, подскажите из-за чего?"
Линукс форум, топик "Всю ночь собирал генту, подскажите зачем?"

Punko

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #2 : 19 Январь 2016, 13:41:14 »
Ampermetr,
Не, просто следующий перевод показывается при закрытии предыдущего.
Я думал задать "срок жизни" уведомления, но :
The duration, in milliseconds, for the notification to appear on
              screen.  (Ubuntu's Notify OSD and GNOME Shell both  ignore  this
              parameter.)
Это из мана нотифай-сенда.

А можете выделить кусок текста и запустить скрипт в терминале? Интересно, что вывод покажет.

Оффлайн Ampermetr

  • Активист
  • *
  • Сообщений: 491
    • Просмотр профиля
Re: Скрипт для перевода выделенного текста
« Ответ #3 : 19 Январь 2016, 13:50:36 »
user@W ~ $ sh ./ya-translator.sh
--2016-01-19 10:49:14--  https://translate.yandex.net/api/v1.5/tr.json/translate
Распознаётся translate.yandex.net… 213.180.204.194
Подключение к translate.yandex.net|213.180.204.194|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 161 [application/json]
Сохранение в: «STDOUT»

-                   100%[=====================>]     161  --.-KB/s   за 0s     

/2016-01-19 10:49:16 (50,0 MB/s) - записан в stdout [161/161]

user@W ~ $

Уведомление также не всплывает.
Женский форум,топик "Плакала всю ночь, подскажите из-за чего?"
Линукс форум, топик "Всю ночь собирал генту, подскажите зачем?"

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Скрипт для перевода выделенного текста
« Ответ #4 : 24 Январь 2016, 05:26:48 »
Вместо notify можно вывести в zenity:
| zenity --text-info --width=750 --height=450 --title="Перевод"А вообще для перевода незнакомых слов из текста я использую - stardict,
выделяеш слово где угодно, жмеш хот-кей, и подним появляется всплывающее окошко:

(размеры и цвет фона можно изменить) с переводом слова и вариантами употребления, + сделал чтение слова или текста на русском или английском (автоматом), и к тому же стардикту не нужен интернет, но может работать и с интернет сервисами.

Punko

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #5 : 24 Январь 2016, 10:43:49 »
Ampermetr,
Заметил, что некоторые программы подавляют вывод в нотифай (типа gnome-video). ДА и не влазят длинные предложения в нотифай. Попробую zenity.

Cxms,
Просто нотифайер есть в каждой системе,а за zenity я не уверен. Ниогда не пользовал, но попробую, спасибо.
Stardict`a точно нет, его надо отдельно тянуть. И он висит всё время в системе демоном, как я понимаю. Мне для моих целей вполне хватает яндекса.

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Скрипт для перевода выделенного текста
« Ответ #6 : 24 Январь 2016, 23:05:17 »
(Нажмите, чтобы показать/скрыть)

Punko

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #7 : 25 Январь 2016, 00:31:43 »
Ampermetr,
Сделал через zenity + скрипту можно передать в качестве параметра направление перевода:
ru-en
en-ru (без параметров именно это направление)
fr-en
en-dr
ua-en
 и так далее.
Теперь  удобно - на двух хоткеях самые ходовые направления.
Cxms,
Какой вы бука =)
Добавил новые нескучные обои проверку параметров и поддержку направления переводов, теперь не однострочник.

https://github.com/Punkoivan/LinuxScript/blob/master/yandex_translate.sh

или во вложении.

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Скрипт для перевода выделенного текста
« Ответ #8 : 25 Январь 2016, 04:10:30 »
немного дописал:
Код: Bash
  1. #!/bin/bash
  2. lsof -t -p ^$$ "$(readlink -en "${0}")" | xargs kill -9
  3. ARGS="$*"
  4. export ARGS
  5. {
  6. case "$ARGS" in
  7. "") TRANSL='en-ru';;
  8. en-ru) TRANSL='en-ru';;
  9. ru-en) TRANSL='ru-en';;
  10. *) echo "Не верный аргумент."; exit;;
  11. esac
  12.  
  13. ping -c 3 ya.ru &>/dev/null || { echo "Интернет недоступен."; exit; }
  14. echo -e "Направление перевода: $TRANSL\n"
  15.  
  16. # Удаляем все пробелы в начале и в конце строк и заменяем два и более пробелов на один
  17. TEXT="$(xclip -o)"
  18. TEXT="$(echo -n "$TEXT" | sed 's/^ *//;s/[ ^]*$//;s/  */ /g')"
  19.  
  20. # Максимальная длина SEND_IRI - 1590 символов, длина SEND_IRI без текста = 175 символов
  21. # Максимальная длина текста = 1590 - 175 = 1415 символов
  22. CNT_TEXT=$(echo "$TEXT" | wc -m)
  23. [ $CNT_TEXT -ge 1415 ] && { echo "Превышено максимальное колличество символов - 1415"; exit; }
  24.  
  25. wget -q -O - https://translate.yandex.net/api/v1.5/tr.json/translate \
  26. --post-data="key=trnsl.1.1.20160117T231050Z.2d9e215cfc85a1fd.e529754def6a2c685b8efd67755bf1d4e82244de&lang=\
  27. ${TRANSL}&text=${TEXT}" | grep -o -e "\[.\+\]" | sed -s 's/\[\"//;s/\"\]$//;s/\\n/\n/g'
  28.  
  29. } | zenity --text-info --width=550 --height=450 --title="Перевод"
  30.  
(Нажмите, чтобы показать/скрыть)

adawdp

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #9 : 25 Январь 2016, 07:09:58 »
2016 Jan 24; 11:09 PM; Oakville, ON, Canada.

https://forum.ubuntu.ru/index.php?topic=259835.0

— Посмотрите, это точно работает…

Punko

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #10 : 25 Январь 2016, 09:55:12 »
Cxms,
Зачем городить case для одного условия, если можно сразу передать в wget переменную и не ограничиваться двумя направлениями? А если мне нужно будет перевести с немецкого?
"") TRANSL='en-ru';;
en-ru) TRANSL='en-ru';;
ru-en) TRANSL='ru-en';;
Не имеет особого смысла, имхо.
Читал ваш ответ в топике про синтезатор и ограничение длины - спасибо. Хотя 1400 символов даже при длине в 15 символов\слово это аж 100 слов за один раз. =)

adawdp,
Спасибо! Но у меня точно такой же самописный велосипед, с моим ключиком, только усилиями Cxms добавил zenity, так как нотифайер не всегда корректно работает, если около 100 символов, то не отображает весь перевод.

adawdp

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #11 : 25 Январь 2016, 16:16:25 »
2016 Jan 25; 08:15 AM

Punko, если идёт речь о том, чтобы уловить общий смысл это одно направление перевода, слово это второе направление, ну и более-менее детальный перевод третье.
— С общим смыслом понятно, не останавливаемся на качестве перевода, положим, Google страниц.
— Частичный перевод фрагментов ну отлично, по-моему справляются штатные переводчики. У Google всплывающее окно даёт ограниченное число слов, в Яндексе по-моему нет…
(Нажмите, чтобы показать/скрыть)
— Скрипт в во всплывающем уведомлении тоже даёт приличное количество перевода. Можно настроить и на пол экрана…
(Нажмите, чтобы показать/скрыть)
— А для детального изучения переведенного я вот такой вариант использую ( есть разные модификации в зависимости от того как делить текст на фрагменты).
(Нажмите, чтобы показать/скрыть)
— Это таблица сохранённый в html файл  LO .ods, который открывается в браузере и по нему отдельно можно проходить „мелкими словарями“. Создаётся полуавтоматически скриптом. Количество кликов минимальное.
— Ну и нужен какой-то “академический :)” словарь. GoldenDict! В данном случае.
(Нажмите, чтобы показать/скрыть)
— Я поневоле приобрёл некоторый жизненный лингвистический опыт к 64 годам :) 2 родных языка(один похож на греческий, другой на турецкий)→украинский→русский→английский→турецкий→французский. Поэтому могу Вас сказать, чем больше вы будете находиться в поиске метода освоения не переставая при этом осваивать чужой язык тем лучше будут результаты.
— Просматривать нужно всё ( в части методики) подбирая именно то, что больше всего подходит Вам персонально.
— Также и со словарями. Потому привёл Вам свои „наработки :)“. Возможно Вам что-то пригодится…



Punko

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #12 : 25 Январь 2016, 16:38:58 »
adawdp,
Спасибо! Респект Вам,  у меня есть куча знакомых, которые уже к 40 годам не хотят учить что-либо новое, потому что "в голове уж не так держится, как 20 лет назад". Главное - не стоять на месте.

Честно скажу - не смотрел man notify-send`a и не знал, что он хорошо настраивается, посмотрю.

Что касается изучения языка вообще, то тут важно практика, как я считаю. И неплохой результат даёт просмотр фильмов\мультиков с субтитрами - словарный запас пополняется, очень часто используются интересные идиомы.

Как я писал в первом сообщении - основное использование скрипта - при чтении книг переводить отдельные слова. Я практически всегда понимаю смысл предложения и примерно догадываюсь, как переводится слово, но догадки - не совсем то, что нужно, правда? =)

Единственный минус для меня в использовании АПИ яндекс.Переводчика - возвращает только ОДНО значение возможного перевода. для того, чтоб было похоже на Ваш скрин с GoldenDict необходимо посмотреть в сторону АПИ Яндекс.Словарей - там возвращается более развёрнутый ответ.

adawdp

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #13 : 25 Январь 2016, 17:05:09 »
2016 Jan 25; 09:04 AM
— Вот настройки:
http://compizomania.blogspot.com/2013/04/notifyosd-ubuntu-1304.html
(Нажмите, чтобы показать/скрыть)
— Картинка пример одного из вариантов настроек.

— Вот про Яндекс АПИ здравая весьма мысль, но с разбегу, думаю не одолеть  :-\
« Последнее редактирование: 25 Январь 2016, 17:09:00 от adawdp »

Punko

  • Автор темы
  • Гость
Re: Скрипт для перевода выделенного текста
« Ответ #14 : 25 Январь 2016, 17:26:16 »
adawdp,
Супер! Буду ковырять!
Про АПИ - там ничего сложного, я ж так понимаю,Вы получили свой ключ для перевода?
Для словарей примерно так же, я смотрел. Только распарсить будет немного сложнее.

 

Страница сгенерирована за 0.066 секунд. Запросов: 25.