Chemist's Blog

Что то с чем то.

Морфология

| Comments

Предыстория

Год назад, для одного из проектов мне понадобилась морфология, google и yandex вариантов для haskell не нашли. Немного изучив предметную область, написал свой упрощенный вариант морфологии.

Описание

Словарь взял из pymorphy, из функционала присутствует только нормализация, все остальное мне было не нужно.

Пример использования:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module Main where

import Text.Morphology.Russian
import Data.Text (pack)

-- | import modules for show cyrillic in console
import Data.ByteString.Char8 (putStrLn)
import Data.Text.Encoding (encodeUtf8)
import Prelude hiding (putStrLn)

main::IO ()
main = do

-- | recreate binary file with morphology base, if you realy need this
-- |  makeMorph
-- | create morph.bin file in in data_dir 
-- | about data_dir see here  [about data_dir](http://neilmitchell.blogspot.ru/2008/02/adding-data-files-using-cabal.html)

-- | load binary file from data_dir, and return IO Morph
  normal <- normalForm

  let check = normal (pack "есть")
  mapM_ putStrLn $ map encodeUtf8 check
  let check = normal (pack "ржи")
  mapM_ putStrLn $ map encodeUtf8 check

В результате:

1
2
3
4
5
6
7
8
> :l Main
> main
быть
есть
есть
рожь
ржа
ржать

Если нормальной формы не найденно возвращается пустой список.

Результат по ссылке russian-morphology

Установка как для любого cabal пакета.

Мысли вслух:

По хорошему нужно переписать используя DAWG, в качестве хранилища для лемм и прочего + реализовать полный функционал.

Comments