Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Karakurt от марта 11, 2013, 18:16

Название: Скрипт транслитерации
Отправлено: Karakurt от марта 11, 2013, 18:16
Как в линуксе сделать? На чем проще?
Название: Скрипт транслитерации
Отправлено: Python от марта 11, 2013, 18:38
Если буква-к-букве, то проще всего tr (http://linux.die.net/man/1/tr). Для чего-то более сложного можно попробовать sed (http://linux.die.net/man/1/sed) (хотя, возможно, это не самый удобный инструмент для такого рода задач). Также вполне пригодны python, perl и другие высокоуровневые языки.
Название: Скрипт транслитерации
Отправлено: Hellerick от марта 11, 2013, 18:47
Вы бы описали, какая перед вами техническая задача, и какие средства в наличии.

Вот я поигрался с лугатовским транслит-экстеншном для Хрома — действительно работает. Всю кириллицу в окне браузера превращает в латиницу.
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 11, 2013, 19:08
Мне надо чтобы текст на обычной кириллице переводился в латинку с доп. символами. Хрома нет, есть опера и ФФ.
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 11, 2013, 19:15
Если не сложно, накатайте скрипт на питоне. Питон, вы можете? :)
Название: Скрипт транслитерации
Отправлено: Python от марта 11, 2013, 19:19
Т.е., скрипт нужен для браузера? Или нужно просто конвертировать файл на кириллице в файл на латинице? Или, может, он должен работать на стороне веб-сервера, работающего на линуксе?
Название: Скрипт транслитерации
Отправлено: Python от марта 11, 2013, 19:26
С питоном пока не освоился. Но если требуется скрипт для браузера, питон и ненужен. Если для конвертирования файлов или потоков, вполне можно обойтись sed'ом. Т.е., питон — не единственный вариант.
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 11, 2013, 19:29
Не обязательно для браузера. Допустим, есть файл, его надо изменить - добавить туда транслит.
Название: Скрипт транслитерации
Отправлено: Toman от марта 11, 2013, 19:29
Если это надо в браузере, то, наверное, удобнее всего было бы на жабоскрипте писать. Правда, как это впихивать в браузер, я не в курсе - свои транслитераторы в своё время писал просто в виде скрипта на странице.
Название: Скрипт транслитерации
Отправлено: Python от марта 11, 2013, 20:03
В простейшем случае, можно сделать что-то типа такого:
#!/bin/sh
sed -e 'y/абвгдеёжзийклмнопрстуфхцчшыэюя/abvgdeöžzijklmnoprstufhcčšyeüä/' -e 's/щ/šč/g' -e 's/ъ/\'/g' -e 's/ь/\'/g'\
    -e 'y/АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЫЭЮЯ/ABVGDEÖŽZIJKLMNOPRSTUFHCČŠYEÜÄ/' -e 's/Щ/Šč/g' -e 's/Ъ/\'/g' -e 's/Ь/\'/g'

поместить все это в текстовый файл (назовем его translit) и поставить ему аттрибут исполнимости. Директория со скриптом должна присутствовать в переменной PATH, либо следует указывать путь к скрипту при его запуске.
Далее, чтобы конвертировать текст, содержащийся в файле CYRFILE, и сохранить его в файле LATFILE, в консоли вводим команду:
translit <CYRFILE >LATFILE

Либо можно просто запустить translit в консоли, чтобы посмотреть, как он конвертирует (для завершения нажать Ctrl+D).
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 11, 2013, 20:13
Спасибо! А если есть диграфы типа ч>ch?
Название: Скрипт транслитерации
Отправлено: Hellerick от марта 12, 2013, 05:44
Цитата: Karakurt от марта 11, 2013, 20:13
Спасибо! А если есть диграфы типа ч>ch?

Python же такой случай описал:

Цитировать-e 's/щ/šč/g'
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 15:10
файл что-то не выполняется, хотя rwx стоит.
Название: Скрипт транслитерации
Отправлено: beaver от марта 12, 2013, 15:13
А как Вы его запускаете? По идее надо в консоли.
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 15:16
в консоли
Название: Скрипт транслитерации
Отправлено: beaver от марта 12, 2013, 15:31
Это странно! а какую ошибку выдаёт?..

И да, вы в курсе: запускать его надо не filename, а ./filename или /path/filename?
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 15:50
Нот фаунд, а если ./ использовать, то  Syntax error: Unterminated quoted string
Название: Скрипт транслитерации
Отправлено: beaver от марта 12, 2013, 16:06
Где-то с кавычками или апострофами что-то не то...

У меня, к сожалению, сейчас нет линукса установленного... Но попробуйте так:

sed -e 'y/абвгдеёжзийклмнопрстуфхцчшыэюя/abvgdeöžzijklmnoprstufhcčšyeüä/' -e 's/щ/šč/g' -e "s/ъ/'/g" -e "s/ь/'/g" \
    -e 'y/АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЫЭЮЯ/ABVGDEÖŽZIJKLMNOPRSTUFHCČŠYEÜÄ/' -e 's/Щ/Šč/g' -e "s/Ъ/'/g" -e "s/Ь/'/g'
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 16:11
Ввести в консоли? Ошибки нет, а что дальше?
Название: Скрипт транслитерации
Отправлено: Python от марта 12, 2013, 16:16
Похоже, я неправильно понимал, как шелл работает с апострофами. Попробуйте заменить 's/ъ/\'/g' на "s/ъ/'/g" или s/ъ/\'/g (и аналогичным образом другие замены, где идет подстановка апострофа) — в цыгвине сработало, должно и в линуксе. Возможно также, нужно поставить пробел перед конечным \ во второй строке (впрочем, не думаю, что это на что-либо влияет).
Название: Скрипт транслитерации
Отправлено: beaver от марта 12, 2013, 16:18
Как это ошибки нет? Я уже заметил ошибку, в конце вместо ' надо ":

sed -e 'y/абвгдеёжзийклмнопрстуфхцчшыэюя/abvgdeöžzijklmnoprstufhcčšyeüä/' -e 's/щ/šč/g' -e "s/ъ/'/g" -e "s/ь/'/g" \
    -e 'y/АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЫЭЮЯ/ABVGDEÖŽZIJKLMNOPRSTUFHCČŠYEÜÄ/' -e 's/Щ/Šč/g' -e "s/Ъ/'/g" -e "s/Ь/'/g"


В общем... вводИте в консоли и попробуйте печатать текст... Типа "привет"... Если всё работает, после ввода строки должен выводиться транслит. Заканчиваете ввод текста нажатием enter ctrl+d enter.

Потом... если это работает, то просто сохраняете команду в файл, добавляете первой строкой перед ним #!/bin/bash или #!/bin/sh, делаете файл исполняемым — и минимальная программа готова... Файлы с #!/bin/bash в начале - это всего лишь автоматизация консольных команд...

Как вариант можно попробовать так (это сохраните в файл и сделайте его исполняемым):
#!/bin/sed -f
y/абвгдеёжзийклмнопрстуфхцчшыэюя/abvgdeöžzijklmnoprstufhcčšyeüä/
s/щ/šč/g
s/ъ/'/g
s/ь/'/g
y/АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЫЭЮЯ/ABVGDEÖŽZIJKLMNOPRSTUFHCČŠYEÜÄ/
s/Щ/Šč/g
s/Ъ/'/g
s/Ь/'/g
Название: Скрипт транслитерации
Отправлено: beaver от марта 12, 2013, 16:20
Python... Никто не знает, как shell работает... Том Дуфф говорил: никто не знает, какая грамматика у Bourne shellа, и чтение исходных кодов не помогает...
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 16:23
Да, сейчас работает в консоли.
Название: Скрипт транслитерации
Отправлено: Python от марта 12, 2013, 16:27
Цитата: Karakurt от марта 12, 2013, 16:11
Ввести в консоли? Ошибки нет, а что дальше?
Просто вводите текст на кириллице и получаете на выходе латиницу. sed можно использовать как непосредственно в виде консольной команды, так и через скрипт, запускаемый в консоли (т.е., как я написал вначале, но с исправлениями). В обоих случаях, его можно дополнить перенаправлением ввода-вывода в файл (как было описано выше).
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 16:33
s/иi/iyi/g   можно писать?
Название: Скрипт транслитерации
Отправлено: Python от марта 12, 2013, 16:38
Можно.
Название: Скрипт транслитерации
Отправлено: beaver от марта 12, 2013, 16:40
Конечно, а почему нет?

Только учитывайте: все команды выполняются по очереди... в рамках строки... Так что перемена мест слагаемых поменяет результат...
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 17:02
Т.е. надо сначала исключения, а потом - правило? И да, надо сначала большие буквы, потом маленькие.
Название: Скрипт транслитерации
Отправлено: Python от марта 12, 2013, 17:13
Да. Что первым пишется, первым и выполняется.
Название: Скрипт транслитерации
Отправлено: Karakurt от марта 12, 2013, 17:14
Подскажите, где можно узнать код символа?
Название: Скрипт транслитерации
Отправлено: Валентин Н от марта 12, 2013, 17:21
Цитата: Karakurt от марта 12, 2013, 17:14
Подскажите, где можно узнать код символа?
babelmap + шрифт универсалия, хотя в оном иногда находятся ошибки
Название: Скрипт транслитерации
Отправлено: Валентин Н от марта 12, 2013, 17:22
можно скопировать в ворд и нажать альт+икс, в бабелмэпе же можно поназванию искать
Название: Скрипт транслитерации
Отправлено: Валентин Н от марта 12, 2013, 17:24
Цитата: Hellerick от марта 11, 2013, 18:47
Вот я поигрался с лугатовским транслит-экстеншном для Хрома — действительно работает. Всю кириллицу в окне браузера превращает в латиницу.
А вы не знаете случайно, как его заставить странички транслитить?
Название: Скрипт транслитерации
Отправлено: Hellerick от марта 12, 2013, 17:29
Цитата: Валентин Н от марта 12, 2013, 17:24
Цитата: Hellerick от марта 11, 2013, 18:47
Вот я поигрался с лугатовским транслит-экстеншном для Хрома — действительно работает. Всю кириллицу в окне браузера превращает в латиницу.
А вы не знаете случайно, как его заставить странички транслитить?

Лугат, вроде, всё описал:

Цитата: Lugat от марта 10, 2013, 11:26
Krome togo polozhil v zip papku svoix narabotok po on-lajn transliteracii stranic v brauzere GoogleChrom na ukrainskuju (jirečkovka i abecadlo), belarusskuju tradicionnuju latinicu, i russkuju latinicu-26 — odin iz moix projektov zdesy na Lingvoforume. (Puty dlya ustanovki etogo Extension'a v Chrome sledujuqij: Tools - Extensions - otmetity galochkoj Developer mode - nazhaty Load unpacked extensions - vwbraty vwtyanutuju kuda-nibudy papku iz zipa i kliknuty na neje.)
Vwkladwvaju syuda (http://ge.tt/2oMnCsZ/v/0).

Убедиться, что напротив его экстеншна стоит галочка — и он начнет транслитерировать всю кириллицу на всех страничках.
Название: Скрипт транслитерации
Отправлено: Валентин Н от марта 12, 2013, 18:28
А как к опере прикрутить?
Название: Скрипт транслитерации
Отправлено: Python от марта 12, 2013, 19:05
Цитата: Karakurt от марта 12, 2013, 17:14
Подскажите, где можно узнать код символа?
http://www.isthisthingon.org/unicode/index.php — можно ввести текст в поле UTF8 string и посмотреть список его символов с кодами и другими подробностями.