2 Module : Gargantext.Core.Viz.Phylo.Main
3 Description : Phylomemy Main
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
12 {-# LANGUAGE ViewPatterns #-}
14 module Gargantext.Core.Viz.Phylo.Main
19 import Data.Text (Text)
20 import Debug.Trace (trace)
21 import GHC.IO (FilePath)
22 import Gargantext.API.Ngrams.Tools (getTermsWith)
23 import Gargantext.API.Ngrams.Types
24 import Gargantext.Core.Text.Context (TermList)
25 import Gargantext.Core.Text.Terms.WithList
26 import Gargantext.Core.Types
27 import Gargantext.Core.Viz.Phylo hiding (Svg, Dot)
28 import Gargantext.Core.Viz.Phylo.LevelMaker (toPhylo)
29 import Gargantext.Core.Viz.Phylo.Tools
30 import Gargantext.Core.Viz.Phylo.View.Export
31 import Gargantext.Core.Viz.Phylo.View.ViewMaker -- TODO Just Maker is fine
32 import Gargantext.Database.Action.Flow
33 import Gargantext.Database.Admin.Types.Hyperdata
34 import Gargantext.Database.Query.Table.Node(defaultList)
35 import Gargantext.Database.Query.Table.NodeNode (selectDocs)
36 import Gargantext.Database.Schema.Ngrams (NgramsType(..))
37 import Gargantext.Prelude
38 import qualified Data.ByteString as DB
39 import qualified Data.List as List
40 import qualified Data.Map as Map
41 import qualified Data.Text as Text
42 import qualified Data.HashMap.Strict as HashMap
44 type MinSizeBranch = Int
46 flowPhylo :: FlowCmdM env err m
51 list <- defaultList cId
52 termList <- HashMap.toList <$> getTermsWith (Text.words . unNgramsTerm) [list] NgramsTerms MapTerm
55 <$> map (\h -> (,) <$> _hd_publication_year h
61 patterns = buildPatterns termList
62 -- | To filter the Ngrams of a document based on the termList
63 filterTerms :: Patterns -> (Date, Text) -> (Date, [Text])
64 filterTerms patterns' (y,d) = (y,termsInText patterns' d)
66 --------------------------------------
67 termsInText :: Patterns -> Text -> [Text]
68 termsInText pats txt = List.nub
70 $ map (map Text.unwords)
71 $ extractTermsWithList pats txt
72 --------------------------------------
74 docs = map ((\(y,t) -> Document y t) . filterTerms patterns) docs'
76 --liftBase $ flowPhylo' (List.sortOn date docs) termList l m fp
77 pure $ buildPhylo (List.sortOn date docs) termList
80 -- TODO SortedList Document
81 flowPhylo' :: [Document] -> TermList -- ^Build
82 -> Level -> MinSizeBranch -- ^View
85 flowPhylo' corpus terms l m fp = do
87 phylo = buildPhylo corpus terms
88 phVie = viewPhylo l m phylo
93 defaultQuery :: PhyloQueryBuild
94 defaultQuery = defaultQueryBuild'
98 buildPhylo :: [Document] -> TermList -> Phylo
99 buildPhylo = trace (show defaultQuery) $ buildPhylo' defaultQuery
101 buildPhylo' :: PhyloQueryBuild -> [Document] -> TermList -> Phylo
102 buildPhylo' q corpus termList = toPhylo q corpus termList Map.empty
104 queryView :: Level -> MinSizeBranch -> PhyloQueryView
105 queryView level _minSizeBranch = PhyloQueryView level Merge False 2
108 -- [SizeBranch $ SBParams minSizeBranch]
109 [BranchPeakFreq,GroupLabelCooc]
110 (Just (ByBranchAge,Asc))
113 viewPhylo :: Level -> MinSizeBranch -> Phylo -> PhyloView
114 viewPhylo l b phylo = toPhyloView (queryView l b) phylo
116 writePhylo :: FilePath -> PhyloView -> IO FilePath
117 writePhylo fp phview = runGraphviz (viewToDot phview) Svg fp
119 viewPhylo2Svg :: PhyloView -> IO DB.ByteString
120 viewPhylo2Svg p = graphvizWithHandle Dot (viewToDot p) Svg DB.hGetContents