Привет.
воскресенье, 24 февраля 2013 г., 22:12:47 UTC+6 пользователь Yuri Baburov написал:
Привет, в голову приходят два решения, немного отличающихся от того, что ты описал.
Подскажи, насколько сложно так сделать:
1) можно выбирать форму с помощью нормализации+склонения: нормализация выдала для причастия глагол, но мы знаем, что текущая форма -- причастие, и выдаём в ответ причастие.
Т.о, нужно только знать, как выглядит "нормальная форма" для каждой части речи: для существительного это им. падеж, ед. число, для прилагательного -- ещё и мужской род, итд.
Что имеется в виду под "реализовать"? Сейчас можно написать (хоть в коде пользователя, хоть в коде библиотеки)
m.parse('думающему')[0].inflect({'PRTF', 'sing', 'nomn'})
и как-то аналогично для остальных частей речи, это оно? Возможно, если в 0-м разборе нет всех нужных граммем (и inflect ничего не вернул), использовать 1й и т.д.
Еще вариант - выбирать первую форму в лексеме, у которой та же часть речи. Но тогда, например, "красивее" не перейдет в "красивый".
Мне кажется (на данный момент), что способ нормализации может зависеть от задачи. Когда-то лучше компаратив нормализовывать в прилагательное, когда-то нет. Нормализация - это предварительный этап для каких-то дальшейших алгоритмов, и оценивать то, какой способ нормализации лучше, хорошо бы по тому, насколько он полезен для последующих действий (по сравнению с другими способами нормализации). У меня никаких количественных данных об этом нет.
Зашить какое-то определенное правило нормализации в библиотеку можно. Но ведь сейчас как раз одно из возможных правил и зашито. У зашитого в настоящий момент правила плюс в том, что оно работает быстро и как-бы само получилось; через inflect, думаю, это будут тысячи слов в секунду, а не десятки тысяч.
Чтоб правила работали быстро, нужна поддержка от словаря или какая-то другая сильная переделка; "наивная" поддержка склонения причастие -> причастие ухудшает возможности pymorphy2 по склонению слов; для "ненаивной" нужно закопаться в формат словарей и понять, как ее делать.
2) можно сделать "частичную нормализацию": первая нормализация даёт нормальную форму текущей часть речи, а нормализация нормальной формы текущей части речи даёт ещё более нормальную форму :) И так далее.
Скажем, причастие -> глагол сов. вида -> глагол несов. вида:
цепочка для причастия "сделанный": сделанный -> сделать -> делать
подобным образом можно было бы приводить к глаголу и отглагольные прилагательные, а к существительному, прилагательные, произошедшие от существительного, итп.
Такие цепочки, по сути, и есть в словарях OpenCorpora (не все, но многие). Их поддержки в pymorphy2 сейчас нет; то, что видите - это результат разворачивания всех цепочек. Сделать как-то поддержку этих цепочек - хорошая фича.
Прилагательное к существительному не выйдет - в словарях этой связи нет. Совершенный-несовершенный вид - тоже. Можно предложить ребятам из OpenCorpora связь добавить и, чтоб помочь, как-то автоматизированно списки слов для вычитки составить, но это в любом случае очень много работы: для связи NOUN-ADJF - это несколько десятков или даже сотен тысяч слов проверить вручную (причем, видимо, не нами, что дело усложняет), + потом словарь как-то обновить.