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
f9c86cac
Commit
f9c86cac
authored
Jan 09, 2020
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[DB] Master User Texts
parent
53a26483
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
130 additions
and
107 deletions
+130
-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
+29
-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 @
f9c86cac
...
@@ -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 @
f9c86cac
...
@@ -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 @
f9c86cac
...
@@ -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 @
f9c86cac
...
@@ -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,13 @@ toNodeNgramsW l ngs = List.concat $ map (toNodeNgramsW' l) ngs
...
@@ -71,22 +84,13 @@ 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 @
f9c86cac
...
@@ -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 @
f9c86cac
...
@@ -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