Как решить проблему со склонением городов и 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


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

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


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

Посему есть вопросы:
- Как сие безобразие побороть, может, какие словари по городам есть?
- Как (если это возможно) заставить систему не менять регистр? А то одно дело Нижний Новгород а другое дело Ростов-На-Дону или "поселок Запупеево".
  • Вопрос задан
  • 4999 просмотров
Решения вопроса 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 специально для склонения не затачивалась пока.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы