{-# LANGUAGE OverloadedStrings #-} module Gargantext.Ngrams.Count where import Gargantext.Prelude import Data.Foldable as F import Data.Map.Strict (insertWith) import Data.Map (Map) import qualified Data.Map as M --import qualified Data.Text.Lazy.IO as DTLIO import qualified Data.Text.Lazy as DTL -- | /O(n)/ Breaks a 'Text' up into each Text list of chars. -- from slower to faster: letters :: DTL.Text -> [DTL.Text] letters text = DTL.chunksOf 1 text letters' :: DTL.Text -> [DTL.Text] letters' text = DTL.splitOn "#" $ DTL.intersperse '#' text letters'' :: DTL.Text -> [DTL.Text] letters'' = DTL.foldr (\ch xs -> DTL.singleton ch : xs) [] -- words -- lines -- words between punctuation -- number of punctuation occurrences :: Ord a => [a] -> Map a Int occurrences xs = foldl' (\x y -> insertWith (+) y 1 x) M.empty xs -- for optimization : --occurrences' :: Ord a => [a] -> Map a Integer --occurrences' xs = DTL.foldl (\x y -> M.insertWith' (+) y 1 x) M.empty xs --countMain :: IO () --countMain = do -- (fichier:_) <- getArgs -- c <- DTLIO.readFile fichier -- --print $ occurrences $ DTL.chunksOf 1 c -- pure $ occurrences $ letters'' c -- --print $ occurrences $ DTL.words $ DTL.toLower c --