Commit 3ebf93a4 authored by Alexandre Delanoë's avatar Alexandre Delanoë

[GRAPH] API connected (needs bridgeness).

parent f9c5e6da
...@@ -262,16 +262,14 @@ graphAPI nId = do ...@@ -262,16 +262,14 @@ graphAPI nId = do
, LegendField 5 "#FFF" "Energy / Environment" , LegendField 5 "#FFF" "Energy / Environment"
] ]
-- (map (\n -> LegendField n "#FFFFFF" (pack $ show n)) [1..10]) -- (map (\n -> LegendField n "#FFFFFF" (pack $ show n)) [1..10])
let cId = maybe (panic "no parentId") identity $ _node_parentId nodeGraph
myCooc <- getCoocByDocDev nId <$> defaultList (maybe (panic "no parentId") identity $ _node_parentId nodeGraph) lId <- defaultList cId
myCooc' <- myCooc myCooc <- getCoocByDocDev cId lId
--{-
liftIO $ set graph_metadata (Just metadata) liftIO $ set graph_metadata (Just metadata)
<$> cooc2graph myCooc' <$> cooc2graph myCooc
-- <$> maybe defaultGraph identity -- <$> maybe defaultGraph identity
-- <$> readGraphFromJson "purescript-gargantext/dist/examples/imtNew.json" -- <$> readGraphFromJson "purescript-gargantext/dist/examples/imtNew.json"
-- t <- textFlow (Mono EN) (Contexts contextText) -- t <- textFlow (Mono EN) (Contexts contextText)
-- liftIO $ liftIO $ pure $ maybe t identity maybeGraph -- liftIO $ liftIO $ pure $ maybe t identity maybeGraph
-- TODO what do we get about the node? to replace contextText -- TODO what do we get about the node? to replace contextText
......
...@@ -93,7 +93,7 @@ flowInsertAnnuaire name children = do ...@@ -93,7 +93,7 @@ flowInsertAnnuaire name children = do
(userId, _, userCorpusId) <- subFlowAnnuaire userArbitrary name (userId, _, userCorpusId) <- subFlowAnnuaire userArbitrary name
_ <- add userCorpusId (map reId ids) _ <- add userCorpusId (map reId ids)
printDebug "AnnuaireID" userCorpusId --printDebug "AnnuaireID" userCorpusId
pure (ids, masterUserId, masterCorpusId, userId, userCorpusId) pure (ids, masterUserId, masterCorpusId, userId, userCorpusId)
...@@ -102,11 +102,11 @@ flowCorpus' :: HasNodeError err ...@@ -102,11 +102,11 @@ flowCorpus' :: HasNodeError err
=> NodeType -> [HyperdataDocument] => NodeType -> [HyperdataDocument]
-> ([ReturnId], UserId, CorpusId, UserId, CorpusId) -> ([ReturnId], UserId, CorpusId, UserId, CorpusId)
-> Cmd err CorpusId -> Cmd err CorpusId
flowCorpus' NodeCorpus hyperdataDocuments (ids,masterUserId,masterCorpusId, userId,userCorpusId) = do flowCorpus' NodeCorpus hyperdataDocuments (ids,_masterUserId,_masterCorpusId, userId,userCorpusId) = do
-------------------------------------------------- --------------------------------------------------
-- List Ngrams Flow -- List Ngrams Flow
userListId <- flowListUser userId userCorpusId 3000 --userListId <- flowListUser userId userCorpusId 500
printDebug "Working on User ListId : " userListId --printDebug "Working on User ListId : " userListId
let documentsWithId = mergeData (toInserted ids) (toInsert hyperdataDocuments) let documentsWithId = mergeData (toInserted ids) (toInsert hyperdataDocuments)
-- printDebug "documentsWithId" documentsWithId -- printDebug "documentsWithId" documentsWithId
...@@ -120,8 +120,8 @@ flowCorpus' NodeCorpus hyperdataDocuments (ids,masterUserId,masterCorpusId, user ...@@ -120,8 +120,8 @@ flowCorpus' NodeCorpus hyperdataDocuments (ids,masterUserId,masterCorpusId, user
-- printDebug "inserted ngrams" indexedNgrams -- printDebug "inserted ngrams" indexedNgrams
_ <- insertToNodeNgrams indexedNgrams _ <- insertToNodeNgrams indexedNgrams
listId2 <- flowList masterUserId masterCorpusId indexedNgrams --listId2 <- flowList masterUserId masterCorpusId indexedNgrams
printDebug "Working on ListId : " listId2 --printDebug "Working on ListId : " listId2
--} --}
-------------------------------------------------- --------------------------------------------------
_ <- mkDashboard userCorpusId userId _ <- mkDashboard userCorpusId userId
...@@ -170,8 +170,8 @@ subFlowCorpus username cName = do ...@@ -170,8 +170,8 @@ subFlowCorpus username cName = do
corpusId <- maybe (nodeError NoCorpusFound) pure (head corpusId') corpusId <- maybe (nodeError NoCorpusFound) pure (head corpusId')
printDebug "(username, userId, rootId, corpusId)" --printDebug "(username, userId, rootId, corpusId)"
(username, userId, rootId, corpusId) -- (username, userId, rootId, corpusId)
pure (userId, rootId, corpusId) pure (userId, rootId, corpusId)
...@@ -197,8 +197,8 @@ subFlowAnnuaire username _cName = do ...@@ -197,8 +197,8 @@ subFlowAnnuaire username _cName = do
corpusId <- maybe (nodeError NoCorpusFound) pure (head corpusId') corpusId <- maybe (nodeError NoCorpusFound) pure (head corpusId')
printDebug "(username, userId, rootId, corpusId)" --printDebug "(username, userId, rootId, corpusId)"
(username, userId, rootId, corpusId) -- (username, userId, rootId, corpusId)
pure (userId, rootId, corpusId) pure (userId, rootId, corpusId)
------------------------------------------------------------------------ ------------------------------------------------------------------------
...@@ -267,7 +267,7 @@ mapNodeIdNgrams = DM.unionsWith (DM.unionWith (DM.unionWith (+))) . fmap f ...@@ -267,7 +267,7 @@ mapNodeIdNgrams = DM.unionsWith (DM.unionWith (DM.unionWith (+))) . fmap f
------------------------------------------------------------------------ ------------------------------------------------------------------------
flowList :: HasNodeError err => UserId -> CorpusId flowList :: HasNodeError err => UserId -> CorpusId
-> Map NgramsIndexed (Map NgramsType (Map NodeId Int)) -> Cmd err ListId -> Map NgramsIndexed (Map NgramsType (Map NodeId Int)) -> Cmd err ListId
flowList uId cId ngs = do flowList uId cId _ngs = do
-- printDebug "ngs:" ngs -- printDebug "ngs:" ngs
lId <- getOrMkList cId uId lId <- getOrMkList cId uId
--printDebug "ngs" (DM.keys ngs) --printDebug "ngs" (DM.keys ngs)
...@@ -277,8 +277,8 @@ flowList uId cId ngs = do ...@@ -277,8 +277,8 @@ flowList uId cId ngs = do
-- _ <- insertGroups lId groupEd -- _ <- insertGroups lId groupEd
-- compute Candidate / Map -- compute Candidate / Map
is <- insertLists lId $ ngrams2list ngs --is <- insertLists lId $ ngrams2list ngs
printDebug "listNgrams inserted :" is --printDebug "listNgrams inserted :" is
pure lId pure lId
......
...@@ -25,10 +25,10 @@ import Data.Text.IO (readFile) ...@@ -25,10 +25,10 @@ import Data.Text.IO (readFile)
import Data.Map.Strict (Map) import Data.Map.Strict (Map)
import Data.Maybe (catMaybes) import Data.Maybe (catMaybes)
import qualified Data.Set as DS --import qualified Data.Set as DS
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Array.Accelerate as A --import qualified Data.Array.Accelerate as A
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
---------------------------------------------- ----------------------------------------------
import Database.PostgreSQL.Simple (Connection) import Database.PostgreSQL.Simple (Connection)
...@@ -50,7 +50,7 @@ import Gargantext.Core.Types (CorpusId) ...@@ -50,7 +50,7 @@ import Gargantext.Core.Types (CorpusId)
import Gargantext.Text.Parsers.CSV import Gargantext.Text.Parsers.CSV
import Data.Graph.Clustering.Louvain.CplusPlus (cLouvain, l_community_id) import Data.Graph.Clustering.Louvain.CplusPlus (cLouvain)
{- {-
____ _ _ ____ _ _
...@@ -105,26 +105,26 @@ textFlow' termType contexts = do ...@@ -105,26 +105,26 @@ textFlow' termType contexts = do
-- TermsType = Mono | Multi | MonoMulti -- TermsType = Mono | Multi | MonoMulti
-- myterms # filter (\t -> not . elem t stopList) -- myterms # filter (\t -> not . elem t stopList)
-- # groupBy (Stem|GroupList|Ontology) -- # groupBy (Stem|GroupList|Ontology)
printDebug "terms" myterms --printDebug "terms" myterms
printDebug "myterms" (sum $ map length myterms) --printDebug "myterms" (sum $ map length myterms)
-- Bulding the map list -- Bulding the map list
-- compute copresences of terms, i.e. cooccurrences of terms in same context of text -- compute copresences of terms, i.e. cooccurrences of terms in same context of text
-- Cooc = Map (Term, Term) Int -- Cooc = Map (Term, Term) Int
let myCooc1 = cooc myterms let myCooc1 = cooc myterms
printDebug "myCooc1 size" (M.size myCooc1) --printDebug "myCooc1 size" (M.size myCooc1)
-- Remove Apax: appears one time only => lighting the matrix -- Remove Apax: appears one time only => lighting the matrix
let myCooc2 = M.filter (>0) myCooc1 let myCooc2 = M.filter (>0) myCooc1
printDebug "myCooc2 size" (M.size myCooc2) --printDebug "myCooc2 size" (M.size myCooc2)
printDebug "myCooc2" myCooc2 --printDebug "myCooc2" myCooc2
g <- cooc2graph myCooc2 g <- cooc2graph myCooc2
pure g pure g
-- TODO use Text only here instead of [Text] -- TODO use Text only here instead of [Text]
cooc2graph :: (Map ([Text], [Text]) Int) -> IO Graph cooc2graph :: (Map ([Text], [Text]) Int) -> IO Graph
cooc2graph myCooc = do cooc2graph myCooc = do
--printDebug "myCooc" myCooc
-- Filtering terms with inclusion/Exclusion and Specificity/Genericity scores -- Filtering terms with inclusion/Exclusion and Specificity/Genericity scores
let myCooc3 = filterCooc ( FilterConfig (MapListSize 350 ) let myCooc3 = filterCooc ( FilterConfig (MapListSize 350 )
(InclusionSize 500 ) (InclusionSize 500 )
...@@ -132,39 +132,41 @@ cooc2graph myCooc = do ...@@ -132,39 +132,41 @@ cooc2graph myCooc = do
(Clusters 3 ) (Clusters 3 )
(DefaultValue 0 ) (DefaultValue 0 )
) myCooc ) myCooc
printDebug "myCooc3 size" $ M.size myCooc3 --printDebug "myCooc3 size" $ M.size myCooc3
printDebug "myCooc3" myCooc3 --printDebug "myCooc3" myCooc3
-- Cooc -> Matrix -- Cooc -> Matrix
let (ti, _) = createIndices myCooc3 let (ti, _) = createIndices myCooc3
printDebug "ti size" $ M.size ti --printDebug "ti size" $ M.size ti
printDebug "ti" ti --printDebug "ti" ti
let myCooc4 = toIndex ti myCooc3 let myCooc4 = toIndex ti myCooc3
printDebug "myCooc4 size" $ M.size myCooc4 --printDebug "myCooc4 size" $ M.size myCooc4
printDebug "myCooc4" myCooc4 --printDebug "myCooc4" myCooc4
let matCooc = map2mat (0) (M.size ti) myCooc4 let matCooc = map2mat (0) (M.size ti) myCooc4
printDebug "matCooc shape" $ A.arrayShape matCooc --printDebug "matCooc shape" $ A.arrayShape matCooc
printDebug "matCooc" matCooc --printDebug "matCooc" matCooc
-- Matrix -> Clustering -- Matrix -> Clustering
let distanceMat = measureConditional matCooc let distanceMat = measureConditional matCooc
--let distanceMat = distributional matCooc --let distanceMat = distributional matCooc
printDebug "distanceMat shape" $ A.arrayShape distanceMat --printDebug "distanceMat shape" $ A.arrayShape distanceMat
printDebug "distanceMat" distanceMat --printDebug "distanceMat" distanceMat
--let distanceMap = M.filter (>0) $ mat2map distanceMat --let distanceMap = M.filter (>0) $ mat2map distanceMat
let distanceMap = M.map (\_ -> 1) $ M.filter (>0) $ mat2map distanceMat let distanceMap = M.map (\_ -> 1) $ M.filter (>0) $ mat2map distanceMat
printDebug "distanceMap size" $ M.size distanceMap --printDebug "distanceMap size" $ M.size distanceMap
printDebug "distanceMap" distanceMap --printDebug "distanceMap" distanceMap
-- let distance = fromIndex fi distanceMap -- let distance = fromIndex fi distanceMap
-- printDebug "distance" $ M.size distance --printDebug "distance" $ M.size distance
partitions <- cLouvain distanceMap partitions <- case M.size distanceMap > 0 of
True -> cLouvain distanceMap
False -> panic "Text.Flow: DistanceMap is empty"
-- Building : -> Graph -> JSON -- Building : -> Graph -> JSON
printDebug "partitions" $ DS.size $ DS.fromList $ map (l_community_id) partitions --printDebug "partitions" $ DS.size $ DS.fromList $ map (l_community_id) partitions
--printDebug "partitions" partitions --printDebug "partitions" partitions
pure $ data2graph (M.toList ti) myCooc4 distanceMap partitions pure $ data2graph (M.toList ti) myCooc4 distanceMap partitions
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