1 (09.04.2011 10:50:20 отредактировано zhevak)

Англо-русский словарик

## Статья получилась большая, но необходимых действий менее, чем на минуту.


Мы все дети современной эпохи. А эпоха наша характерна тем, что кроме родного русского языка нам приходится видеть международный -- английский. И от этого никуда не деться. Для молодого поколения английский язык стал де-факто уже вторым родным языком. И это уже не обсуждается. Для тех людей, кто связан с компами, наличие под рукой словарика -- просто жизненно необходимо.

Можно, конечно, установить в системе здоровенную программу словоря, но можно пойти по другому пути. Второй путь -- интернет! Вам ничего не нужно устанавливать на свой комп. Не нужно забивать винчестер, занимать оперативную память, грузить процессор. Все, что необходимо -- это маленький скрипт и даже не быстрый интернет-канал. Словари лежат в интернет на больших серваках, вам нужно организовать только доступ к ним.

А для этого напишем коротенький скрипт. Скрипт -- это с одной стороны обычный текстовый файл. А с другой, если мы установим флажек исполнения у этого файла, он станет исполняемым. Т.е. мы превратим наш текст в программу. Вот так просто -- подняли флажек, и наш текстовый файл тут же стал программой.

Итак, идем в поддиректорий bin, который находится в домашнем директории. Затем здесь создаем файл с именем translate-me, вписываем в него приведенный ниже текст и сохраняем.

#!/bin/bash

# Консольный англо-русский русско-английский словарь
# Использование: translate-me <слово>

# Скрипт взят отсюда http://habrahabr.ru/blogs/sysadm/117003/

# http://code.google.com/p/dict-lookup-chrome-ext/source/browse/trunk/extension/lookup.js
# http://www.google.com/dictionary?langpair=en|ru&q=chemist&hl=ru&aq=f
# http://www.zsh.org/mla/users/2006/msg00063.html 

GET "http://www.google.com/dictionary?langpair=en|ru&q=$1&hl=ru&aq=f" | \
grep dct-tt | \
sed /'class=\"dct-e/d' | \
sed '/<a\ href/d' | \
sed 's/<span class="dct-tt">//g' | \
sed 's/<\/span>//' | \
sed '/<span /d' | \
head -n 5

Можете тупо закописпастить.


Внимание! Дополнение от ТС
{
Приведенный выше скрипт не очень хорош. Обратите внимание на скрип от Newton в 18-ом сообщении http://linuxforum.ru/viewtopic.php?pid=166307#p166307 (Номера сообщений указаны в правом верхнем углу)
}


Мне наверно следует сделать небольшое отступление. Дело в том, что на вашем компе в домашнем директории вполне может и не быть поддиректория bin. Если его нет, то я вам настоятельно рекомендую его создать. Он вам еще не раз пригодится. Сюда вы будете складывать все свои супер-пупер-программы.

Но для того чтобы система знала про вашу "заначку", вам нужно подправить файл .profile, который находится в вашей домашней директории. Но вы его не можете видеть -- он скрытый. Если имя файла начинается с точки, то файл становится скрытым. Не мозолит глаза и не не создает "толпу" файлов в списке. Удобно, да.

То обстоятельство, что файл является скрытым, совсем не означает, что вы не имеете к нему доступа. Он точно также вам подвластен как и другие "нескрытые" файлы.

Давайте отредактируем файл .profile. А для этого выполним команду

 Консоль:

$ nano .profile

Если ваша религия не позволяет вам пользоваться командной строкой, используйте графический редактор gedit.

Прокрутите окно редактора в самый низ файла и найдите там вот такую запись

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Если она уже есть, то вам ничего делать не надо, просто выйдите из редактора. Если ее нет нигде в этом файле, то допишите ее в конец файла. Сохраните файл и выйдите. Блин! На что я вам как каким-то вендузятникам все рассказываю! Сами должны уже понимать эти элементарные действия.

Далее, если вам пришлось дописывать этот текст, то вам нужно закрыть окно консоли и снова открыть. Тогда действия файла вступят в силу.

Ну вот и все приготовления. Идем дальше.


После того как вы создали файл скрипта в директории bin, его нужно превратить в исполняемый. Для этого в командной строке выполите следующую команду

 Консоль:

$ chmod +x translate-me


Надеюсь у вас все получилось. Теперь можете пользоваться своим творением:

 Консоль:

$ alex@zhevak:~$ translate-me table
стол
рабочий стол
общество за столом

Можно переводить с английского на русский, можно и обратно. Пользуйтесь на здоровье! Благодарите не меня, благодарите chemistmail, любезно предоставившего этот скрипт.

--------------------
# Ой-ой! Забыл напомнить, что набирать в командной строке длинные имена файлов и команд совсем необязательно. Чаще пользуйтесь клавишей табуляции Tab. Так, например, у себя на компе я набираю только "transl", жму Tab и остаток названия система дописывает за меня.

Live Free or Die
+ sun

2

Вот, это по линуксоидному, зачёт.

Ничто из того, что поддаётся объяснению, не существует.

3

zhevak, мегареспект

4 (07.04.2011 15:21:32 отредактировано i2ks)

zhevak пишет:

Можете тупо закописпастить.

не прокатит:

/bin> echo $SHELL
/bin/bash
useradm@sysadminpc:~/bin> translate-me Hello!
/home/useradm/bin/translate-me: line 12: GET: команда не найдена
sed: -e выражение #1, символ 11: неизвестный модификатор к `s'
useradm@sysadminpc:~/bin> 

Эмм...зачем так? =)

zhevak пишет:

Но для того чтобы система знала про вашу "заначку", вам нужно подправить файл .profile

можно и в .bashrc прописать

It is good day to die ...
MS Windows 10
Заметки о главном...

5 (07.04.2011 15:43:09 отредактировано zhevak)

Спасибо за замечание.
Все поправил. Извините за грязь в работе ab

Live Free or Die

6

zhevak, даже дело не в этом, почему у меня :

/home/useradm/bin/translate: line 12: GET: команда не найдена

It is good day to die ...
MS Windows 10
Заметки о главном...

7

Вот что нашел на наших просторах рунета.

#!/bin/bash

[ $# -lt 3 ] && echo "Использование: $0 [Текст] [Язык текста] [Язык перевода]" && 
echo "Например: $0 \"Hello world\" en ru" && 
echo "Список доступных языков и кодов:" && 
echo "http://code.google.com/intl/ru/apis/ajaxlanguage/documentation/reference.html" && 
exit 1;

text=$(echo "$1" | sed 'y/+/ /; s/%/\\x/g');
output=$(
  wget -q -O- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$text&langpair=$2%7C$3" | 
  egrep -o '\{"translatedText":".+"\}' | sed -r 's/^\{"translatedText":"|"\}$//g'
)

[ -z "$output" ] && exit 1 || echo "$output";

пример:

useradm@sysadminpc:~/bin> translate привет ru en
hello
useradm@sysadminpc:~/bin> translate hello! en ru
привет!

В общем все делаем так как описал товарищ zhevak, за исключением содержанием скрипта.

Удачи. =)

It is good day to die ...
MS Windows 10
Заметки о главном...

8

i2ks пишет:

zhevak, даже дело не в этом, почему у меня :

/home/useradm/bin/translate: line 12: GET: команда не найдена

Просто у Вас не установлен libwww-perl.
Но это не важно. Он может быть не установлен не только у Вас.
Спасибо за активность на общее благо. Вот чем мне нравится ОпенСорс -- так вот именно этим!
Каждый старается в меру своих способностей, но сообща мы очень неплохо двигаем нашу шайтан-арбу ab

Live Free or Die

9 (07.04.2011 16:21:27 отредактировано i2ks)

zhevak пишет:

Просто у Вас не установлен libwww-perl.

тогда может в начало дописать вот это: необходимо проверить установлен ли libwww-perl итд =)

UP:

# zypper se libwww-perl
Загрузка данных о репозиториях...
Чтение установленных пакетов...

С | Имя              | Заключение                          | Тип                   
--+------------------+-------------------------------------+-----------------------
i | perl-libwww-perl | The World-Wide Web library for Perl | пакет          

как видим пакетит то стоит. Значит причина в другом.

It is good day to die ...
MS Windows 10
Заметки о главном...

10

i2ks пишет:

как видим пакетит то стоит. Значит причина в другом.

Честно говоря, мне не очень хочется разбираться в этой проблеме. Тем более, потом грузить людей -- говорить им, что им нужно что-то еще доустонавливать...
Давайте остановимся на вашем скрипте.

У скриптов, правда, разное назначение: первый скрипт -- это чисто словарь, второй (ваш) -- переводчик.

Вторым можно переводить целые фразы туда

 Консоль:

alex@zhevak:~$ translate-me "Can you tell me about Linux" en ru
Можете ли вы рассказать мне о Linux

и обратно
 Консоль:

alex@zhevak:~$ translate-me "Мне нравится Линукс" ru en
I like Linux

Live Free or Die

11

zhevak пишет:

Честно говоря, мне не очень хочется разбираться в этой проблеме. Тем более, потом грузить людей -- говорить им, что им нужно что-то еще доустонавливать...

ну а зачем тогда выкладывать не рабочий вариант.  oO
Вы написали how-to, я протестировал, в итоге не рабочий вариант, а говорить не работает у вас или руки кривые -  это не тру,. Больше на метод виндузятника  смахивает, аля сам разбирайся.  ah

It is good day to die ...
MS Windows 10
Заметки о главном...

12

i2ks пишет:
zhevak пишет:

Честно говоря, мне не очень хочется разбираться в этой проблеме. Тем более, потом грузить людей -- говорить им, что им нужно что-то еще доустонавливать...

ну а зачем тогда выкладывать не рабочий вариант.  oO
Вы написали how-to, я протестировал, в итоге не рабочий вариант, а говорить не работает у вас или руки кривые -  это не тру,. Больше на метод виндузятника  смахивает, аля сам разбирайся.  ah

Я не могу с Вами согласится -- скрипт не есть нерабочий, он работает.

На момент выкладывания у меня на компе все работало. Поэтому я счел, что можно поделиться вкусностями с другими.
То, что Вы обнаружили не работоспособность скрипта на своем компе, так ведь это ж произошло позже! Вы перепутали последовательность событий.
Поэтому Ваша реплика "зачем тогда выкладывать не рабочий вариант" мягко говоря не состоятельна.

Ничего страшного, бывает. Бывает. Ошибаться все могут.

На данный момент скрипт не работает только на одном компе, на Вашем. Пока больше ни от кого не поступило претензий. Поэтому утверждение, что скрипт не рабочий, тоже как-то получается натянутым.

Но как можно протестировать скрипт не пробуя запускать его на разных компах? В отличие от Вас я не знаком с таким методом тестирования ПО. Поэтому, я считаю, что чем больше будет запусков на разных компах, тем лучше. И это очень хорошо, что Вы обнаружили и сообщили об этой проблеме. За что я говорю Вам спасибо. Без Вашего участия скрипт был бы не полностью протестирован.

А вот подход "разбирайтесь сами!" -- это как раз не Вендовый подход, а Линусовый. Ибо все открыто, и кому интересно заниматься проблемой, подхватит и продвинет дальше. А Вендовый подход такой -- "Не работает? Гы-ы! Ну значит все, фатально". И сделать ничего нельзя, все закрыто и защищено лицензионными соглашениями. Запрещено вскрывать, изучать, изменять.

Live Free or Die

13

Все работает, но в браузере через гугл переводчик быстрее, чем wget из скриптов

14

когда находишься в графической консоли (1) и браузер уже загружен (2), то -- да, согласен.

Live Free or Die

15

zhevak пишет:

когда находишься в графической консоли (1) и браузер уже загружен (2), то -- да, согласен.

Да. А так - удобно. Спасибо.

16

zhevak пишет:

Я не могу с Вами согласится -- скрипт не есть нерабочий, он работает.

Частично.

zhevak пишет:

На данный момент скрипт не работает только на одном компе, на Вашем. Пока больше ни от кого не поступило претензий. Поэтому утверждение, что скрипт не рабочий, тоже как-то получается натянутым.

Проверил ваш скрипт на 12 рабочих станциях под управлением OpenSuse 11.3 и 11.4, везде аналогичная ошибка

GET: команда не найдена

Mandriva 2008.1 PWP  , проверил на 4х рабочих станциях - оказался рабочий.  smile 
Russian Fedora  remix 14 - работает однако.

FreeBSD 7.3, 81, 8.2 - не рабочий

GET: not found

Если уж на то пошло, пишите нормальное HOW-TO, что требуется и с чем это едят со всеми разборами полетов, а если нет времени на это, то это уже ваши проблемы. Да и еще, как быть если ты в Offline режиме или используешь proxy?  Словари то надо как то подключать. Опять же ни слово об этом.   

zhevak пишет:

А вот подход "разбирайтесь сами!" -- это как раз не Вендовый подход, а Линусовый.

Вот поэтому linux в массы не продвинуть.

zhevak пишет:

А Вендовый подход такой -- "Не работает? Гы-ы! Ну значит все, фатально". И сделать ничего нельзя, все закрыто и защищено лицензионными соглашениями. Запрещено вскрывать, изучать, изменять.

Для это есть ТП, если вы не разу не обращались в ТП МС, то значит вы поступали так как написали, снесли поставили заново. На счет лицензии, вы сами знаетет что у вас ломанное ПО, а какой идиот пойдет в МС и будет говорить то что на его сборке зверя не работает то или иное приложение. Хотя в природе и такие встречаются.

Все же как ни как этот форум для новичков. Хотя просматривают его не только они =)

It is good day to die ...
MS Windows 10
Заметки о главном...

17

i2ks
Я прочитал Ваше сообщение. И кажется понял, в чем дело. Предлагаю сменить название топика, убрать из названия "HOWTO".
Спасибо за тестирование скрипта на разных дистрибутивах. У меня реально нет такого зоопарка систем. В моем окружении только Ubuntu разных версий и Debian.

Напишите свои предложение модератору по изменению названия. Меня устроит любой вариант.

Live Free or Die

18

Идея интересная, не думал, что все так просто.

  Насчет не работающего GET. Его можно заменить на wget, и заодно слегка упростить скрипт (head там не нужен, зачем ограничивать вывод..?) :

#!/bin/bash

# Консольный англо-русский русско-английский словарь
# Использование: translate-me <слово>

wget -q -O- "http://www.google.com/dictionary?langpair=en|ru&q=$1&hl=ru&aq=f" | \
sed -rn "s%^<span class=\"dct-tt\">(\w+)</span>$%\1%p"

З.Ы. Первоначальный скрипт у меня запустился без проблем

19

Newton, спасибо.
zhevak, просто поменяйте скрипт в первом посте... он уж больно крив... вариант Newton'а прост и понятен.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

20 (09.04.2011 10:53:43 отредактировано zhevak)

Да, согласен. Мне от тоже более симпатичен.
В первом посте заменять скрипт не буду. Вместо этого я добавлю ссылку на более удачный вариант.

Люди должны видеть оба варианта: удачны и и не удачный. Люди должны сами делать выводы, какой вариант лучше, и на этом учиться.

Live Free or Die

21

zhevak пишет:

Люди должны сами делать выводы, какой вариант лучше, и на этом учиться.

дело в том, что тот скрипт некрасивый. Я вообще удивляюсь, каким образом он вообще работает! ИМХО не надо учится на плохом коде...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

22

drBatty пишет:
zhevak пишет:

Люди должны сами делать выводы, какой вариант лучше, и на этом учиться.

дело в том, что тот скрипт некрасивый. Я вообще удивляюсь, каким образом он вообще работает! ИМХО не надо учится на плохом коде...

Э-эй! Алё? Дмитрий, вернись на грешную землю... Улови, что мы говорим об одном и том же.

На плохом коде тоже можно учиться: типа смотрите, как делать не следует. И сравните с тем, как это делать правильно.

Live Free or Die

23

zhevak пишет:

На плохом коде тоже можно учиться: типа смотрите, как делать не следует.

этого никто кроме вас и меня не видит (ну и тех кто разбирается). Если уж оставлять такой код, то следует снабдить его кучей комментариев, ПОЧЕМУ так делать нельзя.

GET "http://www.google.com/dictionary?langpair=en|ru&q=$1&hl=ru&aq=f" | \ # нельзя использовать GET
# ибо эта команда есть далеко не у всех. Например в слаке её нет, хотя там куча всего. Кроме того, даже если эта команда и есть,
# на самом деле, она может быть реализована алиасом. А алиасы не работают в скриптах.
# кроме того, даже если это и не алиас, то возможно, что в PATH нет такого на момент запуска скрипта.
grep dct-tt | \ # нельзя использовать grep в сложных случаях. Причина проста:
# нам необходимо выполнить сложные действия, и grep нам мало. Потому нам придётся ещё что-то вводить.
# зачем плодить сущности? проще всё сделать одной sed, если уж... Кроме того, нельзя вводить параметры без кавычек,
# ибо шелл раскрывает параметры, и в команду попадёт что-то совсем другое. Мы [b]обязаны[/b] использовать кавычки
# ибо в противном случае получаем быдлокод, который [b]работает не всегда[/b] - если шелл не смогла раскрыть шаблон, она его так и передаёт, и в тестах всё работает правильно.
# на практике шелл сможет, и случится НЁХ. В большинстве случаев - ошибка, а часто - дыра в безопасности.
sed /'class=\"dct-e/d' | \ # нельзя дробить команды - две команды выполняются вдвое дольше одной, всегда ваш К.О.
# нельзя экранировать символы без необходимости - в этой версии sed \" значит "кавычка", в другой версии она может означать всё что угодно.
sed '/<a\ href/d' | \ # пробел тоже экранировать нельзя в данном случае
sed 's/<span class="dct-tt">//g' | \ # это мы уже нашли раньше - тогда это и нужно было удалить командой s///
# это избавило-бы нас от необходимости вторично компилировать это сложное выражение (да и писать меньше).
sed 's/<\/span>//' | \ # заборчики \/\\/\//\/ смотрятся красиво, но набирать их долго. И они нечитаемые в т.ч. и быдлокодером.
sed '/<span /d' | \ # тут мы удолили все строки в которых есть <span, завтра гугл чуть изменит формат, и быдлокод сломается - он удалит и нужную информацию.
head -n 5 # аффтор не в курсе, но любой осиливший документацию знает, что sed сама может прекратить вывод после 5й строки.

как-то так... Короче - в каждой строке ошибка, а в некоторых их больше одной ac

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)