Форум сайта python.su
Мне нужно было без лишних заморочек и чтобы перевести большинство ходовых символов.
qmanХм… Если честно, я особо не задумывался и сделал отображение по ссылке Юрия: http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/media/js/urlify.js
Только обратил внимание, что буква “й” транслируется в “j”, а в школе учили что “й” транслируется в y даже в загранпаспорте моя фамилия содержащая “й” транслирована в “y”.
qmanА у меня разве не так? Ну разве что “j” вместо “y”…
“ай” - “ay”
“ей” - “ey”
“ий” - “iy”
“ой” - “oy”
“уй” - “uy”
“ый” - “yy”
“эй” - “ey”
qmanА это нужно в два прохода… Оно не сложно. Если хочешь, давай сделаем. Только нужно, чтобы API был совместимый со старой версией… Да в общем оно не сложно.
“ей” - “yey”
“юй” - “yuy”
“ей” - “yay”
Офлайн
qman, я обновил trans. Посмотри.
Офлайн
Спасибо за модуль транслитерации! Он хорошо подходит для SEO http://python-script.blogspot.com/2010/11/url-google.html
Офлайн
поглядел на код обоих модулей и в проекте написал свой :)
http://gist.github.com/755967
за основу взят BGN с http://translit.ru/
P.S. раньше юзал pytils, но мне нужна была только траслитерация, для морфологии наверно нужно юзать http://packages.python.org/pymorphy/
Отредактировано (Дек. 27, 2010 10:33:57)
Офлайн
ZZZПо транслитерации еще можно поглядеть на модуль http://pypi.python.org/pypi/Unidecode
Нужно перевести не-ASCII строку в транслит.
Для русского нашёл PyTils j2a, но мне бы что-нибудь более универсальное, ибо одной кирилицей не-ASCII не исчерпываются.
Может у кого есть что на примете?
P.S. Я понимаю, что без знания, с каким языком работать, хорошего транслита не сделать, но мне бы приблизительно… Просто по общей таблице символов юникода.
>>> from unidecode import unidecode
>>> unidecode(u'съешь печенье и выпей чаю')
u"s'esh' pechen'e i vypei chaiu"
Офлайн
#-*-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()
Отредактировано (Янв. 31, 2011 21:03:08)
Офлайн
Здрасти,
имею задачу рекурсивно перетранслитировать содержимое определённой папки; файловая система utf-8
т.е. перетранслитировать содержимое папки, подпапки и их содержимое, просто сам неопытный совсем, второй день маюсь с бидоном, но толкового пока ничего не выходит, весь инет перерыл, ничего подходящего не нашёл
сам я всё пишу на shell, но встала проблема со скоростью, там может быть по 400 папок с файлами под транслитерацию, а 7 сек меня не устраивает
По этому решил насесть на бидон, подскажите как это можно реализовать, а если кто-то ещё и покажет как, то буду очень примного благодарен
Офлайн
Одна тема – один вопрос!
Создайте свою тему
Офлайн
И вообще - этот форум к Бидону никакого отношения не имеет.
Младшая сестренка называет иногда мой любимый язык программирования Пузоном - но это еще ни о чем не говорит.
Правильно Саня Кошелев говорит: создайте новую тему (в разделе Центр помощи), покажите что у вас есть и что не получается - люди и подтянутся.
Офлайн