packages feed

cndict-0.7.0: src/Data/Chinese/Frequency.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE BangPatterns #-}
module Data.Chinese.Frequency
  ( FreqMap
  , freqMap
  ) where

import qualified Data.ByteString       as B
import qualified Data.ByteString.Char8 as B8
import           Data.Map              (Map)
import qualified Data.Map.Strict       as M
import           Data.Text             (Text)
import qualified Data.Text             as T
import qualified Data.Text.IO          as T
import qualified Data.Text.Read        as T
import           Data.Text.Encoding
import           Paths_cndict
import           System.IO.Unsafe      (unsafePerformIO)

type FreqMap = Map Text Int

freqMap :: FreqMap
freqMap = mkFreqMap rows
  where
    utfData = unsafePerformIO $ do
      path  <- getDataFileName "data/dict.txt.big"
      T.readFile path
    rows = T.lines utfData

mkFreqMap :: [Text] -> FreqMap
mkFreqMap rows = M.fromListWith max
      [ (word, count)
      | (n,row) <- zip [0..] rows
      , let [word,countStr,_type] = T.words row
            Right (count,_) = T.decimal countStr
      ]