Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Przemyslaw Kaminski
haskell-gargantext
Commits
8b76e18c
Commit
8b76e18c
authored
May 21, 2019
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Ngrams] Eleve implementation.
parent
61756c68
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
97 additions
and
0 deletions
+97
-0
Eleve.hs
src/Gargantext/Text/Eleve.hs
+97
-0
No files found.
src/Gargantext/Text/Eleve.hs
0 → 100644
View file @
8b76e18c
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-
Implementation of EleVe Python version of papers:
-}
module
Gargantext.Text.Eleve
where
import
Data.Ord
(
Ord
)
import
qualified
Data.List
as
List
import
Data.Monoid
import
Data.Text
hiding
(
map
)
import
Data.Map
(
Map
)
import
qualified
Data.Map
as
Map
import
Gargantext.Prelude
-- prop (Noeud c _e f) = c == Map.size f
-- TODO remove Feuille
example
::
[[
Terminal
]]
example
=
map
terminal
$
chunkAlong
3
1
$
words
"New York and New York is a big apple"
data
Terminal
=
Debut
|
Terminal
Text
|
Fin
deriving
(
Ord
,
Eq
,
Show
)
isDebutFin
::
Terminal
->
Bool
isDebutFin
x
=
case
x
of
Debut
->
True
Fin
->
True
_
->
False
terminal
::
[
Text
]
->
[
Terminal
]
--terminal xs = [Debut] <> (map Terminal xs) <> [Fin]
terminal
xs
=
(
map
Terminal
xs
)
<>
[
Fin
]
data
Arbre
k
e
=
Noeud
{
_noeud_count
::
Double
,
_noeud_entropy
::
e
,
_noeud_fils
::
Map
k
(
Arbre
k
e
)
}
|
Feuille
{
_noeud_count
::
Double
}
deriving
(
Show
)
arbreVide
::
Arbre
k
e
arbreVide
=
Feuille
0
mkArbre
::
Monoid
e
=>
Double
->
Map
Terminal
(
Arbre
Terminal
e
)
->
Arbre
Terminal
e
mkArbre
c
fils
|
Map
.
null
fils
=
Feuille
c
|
otherwise
=
Noeud
c
mempty
fils
insertArbre
::
[
Terminal
]
->
Arbre
Terminal
()
->
Arbre
Terminal
()
insertArbre
[]
n
=
n
insertArbre
(
x
:
xs
)
(
Feuille
c
)
=
mkArbre
(
c
+
1
)
(
Map
.
singleton
x
$
insertArbre
xs
arbreVide
)
insertArbre
(
x
:
xs
)
(
Noeud
c
_e
f
)
=
mkArbre
(
c
+
1
)
(
case
Map
.
lookup
x
f
of
Nothing
->
Map
.
insert
x
(
insertArbre
xs
arbreVide
)
f
Just
arbre
->
Map
.
insert
x
(
insertArbre
xs
arbre
)
f
)
insertArbres
::
[[
Terminal
]]
->
Arbre
Terminal
()
insertArbres
=
List
.
foldr
insertArbre
arbreVide
entropyArbre
::
Arbre
Terminal
()
->
Arbre
Terminal
Double
entropyArbre
(
Feuille
c
)
=
Feuille
c
entropyArbre
(
Noeud
c
_e
fils
)
=
(
Noeud
c
e
(
map
entropyArbre
fils
))
where
e
=
sum
$
map
(
\
(
k
,
f
)
->
case
isDebutFin
k
of
True
->
(
_noeud_count
f
)
/
c
*
log
c
False
->
-
c'
*
log
c'
where
c'
=
(
_noeud_count
f
)
/
c
)
$
Map
.
toList
fils
normalizeArbre
::
Arbre
Terminal
Double
->
Arbre
Terminal
Double
normalizeArbre
(
Feuille
c
)
=
Feuille
c
normalizeArbre
(
Noeud
c
e
f
)
=
Noeud
c
e
(
Map
.
map
(
\
n
->
normalizeLevel
n
$
Map
.
elems
f
)
f
)
normalizeLevel
::
Arbre
Terminal
Double
->
[
Arbre
Terminal
Double
]
->
Arbre
Terminal
Double
normalizeLevel
(
Feuille
c
)
_
=
Feuille
c
normalizeLevel
(
Noeud
c
e
f
)
ns
=
Noeud
c
(
(
e
-
m
)
/
v
)
f
where
es
=
map
_noeud_entropy
ns
m
=
mean
es
v
=
variance
es
buildArbre
::
[[
Terminal
]]
->
Arbre
Terminal
Double
buildArbre
=
normalizeArbre
.
entropyArbre
.
insertArbres
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment