В конечном счёте я отказался от второго питона совсем, и решил написать модуль на ctypes под третьим во избежание проблем с преобразованием юникода. Получившийся модуль можно скачать здесь, а искать им леммы можно следущим образом:
>>> from hunspell import Hunspell >>> h = Hunspell("ru_RU.aff", "ru_RU.dic") >>> h.stem("ищет") ['искать'] >>> h.stem("суши") ['сушить', 'суша', 'сушь']
Словарь я скопировал из пакета myspell-ru, но следует иметь в виду, что при всей своей полноте и выверенности он не лишён недостатков:
>>> h.stem("лжёт") ['лжёт']
Тем не менее, стеммер Hunspell показал куда лучшие результаты, чем, например, алгоритм Портера (Snowball). Он очень быстрый и вполне пригоден для индексирования незамороченных документов, логов и тому подобных задач, но его возможности, понятное дело, ограничиваются объёмом и структурой словаря.
А поэтому, для более продвинутого анализа лучше использовать комбинированный (словарно-алгоритмический) метод, который реализован, например, в библиотеке pymorphy, плюсом которой также является отсутствие привязки к системным библиотекам.
Комментариев нет:
Отправить комментарий