LinuxForum.Fans
Тема

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

Автор: zhevak 23 сообщений 8889 просмотров
#148975

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

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


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

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

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

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

text

#!/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. А для этого выполним команду
[console]
$ nano .profile
[/console]
Если ваша религия не позволяет вам пользоваться командной строкой, используйте графический редактор gedit.

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

text

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

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

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

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


После того как вы создали файл скрипта в директории bin, его нужно превратить в исполняемый. Для этого в командной строке выполите следующую команду
[console]
$ chmod +x translate-me
[/console]


Надеюсь у вас все получилось. Теперь можете пользоваться своим творением:
[console]
$ alex@zhevak:~$ translate-me table
стол
рабочий стол
общество за столом
[/console]

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

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

#149016

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

#149051

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

#149054
zhevak написал:
Можете тупо закописпастить.

не прокатит:

text

/bin> echo $SHELL
/bin/bash
text

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 прописать

#149060

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

#149066

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

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

#149068

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

text

#!/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";

пример:

text

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

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

Удачи. =)

#149076
i2ks написал:
zhevak, даже дело не в этом, почему у меня :

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

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

#149080
zhevak написал:
Просто у Вас не установлен libwww-perl.

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

UP:

text

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

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

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

#149089
i2ks написал:
как видим пакетит то стоит. Значит причина в другом.

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

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

Вторым можно переводить целые фразы туда
[console]
alex@zhevak:~$ translate-me "Can you tell me about Linux" en ru
Можете ли вы рассказать мне о Linux
[/console]
и обратно
[console]
alex@zhevak:~$ translate-me "Мне нравится Линукс" ru en
I like Linux
[/console]

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

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

#149172
i2ks написал:
[quote=zhevak]Честно говоря, мне не очень хочется разбираться в этой проблеме. Тем более, потом грузить людей -- говорить им, что им нужно что-то еще доустонавливать...

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

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

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

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

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

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

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

#149175

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

#149188

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

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

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

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

Частично.

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

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

text

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

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

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

text

GET: not found

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

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

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

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

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

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

#149280

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

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

#149608

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

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

text

#!/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"

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

#149627

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

#149643

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

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

Войдите или зарегистрируйтесь, чтобы ответить.