Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2014 21:01:26

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Транслит слов

Есть слово на русском языке (кирилица), хочу перевести его в латиницу, для это создал словарь соответствий. Не могу понять почему не получается, с цифрой все нормально, с буквами возвращает None. Подозреваю, что ошибка в кодировке, но не могу понять, что именно надо поправить.

# -*- coding: UTF-8 -*-
def main():
    my_dict = {
        '1': '2',
        'ы': 'y',
        'й': 'j',
    }
    
    word = '11ый'
    for w in word:
        print my_dict.get(w)
if __name__ == "__main__":
    main()



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#2 Июль 4, 2014 21:05:09

SF
От: Ukraine
Зарегистрирован: 2014-03-06
Сообщения: 2
Репутация: +  1  -
Профиль   Отправить e-mail  

Транслит слов

ajib6ept
Есть слово на русском языке (кирилица), хочу перевести его в латиницу, для это создал словарь соответствий. Не могу понять почему не получается, с цифрой все нормально, с буквами возвращает None. Подозреваю, что ошибка в кодировке, но не могу понять, что именно надо поправить.

def main():
    my_dict = {
        '1': '2',
        u'ы': 'y',
        u'й': 'j',
    }
    
    word = u'11ый'
    for w in word:
        print my_dict.get(w)
if __name__ == "__main__":
    main()

Офлайн

#3 Июль 4, 2014 21:07:43

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Транслит слов

Ну да, решение должно быть простое. Спасибо, странно, что ранее не додумался до такого варианта. Проблема решена



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#4 Июль 4, 2014 21:21:13

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Транслит слов

ajib6ept
для slug или как?

Офлайн

#5 Июль 5, 2014 00:40:44

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Транслит слов

Для этих нужд у строк и юникода есть специальный метод.
http://www.tutorialspoint.com/python/string_translate.htm

Подойдёт если не используются сочетания.

Офлайн

#6 Июль 5, 2014 07:49:26

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Транслит слов

Singularity
ajib6eptдля slug или как?

не понял вопроса.

Shaman
Для этих нужд у строк и юникода есть специальный метод.http://www.tutorialspoint.com/python/string_translate.htmПодойдёт если не используются сочетания.

да, видел такое решение, но из-за букв ‘ж’ ‘ш’ и пр, не подходит решение (используется сочетание)



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#7 Июль 5, 2014 08:00:12

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Транслит слов

ajib6ept
сходи туда и выдери все что тебе надо
https://pypi.python.org/pypi/awesome-slugify/1.4

Офлайн

#8 Июль 5, 2014 08:02:20

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Транслит слов

Помнится делал подобное - сперва заменял всякие ‘ж’, ‘ш’ итд с помощью replace, а затем применял translate к оставшимся. У translate скорость выше, чем у других способов.

Офлайн

#9 Июль 5, 2014 12:09:48

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Транслит слов

не помню где взял

# -*- coding: utf-8 -*-
 
import re
 
def transliterate(string):
 
    capital_letters = {u'А': u'A',
                       u'Б': u'B',
                       u'В': u'V',
                       u'Г': u'G',
                       u'Д': u'D',
                       u'Е': u'E',
                       u'Ё': u'E',
                       u'З': u'Z',
                       u'И': u'I',
                       u'Й': u'Y',
                       u'К': u'K',
                       u'Л': u'L',
                       u'М': u'M',
                       u'Н': u'N',
                       u'О': u'O',
                       u'П': u'P',
                       u'Р': u'R',
                       u'С': u'S',
                       u'Т': u'T',
                       u'У': u'U',
                       u'Ф': u'F',
                       u'Х': u'H',
                       u'Ъ': u'',
                       u'Ы': u'Y',
                       u'Ь': u'',
                       u'Э': u'E',}
 
    capital_letters_transliterated_to_multiple_letters = {u'Ж': u'Zh',
                                                          u'Ц': u'Ts',
                                                          u'Ч': u'Ch',
                                                          u'Ш': u'Sh',
                                                          u'Щ': u'Sch',
                                                          u'Ю': u'Yu',
                                                          u'Я': u'Ya',}
 
 
    lower_case_letters = {u'а': u'a',
                       u'б': u'b',
                       u'в': u'v',
                       u'г': u'g',
                       u'д': u'd',
                       u'е': u'e',
                       u'ё': u'e',
                       u'ж': u'zh',
                       u'з': u'z',
                       u'и': u'i',
                       u'й': u'y',
                       u'к': u'k',
                       u'л': u'l',
                       u'м': u'm',
                       u'н': u'n',
                       u'о': u'o',
                       u'п': u'p',
                       u'р': u'r',
                       u'с': u's',
                       u'т': u't',
                       u'у': u'u',
                       u'ф': u'f',
                       u'х': u'h',
                       u'ц': u'ts',
                       u'ч': u'ch',
                       u'ш': u'sh',
                       u'щ': u'sch',
                       u'ъ': u'',
                       u'ы': u'y',
                       u'ь': u'',
                       u'э': u'e',
                       u'ю': u'yu',
                       u'я': u'ya',}
 
    capital_and_lower_case_letter_pairs = {}
 
    for capital_letter, capital_letter_translit in capital_letters_transliterated_to_multiple_letters.iteritems():
        for lowercase_letter, lowercase_letter_translit in lower_case_letters.iteritems():
            capital_and_lower_case_letter_pairs[u"%s%s" % (capital_letter, lowercase_letter)] = u"%s%s" % (capital_letter_translit, lowercase_letter_translit)
 
    for dictionary in (capital_and_lower_case_letter_pairs, capital_letters, lower_case_letters):
 
        for cyrillic_string, latin_string in dictionary.iteritems():
            string = re.sub(cyrillic_string, latin_string, string)
 
    for cyrillic_string, latin_string in capital_letters_transliterated_to_multiple_letters.iteritems():
        string = re.sub(cyrillic_string, latin_string.upper(), string)
 
    return string
string = u'Ночь Пасмурно, дымка +2+36 74729996 С247 98 +1+34 Утро Туман +1+34 74829997 СВ124 100 +1+34 жаба дышит'
print transliterate(string)

Офлайн

#10 Июль 5, 2014 15:19:43

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Транслит слов

Kasta_neda
не помню где взял
Ужас какой-то.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version