module Data.ParsedSentence
( module Data.ParsedSentence
, module Data.SyntaxTree
) where
import Protolude
import Data.SyntaxTree
import Data.Map
data ParsedSentence cpos fpos ger feats lemma =
ParsedSentence
{ _rootNode :: SyntaxtTree cpos fpos ger feats lemma
, _indexToNode :: Map Int (SyntaxtTree cpos fpos ger feats lemma)
, _headToNode :: Map Int [SyntaxtTree cpos fpos ger feats lemma]
} deriving(Show,Read,Eq,Generic)
sentenceFromRootNode :: SyntaxtTree cpos fpos ger feats lemma
-> ParsedSentence cpos fpos ger feats lemma
sentenceFromRootNode _rootNode =
ParsedSentence{..}
where
_indexToNode = fromList [ (_tnId $ rootLabel node, node ) | node <- everyNode]
_headToNode = fromListWith (++) [ (_tnHead $ rootLabel node,[node]) | node <- everyNode]
everyNode = everyNodeFrom _rootNode
everyNodeFrom node@(Node _ children) = node:( everyNodeFrom =<< children)