Commit ae0d8122 authored by Alexandre Delanoë's avatar Alexandre Delanoë

[FEAT] SocialLists add option to keep parents (useful for Sources/Institutes ngrams for instance)

parent a6485d49
Pipeline #1196 canceled with stage
...@@ -83,11 +83,11 @@ flowSocialListByMode' :: ( RepoCmdM env err m ...@@ -83,11 +83,11 @@ flowSocialListByMode' :: ( RepoCmdM env err m
, HasNodeError err , HasNodeError err
, HasTreeError err , HasTreeError err
) )
=> [NodeId]-> NgramsType -> Set Text => KeepAllParents -> [NodeId]-> NgramsType -> Set Text
-> m (Map Text FlowListScores) -> m (Map Text FlowListScores)
flowSocialListByMode' ns nt st = do flowSocialListByMode' k ns nt st = do
ngramsRepos <- mapM (\l -> getListNgrams [l] nt) ns ngramsRepos <- mapM (\l -> getListNgrams [l] nt) ns
pure $ toFlowListScores st Map.empty ngramsRepos pure $ toFlowListScores k st Map.empty ngramsRepos
------------------------------------------------------------------------ ------------------------------------------------------------------------
-- TODO: maybe use social groups too -- TODO: maybe use social groups too
......
...@@ -81,28 +81,31 @@ instance Semigroup FlowListScores where ...@@ -81,28 +81,31 @@ instance Semigroup FlowListScores where
-- | toFlowListScores which generate Score from list of Map Text -- | toFlowListScores which generate Score from list of Map Text
-- NgramsRepoElement -- NgramsRepoElement
toFlowListScores :: Set Text toFlowListScores :: KeepAllParents
-> Set Text
-> Map Text FlowListScores -> Map Text FlowListScores
-> [Map Text NgramsRepoElement] -> [Map Text NgramsRepoElement]
-> Map Text FlowListScores -> Map Text FlowListScores
toFlowListScores ts = foldl' (toFlowListScores' ts) toFlowListScores k ts = foldl' (toFlowListScores' k ts)
where where
toFlowListScores' :: Set Text toFlowListScores' :: KeepAllParents
-> Set Text
-> Map Text FlowListScores -> Map Text FlowListScores
-> Map Text NgramsRepoElement -> Map Text NgramsRepoElement
-> Map Text FlowListScores -> Map Text FlowListScores
toFlowListScores' ts' to' ngramsRepo = toFlowListScores' k ts' to' ngramsRepo =
Set.foldl' (toFlowListScores'' ts' ngramsRepo) to' ts' Set.foldl' (toFlowListScores'' k ts' ngramsRepo) to' ts'
toFlowListScores'' :: Set Text toFlowListScores'' :: KeepAllParents
-> Map Text NgramsRepoElement -> Set Text
-> Map Text FlowListScores -> Map Text NgramsRepoElement
-> Text -> Map Text FlowListScores
-> Map Text FlowListScores -> Text
toFlowListScores'' ss ngramsRepo to'' t = -> Map Text FlowListScores
toFlowListScores'' k ss ngramsRepo to'' t =
case Map.lookup t ngramsRepo of case Map.lookup t ngramsRepo of
Nothing -> to'' Nothing -> to''
Just nre -> Map.alter (addParent nre ss) t Just nre -> Map.alter (addParent k nre ss) t
$ Map.alter (addList $ _nre_list nre) t to'' $ Map.alter (addList $ _nre_list nre) t to''
------------------------------------------------------------------------ ------------------------------------------------------------------------
...@@ -146,31 +149,36 @@ addList' l m = Map.alter (plus l) l m ...@@ -146,31 +149,36 @@ addList' l m = Map.alter (plus l) l m
------------------------------------------------------------------------ ------------------------------------------------------------------------
------------------------------------------------------------------------ ------------------------------------------------------------------------
addParent :: NgramsRepoElement -> Set Text data KeepAllParents = KeepAllParents Bool
addParent :: KeepAllParents -> NgramsRepoElement -> Set Text
-> Maybe FlowListScores -> Maybe FlowListScores
-> Maybe FlowListScores -> Maybe FlowListScores
addParent nre ss Nothing = addParent k nre ss Nothing =
Just $ FlowListScores mapParent Map.empty Just $ FlowListScores mapParent Map.empty
where where
mapParent = addParent' (_nre_parent nre) ss Map.empty mapParent = addParent' k (_nre_parent nre) ss Map.empty
addParent nre ss (Just (FlowListScores mapParent mapList)) = addParent k nre ss (Just (FlowListScores mapParent mapList)) =
Just $ FlowListScores mapParent' mapList Just $ FlowListScores mapParent' mapList
where where
mapParent' = addParent' (_nre_parent nre) ss mapParent mapParent' = addParent' k (_nre_parent nre) ss mapParent
addParent' :: Num a addParent' :: Num a
=> Maybe NgramsTerm => KeepAllParents
-> Maybe NgramsTerm
-> Set Text -> Set Text
-> Map Text a -> Map Text a
-> Map Text a -> Map Text a
addParent' Nothing _ss mapParent = mapParent addParent' _ Nothing _ss mapParent = mapParent
addParent' (Just (NgramsTerm p')) ss mapParent = addParent' (KeepAllParents k) (Just (NgramsTerm p')) ss mapParent =
if not (Set.member p' ss) case k of
then mapParent True -> Map.alter addCount p' mapParent
else Map.alter addCount p' mapParent False -> if not (Set.member p' ss)
where then mapParent
else Map.alter addCount p' mapParent
where
addCount Nothing = Just 1 addCount Nothing = Just 1
addCount (Just n) = Just $ n + 1 addCount (Just n) = Just $ n + 1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment