Добрались руки и набросал новую версию морфологии.
Теперь в качестве структуры для хранения словаря используется направленный ациклический граф (DAWG). Исходные данные для словаря теперь берутся из opencorpora. Собственно от морфологии там только запакованный словарь, тривиальная вебморда для тестирования, парсер + код для упаковки в dawg ну и наверное все. Поиск по словарю с выводом форм слов работает нормально, но нужно добавить предсказатель для тех слов что отсутствуют в словаре. API пока отсутствует как класс, немного позже добавлю все эти штуки. Вдобавок есть мысль прикрутить прослойку в виде сетевого сервиса с протоколом по типу memcache.
Бинарь словаря пока не прилагаю, 15 мегабайт с репы дергать постоянно не камильфо. Если у кого есть желание поиграться отпишите в коментах, либо соберите сами
1 2 3 4 |
|
Минут за 15 - 20 и 2 гигабайта памяти с копейками, сие диво дивное родит несколько бинарных файлов, оставить dawg.dict, в нем словарь, остальное можно удалять. Далее скомпилировать Main.hs и запускать с той-же папки. Доступно на локалхосте по 8000 порту.
Как то так. И да если ктонить ткнет носом как оптимизировать Builder.hs чтоб он кушал меньше памяти буду сильно признателен. Хотя памяти у меня достаточно + есть еще толстая свободная подушка, но неприятно.
Когда в очередной раз мне надоест пилить радио streaming сервер, доделаю морфологию до нормального состояния.