Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2009 17:11:20

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Транслит

Мне нужно было без лишних заморочек и чтобы перевести большинство ходовых символов.

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. Сейчас сети нет, чтобы по ссылкам пройтись – ночью.



Офлайн

#2 Авг. 16, 2009 02:57:44

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Транслит

qman, я обновил trans. Посмотри.



Офлайн

#3 Ноя. 5, 2010 18:03:31

semen.bubber
От:
Зарегистрирован: 2010-11-05
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Транслит

Спасибо за модуль транслитерации! Он хорошо подходит для SEO http://python-script.blogspot.com/2010/11/url-google.html



Офлайн

#4 Ноя. 28, 2010 23:47:20

naspeh
От:
Зарегистрирован: 2010-11-28
Сообщения: 2
Репутация: +  1  -
Профиль   Отправить e-mail  

Транслит

поглядел на код обоих модулей и в проекте написал свой :)

http://gist.github.com/755967

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

P.S. раньше юзал pytils, но мне нужна была только траслитерация, для морфологии наверно нужно юзать http://packages.python.org/pymorphy/



Отредактировано (Дек. 27, 2010 10:33:57)

Офлайн

#5 Янв. 31, 2011 17:00:01

naspeh
От:
Зарегистрирован: 2010-11-28
Сообщения: 2
Репутация: +  1  -
Профиль   Отправить e-mail  

Транслит

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"



Офлайн

#6 Янв. 31, 2011 21:00:23

certanista
От:
Зарегистрирован: 2010-10-28
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Транслит

#-*-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)

Офлайн

#7 Фев. 22, 2011 13:26:56

dnk8
От:
Зарегистрирован: 2011-02-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Транслит

Здрасти,
имею задачу рекурсивно перетранслитировать содержимое определённой папки; файловая система utf-8
т.е. перетранслитировать содержимое папки, подпапки и их содержимое, просто сам неопытный совсем, второй день маюсь с бидоном, но толкового пока ничего не выходит, весь инет перерыл, ничего подходящего не нашёл
сам я всё пишу на shell, но встала проблема со скоростью, там может быть по 400 папок с файлами под транслитерацию, а 7 сек меня не устраивает
По этому решил насесть на бидон, подскажите как это можно реализовать, а если кто-то ещё и покажет как, то буду очень примного благодарен



Офлайн

#8 Фев. 22, 2011 16:01:51

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Транслит

Одна тема – один вопрос!

Создайте свою тему



Офлайн

#9 Фев. 22, 2011 16:55:08

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Транслит

И вообще - этот форум к Бидону никакого отношения не имеет.
Младшая сестренка называет иногда мой любимый язык программирования Пузоном - но это еще ни о чем не говорит.
Правильно Саня Кошелев говорит: создайте новую тему (в разделе Центр помощи), покажите что у вас есть и что не получается - люди и подтянутся.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version