Commit 04864e57 authored by Przemyslaw Kaminski's avatar Przemyslaw Kaminski

[ngrams] more refactoring, ordering by occurrences fixed

parent 800f255f
Pipeline #3371 passed with stage
in 92 minutes and 4 seconds
...@@ -557,57 +557,41 @@ getTableNgrams _nType nId tabType listId limit_ offset ...@@ -557,57 +557,41 @@ getTableNgrams _nType nId tabType listId limit_ offset
sortOnOrder (Just ScoreDesc) = List.sortOn $ Down . view ne_occurrences sortOnOrder (Just ScoreDesc) = List.sortOn $ Down . view ne_occurrences
--------------------------------------- ---------------------------------------
-- | Filter the given `tableMap` with the search criteria.
filteredNodes :: Map NgramsTerm NgramsElement -> [NgramsElement] filteredNodes :: Map NgramsTerm NgramsElement -> [NgramsElement]
filteredNodes tableMap = roots <> inners filteredNodes tableMap = roots
-- rootOf <$> list & filter selected_node
where where
list = tableMap ^.. each list = tableMap ^.. each
selected_nodes = list & filter selected_node selected_nodes = list & filter selected_node
roots = rootOf tableMap <$> selected_nodes roots = rootOf tableMap <$> selected_nodes
-- | Appends subitems (selected from `tableMap`) for given `roots`.
withInners :: Map NgramsTerm NgramsElement -> [NgramsElement] -> [NgramsElement]
withInners tableMap roots = roots <> inners
where
list = tableMap ^.. each
rootSet = Set.fromList (_ne_ngrams <$> roots) rootSet = Set.fromList (_ne_ngrams <$> roots)
inners = list & filter (selected_inner rootSet) inners = list & filter (selected_inner rootSet)
--------------------------------------- -- | Paginate the results
-- selectAndPaginate :: Map NgramsTerm NgramsElement -> [NgramsElement] sortAndPaginate :: [NgramsElement] -> [NgramsElement]
-- selectAndPaginate tableMap = roots <> inners sortAndPaginate = take limit_
-- where . drop offset'
-- list = tableMap ^.. each . sortOnOrder orderBy
-- selected_nodes = list & take limit_
-- . drop offset'
-- . filter selected_node
-- . sortOnOrder orderBy
-- roots = rootOf tableMap <$> selected_nodes
-- rootsSet = Set.fromList (_ne_ngrams <$> roots)
-- inners = list & filter (selected_inner rootsSet)
paginate :: [NgramsElement] -> [NgramsElement]
paginate = take limit_
. drop offset'
. sortOnOrder orderBy
--------------------------------------- ---------------------------------------
-- lists <- catMaybes <$> listsWith userMaster
-- trace (show lists) $
-- getNgramsTableMap ({-lists <>-} listIds) ngramsType
let scoresNeeded = needsScores orderBy let scoresNeeded = needsScores orderBy
t1 <- getTime t1 <- getTime
tableMap2 <- getNgramsTable' nId listId ngramsType orderBy tableMap2 <- getNgramsTable' nId listId ngramsType :: m (Versioned (Map NgramsTerm NgramsElement))
fltr <- tableMap2 & v_data %%~ fmap NgramsTable let fltr = tableMap2 & v_data %~ NgramsTable . filteredNodes :: Versioned NgramsTable
. (setNgramsTableScores nId listId ngramsType (not scoresNeeded))
. filteredNodes
printDebug "[getNgramsTable] fltr" fltr
let fltrCount = length $ fltr ^. v_data . _NgramsTable let fltrCount = length $ fltr ^. v_data . _NgramsTable
t2 <- getTime t2 <- getTime
--tableMap3 <- tableMap2 & v_data %%~ fmapScores . selectAndPaginate :: m (Versioned NgramsTable) let tableMap3 = over (v_data . _NgramsTable) ((withInners (tableMap2 ^. v_data)) . sortAndPaginate) fltr
--let tableMap3 = fltr & v_data . _NgramsTable . each %%~ selectAndPaginate' :: Versioned NgramsTable
let tableMap3 = over (v_data . _NgramsTable) paginate fltr
t3 <- getTime t3 <- getTime
liftBase $ do liftBase $ do
hprint stderr hprint stderr
...@@ -623,6 +607,7 @@ getTableNgrams _nType nId tabType listId limit_ offset ...@@ -623,6 +607,7 @@ getTableNgrams _nType nId tabType listId limit_ offset
pure $ toVersionedWithCount fltrCount tableMap3 pure $ toVersionedWithCount fltrCount tableMap3
-- | Helper function to get the ngrams table with scores.
getNgramsTable' :: forall env err m. getNgramsTable' :: forall env err m.
( HasNodeStory env err m ( HasNodeStory env err m
, HasNodeError err , HasNodeError err
...@@ -632,15 +617,13 @@ getNgramsTable' :: forall env err m. ...@@ -632,15 +617,13 @@ getNgramsTable' :: forall env err m.
=> NodeId => NodeId
-> ListId -> ListId
-> TableNgrams.NgramsType -> TableNgrams.NgramsType
-> Maybe OrderBy
-> m (Versioned (Map.Map NgramsTerm NgramsElement)) -> m (Versioned (Map.Map NgramsTerm NgramsElement))
getNgramsTable' nId listId ngramsType orderBy = do getNgramsTable' nId listId ngramsType = do
let scoresNeeded = needsScores orderBy
tableMap1 <- getNgramsTableMap listId ngramsType tableMap1 <- getNgramsTableMap listId ngramsType
tableMap1 & v_data %%~ (setNgramsTableScores nId listId ngramsType scoresNeeded) tableMap1 & v_data %%~ (setNgramsTableScores nId listId ngramsType)
. Map.mapWithKey ngramsElementFromRepo . Map.mapWithKey ngramsElementFromRepo
--------------------------------------- -- | Helper function to set scores on an `NgramsTable`.
setNgramsTableScores :: forall env err m t. setNgramsTableScores :: forall env err m t.
( Each t t NgramsElement NgramsElement ( Each t t NgramsElement NgramsElement
, HasNodeStory env err m , HasNodeStory env err m
...@@ -651,11 +634,9 @@ setNgramsTableScores :: forall env err m t. ...@@ -651,11 +634,9 @@ setNgramsTableScores :: forall env err m t.
=> NodeId => NodeId
-> ListId -> ListId
-> TableNgrams.NgramsType -> TableNgrams.NgramsType
-> Bool
-> t -> t
-> m t -> m t
setNgramsTableScores _ _ _ False table = pure table setNgramsTableScores nId listId ngramsType table = do
setNgramsTableScores nId listId ngramsType True table = do
let ngrams_terms = table ^.. each . ne_ngrams let ngrams_terms = table ^.. each . ne_ngrams
-- printDebug "ngrams_terms" ngrams_terms -- printDebug "ngrams_terms" ngrams_terms
t1 <- getTime t1 <- getTime
...@@ -678,7 +659,7 @@ scoresRecomputeTableNgrams :: forall env err m. ...@@ -678,7 +659,7 @@ scoresRecomputeTableNgrams :: forall env err m.
=> NodeId -> TabType -> ListId -> m Int => NodeId -> TabType -> ListId -> m Int
scoresRecomputeTableNgrams nId tabType listId = do scoresRecomputeTableNgrams nId tabType listId = do
tableMap <- getNgramsTableMap listId ngramsType tableMap <- getNgramsTableMap listId ngramsType
_ <- tableMap & v_data %%~ (setNgramsTableScores nId listId ngramsType True) _ <- tableMap & v_data %%~ (setNgramsTableScores nId listId ngramsType)
. Map.mapWithKey ngramsElementFromRepo . Map.mapWithKey ngramsElementFromRepo
pure $ 1 pure $ 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