Буква Ё

Если не ударяться в крайности, то можно считать, что в русском языке употребление буквы “ё” допустимо, но не обязательно. Это означает, что как в исходном тексте, так и в словарях она иногда может быть, а иногда ее может не быть.

В pymorphy2 считается, что:

  • в словарях употребление буквы “ё” обязательно; “е” вместо “ё” (как и “ё” вместо “е”) - это ошибка в словаре. Иными словами, “е” и “ё” в словарях - две совсем разные буквы.

  • В текстах/словах, которые подаются на вход морфологического анализатора, употребление буквы “ё” необязательно. Например, слово “озера” должно быть разобрано и как “(нет) озера”, и как “(глубокие) озёра”.

    Note

    При этом входное слово “озёра” будет однозначно разобрано как “(глубокие) озёра”.

Детали реализации

“Наивный” подход - это генерация все вариантов возможных замен “е” на “ё” во входном слове и проверка всех вариантов по словарю. В русском языке “е” - очень распространенная буква, и много слов, где “е” встречается несколько раз. Например, для слова с 3 буквами “е” нужно сгенерировать еще 7 вариантов слова - вместо 1 проверки по словарю нужно было бы выполнить 8 (+ время на генерацию вариантов слов).

При разборе pymorphy2 использует другой подход - все слова хранятся в графе, и при обходе графа кроме направлений “е” каждый раз еще пробуется направление “ё”. При этом в исходном коде pymorphy2 этого обхода графа в явном виде нет, т.к. библиотеки DAWG и DAWG-Python сами умеет производить “поиск с возможными заменами”.

“Наивный” подход в pymorphy2 используется только в скрипте генерации данных для автоматических тестов (чтобы обеспечить перекрестную проверку).

Note

По оценкам, полученным в начале разработки (которые, соответственно, могут быть неверными для текущей версии), поддержка буквы “ё” в pymorphy2 замедляла разбор на 10-40% (в зависимости от интерпретатора).