Pytils - простой обработчик русского текста на Python. Идея позаимствована у Julik и его RuTils.
Автор pytils - Pythy.
При помощи любого svn-клиента можно получить последнюю версию pytils по адресу http://pythy.googlecode.com/svn/trunk/pytils/.
Во-первых, все входящие строки - unicode. И выходящие - тоже (за малыми исключениями, о них ниже). В случае, если Вы передадите str, получите AssertionError.
Pytils содержит следующие модули:
numeral
- для обработки числительных
dt
- русские даты без локалей
translit
- транслитерация
API модулей смотрите в директории html.
Pytils умеет выбирать правильный падеж в зависимости от числа
>>> pytils.numeral.choose_plural(15, (u"гвоздь", u"гвоздя", u"гвоздей"))
u'гвоздей'
В качестве второго параметра передается кортеж с вариантами. Чтобы легко запомнить, в каком порядке указывать варианты, пользуйтесь мнемоническим правилом: один-два-пять - один гвоздь, два гвоздя, пять гвоздей.
Также pytils реализует числа прописью
>>> pytils.numeral.in_words(254)
u'двести пятьдесят четыре'
>>> pytils.numeral.in_words(2.01)
u'две целых одна сотая'
>>> pytils.numeral.rubles(2.01)
u'два рубля одна копейка'
>>> pytils.numeral.sum_string(5, 1, (u"гвоздь", u"гвоздя", u"гвоздей"))
u'пять гвоздей'
>>> pytils.numeral.sum_string(3, 1, (u"белка", u"белки", u"белок"))
u'три белки'
В pytils можно получить русские даты без использования локалей.
>>> pytils.dt.ru_strftime(u"сегодня - %d %B %Y, %A", inflected=True)
u'сегодня - 02 сентября 2006, суббота'
и получить величину периода:
>>> pytils.dt.distance_of_time_in_words(time.time()-10000)
u'2 часа назад'
>>> pytils.dt.distance_of_time_in_words(time.time()+10000, accuracy=2)
u'через 2 часа 46 минут'
При помощи pytils можно сделать транслитерацию:
>>> print pytils.translit.translify(u"Проверка связи")
'Proverka svyazi'
>>> pytils.translit.detranslify("Proverka svyazi")
u'Проверка связи'
В translify вывод - str, а не unicode. В detranslify вход может быть как unicode, так и str.
И сделать строку для URL (удаляются лишние символы, пробелы заменяются на дефисы):
>>> pytils.translit.slugify(u"тест и еще раз тест")
'test-i-esche-raz-test'