[Ngrams Table] Front and Back implemented (but need next step for optimization and...
[gargantext.git] / src / Gargantext / Text / Metrics / FrequentItemSet.hs
index 295b93578cbf9c040e4b36c8fba289b88c9836d4..1c2e969325661d7c49f02efa2df9ab81cbe5d50c 100644 (file)
@@ -16,11 +16,12 @@ Domain Specific Language to manage Frequent Item Set (FIS)
 module Gargantext.Text.Metrics.FrequentItemSet
   ( Fis, Size(..)
   , occ_hlcm, cooc_hlcm
-  , all, between
+  , allFis, between
   , fisWithSize
   , fisWith
   , fisWithSizePoly
   , fisWithSizePoly2
+  , fisWithSizePolyMap
   , module HLCM
   )
   where
@@ -31,9 +32,8 @@ import Data.Map.Strict (Map)
 import qualified Data.Set as Set
 import Data.Set (Set)
 import qualified Data.Vector as V
-import Data.Vector (Vector)
 
-import Data.List (filter, concat)
+import Data.List (filter, concat, null)
 import Data.Maybe (catMaybes)
 
 import HLCM
@@ -51,8 +51,8 @@ occ_hlcm = fisWithSize (Point 1)
 cooc_hlcm :: Frequency -> [[Item]] -> [Fis]
 cooc_hlcm = fisWithSize (Point 2)
 
-all :: Frequency -> [[Item]] -> [Fis]
-all = fisWith Nothing
+allFis :: Frequency -> [[Item]] -> [Fis]
+allFis = fisWith Nothing
 
 ------------------------------------------------------------------------
 between :: (Int, Int) -> Frequency -> [[Item]] -> [Fis]
@@ -91,8 +91,12 @@ fisWithSize n f is = case n of
                       cond a' x b' = a' <= x && x <= b'
 
 
+                      --- Filter on Fis and not on [Item]
 fisWith :: Maybe ([Item] -> Bool) -> Frequency -> [[Item]] -> [Fis]
-fisWith s f is = catMaybes $ map items2fis $ filter' $ runLCMmatrix is f
+fisWith s f is = case filter (not . null) is of
+                   [] -> []
+                   js -> catMaybes $ map items2fis $ filter' $ runLCMmatrix js f
+-- drop unMaybe
   where
     filter' = case s of
                 Nothing  -> identity
@@ -113,6 +117,10 @@ fisWithSizePoly2 n f is = fisWithSizePoly n f ks is
   where
     ks = Set.fromList $ concat is
 
+fisWithSizePolyMap :: Ord a => Size -> Frequency -> [[a]] -> Map (Set a) Int
+fisWithSizePolyMap n f is =
+  Map.fromList $ (\i -> (Set.fromList (_fisItemSet i), _fisCount i)) <$> fisWithSizePoly2 n f is
+
 
 ------------------------------------------------------------------------
 ------------------------------------------------------------------------