Найти - Пользователи
Полная версия: Транслит
Начало » Python для экспертов » Транслит
1 2 3
ZZZ
Мне нужно было без лишних заморочек и чтобы перевести большинство ходовых символов.

qman
Только обратил внимание, что буква “й” транслируется в “j”, а в школе учили что “й” транслируется в y даже в загранпаспорте моя фамилия содержащая “й” транслирована в “y”.
Хм… Если честно, я особо не задумывался и сделал отображение по ссылке Юрия: http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/media/js/urlify.js
И меня это устроило.

qman
“ай” - “ay”
“ей” - “ey”
“ий” - “iy”
“ой” - “oy”
“уй” - “uy”
“ый” - “yy”
“эй” - “ey”
А у меня разве не так? Ну разве что “j” вместо “y”…

qman
“ей” - “yey”
“юй” - “yuy”
“ей” - “yay”
А это нужно в два прохода… Оно не сложно. Если хочешь, давай сделаем. Только нужно, чтобы API был совместимый со старой версией… Да в общем оно не сложно.

P.S. Сейчас сети нет, чтобы по ссылкам пройтись – ночью.
ZZZ
qman, я обновил trans. Посмотри.
semen.bubber
Спасибо за модуль транслитерации! Он хорошо подходит для SEO http://python-script.blogspot.com/2010/11/url-google.html
naspeh
поглядел на код обоих модулей и в проекте написал свой :)

http://gist.github.com/755967

за основу взят BGN с http://translit.ru/

P.S. раньше юзал pytils, но мне нужна была только траслитерация, для морфологии наверно нужно юзать http://packages.python.org/pymorphy/
naspeh
ZZZ
Нужно перевести не-ASCII строку в транслит.
Для русского нашёл PyTils j2a, но мне бы что-нибудь более универсальное, ибо одной кирилицей не-ASCII не исчерпываются.
Может у кого есть что на примете?

P.S. Я понимаю, что без знания, с каким языком работать, хорошего транслита не сделать, но мне бы приблизительно… Просто по общей таблице символов юникода.
По транслитерации еще можно поглядеть на модуль http://pypi.python.org/pypi/Unidecode

>>> from unidecode import unidecode
>>> unidecode(u'съешь печенье и выпей чаю')
u"s'esh' pechen'e i vypei chaiu"
certanista
#-*-coding:utf-8-*-
import unicodedata
def is_syllable(letter):
syllables = ("A", "E", "I", "O", "U", "a", "e", "i", "o", "u")
if letter in syllables:
return True
return False
def is_consonant(letter):
return not is_syllable(letter)
def romanize(letter):
try:
str(letter)
except UnicodeEncodeError:
pass
else:
return str(letter)
unid = unicodedata.name(letter)
exceptions = {"NUMERO SIGN": "No", "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK": "\"", "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK": "\"", "DASH": "-"}
for name_contains in exceptions:
if unid.find(name_contains)!=-1:
return exceptions[name_contains]
assert(unid.startswith("CYRILLIC"))# Not ready to romanize anything but cyrillics
transformation_pairs = {"CYRILLIC CAPITAL LETTER ": str.capitalize, "CYRILLIC SMALL LETTER ": str.lower}
func = str.lower
for name_contains in transformation_pairs:
if unid.find(name_contains)!=-1:
func = transformation_pairs[name_contains]
unid = unid.replace(name_contains, "")
cyrillic_exceptions = {"YERU": "y", "SHORT I": "y", "HARD SIGN": "\'", "SOFT SIGN": "\'", "BYELORUSSIAN-UKRAINIAN I": "i", "GHE WITH UPTURN": "g", "UKRAINIAN IE": "ie", "YU": "yu", "YA": "ya"}
for name_contains in cyrillic_exceptions:
if unid.find(name_contains)!=-1:
return cyrillic_exceptions[name_contains]
if all(map(is_syllable, unid)):
return func(unid)
else:
return func(filter(is_consonant, unid))
def translit(text):
output = ""
for letter in text:
output += romanize(letter)
return output
def main():
text = u"русск.: Любя, съешь щипцы, — вздохнёт мэр, — кайф жгуч."
print translit(text)
text = u"укр.: Гей, хлопці, не вспію - на ґанку ваша файна їжа знищується бурундучком."
print translit(text)
text = u"болг.: Ах, чудна българска земьо, полюшквай цъфтящи жита."
print translit(text)
text = u"серб.: Неуредне ноћне даме досађивале су Џеку К."
print translit(text)
#russk.: Lyubya, s'iesh' shchiptsy, - vzdohniot mer, - kayf zhghuch.
#ukr.: Ghiey, hloptsi, nie vspiyu - na ganku vasha fayna yzha znishchuiet'sya burunduchkom.
#bolgh.: Ah, chudna b'lgharska ziem'o, polyushkvay ts'ftyashchi zhita.
#sierb.: Nieuriednie notshnie damie dosadjivalie su Dzhieku K.
if __name__=="__main__":
main()
Интересный таск.
Попробовал сделать без никаких таблиц, с одной только стандартной библиотекой.
Без «читерства» все равно не получилось.
dnk8
Здрасти,
имею задачу рекурсивно перетранслитировать содержимое определённой папки; файловая система utf-8
т.е. перетранслитировать содержимое папки, подпапки и их содержимое, просто сам неопытный совсем, второй день маюсь с бидоном, но толкового пока ничего не выходит, весь инет перерыл, ничего подходящего не нашёл
сам я всё пишу на shell, но встала проблема со скоростью, там может быть по 400 папок с файлами под транслитерацию, а 7 сек меня не устраивает
По этому решил насесть на бидон, подскажите как это можно реализовать, а если кто-то ещё и покажет как, то буду очень примного благодарен
Александр Кошелев
Одна тема – один вопрос!

Создайте свою тему
Андрей Светлов
И вообще - этот форум к Бидону никакого отношения не имеет.
Младшая сестренка называет иногда мой любимый язык программирования Пузоном - но это еще ни о чем не говорит.
Правильно Саня Кошелев говорит: создайте новую тему (в разделе Центр помощи), покажите что у вас есть и что не получается - люди и подтянутся.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB