wapmorgan / Morphos

A morphological solution for Russian and English language written completely in PHP. Provides classes to inflect personal names, geographical names, decline and pluralize nouns, generate cardinal and ordinal numerals, spell out money amounts and time intervals. / Морфологическая библиотека для английского и русского языков. Склоняет имена собственные, названия географических объектов, склонение и плюрализация имен собственных и другое.
http://wapmorgan.github.io/Morphos/
MIT License
788 stars 105 forks source link

Неправильно склоняется Торжок, Вышний Волочек #34

Closed apoldev closed 5 years ago

apoldev commented 6 years ago

Добрый День. Нашел проблему. Неверно склоняет некоторые города Торжок и Вышний Волочек

http://morphos.io/try/geography?input=%D0%A2%D0%BE%D1%80%D0%B6%D0%BE%D0%BA

В предложном: Торжоке и Вышнем Волочеке, а надо Торжке, Вышнем Волочке

apoldev commented 6 years ago

Также Камень-на-Оби неверно склоняется http://morphos.io/try/geography?input=%D0%9A%D0%B0%D0%BC%D0%B5%D0%BD%D1%8C-%D0%BD%D0%B0-%D0%9E%D0%B1%D0%B8

wapmorgan commented 6 years ago

Спасибо за фидбек. У меня нет сейчас столько свободного времени и желания, чтобы это поправить. Если вы обладаете достаточными знаниями, можете сделать pull request. Если нет, то я как-нибудь в будущем займусь этой проблемой.

Nappsel commented 6 years ago

@wapmorgan, на самом деле список городов, которые неправильно склоняются достаточно большой. Если у вас появится время, обратите, пожалуйста, на них внимание.

Предложный падеж, фраза «Мы открываемся в ...» Бор: -Боре > +Бору Иваново/Одинцово: -Иванове > +Иваново Орёл: -Ореле > +Орле Россошь: -Россошь > +Россоши Чебоксары/Шахты: -Чебоксары > +Чебоксарах Элекстросталь: -Элекстростале > +Элекстростали

wapmorgan commented 6 years ago

Спасибо, возьму это на заметку. Только проблема с Одинцово/Иваново - это не проблема, а сложившаяся ситуация (большинство склоняется).

wapmorgan commented 6 years ago

@apoldev проверьте в dev-master.

Nappsel commented 6 years ago

@wapmorgan спасибо за оперативное обновление. Вы отклонили правку по Одинцово/Иваново, возможно вариант с явным исключением в $suffixes будет лучше?

if ($name === 'иваново' || 'одинцово')
                    return [
                        self::IMENIT => $prefix.'о',
                        self::RODIT => $prefix.'о',
                        self::DAT => $prefix.'о',
                        self::VINIT => $prefix.'о',
                        self::TVORIT => $prefix.'о',
                        self::PREDLOJ => $prefix.'о',
                    ];

Или оставить только строку с предложным падежом.

wapmorgan commented 6 years ago

Пока что не решил что делать с названиями на "ово/ево". В википедии утверждается, что такие топонимы изначально склонялись, только в последнее время стало популярно (вопреки правилам) оставлять первоначальную форму.