Преобразование транслита в скрипте(?)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

Преобразование транслита в скрипте(?)

Сообщение C10H15N »

Везде как преобразовать _в_транслит, а меня интиресует обратное -преобразование транслита в нормальный текст, а лучше в такие символы %C0 (это А в примере -для запроса броузером инфы на Кинопоиске).Я сделал sed -f /файл/с/пререкодировками -но так не очень хорошо, например sh в ш не превратить.Искать-то ищет но хотелось бы более точные запросы посылать.Какой есть пригодный для скрипта (т.е. простой и быстрый) способ преобразования?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Преобразование транслита в скрипте(?)

Сообщение eddy »

Сами привели пример. Теперь можете понять, что сделать это в скрипте невозможно. Надо подключать проверку слов по словарю. Например, было у вас слово shodit', вам понятно, что это "сходить", а вот при переводе получится неоднозначность, которую без словаря выявить нельзя, поэтому автомат, если все "sh" будет транслировать в "ш", даст "шодить" :)
Так что нужно подключать какую-нибудь spell-библиотеку и каждое слово с неоднозначностями проверять.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

Re: Преобразование транслита в скрипте(?)

Сообщение C10H15N »

ОК.Библиотека -слишком жирно для такой простой вещи.Значит оставлю sed.А нет ли какой таблицы транслитерирования, чтоли? Я вот такие вставил команды

Код: Выделить всё

s/A/%C0/g
s/B/%C1/g
s/V/%C2/g
s/G/%C3/g
s/D/%C4/g
s/E/%C5/g
s/J/%C6/g
s/Z/%C7/g
s/I/%C8/g
s/K/%CA/g
s/L/%CB/g
s/M/%CC/g
s/N/%CD/g
s/O/%CE/g
s/P/%CF/g
s/R/%D0/g
s/S/%D1/g
s/T/%D2/g
s/U/%D3/g
s/F/%D4/g
s/H/%D5/g
s/С/%D6/g
s/a/%E0/g
s/b/%E1/g
s/v/%E2/g
s/g/%E3/g
s/d/%E4/g
s/e/%E5/g
s/j/%E6/g
s/z/%E7/g
s/i/%E8/g
s/k/%EA/g
s/l/%EB/g
s/m/%EC/g
s/n/%ED/g
s/o/%EE/g
s/p/%EF/g
s/r/%F0/g
s/s/%F1/g
s/t/%F2/g
s/u/%F3/g
s/f/%F4/g
s/h/%F5/g
s/c/%F6/g
А это не все буквы.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Преобразование транслита в скрипте(?)

Сообщение eddy »

Вот мой скрипт для переименования имен файлов в транслит, может, поможет.

Код: Выделить всё

#!/bin/sh
#
#        rename_translit --- переводит русские имена файлов в транслит
#
# Создан 22-го Май 2006 года в  9:24
#
rmspaces
for Name in `ls -1`
do
    Newname=`echo "$Name"|sed -e \
    "y/йукенгзхъфывапролдэсмитьбЙУКЕНГЗХЪФЫВАПРОЛДЭСМИТЬБ/jukengzh'fyvaproldesmit'bJUKENGZH'FYVAPROLDESMIT'B/"\
# как понимаете, начиная с этой строки обратной конвертации делать нельзя
    -e "s/ц/tz/g"    \
    -e "s/ш/sh/g"    \
    -e "s/щ/sch/g"    \
    -e "s/ж/zh/g"    \
    -e "s/ч/ch/g"    \
    -e "s/ю/yu/g"    \
    -e "s/я/ya/g"    \
    -e "s/ё/yo/g"    \
    -e "s/Ё/YO/g"    \
    -e "s/Ц/TZ/g"    \
    -e "s/Ш/SH/g"    \
    -e "s/Щ/SCH/g"    \
    -e "s/Ж/ZH/g"    \
    -e "s/Ч/CH/g"    \
    -e "s/Ю/YU/g"    \
    -e "s/?/_/g"    \
    -e "s/Я/YA/g"`
    if [ "$Name" != "$Newname" ]; then
        mv "$Name" "$Newname"
    echo -e "$Name   ->    $Newname                             \r\c"
    fi
    if [ -d "$Newname" ]; then
    cd "$Newname"
    echo -e "\n\nDiving into $Newname"
    rename_translit
    cd ../
    fi
done
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: Преобразование транслита в скрипте(?)

Сообщение Voice »

С помощью iconv можно. Примерно так:
$ echo "привет" | iconv -f UTF8 -t KOI8-R | iconv -f KOI8-R -t KOI-7
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Преобразование транслита в скрипте(?)

Сообщение eddy »

Voice писал(а):
23.10.2009 11:20
С помощью iconv можно. Примерно так:
$ echo "привет" | iconv -f UTF8 -t KOI8-R | iconv -f KOI8-R -t KOI-7

Код: Выделить всё

[23.10 11:34 /home/change]
echo "привет! Шалом алейхем." | iconv -f KOI8-R -t KOI-7
PRIWET! {ALOM ALEJHEM.
[23.10 11:35 /home/change]
echo "Preved. Shalom alejhem.." | iconv -f KOI-7 -t KOI8-R
пРЕЖЕД. сХАЛОМ АЛЕЙХЕМ..

Намного хуже самодельного скрипта.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Преобразование транслита в скрипте(?)

Сообщение sash-kan »

eddy писал(а):
23.10.2009 09:35
Сами привели пример. Теперь можете понять, что сделать это в скрипте невозможно. Надо подключать проверку слов по словарю. Например, было у вас слово shodit', вам понятно, что это "сходить", а вот при переводе получится неоднозначность, которую без словаря выявить нельзя, поэтому автомат, если все "sh" будет транслировать в "ш", даст "шодить" :)
Так что нужно подключать какую-нибудь spell-библиотеку и каждое слово с неоднозначностями проверять.
сходит !== shodit

$ echo сходит | uniconv -encode Russian-Translit
sxodit
$ echo сходит | uniconv -encode Russian-Translit | uniconv -decode Russian-Translit
сходит

eddy писал(а):
23.10.2009 10:18
Вот мой скрипт
лисапеды, лисапеды, а я маленький такой…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Преобразование транслита в скрипте(?)

Сообщение /dev/random »

sash-kan писал(а):
23.10.2009 16:49
$ echo сходит | uniconv -encode Russian-Translit
sxodit
$ echo сходит | uniconv -encode Russian-Translit | uniconv -decode Russian-Translit
сходит

У меня команда "uniconv" - это UniConvertor, конвертор векторных графических форматов. Других uniconv'ов не знаю. Что это?

Upd: выгуглил. Это из редактора yudit. Мда.
Спасибо сказали:
C10H15N
Сообщения: 277
Статус: \(0_0)/ !!111

Re: Преобразование транслита в скрипте(?)

Сообщение C10H15N »

>$ echo сходит | uniconv -encode Russian-Translit
Программа 'uniconv' на данный момент не установлена. Вы можете установить её, выполнив:
sudo apt-get install yudit
uniconv: command not found

>sudo apt-get install yudit
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Будут установлены следующие дополнительные пакеты:
ttf-unifont unifont xfonts-unifont yudit-common
Предлагаемые пакеты:
unifont-bin yudit-doc ttf-kochi-gothic
НОВЫЕ пакеты, которые будут установлены:
ttf-unifont unifont xfonts-unifont yudit yudit-common
обновлено 0, установлено 5 новых пакетов, для удаления отмечено 0 пакетов, и 2 пакетов не обновлено.
Необходимо скачать 10,3MБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 39,3MB.
Хотите продолжить [Д/н]?

н. конечно, нафиг мне такое счастье.Яж спрашивал пригодный для скрипта, простой способ.А это не лисапед. а целый грузовик.
Вобщем всё ясно, sed оптимален.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Преобразование транслита в скрипте(?)

Сообщение sash-kan »

C10H15N писал(а):
23.10.2009 23:00
Яж спрашивал пригодный для скрипта, простой способ
как бы uniconv отвечает обоим параметрам.
но, не нравится — не ешьте.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: