Задать вопрос

Как решить проблему со склонением городов и pymorphy2?

Здравствуйте.

Есть проблема со склонением городов.
Вот тестовый код:

#coding=utf-8

import pymorphy2

morph = pymorphy2.MorphAnalyzer()

city_atoms = [u'Москва',u'Волгоград',u'Нижний Новгород',u'Домодедово',u'Люберцы',u'деревня Квакино']
for city_atom in city_atoms:
    print  morph.parse(city_atom)[0].inflect({'loct'}).word


Вот что на выходе:

москве
волгограде
нижний новгороде
домодедове
люберцах
деревня квакином


Москву и Волгоград - просклонял нормально. Нижний Новгород просклонялся только вторым словом. Домодедово - вообще не должно вроде как склоняться, Люберцы - точно не знаю, если честно, как правильно будет, а деревня Квакино вообще, кажется, просклонялась как фамилия.

Посему есть вопросы:
- Как сие безобразие побороть, может, какие словари по городам есть?
- Как (если это возможно) заставить систему не менять регистр? А то одно дело Нижний Новгород а другое дело Ростов-На-Дону или "поселок Запупеево".
  • Вопрос задан
  • 5032 просмотра
Подписаться 5 Оценить 3 комментария
Решения вопроса 3
Hateman31
@Hateman31
Делиться мыслями - это круто!
Первое что пришло на ум:
прописать правила склонения через regex и if-ветвление
Ответ написан
zxmd
@zxmd Автор вопроса
@kmike
Конкретно для примеров из вопроса все решается в рамках pymorphy2 как-то так:

from pymorphy2.shapes import restore_capitalization

def inflect_all(morph, text, required_grammemes):
    tokens = text.split()
    inflected = [
        restore_capitalization(
            morph.parse(tok)[0].inflect(required_grammemes).word,
            tok
        )
        for tok in tokens
    ]
    return " ".join(inflected)


Больше информации - см. в гуглогруппе: https://groups.google.com/forum/?fromgroups#!topic...

Подозреваю, что решение от Яндекса тоже будет ошибаться время от времени, и для него тоже хорошо бы прикрутить ручную исправлялку. Но работать должно все-таки получше, чем pymorphy2, т.к. библиотека pymorphy2 специально для склонения не затачивалась пока.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
31 янв. 2025, в 00:16
43000 руб./за проект
30 янв. 2025, в 21:33
5000 руб./за проект
30 янв. 2025, в 19:55
7000 руб./за проект