Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
195
Issues
195
List
Board
Labels
Milestones
Merge Requests
12
Merge Requests
12
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
haskell-gargantext
Commits
7643b2ea
Commit
7643b2ea
authored
May 10, 2019
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ngrams-order' into dev
parents
6c513821
7c0d1825
Pipeline
#377
failed with stage
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
22 deletions
+66
-22
Ngrams.hs
src/Gargantext/API/Ngrams.hs
+66
-22
No files found.
src/Gargantext/API/Ngrams.hs
View file @
7643b2ea
...
@@ -43,11 +43,12 @@ import Data.Patch.Class (Replace, replace, Action(act), Applicable(..),
...
@@ -43,11 +43,12 @@ import Data.Patch.Class (Replace, replace, Action(act), Applicable(..),
ConflictResolutionReplace
,
ours
)
ConflictResolutionReplace
,
ours
)
import
qualified
Data.Map.Strict.Patch
as
PM
import
qualified
Data.Map.Strict.Patch
as
PM
import
Data.Monoid
import
Data.Monoid
import
Data.Ord
(
Down
(
..
))
import
Data.Foldable
import
Data.Foldable
--import Data.Semigroup
--import Data.Semigroup
import
Data.Set
(
Set
)
import
Data.Set
(
Set
)
import
qualified
Data.Set
as
S
import
qualified
Data.Set
as
S
--
import qualified Data.List as List
import
qualified
Data.List
as
List
import
Data.Maybe
(
fromMaybe
)
import
Data.Maybe
(
fromMaybe
)
-- import Data.Tuple.Extra (first)
-- import Data.Tuple.Extra (first)
import
qualified
Data.Map.Strict
as
Map
import
qualified
Data.Map.Strict
as
Map
...
@@ -55,7 +56,7 @@ import Data.Map.Strict (Map)
...
@@ -55,7 +56,7 @@ import Data.Map.Strict (Map)
import
qualified
Data.Set
as
Set
import
qualified
Data.Set
as
Set
import
Control.Category
((
>>>
))
import
Control.Category
((
>>>
))
import
Control.Concurrent
import
Control.Concurrent
import
Control.Lens
(
makeLenses
,
makePrisms
,
Getter
,
Iso
'
,
iso
,
from
,
(
.~
),
(
?=
),
(
#
),
to
,
folded
,
{-withIndex, ifolded,-}
view
,
use
,
(
^.
),
(
^..
),
(
^?
),
(
+~
),
(
%~
),
(
%=
),
sumOf
,
at
,
_Just
,
Each
(
..
),
itraverse_
,
both
,
mapped
,
forOf_
)
import
Control.Lens
(
makeLenses
,
makePrisms
,
Getter
,
Iso
'
,
iso
,
from
,
(
.~
),
(
?=
),
(
#
),
to
,
folded
,
{-withIndex, ifolded,-}
view
,
use
,
(
^.
),
(
^..
),
(
^?
),
(
+~
),
(
%~
),
(
%=
),
sumOf
,
at
,
_Just
,
Each
(
..
),
itraverse_
,
both
,
forOf_
)
import
Control.Monad.Error.Class
(
MonadError
)
import
Control.Monad.Error.Class
(
MonadError
)
import
Control.Monad.Reader
import
Control.Monad.Reader
import
Control.Monad.State
import
Control.Monad.State
...
@@ -878,18 +879,20 @@ getTableNgrams :: (RepoCmdM env err m, HasNodeError err, HasConnection env)
...
@@ -878,18 +879,20 @@ getTableNgrams :: (RepoCmdM env err m, HasNodeError err, HasConnection env)
->
ListId
->
Limit
->
Maybe
Offset
->
ListId
->
Limit
->
Maybe
Offset
->
Maybe
ListType
->
Maybe
ListType
->
Maybe
MinSize
->
Maybe
MaxSize
->
Maybe
MinSize
->
Maybe
MaxSize
->
Maybe
OrderBy
->
(
NgramsTerm
->
Bool
)
->
(
NgramsTerm
->
Bool
)
->
m
(
Versioned
NgramsTable
)
->
m
(
Versioned
NgramsTable
)
getTableNgrams
nId
tabType
listId
limit_
offset
getTableNgrams
nId
tabType
listId
limit_
offset
listType
minSize
maxSize
searchQuery
=
do
listType
minSize
maxSize
orderBy
searchQuery
=
do
lIds
<-
selectNodesWithUsername
NodeList
userMaster
let
let
ngramsType
=
ngramsTypeFromTabType
tabType
ngramsType
=
ngramsTypeFromTabType
tabType
offset'
=
maybe
0
identity
offset
offset'
=
maybe
0
identity
offset
listType'
=
maybe
(
const
True
)
(
==
)
listType
listType'
=
maybe
(
const
True
)
(
==
)
listType
minSize'
=
maybe
(
const
True
)
(
<=
)
minSize
minSize'
=
maybe
(
const
True
)
(
<=
)
minSize
maxSize'
=
maybe
(
const
True
)
(
>=
)
maxSize
maxSize'
=
maybe
(
const
True
)
(
>=
)
maxSize
selected_node
n
=
minSize'
s
selected_node
n
=
minSize'
s
&&
maxSize'
s
&&
maxSize'
s
&&
searchQuery
(
n
^.
ne_ngrams
)
&&
searchQuery
(
n
^.
ne_ngrams
)
...
@@ -899,29 +902,42 @@ getTableNgrams nId tabType listId limit_ offset
...
@@ -899,29 +902,42 @@ getTableNgrams nId tabType listId limit_ offset
selected_inner
roots
n
=
maybe
False
(`
Set
.
member
`
roots
)
(
n
^.
ne_root
)
selected_inner
roots
n
=
maybe
False
(`
Set
.
member
`
roots
)
(
n
^.
ne_root
)
finalize
tableMap
=
NgramsTable
$
roots
<>
inners
sortOnOrder
Nothing
=
identity
sortOnOrder
(
Just
TermAsc
)
=
List
.
sortOn
$
view
ne_ngrams
sortOnOrder
(
Just
TermDesc
)
=
List
.
sortOn
$
Down
.
view
ne_ngrams
sortOnOrder
(
Just
ScoreAsc
)
=
List
.
sortOn
$
view
ne_occurrences
sortOnOrder
(
Just
ScoreDesc
)
=
List
.
sortOn
$
Down
.
view
ne_occurrences
selectAndPaginate
tableMap
(
NgramsTable
list
)
=
NgramsTable
$
roots
<>
inners
where
where
rootOf
ne
=
maybe
ne
(
\
r
->
ngramsElementFromRepo
(
r
,
fromMaybe
(
panic
"getTableNgrams: invalid root"
)
(
tableMap
^.
at
r
)))
rootOf
ne
=
maybe
ne
(
\
r
->
ngramsElementFromRepo
(
r
,
fromMaybe
(
panic
"getTableNgrams: invalid root"
)
(
tableMap
^.
v_data
.
at
r
)))
(
ne
^.
ne_root
)
(
ne
^.
ne_root
)
list
=
ngramsElementFromRepo
<$>
Map
.
toList
tableMap
selected_nodes
=
list
&
take
limit_
selected_nodes
=
list
&
take
limit_
.
drop
offset'
.
filter
selected_node
.
drop
offset'
.
filter
selected_node
.
sortOnOrder
orderBy
roots
=
rootOf
<$>
selected_nodes
roots
=
rootOf
<$>
selected_nodes
rootsSet
=
Set
.
fromList
(
_ne_ngrams
<$>
roots
)
rootsSet
=
Set
.
fromList
(
_ne_ngrams
<$>
roots
)
inners
=
list
&
filter
(
selected_inner
rootsSet
)
inners
=
list
&
filter
(
selected_inner
rootsSet
)
setScores
False
table
=
pure
table
setScores
True
table
=
do
occurrences
<-
getOccByNgramsOnlySafe
nId
(
lIds
<>
[
listId
])
ngramsType
(
table
^..
v_data
.
_NgramsTable
.
each
.
ne_ngrams
)
let
setOcc
ne
=
ne
&
ne_occurrences
.~
sumOf
(
at
(
ne
^.
ne_ngrams
)
.
_Just
)
occurrences
pure
$
table
&
v_data
.
_NgramsTable
.
each
%~
setOcc
-- lists <- catMaybes <$> listsWith userMaster
-- lists <- catMaybes <$> listsWith userMaster
-- trace (show lists) $
-- trace (show lists) $
-- getNgramsTableMap ({-lists <>-} listIds) ngramsType
-- getNgramsTableMap ({-lists <>-} listIds) ngramsType
table
<-
getNgramsTableMap
listId
ngramsType
&
mapped
.
v_data
%~
finalize
tableMap
<-
getNgramsTableMap
listId
ngramsType
let
nSco
=
needsScores
orderBy
lIds
<-
selectNodesWithUsername
NodeList
userMaster
table
<-
tableMap
&
v_data
%~
(
NgramsTable
.
fmap
ngramsElementFromRepo
.
Map
.
toList
)
occurrences
<-
getOccByNgramsOnlySafe
nId
(
lIds
<>
[
listId
])
ngramsType
(
table
^..
v_data
.
_NgramsTable
.
each
.
ne_ngrams
)
&
setScores
nSco
setScores
(
not
nSco
)
$
table
&
v_data
%~
selectAndPaginate
tableMap
let
setOcc
ne
=
ne
&
ne_occurrences
.~
sumOf
(
at
(
ne
^.
ne_ngrams
)
.
_Just
)
occurrences
pure
$
table
&
v_data
.
_NgramsTable
.
each
%~
setOcc
-- APIs
-- APIs
...
@@ -929,6 +945,31 @@ getTableNgrams nId tabType listId limit_ offset
...
@@ -929,6 +945,31 @@ getTableNgrams nId tabType listId limit_ offset
-- TODO: find a better place for the code above, All APIs stay here
-- TODO: find a better place for the code above, All APIs stay here
type
QueryParamR
=
QueryParam'
'[
R
equired
,
Strict
]
type
QueryParamR
=
QueryParam'
'[
R
equired
,
Strict
]
data
OrderBy
=
TermAsc
|
TermDesc
|
ScoreAsc
|
ScoreDesc
deriving
(
Generic
,
Enum
,
Bounded
,
Read
,
Show
)
instance
FromHttpApiData
OrderBy
where
parseUrlPiece
"TermAsc"
=
pure
TermAsc
parseUrlPiece
"TermDesc"
=
pure
TermDesc
parseUrlPiece
"ScoreAsc"
=
pure
ScoreAsc
parseUrlPiece
"ScoreDesc"
=
pure
ScoreDesc
parseUrlPiece
_
=
Left
"Unexpected value of OrderBy"
instance
ToParamSchema
OrderBy
instance
FromJSON
OrderBy
instance
ToJSON
OrderBy
instance
ToSchema
OrderBy
instance
Arbitrary
OrderBy
where
arbitrary
=
elements
[
minBound
..
maxBound
]
needsScores
::
Maybe
OrderBy
->
Bool
needsScores
(
Just
ScoreAsc
)
=
True
needsScores
(
Just
ScoreDesc
)
=
True
needsScores
_
=
False
type
TableNgramsApiGet
=
Summary
" Table Ngrams API Get"
type
TableNgramsApiGet
=
Summary
" Table Ngrams API Get"
:>
QueryParamR
"ngramsType"
TabType
:>
QueryParamR
"ngramsType"
TabType
:>
QueryParamR
"list"
ListId
:>
QueryParamR
"list"
ListId
...
@@ -937,6 +978,7 @@ type TableNgramsApiGet = Summary " Table Ngrams API Get"
...
@@ -937,6 +978,7 @@ type TableNgramsApiGet = Summary " Table Ngrams API Get"
:>
QueryParam
"listType"
ListType
:>
QueryParam
"listType"
ListType
:>
QueryParam
"minTermSize"
MinSize
:>
QueryParam
"minTermSize"
MinSize
:>
QueryParam
"maxTermSize"
MaxSize
:>
QueryParam
"maxTermSize"
MaxSize
:>
QueryParam
"orderBy"
OrderBy
:>
QueryParam
"search"
Text
:>
QueryParam
"search"
Text
:>
Get
'[
J
SON
]
(
Versioned
NgramsTable
)
:>
Get
'[
J
SON
]
(
Versioned
NgramsTable
)
...
@@ -957,10 +999,11 @@ getTableNgramsCorpus :: (RepoCmdM env err m, HasNodeError err, HasConnection env
...
@@ -957,10 +999,11 @@ getTableNgramsCorpus :: (RepoCmdM env err m, HasNodeError err, HasConnection env
->
ListId
->
Limit
->
Maybe
Offset
->
ListId
->
Limit
->
Maybe
Offset
->
Maybe
ListType
->
Maybe
ListType
->
Maybe
MinSize
->
Maybe
MaxSize
->
Maybe
MinSize
->
Maybe
MaxSize
->
Maybe
OrderBy
->
Maybe
Text
-- full text search
->
Maybe
Text
-- full text search
->
m
(
Versioned
NgramsTable
)
->
m
(
Versioned
NgramsTable
)
getTableNgramsCorpus
nId
tabType
listId
limit_
offset
listType
minSize
maxSize
mt
=
getTableNgramsCorpus
nId
tabType
listId
limit_
offset
listType
minSize
maxSize
orderBy
mt
=
getTableNgrams
nId
tabType
listId
limit_
offset
listType
minSize
maxSize
searchQuery
getTableNgrams
nId
tabType
listId
limit_
offset
listType
minSize
maxSize
orderBy
searchQuery
where
where
searchQuery
=
maybe
(
const
True
)
isInfixOf
mt
searchQuery
=
maybe
(
const
True
)
isInfixOf
mt
...
@@ -970,14 +1013,15 @@ getTableNgramsDoc :: (RepoCmdM env err m, HasNodeError err, HasConnection env)
...
@@ -970,14 +1013,15 @@ getTableNgramsDoc :: (RepoCmdM env err m, HasNodeError err, HasConnection env)
->
ListId
->
Limit
->
Maybe
Offset
->
ListId
->
Limit
->
Maybe
Offset
->
Maybe
ListType
->
Maybe
ListType
->
Maybe
MinSize
->
Maybe
MaxSize
->
Maybe
MinSize
->
Maybe
MaxSize
->
Maybe
OrderBy
->
Maybe
Text
-- full text search
->
Maybe
Text
-- full text search
->
m
(
Versioned
NgramsTable
)
->
m
(
Versioned
NgramsTable
)
getTableNgramsDoc
dId
tabType
listId
limit_
offset
listType
minSize
maxSize
_mt
=
do
getTableNgramsDoc
dId
tabType
listId
limit_
offset
listType
minSize
maxSize
orderBy
_mt
=
do
ns
<-
selectNodesWithUsername
NodeList
userMaster
ns
<-
selectNodesWithUsername
NodeList
userMaster
let
ngramsType
=
ngramsTypeFromTabType
tabType
let
ngramsType
=
ngramsTypeFromTabType
tabType
ngs
<-
selectNgramsByDoc
(
ns
<>
[
listId
])
dId
ngramsType
ngs
<-
selectNgramsByDoc
(
ns
<>
[
listId
])
dId
ngramsType
let
searchQuery
=
flip
S
.
member
(
S
.
fromList
ngs
)
let
searchQuery
=
flip
S
.
member
(
S
.
fromList
ngs
)
getTableNgrams
dId
tabType
listId
limit_
offset
listType
minSize
maxSize
searchQuery
getTableNgrams
dId
tabType
listId
limit_
offset
listType
minSize
maxSize
orderBy
searchQuery
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment