Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
Przemyslaw Kaminski
haskell-gargantext
Commits
e728a20d
Commit
e728a20d
authored
Jan 09, 2020
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[DB] Master User Texts
parent
0e1ef893
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
132 additions
and
107 deletions
+132
-107
Main.hs
bin/gargantext-init/Main.hs
+2
-2
schema.sql
devops/postgres/schema.sql
+43
-37
Flow.hs
src/Gargantext/Database/Flow.hs
+55
-38
List.hs
src/Gargantext/Database/Flow/List.hs
+31
-25
NodeNodeNgrams.hs
src/Gargantext/Database/Schema/NodeNodeNgrams.hs
+0
-4
Node_NodeNgramsNodeNgrams.hs
src/Gargantext/Database/Schema/Node_NodeNgramsNodeNgrams.hs
+1
-1
No files found.
bin/gargantext-init/Main.hs
View file @
e728a20d
...
@@ -23,7 +23,7 @@ import Data.Either (Either(..))
...
@@ -23,7 +23,7 @@ import Data.Either (Either(..))
import
Data.Maybe
(
Maybe
(
..
))
import
Data.Maybe
(
Maybe
(
..
))
import
System.Environment
(
getArgs
)
import
System.Environment
(
getArgs
)
import
Gargantext.Prelude
import
Gargantext.Prelude
import
Gargantext.Database.Flow
(
getOrMkRoot
,
getOrMkRootWithCorpus
)
import
Gargantext.Database.Flow
(
getOrMkRoot
,
getOrMk
_
RootWithCorpus
)
import
Gargantext.Database.Schema.Node
(
getOrMkList
)
import
Gargantext.Database.Schema.Node
(
getOrMkList
)
import
Gargantext.Database.Utils
(
Cmd
,
)
import
Gargantext.Database.Utils
(
Cmd
,
)
import
Gargantext.Database.Types.Node
(
CorpusId
,
RootId
,
HyperdataCorpus
,
ListId
)
import
Gargantext.Database.Types.Node
(
CorpusId
,
RootId
,
HyperdataCorpus
,
ListId
)
...
@@ -48,7 +48,7 @@ main = do
...
@@ -48,7 +48,7 @@ main = do
let
let
initMaster
::
Cmd
GargError
(
UserId
,
RootId
,
CorpusId
,
ListId
)
initMaster
::
Cmd
GargError
(
UserId
,
RootId
,
CorpusId
,
ListId
)
initMaster
=
do
initMaster
=
do
(
masterUserId
,
masterRootId
,
masterCorpusId
)
<-
getOrMkRootWithCorpus
userMaster
(
Left
corpusMasterName
)
(
Nothing
::
Maybe
HyperdataCorpus
)
(
masterUserId
,
masterRootId
,
masterCorpusId
)
<-
getOrMk
_
RootWithCorpus
userMaster
(
Left
corpusMasterName
)
(
Nothing
::
Maybe
HyperdataCorpus
)
masterListId
<-
getOrMkList
masterCorpusId
masterUserId
masterListId
<-
getOrMkList
masterCorpusId
masterUserId
_
<-
initTriggers
masterListId
_
<-
initTriggers
masterListId
pure
(
masterUserId
,
masterRootId
,
masterCorpusId
,
masterListId
)
pure
(
masterUserId
,
masterRootId
,
masterCorpusId
,
masterListId
)
...
...
devops/postgres/schema.sql
View file @
e728a20d
...
@@ -4,16 +4,16 @@ COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
...
@@ -4,16 +4,16 @@ COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
CREATE
TABLE
public
.
auth_user
(
CREATE
TABLE
public
.
auth_user
(
id
SERIAL
,
id
SERIAL
,
password
character
varying
(
128
)
NOT
NULL
,
password
CHARACTER
varying
(
128
)
NOT
NULL
,
last_login
timestamp
with
time
zone
,
last_login
TIMESTAMP
with
time
zone
,
is_superuser
boolean
NOT
NULL
,
is_superuser
BOOLEAN
NOT
NULL
,
username
character
varying
(
150
)
NOT
NULL
,
username
CHARACTER
varying
(
150
)
NOT
NULL
,
first_name
character
varying
(
30
)
NOT
NULL
,
first_name
CHARACTER
varying
(
30
)
NOT
NULL
,
last_name
character
varying
(
30
)
NOT
NULL
,
last_name
CHARACTER
varying
(
30
)
NOT
NULL
,
email
character
varying
(
254
)
NOT
NULL
,
email
CHARACTER
varying
(
254
)
NOT
NULL
,
is_staff
boolean
NOT
NULL
,
is_staff
BOOLEAN
NOT
NULL
,
is_active
boolean
NOT
NULL
,
is_active
BOOLEAN
NOT
NULL
,
date_joined
timestamp
with
time
zone
DEFAULT
now
()
NOT
NULL
,
date_joined
TIMESTAMP
with
time
zone
DEFAULT
now
()
NOT
NULL
,
PRIMARY
KEY
(
id
)
PRIMARY
KEY
(
id
)
);
);
...
@@ -23,11 +23,11 @@ ALTER TABLE public.auth_user OWNER TO gargantua;
...
@@ -23,11 +23,11 @@ ALTER TABLE public.auth_user OWNER TO gargantua;
-- TODO typename -> type_id
-- TODO typename -> type_id
CREATE
TABLE
public
.
nodes
(
CREATE
TABLE
public
.
nodes
(
id
SERIAL
,
id
SERIAL
,
typename
integer
NOT
NULL
,
typename
INTEGER
NOT
NULL
,
user_id
integer
NOT
NULL
,
user_id
INTEGER
NOT
NULL
,
parent_id
integer
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
parent_id
INTEGER
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
name
character
varying
(
255
)
DEFAULT
''
::
character
varying
NOT
NULL
,
name
CHARACTER
varying
(
255
)
DEFAULT
''
::
character
varying
NOT
NULL
,
date
timestamp
with
time
zone
DEFAULT
now
()
NOT
NULL
,
date
TIMESTAMP
with
time
zone
DEFAULT
now
()
NOT
NULL
,
hyperdata
jsonb
DEFAULT
'{}'
::
jsonb
NOT
NULL
,
hyperdata
jsonb
DEFAULT
'{}'
::
jsonb
NOT
NULL
,
search
tsvector
,
search
tsvector
,
PRIMARY
KEY
(
id
),
PRIMARY
KEY
(
id
),
...
@@ -37,8 +37,8 @@ ALTER TABLE public.nodes OWNER TO gargantua;
...
@@ -37,8 +37,8 @@ ALTER TABLE public.nodes OWNER TO gargantua;
CREATE
TABLE
public
.
ngrams
(
CREATE
TABLE
public
.
ngrams
(
id
SERIAL
,
id
SERIAL
,
terms
character
varying
(
255
),
terms
CHARACTER
varying
(
255
),
n
integer
,
n
INTEGER
,
PRIMARY
KEY
(
id
)
PRIMARY
KEY
(
id
)
);
);
ALTER
TABLE
public
.
ngrams
OWNER
TO
gargantua
;
ALTER
TABLE
public
.
ngrams
OWNER
TO
gargantua
;
...
@@ -46,13 +46,13 @@ ALTER TABLE public.ngrams OWNER TO gargantua;
...
@@ -46,13 +46,13 @@ ALTER TABLE public.ngrams OWNER TO gargantua;
--------------------------------------------------------------
--------------------------------------------------------------
CREATE
TABLE
public
.
node_ngrams
(
CREATE
TABLE
public
.
node_ngrams
(
id
SERIAL
,
id
SERIAL
,
node_id
integer
NOT
NULL
,
node_id
INTEGER
NOT
NULL
,
node_subtype
integer
,
node_subtype
INTEGER
,
ngrams_id
integer
NOT
NULL
,
ngrams_id
INTEGER
NOT
NULL
,
ngrams_type
integer
,
-- change to ngrams_field? (no for pedagogic reason)
ngrams_type
INTEGER
,
-- change to ngrams_field? (no for pedagogic reason)
ngrams_field
integer
,
ngrams_field
INTEGER
,
ngrams_tag
integer
,
ngrams_tag
INTEGER
,
ngrams_class
integer
,
ngrams_class
INTEGER
,
weight
double
precision
,
weight
double
precision
,
PRIMARY
KEY
(
id
),
PRIMARY
KEY
(
id
),
FOREIGN
KEY
(
node_id
)
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
node_id
)
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
...
@@ -60,17 +60,17 @@ CREATE TABLE public.node_ngrams (
...
@@ -60,17 +60,17 @@ CREATE TABLE public.node_ngrams (
);
);
ALTER
TABLE
public
.
node_ngrams
OWNER
TO
gargantua
;
ALTER
TABLE
public
.
node_ngrams
OWNER
TO
gargantua
;
CREATE
TABLE
public
.
node_n
grams_
ngrams
(
CREATE
TABLE
public
.
node_n
odengrams_node
ngrams
(
node_id
integer
NOT
NULL
,
node_id
INTEGER
NOT
NULL
,
node_ngrams1_id
integer
NOT
NULL
,
node_ngrams1_id
INTEGER
NOT
NULL
,
node_ngrams2_id
integer
NOT
NULL
,
node_ngrams2_id
INTEGER
NOT
NULL
,
weight
double
precision
,
weight
double
precision
,
FOREIGN
KEY
(
node_id
)
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
node_id
)
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
node_ngrams1_id
)
REFERENCES
public
.
node_ngrams
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
node_ngrams1_id
)
REFERENCES
public
.
node_ngrams
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
node_ngrams2_id
)
REFERENCES
public
.
node_ngrams
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
node_ngrams2_id
)
REFERENCES
public
.
node_ngrams
(
id
)
ON
DELETE
CASCADE
,
PRIMARY
KEY
(
node_id
,
node_ngrams1_id
,
node_ngrams2_id
)
PRIMARY
KEY
(
node_id
,
node_ngrams1_id
,
node_ngrams2_id
)
);
);
ALTER
TABLE
public
.
node_n
grams_
ngrams
OWNER
TO
gargantua
;
ALTER
TABLE
public
.
node_n
odengrams_node
ngrams
OWNER
TO
gargantua
;
--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------
...
@@ -88,28 +88,34 @@ ALTER TABLE public.node_ngrams_ngrams OWNER TO gargantua;
...
@@ -88,28 +88,34 @@ ALTER TABLE public.node_ngrams_ngrams OWNER TO gargantua;
---------------------------------------------------------------
---------------------------------------------------------------
-- TODO nodes_nodes(node1_id int, node2_id int, edge_type int , weight real)
-- TODO nodes_nodes(node1_id int, node2_id int, edge_type int , weight real)
CREATE
TABLE
public
.
nodes_nodes
(
CREATE
TABLE
public
.
nodes_nodes
(
node1_id
integer
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
node1_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
node2_id
integer
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
node2_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
score
real
,
score
REAL
,
category
integer
,
category
INTEGER
,
PRIMARY
KEY
(
node1_id
,
node2_id
)
PRIMARY
KEY
(
node1_id
,
node2_id
)
);
);
ALTER
TABLE
public
.
nodes_nodes
OWNER
TO
gargantua
;
ALTER
TABLE
public
.
nodes_nodes
OWNER
TO
gargantua
;
---------------------------------------------------------------
---------------------------------------------------------------
-- TODO should reference "id" of nodes_nodes (instead of node1_id, node2_id)
CREATE
TABLE
public
.
node_node_ngrams
(
CREATE
TABLE
public
.
node_node_ngrams
(
node1_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
node1_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
-- here id to node_ngrams
node2_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
node2_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
ngrams_id
INTEGER
NOT
NULL
REFERENCES
public
.
ngrams
(
id
)
ON
DELETE
CASCADE
,
ngrams_id
INTEGER
NOT
NULL
REFERENCES
public
.
ngrams
(
id
)
ON
DELETE
CASCADE
,
ngrams_type
INTEGER
,
ngrams_type
INTEGER
,
--ngrams_tag INTEGER,
--ngrams_class INTEGER,
weight
double
precision
,
weight
double
precision
,
PRIMARY
KEY
(
node1_id
,
node2_id
,
ngrams_id
,
ngrams_type
)
PRIMARY
KEY
(
node1_id
,
node2_id
,
ngrams_id
,
ngrams_type
)
);
);
ALTER
TABLE
public
.
node_node_ngrams
OWNER
TO
gargantua
;
ALTER
TABLE
public
.
node_node_ngrams
OWNER
TO
gargantua
;
CREATE
TABLE
public
.
node_node_ngrams2
(
node_id
INTEGER
NOT
NULL
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
node_ngrams_id
INTEGER
NOT
NULL
REFERENCES
public
.
node_ngrams
(
id
)
ON
DELETE
CASCADE
,
weight
double
precision
,
PRIMARY
KEY
(
node_id
,
node_ngrams_id
,
ngrams_field
)
);
ALTER
TABLE
public
.
node_node_ngrams2
OWNER
TO
gargantua
;
--------------------------------------------------------------
--------------------------------------------------------------
--CREATE TABLE public.nodes_ngrams_repo (
--CREATE TABLE public.nodes_ngrams_repo (
...
...
src/Gargantext/Database/Flow.hs
View file @
e728a20d
...
@@ -33,12 +33,13 @@ module Gargantext.Database.Flow -- (flowDatabase, ngrams2list)
...
@@ -33,12 +33,13 @@ module Gargantext.Database.Flow -- (flowDatabase, ngrams2list)
,
flowCorpus
,
flowCorpus
,
flowCorpusSearchInDatabase
,
flowCorpusSearchInDatabase
,
getOrMkRoot
,
getOrMkRoot
,
getOrMkRootWithCorpus
,
getOrMk
_
RootWithCorpus
,
flowAnnuaire
,
flowAnnuaire
)
)
where
where
import
Prelude
(
String
)
import
Prelude
(
String
)
import
Data.Either
import
Data.Either
import
Data.Traversable
(
traverse
)
import
Debug.Trace
(
trace
)
import
Debug.Trace
(
trace
)
import
Control.Lens
((
^.
),
view
,
_Just
)
import
Control.Lens
((
^.
),
view
,
_Just
)
import
Control.Monad.IO.Class
(
liftIO
)
import
Control.Monad.IO.Class
(
liftIO
)
...
@@ -59,8 +60,10 @@ import Gargantext.Database.Flow.Types
...
@@ -59,8 +60,10 @@ import Gargantext.Database.Flow.Types
import
Gargantext.Database.Node.Contact
-- (HyperdataContact(..), ContactWho(..))
import
Gargantext.Database.Node.Contact
-- (HyperdataContact(..), ContactWho(..))
import
Gargantext.Database.Node.Document.Insert
-- (insertDocuments, ReturnId(..), addUniqIdsDoc, addUniqIdsContact, ToDbData(..))
import
Gargantext.Database.Node.Document.Insert
-- (insertDocuments, ReturnId(..), addUniqIdsDoc, addUniqIdsContact, ToDbData(..))
import
Gargantext.Database.Root
(
getRoot
)
import
Gargantext.Database.Root
(
getRoot
)
import
Gargantext.Database.Schema.Ngrams
-- (insertNgrams, Ngrams(..), NgramsIndexed(..), indexNgrams, NgramsType(..), text2ngrams, ngramsTypeId)
import
Gargantext.Database.Schema.Ngrams
-- (insertNgrams, Ngrams(..), NgramsIndexed(..), indexNgrams, NgramsType(..), text2ngrams, ngramsTypeId)
import
Gargantext.Database.Schema.Node
-- (mkRoot, mkCorpus, getOrMkList, mkGraph, {-mkPhylo,-} mkDashboard, mkAnnuaire, getCorporaWithParentId, HasNodeError, NodeError(..), nodeError)
import
Gargantext.Database.Schema.Node
-- (mkRoot, mkCorpus, getOrMkList, mkGraph, {-mkPhylo,-} mkDashboard, mkAnnuaire, getCorporaWithParentId, HasNodeError, NodeError(..), nodeError)
import
Gargantext.Database.Schema.User
(
getUser
,
UserLight
(
..
))
import
Gargantext.Database.Schema.User
(
getUser
,
UserLight
(
..
))
import
Gargantext.Database.TextSearch
(
searchInDatabase
)
import
Gargantext.Database.TextSearch
(
searchInDatabase
)
import
Gargantext.Database.Types.Node
-- (HyperdataDocument(..), NodeType(..), NodeId, UserId, ListId, CorpusId, RootId, MasterCorpusId, MasterUserId)
import
Gargantext.Database.Types.Node
-- (HyperdataDocument(..), NodeType(..), NodeId, UserId, ListId, CorpusId, RootId, MasterCorpusId, MasterUserId)
...
@@ -150,7 +153,7 @@ flowCorpusSearchInDatabase :: FlowCmdM env err m
...
@@ -150,7 +153,7 @@ flowCorpusSearchInDatabase :: FlowCmdM env err m
->
Text
->
Text
->
m
CorpusId
->
m
CorpusId
flowCorpusSearchInDatabase
u
la
q
=
do
flowCorpusSearchInDatabase
u
la
q
=
do
(
_masterUserId
,
_masterRootId
,
cId
)
<-
getOrMkRootWithCorpus
(
_masterUserId
,
_masterRootId
,
cId
)
<-
getOrMk
_
RootWithCorpus
userMaster
userMaster
(
Left
""
)
(
Left
""
)
(
Nothing
::
Maybe
HyperdataCorpus
)
(
Nothing
::
Maybe
HyperdataCorpus
)
...
@@ -165,7 +168,7 @@ _flowCorpusSearchInDatabaseApi :: FlowCmdM env err m
...
@@ -165,7 +168,7 @@ _flowCorpusSearchInDatabaseApi :: FlowCmdM env err m
->
Text
->
Text
->
m
CorpusId
->
m
CorpusId
_flowCorpusSearchInDatabaseApi
u
la
q
=
do
_flowCorpusSearchInDatabaseApi
u
la
q
=
do
(
_masterUserId
,
_masterRootId
,
cId
)
<-
getOrMkRootWithCorpus
(
_masterUserId
,
_masterRootId
,
cId
)
<-
getOrMk
_
RootWithCorpus
userMaster
userMaster
(
Left
""
)
(
Left
""
)
(
Nothing
::
Maybe
HyperdataCorpus
)
(
Nothing
::
Maybe
HyperdataCorpus
)
...
@@ -189,7 +192,7 @@ flow :: (FlowCmdM env err m, FlowCorpus a, MkCorpus c)
...
@@ -189,7 +192,7 @@ flow :: (FlowCmdM env err m, FlowCorpus a, MkCorpus c)
->
[[
a
]]
->
[[
a
]]
->
m
CorpusId
->
m
CorpusId
flow
c
u
cn
la
docs
=
do
flow
c
u
cn
la
docs
=
do
ids
<-
mapM
(
insertMasterDocs
c
la
)
docs
ids
<-
traverse
(
insertMasterDocs
c
la
)
docs
flowCorpusUser
(
la
^.
tt_lang
)
u
cn
c
(
concat
ids
)
flowCorpusUser
(
la
^.
tt_lang
)
u
cn
c
(
concat
ids
)
flowCorpus
::
(
FlowCmdM
env
err
m
,
FlowCorpus
a
)
flowCorpus
::
(
FlowCmdM
env
err
m
,
FlowCorpus
a
)
...
@@ -210,7 +213,7 @@ flowCorpusUser :: (FlowCmdM env err m, MkCorpus c)
...
@@ -210,7 +213,7 @@ flowCorpusUser :: (FlowCmdM env err m, MkCorpus c)
->
m
CorpusId
->
m
CorpusId
flowCorpusUser
l
userName
corpusName
ctype
ids
=
do
flowCorpusUser
l
userName
corpusName
ctype
ids
=
do
-- User Flow
-- User Flow
(
userId
,
_rootId
,
userCorpusId
)
<-
getOrMkRootWithCorpus
userName
corpusName
ctype
(
userId
,
_rootId
,
userCorpusId
)
<-
getOrMk
_
RootWithCorpus
userName
corpusName
ctype
listId
<-
getOrMkList
userCorpusId
userId
listId
<-
getOrMkList
userCorpusId
userId
_cooc
<-
mkNode
NodeListCooc
listId
userId
_cooc
<-
mkNode
NodeListCooc
listId
userId
-- TODO: check if present already, ignore
-- TODO: check if present already, ignore
...
@@ -220,10 +223,9 @@ flowCorpusUser l userName corpusName ctype ids = do
...
@@ -220,10 +223,9 @@ flowCorpusUser l userName corpusName ctype ids = do
-- printDebug "Node Text Id" tId
-- printDebug "Node Text Id" tId
-- User List Flow
-- User List Flow
--{-
(
_masterUserId
,
_masterRootId
,
masterCorpusId
)
<-
getOrMk_RootWithCorpus
userMaster
(
Left
""
)
ctype
(
_masterUserId
,
_masterRootId
,
masterCorpusId
)
<-
getOrMkRootWithCorpus
userMaster
(
Left
""
)
ctype
ngs
<-
buildNgramsLists
l
2
3
(
StopSize
3
)
userCorpusId
masterCorpusId
ngs
<-
buildNgramsLists
l
2
3
(
StopSize
3
)
userCorpusId
masterCorpusId
_userListId
<-
flowList_DbRepo
listId
ngs
_userListId
<-
flowList
masterCorpusId
listId
ngs
--mastListId <- getOrMkList masterCorpusId masterUserId
--mastListId <- getOrMkList masterCorpusId masterUserId
-- _ <- insertOccsUpdates userCorpusId mastListId
-- _ <- insertOccsUpdates userCorpusId mastListId
-- printDebug "userListId" userListId
-- printDebug "userListId" userListId
...
@@ -231,8 +233,6 @@ flowCorpusUser l userName corpusName ctype ids = do
...
@@ -231,8 +233,6 @@ flowCorpusUser l userName corpusName ctype ids = do
_
<-
mkDashboard
userCorpusId
userId
_
<-
mkDashboard
userCorpusId
userId
_
<-
mkGraph
userCorpusId
userId
_
<-
mkGraph
userCorpusId
userId
--
_
<-
mkPhylo
userCorpusId
userId
--
_
<-
mkPhylo
userCorpusId
userId
--}
-- Annuaire Flow
-- Annuaire Flow
-- _ <- mkAnnuaire rootUserId userId
-- _ <- mkAnnuaire rootUserId userId
...
@@ -248,38 +248,50 @@ insertMasterDocs :: ( FlowCmdM env err m
...
@@ -248,38 +248,50 @@ insertMasterDocs :: ( FlowCmdM env err m
->
[
a
]
->
[
a
]
->
m
[
DocId
]
->
m
[
DocId
]
insertMasterDocs
c
lang
hs
=
do
insertMasterDocs
c
lang
hs
=
do
(
masterUserId
,
_
,
masterCorpusId
)
<-
getOrMkRootWithCorpus
userMaster
(
Left
corpusMasterName
)
c
(
masterUserId
,
_
,
masterCorpusId
)
<-
getOrMk
_
RootWithCorpus
userMaster
(
Left
corpusMasterName
)
c
-- TODO Type NodeDocumentUnicised
-- TODO Type NodeDocumentUnicised
let
hs'
=
map
addUniqId
hs
let
docs
=
map
addUniqId
hs
ids
<-
insertDb
masterUserId
masterCorpusId
hs'
ids
<-
insertDb
masterUserId
masterCorpusId
docs
let
documentsWithId
=
mergeData
(
toInserted
ids
)
(
Map
.
fromList
$
map
viewUniqId'
hs'
)
let
let
fixLang
(
Unsupervised
l
n
s
m
)
=
Unsupervised
l
n
s
m'
ids'
=
map
reId
ids
where
documentsWithId
=
mergeData
(
toInserted
ids
)
(
Map
.
fromList
$
map
viewUniqId'
docs
)
m'
=
case
m
of
_
<-
Doc
.
add
masterCorpusId
ids'
Nothing
->
trace
(
"buildTries here"
::
String
)
-- TODO
$
Just
-- create a corpus with database name (CSV or PubMed)
$
buildTries
n
(
fmap
toToken
$
uniText
-- add documents to the corpus (create node_node link)
$
Text
.
intercalate
" . "
-- this will enable global database monitoring
$
List
.
concat
$
map
hasText
documentsWithId
)
just_m
->
just_m
fixLang
l
=
l
lang'
=
fixLang
lang
-- maps :: IO Map Ngrams (Map NgramsType (Map NodeId Int))
-- maps :: IO Map Ngrams (Map NgramsType (Map NodeId Int))
maps
<-
mapNodeIdNgrams
<$>
documentIdWithNgrams
(
extractNgramsT
lang'
)
documentsWithId
maps
<-
mapNodeIdNgrams
<$>
documentIdWithNgrams
(
extractNgramsT
$
withLang
lang
documentsWithId
)
documentsWithId
lId
<-
getOrMkList
masterCorpusId
masterUserId
terms2id
<-
insertNgrams
$
Map
.
keys
maps
terms2id
<-
insertNgrams
$
Map
.
keys
maps
let
indexedNgrams
=
Map
.
mapKeys
(
indexNgrams
terms2id
)
maps
let
indexedNgrams
=
Map
.
mapKeys
(
indexNgrams
terms2id
)
maps
lId
<-
getOrMkList
masterCorpusId
masterUserId
_cooc
<-
mkNode
NodeListCooc
lId
masterUserId
_cooc
<-
mkNode
NodeListCooc
lId
masterUserId
_
<-
insertDocNgrams
lId
indexedNgrams
_
<-
insertDocNgrams
lId
indexedNgrams
pure
$
map
reId
ids
pure
ids'
withLang
::
HasText
a
=>
TermType
Lang
->
[
DocumentWithId
a
]
->
TermType
Lang
withLang
(
Unsupervised
l
n
s
m
)
ns
=
Unsupervised
l
n
s
m'
where
m'
=
case
m
of
Nothing
->
trace
(
"buildTries here"
::
String
)
$
Just
$
buildTries
n
(
fmap
toToken
$
uniText
$
Text
.
intercalate
" . "
$
List
.
concat
$
map
hasText
ns
)
just_m
->
just_m
withLang
l
_
=
l
type
CorpusName
=
Text
type
CorpusName
=
Text
...
@@ -306,12 +318,12 @@ getOrMkRoot username = do
...
@@ -306,12 +318,12 @@ getOrMkRoot username = do
pure
(
userId
,
rootId
)
pure
(
userId
,
rootId
)
getOrMkRootWithCorpus
::
(
HasNodeError
err
,
MkCorpus
a
)
getOrMk
_
RootWithCorpus
::
(
HasNodeError
err
,
MkCorpus
a
)
=>
Username
=>
Username
->
Either
CorpusName
[
CorpusId
]
->
Either
CorpusName
[
CorpusId
]
->
Maybe
a
->
Maybe
a
->
Cmd
err
(
UserId
,
RootId
,
CorpusId
)
->
Cmd
err
(
UserId
,
RootId
,
CorpusId
)
getOrMkRootWithCorpus
username
cName
c
=
do
getOrMk
_
RootWithCorpus
username
cName
c
=
do
(
userId
,
rootId
)
<-
getOrMkRoot
username
(
userId
,
rootId
)
<-
getOrMkRoot
username
corpusId''
<-
if
username
==
userMaster
corpusId''
<-
if
username
==
userMaster
then
do
then
do
...
@@ -322,7 +334,12 @@ getOrMkRootWithCorpus username cName c = do
...
@@ -322,7 +334,12 @@ getOrMkRootWithCorpus username cName c = do
corpusId'
<-
if
corpusId''
/=
[]
corpusId'
<-
if
corpusId''
/=
[]
then
pure
corpusId''
then
pure
corpusId''
else
mk
(
Just
$
fromLeft
"Default"
cName
)
c
rootId
userId
else
do
c'
<-
mk
(
Just
$
fromLeft
"Default"
cName
)
c
rootId
userId
_tId
<-
case
head
c'
of
Nothing
->
pure
[
0
]
Just
c''
->
mkNode
NodeTexts
c''
userId
pure
c'
corpusId
<-
maybe
(
nodeError
NoCorpusFound
)
pure
(
head
corpusId'
)
corpusId
<-
maybe
(
nodeError
NoCorpusFound
)
pure
(
head
corpusId'
)
...
@@ -369,7 +386,7 @@ instance ExtractNgramsT HyperdataContact
...
@@ -369,7 +386,7 @@ instance ExtractNgramsT HyperdataContact
let
authors
=
map
text2ngrams
let
authors
=
map
text2ngrams
$
maybe
[
"Nothing"
]
(
\
a
->
[
a
])
$
maybe
[
"Nothing"
]
(
\
a
->
[
a
])
$
view
(
hc_who
.
_Just
.
cw_lastName
)
hc'
$
view
(
hc_who
.
_Just
.
cw_lastName
)
hc'
pure
$
Map
.
fromList
$
[(
a'
,
Map
.
singleton
Authors
1
)
|
a'
<-
authors
]
pure
$
Map
.
fromList
$
[(
a'
,
Map
.
singleton
Authors
1
)
|
a'
<-
authors
]
instance
HasText
HyperdataDocument
instance
HasText
HyperdataDocument
...
@@ -425,7 +442,7 @@ documentIdWithNgrams :: HasNodeError err
...
@@ -425,7 +442,7 @@ documentIdWithNgrams :: HasNodeError err
->
Cmd
err
(
Map
Ngrams
(
Map
NgramsType
Int
)))
->
Cmd
err
(
Map
Ngrams
(
Map
NgramsType
Int
)))
->
[
DocumentWithId
a
]
->
[
DocumentWithId
a
]
->
Cmd
err
[
DocumentIdWithNgrams
a
]
->
Cmd
err
[
DocumentIdWithNgrams
a
]
documentIdWithNgrams
f
=
mapM
toDocumentIdWithNgrams
documentIdWithNgrams
f
=
traverse
toDocumentIdWithNgrams
where
where
toDocumentIdWithNgrams
d
=
do
toDocumentIdWithNgrams
d
=
do
e
<-
f
$
documentData
d
e
<-
f
$
documentData
d
...
...
src/Gargantext/Database/Flow/List.hs
View file @
e728a20d
...
@@ -50,13 +50,26 @@ mapNodeIdNgrams = Map.unionsWith (Map.unionWith (Map.unionWith (+))) . fmap f
...
@@ -50,13 +50,26 @@ mapNodeIdNgrams = Map.unionsWith (Map.unionWith (Map.unionWith (+))) . fmap f
nId
=
documentId
$
documentWithId
d
nId
=
documentId
$
documentWithId
d
------------------------------------------------------------------------
------------------------------------------------------------------------
listInsert
::
FlowCmdM
env
err
m
flowList_DbRepo
::
FlowCmdM
env
err
m
=>
ListId
=>
ListId
->
Map
NgramsType
[
NgramsElement
]
->
Map
NgramsType
[
NgramsElement
]
->
m
()
->
m
ListId
listInsert
lId
ngs
=
mapM_
(
\
(
typeList
,
ngElmts
)
flowList_DbRepo
lId
ngs
=
do
->
putListNgrams
lId
typeList
ngElmts
-- printDebug "listId flowList" lId
)
$
toList
ngs
mapCgramsId
<-
listInsertDb
lId
toNodeNgramsW
(
Map
.
toList
ngs
)
let
toInsert
=
catMaybes
[
(,)
<$>
(
getCgramsId
mapCgramsId
ntype
<$>
parent
)
<*>
getCgramsId
mapCgramsId
ntype
ngram
|
(
ntype
,
ngs'
)
<-
Map
.
toList
ngs
,
NgramsElement
ngram
_
_
_
_
parent
_
<-
ngs'
]
-- Inserting groups of ngrams
_r
<-
insert_Node_NodeNgrams_NodeNgrams
$
map
(
\
(
a
,
b
)
->
Node_NodeNgrams_NodeNgrams
lId
a
b
Nothing
)
toInsert
listInsert
lId
ngs
--trace (show $ List.filter (\n -> _ne_ngrams n == "versatile") $ List.concat $ Map.elems ngs) $ listInsert lId ngs
pure
lId
------------------------------------------------------------------------
------------------------------------------------------------------------
toNodeNgramsW
::
ListId
toNodeNgramsW
::
ListId
->
[(
NgramsType
,
[
NgramsElement
])]
->
[(
NgramsType
,
[
NgramsElement
])]
...
@@ -71,22 +84,15 @@ toNodeNgramsW l ngs = List.concat $ map (toNodeNgramsW' l) ngs
...
@@ -71,22 +84,15 @@ toNodeNgramsW l ngs = List.concat $ map (toNodeNgramsW' l) ngs
(
NgramsElement
ngrams_terms'
_size
list_type
_occ
_root
_parent
_children
)
<-
elms
(
NgramsElement
ngrams_terms'
_size
list_type
_occ
_root
_parent
_children
)
<-
elms
]
]
flowList
::
FlowCmdM
env
err
m
listInsert
::
FlowCmdM
env
err
m
=>
CorpusId
=>
ListId
->
ListId
->
Map
NgramsType
[
NgramsElement
]
->
Map
NgramsType
[
NgramsElement
]
->
m
()
->
m
ListId
listInsert
lId
ngs
=
mapM_
(
\
(
typeList
,
ngElmts
)
flowList
_cId
lId
ngs
=
do
->
putListNgrams
lId
typeList
ngElmts
-- printDebug "listId flowList" lId
)
$
toList
ngs
-- TODO save in database
------------------------------------------------------------------------
mapCgramsId
<-
listInsertDb
lId
toNodeNgramsW
(
Map
.
toList
ngs
)
------------------------------------------------------------------------
let
toInsert
=
catMaybes
[
(,)
<$>
(
getCgramsId
mapCgramsId
ntype
<$>
parent
)
<*>
getCgramsId
mapCgramsId
ntype
ngram
|
(
ntype
,
ngs'
)
<-
Map
.
toList
ngs
,
NgramsElement
ngram
_
_
_
_
parent
_
<-
ngs'
]
_r
<-
insert_Node_NodeNgrams_NodeNgrams
$
map
(
\
(
a
,
b
)
->
Node_NodeNgrams_NodeNgrams
lId
a
b
Nothing
)
toInsert
listInsert
lId
ngs
--trace (show $ List.filter (\n -> _ne_ngrams n == "versatile") $ List.concat $ Map.elems ngs) $ listInsert lId ngs
pure
lId
src/Gargantext/Database/Schema/NodeNodeNgrams.hs
View file @
e728a20d
...
@@ -31,7 +31,6 @@ import Gargantext.Database.Schema.Node (pgNodeId)
...
@@ -31,7 +31,6 @@ import Gargantext.Database.Schema.Node (pgNodeId)
import
Gargantext.Database.Types.Node
import
Gargantext.Database.Types.Node
import
Opaleye
import
Opaleye
data
NodeNodeNgramsPoly
n1
n2
ngrams_id
ngt
w
data
NodeNodeNgramsPoly
n1
n2
ngrams_id
ngt
w
=
NodeNodeNgrams
{
_nnng_node1_id
::
n1
=
NodeNodeNgrams
{
_nnng_node1_id
::
n1
,
_nnng_node2_id
::
n2
,
_nnng_node2_id
::
n2
...
@@ -40,7 +39,6 @@ data NodeNodeNgramsPoly n1 n2 ngrams_id ngt w
...
@@ -40,7 +39,6 @@ data NodeNodeNgramsPoly n1 n2 ngrams_id ngt w
,
_nnng_weight
::
w
,
_nnng_weight
::
w
}
deriving
(
Show
)
}
deriving
(
Show
)
type
NodeNodeNgramsWrite
=
type
NodeNodeNgramsWrite
=
NodeNodeNgramsPoly
(
Column
PGInt4
)
NodeNodeNgramsPoly
(
Column
PGInt4
)
(
Column
PGInt4
)
(
Column
PGInt4
)
...
@@ -83,7 +81,6 @@ nodeNodeNgramsTable = Table "node_node_ngrams"
...
@@ -83,7 +81,6 @@ nodeNodeNgramsTable = Table "node_node_ngrams"
queryNodeNodeNgramsTable
::
Query
NodeNodeNgramsRead
queryNodeNodeNgramsTable
::
Query
NodeNodeNgramsRead
queryNodeNodeNgramsTable
=
queryTable
nodeNodeNgramsTable
queryNodeNodeNgramsTable
=
queryTable
nodeNodeNgramsTable
-- | Insert utils
-- | Insert utils
insertNodeNodeNgrams
::
[
NodeNodeNgrams
]
->
Cmd
err
Int
insertNodeNodeNgrams
::
[
NodeNodeNgrams
]
->
Cmd
err
Int
insertNodeNodeNgrams
=
insertNodeNodeNgramsW
insertNodeNodeNgrams
=
insertNodeNodeNgramsW
...
@@ -105,4 +102,3 @@ insertNodeNodeNgramsW nnnw =
...
@@ -105,4 +102,3 @@ insertNodeNodeNgramsW nnnw =
,
iOnConflict
=
(
Just
DoNothing
)
,
iOnConflict
=
(
Just
DoNothing
)
})
})
src/Gargantext/Database/Schema/Node_NodeNgramsNodeNgrams.hs
View file @
e728a20d
...
@@ -78,7 +78,7 @@ $(makeLensesWith abbreviatedFields
...
@@ -78,7 +78,7 @@ $(makeLensesWith abbreviatedFields
node_NodeNgrams_NodeNgrams_Table
::
Table
Node_NodeNgrams_NodeNgrams_Write
Node_NodeNgrams_NodeNgrams_Read
node_NodeNgrams_NodeNgrams_Table
::
Table
Node_NodeNgrams_NodeNgrams_Write
Node_NodeNgrams_NodeNgrams_Read
node_NodeNgrams_NodeNgrams_Table
=
node_NodeNgrams_NodeNgrams_Table
=
Table
"node_n
grams_
ngrams"
Table
"node_n
odengrams_node
ngrams"
(
pNode_NodeNgrams_NodeNgrams
Node_NodeNgrams_NodeNgrams
(
pNode_NodeNgrams_NodeNgrams
Node_NodeNgrams_NodeNgrams
{
_nnn_node_id
=
required
"node_id"
{
_nnn_node_id
=
required
"node_id"
,
_nnn_nng1_id
=
optional
"node_ngrams1_id"
,
_nnn_nng1_id
=
optional
"node_ngrams1_id"
...
...
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