Преобразование транслита в скрипте(?)
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 277
- Статус: \(0_0)/ !!111
Преобразование транслита в скрипте(?)
Везде как преобразовать _в_транслит, а меня интиресует обратное -преобразование транслита в нормальный текст, а лучше в такие символы %C0 (это А в примере -для запроса броузером инфы на Кинопоиске).Я сделал sed -f /файл/с/пререкодировками -но так не очень хорошо, например sh в ш не превратить.Искать-то ищет но хотелось бы более точные запросы посылать.Какой есть пригодный для скрипта (т.е. простой и быстрый) способ преобразования?
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Преобразование транслита в скрипте(?)
Сами привели пример. Теперь можете понять, что сделать это в скрипте невозможно. Надо подключать проверку слов по словарю. Например, было у вас слово shodit', вам понятно, что это "сходить", а вот при переводе получится неоднозначность, которую без словаря выявить нельзя, поэтому автомат, если все "sh" будет транслировать в "ш", даст "шодить" 
Так что нужно подключать какую-нибудь spell-библиотеку и каждое слово с неоднозначностями проверять.

Так что нужно подключать какую-нибудь spell-библиотеку и каждое слово с неоднозначностями проверять.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 277
- Статус: \(0_0)/ !!111
Re: Преобразование транслита в скрипте(?)
ОК.Библиотека -слишком жирно для такой простой вещи.Значит оставлю 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
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Преобразование транслита в скрипте(?)
Вот мой скрипт для переименования имен файлов в транслит, может, поможет.
Код: Выделить всё
#!/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 - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: Преобразование транслита в скрипте(?)
С помощью iconv можно. Примерно так:
$ echo "привет" | iconv -f UTF8 -t KOI8-R | iconv -f KOI8-R -t KOI-7
$ echo "привет" | iconv -f UTF8 -t KOI8-R | iconv -f KOI8-R -t KOI-7
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Преобразование транслита в скрипте(?)
Код: Выделить всё
[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 - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Преобразование транслита в скрипте(?)
сходит !== shoditeddy писал(а): ↑23.10.2009 09:35Сами привели пример. Теперь можете понять, что сделать это в скрипте невозможно. Надо подключать проверку слов по словарю. Например, было у вас слово shodit', вам понятно, что это "сходить", а вот при переводе получится неоднозначность, которую без словаря выявить нельзя, поэтому автомат, если все "sh" будет транслировать в "ш", даст "шодить"
Так что нужно подключать какую-нибудь spell-библиотеку и каждое слово с неоднозначностями проверять.
$ echo сходит | uniconv -encode Russian-Translit
sxodit
$ echo сходит | uniconv -encode Russian-Translit | uniconv -decode Russian-Translit
сходит
лисапеды, лисапеды, а я маленький такой…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Преобразование транслита в скрипте(?)
У меня команда "uniconv" - это UniConvertor, конвертор векторных графических форматов. Других uniconv'ов не знаю. Что это?
Upd: выгуглил. Это из редактора yudit. Мда.
-
- Сообщения: 277
- Статус: \(0_0)/ !!111
Re: Преобразование транслита в скрипте(?)
>$ 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 оптимален.
Программа '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 оптимален.
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Преобразование транслита в скрипте(?)
как бы uniconv отвечает обоим параметрам.
но, не нравится — не ешьте.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог