Найти - Пользователи
Полная версия: Транслит слов
Начало » Python для новичков » Транслит слов
1 2
ajib6ept
Есть слово на русском языке (кирилица), хочу перевести его в латиницу, для это создал словарь соответствий. Не могу понять почему не получается, с цифрой все нормально, с буквами возвращает 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()
SF
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()
ajib6ept
Ну да, решение должно быть простое. Спасибо, странно, что ранее не додумался до такого варианта. Проблема решена
Singularity
ajib6ept
для slug или как?
Shaman
Для этих нужд у строк и юникода есть специальный метод.
http://www.tutorialspoint.com/python/string_translate.htm

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

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

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

да, видел такое решение, но из-за букв ‘ж’ ‘ш’ и пр, не подходит решение (используется сочетание)
Singularity
ajib6ept
сходи туда и выдери все что тебе надо
https://pypi.python.org/pypi/awesome-slugify/1.4
dimy44
Помнится делал подобное - сперва заменял всякие ‘ж’, ‘ш’ итд с помощью replace, а затем применял translate к оставшимся. У translate скорость выше, чем у других способов.
Kasta_neda
не помню где взял
# -*- 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)
Shaman
Kasta_neda
не помню где взял
Ужас какой-то.
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