2 Module : Gargantext.Viz.Phylo
3 Description : Phylomemy definitions and types.
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 Specifications of Phylomemy export format.
12 Phylomemy can be described as a Temporal Graph with different scale of
13 granularity of group of ngrams (terms and multi-terms).
15 The main type is Phylo which is synonym of Phylomemy (only difference is
19 Chavalarias, D., Cointet, J.-P., 2013. Phylomemetic patterns
20 in science evolution — the rise and fall of scientific fields. PloS
25 {-# LANGUAGE DeriveGeneric #-}
26 {-# LANGUAGE NoImplicitPrelude #-}
27 {-# LANGUAGE TemplateHaskell #-}
29 module Gargantext.Viz.Phylo where
31 import Control.Lens (makeLenses)
32 import Data.Aeson.TH (deriveJSON)
33 import Data.Maybe (Maybe)
34 import Data.Text (Text)
37 import Data.Vector (Vector)
38 import Data.Time.Clock.POSIX (POSIXTime)
39 import GHC.Generics (Generic)
40 import Gargantext.Database.Schema.Ngrams (NgramsId)
41 import Gargantext.Core.Utils.Prefix (unPrefix)
42 import Gargantext.Prelude
44 ------------------------------------------------------------------------
46 PhyloExport { _phyloExport_param :: PhyloParam
47 , _phyloExport_data :: Phylo
50 -- | .phylo parameters
52 PhyloParam { _phyloParam_version :: Text -- Double ?
53 , _phyloParam_software :: Software
54 , _phyloParam_params :: Hash
60 -- TODO move somewhere since it is generic
62 Software { _software_name :: Text
63 , _software_version :: Text
66 ------------------------------------------------------------------------
67 -- | Phylo datatype descriptor of a phylomemy
68 -- Duration : time Segment of the whole phylomemy (start,end)
69 -- Ngrams : list of all (possible) terms contained in the phylomemy (with their id)
70 -- Steps : list of all steps to build the phylomemy
72 Phylo { _phylo_duration :: (Start, End)
73 , _phylo_ngrams :: PhyloNgrams
74 , _phylo_periods :: [PhyloPeriod]
76 deriving (Generic, Show)
78 -- | UTCTime in seconds since UNIX epoch
79 -- type Start = POSIXTime
80 -- type End = POSIXTime
85 -- | PhyloStep : steps of phylomemy on temporal axis
86 -- Period: tuple (start date, end date) of the step of the phylomemy
87 -- Levels: levels of granularity
89 PhyloPeriod { _phylo_periodId :: PhyloPeriodId
90 , _phylo_periodLevels :: [PhyloLevel]
92 deriving (Generic, Show)
94 type PhyloPeriodId = (Start, End)
96 -- | PhyloLevel : levels of phylomemy on level axis
97 -- Levels description:
98 -- Level -1: Ngram equals itself (by identity) == _phylo_Ngrams
99 -- Level 0: Group of synonyms (by stems + by qualitative expert meaning)
100 -- Level 1: First level of clustering
101 -- Level N: Nth level of clustering
103 PhyloLevel { _phylo_levelId :: PhyloLevelId
104 , _phylo_levelGroups :: [PhyloGroup]
106 deriving (Generic, Show)
108 type PhyloLevelId = (PhyloPeriodId, Int)
110 -- | PhyloGroup : group of ngrams at each level and step
111 -- Label : maybe has a label as text
112 -- Ngrams: set of terms that build the group
113 -- Period Parents|Childs: weighted link to Parents|Childs (Temporal Period axis)
114 -- Level Parents|Childs: weighted link to Parents|Childs (Level Granularity axis)
115 -- Pointers are directed link from Self to any PhyloGroup (/= Self ?)
117 PhyloGroup { _phylo_groupId :: PhyloGroupId
118 , _phylo_groupLabel :: Text
119 , _phylo_groupNgrams :: [Int]
121 , _phylo_groupPeriodParents :: [Pointer]
122 , _phylo_groupPeriodChilds :: [Pointer]
124 , _phylo_groupLevelParents :: [Pointer]
125 , _phylo_groupLevelChilds :: [Pointer]
127 deriving (Generic, Show)
129 type PhyloGroupId = (PhyloLevelId, Int)
130 type Pointer = (PhyloGroupId, Weight)
135 -- | Ngrams : a contiguous sequence of n terms
137 -- | PhyloNgrams : Vector of all the Ngrams (PhyloGroup of level -1) used within a Phylo
138 type PhyloNgrams = Vector Ngrams
141 -- | Clique : Set of ngrams cooccurring in the same Document
142 type Clique = Set Ngrams
143 -- | Support : Number of Documents where a Clique occurs
145 -- | Fis : Frequent Items Set (ie: the association between a Clique and a Support)
146 type Fis = Map Clique Support
151 makeLenses ''PhyloParam
152 makeLenses ''PhyloExport
153 makeLenses ''Software
154 makeLenses ''PhyloGroup
155 makeLenses ''PhyloLevel
156 makeLenses ''PhyloPeriod
159 $(deriveJSON (unPrefix "_phylo_" ) ''Phylo )
160 $(deriveJSON (unPrefix "_phylo_period" ) ''PhyloPeriod )
161 $(deriveJSON (unPrefix "_phylo_level" ) ''PhyloLevel )
162 $(deriveJSON (unPrefix "_phylo_group" ) ''PhyloGroup )
164 $(deriveJSON (unPrefix "_software_" ) ''Software )
165 $(deriveJSON (unPrefix "_phyloParam_" ) ''PhyloParam )
166 $(deriveJSON (unPrefix "_phyloExport_" ) ''PhyloExport )
168 -- | TODO XML instances