kmike/pymorphy — comment on commit 9eb1a69e3a29fd28f3f4f431a9adee1088f70dc7
File:  line 0
By kmike:

У меня недоделанный еще один рефакторинг, сегодня допилю, наверное, чтоб убрать проверки if rule[0] == suffix, которые, как ты правильно заметил, основной тормоз. Для этого решил не отдельный доп. индекс строить, а структуры данных поменял (словари нужно будет переконвертировать, но их один фиг нужно будет переконвертировать, т.к. в них ошибку нашел): в rules массив tuple меняем на словарь:

{paradigm_id -> {suffix: [(ancode, prefix)]} }

В словаре теряем информацию о порядке; чтоб можно было первую форму получать, вводится normal_forms:

{paradigm_id -> (suffix, ancode, prefix)}

endings пришлось поменять, т.к. "индекс правила" смысл теряет, для парадигмы прямо правила записываются

{word_end->{paradigm_id->tuple(possible_rules)}}

Там почти все готово, ускорение в несколько раз, но некоторые тесты не проходят еще. Твой коммит с примером *очень* полезный был, чтоб понять, как лучше делать, так что это тебе спасибо огромное!

Возможно, еще какие-нибудь алгоритмы могу выиграть от быстрого получения списка слов, являющихся префиксом для данного - в этом случае нужно будет рефакторить дальше и утащить еще куски анализа к источнику данных.