Eleve...
[gargantext.git] / src / Gargantext / Text / Terms.hs
index 806e3c08058b12fb9b3fcf4d9e12f406be78bb40..330b3d4ad0a973ddb04eb1c1a3cbfae1e067cd4c 100644 (file)
@@ -37,6 +37,7 @@ module Gargantext.Text.Terms
 import Control.Lens
 import Data.Text (Text)
 import Data.Traversable
+import GHC.Base (String)
 
 import Gargantext.Prelude
 import Gargantext.Core
@@ -44,6 +45,11 @@ import Gargantext.Core.Types
 import Gargantext.Text.Terms.Multi (multiterms)
 import Gargantext.Text.Terms.Mono  (monoTerms)
 
+import qualified Data.List as List
+import qualified Data.Text as Text
+import Gargantext.Text (sentences)
+import Gargantext.Text.Terms.Mono.Token.En (tokenize)
+import Gargantext.Text.Eleve (mainEleve)
 
 data TermType lang
   = Mono      { _tt_lang :: lang }
@@ -75,3 +81,22 @@ terms (MonoMulti lang) txt = terms (Multi lang) txt
 -- terms (WithList  list) txt = pure . concat $ extractTermsWithList list txt
 ------------------------------------------------------------------------
 
+isPunctuation :: Text -> Bool
+isPunctuation x = List.elem x $  (Text.pack . pure)
+                             <$> ("!?(),;." :: String)
+
+-- | Unsupervised ngrams extraction
+-- language agnostic extraction
+-- TODO: remove IO
+-- TODO: BlockText 
+extractTermsUnsupervised :: Int -> Text -> [[Text]]
+extractTermsUnsupervised n = 
+               List.nub
+             . (List.filter (\l -> List.length l > 1))
+             . List.concat
+             . mainEleve n
+             . map (map Text.toLower)
+             . map (List.filter (not . isPunctuation))
+             . map tokenize
+             . sentences
+