Не прошло и двух месяцев, как я закончил вторую версию Кириллера.
Кириллер - бесплатная c# программа для склонения существительных, прилагательных по падежам и написания чисел прописью
Когда я начинал работу над проектом, я надеялся загнать русский язык в рамки, то есть, выявить правила склонения в зависимости от окончания слова. Очень быстро обнаружив, что исключений из правил больше, чем самих правил, я решил сделать справочник, который будет давать хоть какое-то представление о слове. В справочнике содержалось существительное в именительном падеже, его род, одушевленность и тип слова (имя, фамилия, название города или подобное).
Таким образом мне удалось сделать склонение существительных имея слово в именительном падеже, его род и одушевленность. Но для реализации потребовалось очень много времени и кода. Кроме этого, еще предстояло делать множественное число и прилагательные.
Поэтому я решил пойти по пути автора вот этой библиотеки: LingvoNET - Библиотека для склонения и спряжения слов русского языка. В какой-то момент, я даже хотел забросить проект, поскольку LingvoNET делает, все что нужно. Но LingvoNET нельзя использовать в коммерческих целях, а исходный код скрыт.
Новая версия содержит не только справочник существительных, а еще справочник правил склонения. Значения в справочнике выглядят где-то так:
ра2,ру2,,ром2,ре2,ра2,ров2,рам2,ра2,рами2,рах2
са2,су2,са2,сом2,се2,сы2,сов2,сам2,сов2,сами2,сах2
ы1,е1,у1,ой1,е1,ёзы3,ёз3,м,ёзы3,ми,х
Не трудно догадаться, что это значит. Правила склонения по падежам разделены запятыми, каждое правило содержит окончание и число. Число обозначает, сколько символов с конца надо отрезать, перед добавлением окончания. Таким образом, в справочник слов еще добавился номер правила склонения.
Кроме этого, я так же сделал поиск похожего слова по окончанию, если слово не найдено в словаре. На данный момент поиск работает "просто и сердито", – для каждого слова из словаря высчитывается кол-во совпадающих букв с конца. Затем выбирается самое короткое слово из тех, у кого больше всего совпадений.
Данный подход позволил мне за короткое время добавить склонение существительных в множественном числе и склонение прилагательных. А также сделать написание чисел прописью вместе с единицей измерения.
Написание чисел прописью не требует каких-то словарей. Поэтому в ближайшее будущее планирую выпустить JavaScript версию.
Исходный код, dll, базу данных и примеры можно скачать с сайта: http://cyriller.2go.ws/Download.
Буду рад, любым замечаниям и предложениям.
Здравствуйте! Наткнулся на Ваш проект в поисках склонений должностей. Интересует именно склонение должностей, нашел класс CyrPhrase, но он с должностями себя плохо ведет. Вопросы. У Вас реализовано склонение должностей? Или надо склонять в этом случае по словам?
Dmitriy, добрый день!
Класс CyrPhrase имеет два режима склонения: "Строгое совпадение слов" и "Частичное совпадение". Режим склонения указывается вторым параметром. Пример можно посмотреть тут: Cyriller.Web/Controllers/DeclineController.cs#L117. Это же применимо и к классу CyrNounCollection, который можно использовать в данном случае.
В большинстве случаев у должности склоняются только те слова, которые представлены в именительном падеже. К примеру Генеральный директор управляющей палаты, тут будут склоняться только генеральный и директор.
Следовательно, вам нужно сделать функцию, которая будет разрезать должность на слова и склонять только те, что есть в словаре.
Пишите на почту, если возникнут трудности.
Если нужно, могу прислать свою версию кода "Число прописью". Понимает любое число. Вплоть до зиллиона. Также понимает десятичные дроби. Код короткий и понятный.
Александр, добрый день. Конечно интересно, выложите на GitHub и опубликуйте ссылку.