2 Module : Gargantext.Text.Ngrams
3 Description : Ngrams definition and tools
4 Copyright : (c) CNRS, 2017 - present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 An @n-gram@ is a contiguous sequence of n items from a given sample of
11 text. In Gargantext application the items are words, n is a non negative
14 Using Latin numerical prefixes, an n-gram of size 1 is referred to as a
15 "unigram"; size 2 is a "bigram" (or, less commonly, a "digram"); size
16 3 is a "trigram". English cardinal numbers are sometimes used, e.g.,
17 "four-gram", "five-gram", and so on.
19 Source: https://en.wikipedia.org/wiki/Ngrams
23 compute occ by node of Tree
24 group occs according groups
31 {-# LANGUAGE NoImplicitPrelude #-}
33 module Gargantext.Text.Terms
36 import qualified Data.Set as Set
37 import Data.Text (Text)
38 import Data.Traversable
40 import Gargantext.Prelude
41 import Gargantext.Core
42 import Gargantext.Core.Types
43 import Gargantext.Text.Terms.Multi (multiterms)
44 import Gargantext.Text.Terms.Mono (monoterms')
45 import Gargantext.Text.Terms.WithList (Patterns, extractTermsWithList)
47 data TermType lang = Mono lang | Multi lang | MonoMulti lang | WithList Patterns
50 -- map (filter (\t -> not . elem t)) $
51 ------------------------------------------------------------------------
52 -- | Sugar to extract terms from text (hiddeng mapM from end user).
53 extractTerms :: Traversable t => TermType Lang -> t Text -> IO (t [Terms])
54 extractTerms termTypeLang = mapM (terms termTypeLang)
55 ------------------------------------------------------------------------
58 -- Multi : multi terms
59 -- MonoMulti : mono and multi
60 -- TODO : multi terms should exclude mono (intersection is not empty yet)
61 terms :: TermType Lang -> Text -> IO [Terms]
62 terms (Mono lang) txt = pure $ monoterms' lang txt
63 terms (Multi lang) txt = multiterms lang txt
64 terms (MonoMulti lang) txt = terms (Multi lang) txt
65 terms (WithList list) txt = pure . map (\x -> Terms x Set.empty {-TODO-}) $ extractTermsWithList list txt
66 ------------------------------------------------------------------------