forked from GitHub/gf-core
expose the tree visualization via PGF API
This commit is contained in:
1
GF.cabal
1
GF.cabal
@@ -52,6 +52,7 @@ library
|
|||||||
PGF.Binary
|
PGF.Binary
|
||||||
PGF.Morphology
|
PGF.Morphology
|
||||||
PGF.ShowLinearize
|
PGF.ShowLinearize
|
||||||
|
PGF.VisualizeTree
|
||||||
GF.Data.MultiMap
|
GF.Data.MultiMap
|
||||||
GF.Data.TrieMap
|
GF.Data.TrieMap
|
||||||
GF.Data.Utilities
|
GF.Data.Utilities
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ module GF.Command.Commands (
|
|||||||
import PGF
|
import PGF
|
||||||
import PGF.CId
|
import PGF.CId
|
||||||
import PGF.ShowLinearize
|
import PGF.ShowLinearize
|
||||||
|
import PGF.VisualizeTree
|
||||||
import PGF.Macros
|
import PGF.Macros
|
||||||
import PGF.Data ----
|
import PGF.Data ----
|
||||||
import PGF.Morphology
|
import PGF.Morphology
|
||||||
import PGF.VisualizeTree
|
|
||||||
import GF.Compile.Export
|
import GF.Compile.Export
|
||||||
import GF.Infra.Option (noOptions, readOutputFormat, Encoding(..))
|
import GF.Infra.Option (noOptions, readOutputFormat, Encoding(..))
|
||||||
import GF.Infra.UseIO
|
import GF.Infra.UseIO
|
||||||
@@ -146,7 +146,7 @@ allCommands cod env@(pgf, mos) = Map.fromList [
|
|||||||
"flag -format."
|
"flag -format."
|
||||||
],
|
],
|
||||||
exec = \opts es -> do
|
exec = \opts es -> do
|
||||||
let grph = if null es then [] else alignLinearize pgf (head es)
|
let grph = if null es then [] else graphvizAlignment pgf (head es)
|
||||||
if isFlag "view" opts || isFlag "format" opts then do
|
if isFlag "view" opts || isFlag "format" opts then do
|
||||||
let file s = "_grph." ++ s
|
let file s = "_grph." ++ s
|
||||||
let view = optViewGraph opts ++ " "
|
let view = optViewGraph opts ++ " "
|
||||||
@@ -592,7 +592,7 @@ allCommands cod env@(pgf, mos) = Map.fromList [
|
|||||||
"" -> return Nothing
|
"" -> return Nothing
|
||||||
_ -> readFile file >>= return . Just . getDepLabels . lines
|
_ -> readFile file >>= return . Just . getDepLabels . lines
|
||||||
let lang = optLang opts
|
let lang = optLang opts
|
||||||
let grphs = unlines $ map (dependencyTree outp debug mlab Nothing pgf lang) es
|
let grphs = unlines $ map (graphvizDependencyTree outp debug mlab Nothing pgf lang) es
|
||||||
if isFlag "view" opts || isFlag "format" opts then do
|
if isFlag "view" opts || isFlag "format" opts then do
|
||||||
let file s = "_grphd." ++ s
|
let file s = "_grphd." ++ s
|
||||||
let view = optViewGraph opts ++ " "
|
let view = optViewGraph opts ++ " "
|
||||||
@@ -631,7 +631,7 @@ allCommands cod env@(pgf, mos) = Map.fromList [
|
|||||||
],
|
],
|
||||||
exec = \opts es -> do
|
exec = \opts es -> do
|
||||||
let lang = optLang opts
|
let lang = optLang opts
|
||||||
let grph = if null es then [] else parseTree Nothing pgf lang (head es)
|
let grph = if null es then [] else graphvizParseTree pgf lang (head es)
|
||||||
if isFlag "view" opts || isFlag "format" opts then do
|
if isFlag "view" opts || isFlag "format" opts then do
|
||||||
let file s = "_grph." ++ s
|
let file s = "_grph." ++ s
|
||||||
let view = optViewGraph opts ++ " "
|
let view = optViewGraph opts ++ " "
|
||||||
@@ -667,7 +667,7 @@ allCommands cod env@(pgf, mos) = Map.fromList [
|
|||||||
exec = \opts es -> do
|
exec = \opts es -> do
|
||||||
let funs = not (isOpt "nofun" opts)
|
let funs = not (isOpt "nofun" opts)
|
||||||
let cats = not (isOpt "nocat" opts)
|
let cats = not (isOpt "nocat" opts)
|
||||||
let grph = visualizeTrees pgf (funs,cats) es -- True=digraph
|
let grph = unlines (map (graphvizAbstractTree pgf (funs,cats)) es) -- True=digraph
|
||||||
if isFlag "view" opts || isFlag "format" opts then do
|
if isFlag "view" opts || isFlag "format" opts then do
|
||||||
let file s = "_grph." ++ s
|
let file s = "_grph." ++ s
|
||||||
let view = optViewGraph opts ++ " "
|
let view = optViewGraph opts ++ " "
|
||||||
|
|||||||
@@ -82,7 +82,13 @@ module PGF(
|
|||||||
|
|
||||||
-- ** Morphological Analysis
|
-- ** Morphological Analysis
|
||||||
Lemma, Analysis, Morpho,
|
Lemma, Analysis, Morpho,
|
||||||
lookupMorpho, buildMorpho
|
lookupMorpho, buildMorpho,
|
||||||
|
|
||||||
|
-- ** Visualizations
|
||||||
|
graphvizAbstractTree,
|
||||||
|
graphvizParseTree,
|
||||||
|
graphvizDependencyTree,
|
||||||
|
graphvizAlignment
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import PGF.CId
|
import PGF.CId
|
||||||
@@ -90,6 +96,7 @@ import PGF.Linearize
|
|||||||
import PGF.Generate
|
import PGF.Generate
|
||||||
import PGF.TypeCheck
|
import PGF.TypeCheck
|
||||||
import PGF.Paraphrase
|
import PGF.Paraphrase
|
||||||
|
import PGF.VisualizeTree
|
||||||
import PGF.Macros
|
import PGF.Macros
|
||||||
import PGF.Expr (Tree)
|
import PGF.Expr (Tree)
|
||||||
import PGF.Morphology
|
import PGF.Morphology
|
||||||
|
|||||||
@@ -15,8 +15,13 @@
|
|||||||
-- instead of rolling its own.
|
-- instead of rolling its own.
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
module PGF.VisualizeTree ( visualizeTrees, parseTree, dependencyTree, getDepLabels,
|
module PGF.VisualizeTree ( graphvizAbstractTree
|
||||||
alignLinearize, PosText(..), readPosText
|
, graphvizParseTree
|
||||||
|
, graphvizDependencyTree
|
||||||
|
, graphvizAlignment
|
||||||
|
|
||||||
|
, getDepLabels
|
||||||
|
, PosText(..), readPosText
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import PGF.CId (CId,showCId,pCId,mkCId)
|
import PGF.CId (CId,showCId,pCId,mkCId)
|
||||||
@@ -32,8 +37,8 @@ import qualified Text.ParserCombinators.ReadP as RP
|
|||||||
|
|
||||||
import Debug.Trace
|
import Debug.Trace
|
||||||
|
|
||||||
visualizeTrees :: PGF -> (Bool,Bool) -> [Expr] -> String
|
graphvizAbstractTree :: PGF -> (Bool,Bool) -> Expr -> String
|
||||||
visualizeTrees pgf funscats = unlines . map (prGraph False . tree2graph pgf funscats . expr2tree)
|
graphvizAbstractTree pgf funscats = prGraph False . tree2graph pgf funscats . expr2tree
|
||||||
|
|
||||||
tree2graph :: PGF -> (Bool,Bool) -> Tree -> [String]
|
tree2graph :: PGF -> (Bool,Bool) -> Tree -> [String]
|
||||||
tree2graph pgf (funs,cats) = prf [] where
|
tree2graph pgf (funs,cats) = prf [] where
|
||||||
@@ -60,8 +65,8 @@ prGraph digr ns = concat $ map (++"\n") $ [graph ++ "{\n"] ++ ns ++ ["}"] where
|
|||||||
|
|
||||||
-- dependency trees from Linearize.linearizeMark
|
-- dependency trees from Linearize.linearizeMark
|
||||||
|
|
||||||
dependencyTree :: String -> Bool -> Maybe Labels -> Maybe String -> PGF -> CId -> Expr -> String
|
graphvizDependencyTree :: String -> Bool -> Maybe Labels -> Maybe String -> PGF -> CId -> Expr -> String
|
||||||
dependencyTree format debug mlab ms pgf lang exp = case format of
|
graphvizDependencyTree format debug mlab ms pgf lang exp = case format of
|
||||||
"malt" -> unlines (lin2dep format)
|
"malt" -> unlines (lin2dep format)
|
||||||
"malt_input" -> unlines (lin2dep format)
|
"malt_input" -> unlines (lin2dep format)
|
||||||
_ -> prGraph True (lin2dep format)
|
_ -> prGraph True (lin2dep format)
|
||||||
@@ -158,8 +163,8 @@ getDepLabels ss = Map.fromList [(mkCId f,ls) | f:ls <- map words ss]
|
|||||||
-- parse trees from Linearize.linearizeMark
|
-- parse trees from Linearize.linearizeMark
|
||||||
---- nubrec and domins are quadratic, but could be (n log n)
|
---- nubrec and domins are quadratic, but could be (n log n)
|
||||||
|
|
||||||
parseTree :: Maybe String -> PGF -> CId -> Expr -> String
|
graphvizParseTree :: PGF -> CId -> Expr -> String
|
||||||
parseTree ms pgf lang = prGraph False . lin2tree pgf . linMark where
|
graphvizParseTree pgf lang = prGraph False . lin2tree pgf . linMark where
|
||||||
linMark = head . linearizesMark pgf lang
|
linMark = head . linearizesMark pgf lang
|
||||||
---- use Just str if you have str to match against
|
---- use Just str if you have str to match against
|
||||||
|
|
||||||
@@ -209,8 +214,8 @@ mtag = tag . ('n':) . uncommas
|
|||||||
-- word alignments from Linearize.linearizesMark
|
-- word alignments from Linearize.linearizesMark
|
||||||
-- words are chunks like {[0,1,1,0] old}
|
-- words are chunks like {[0,1,1,0] old}
|
||||||
|
|
||||||
alignLinearize :: PGF -> Expr -> String
|
graphvizAlignment :: PGF -> Expr -> String
|
||||||
alignLinearize pgf = prGraph True . lin2graph . linsMark where
|
graphvizAlignment pgf = prGraph True . lin2graph . linsMark where
|
||||||
linsMark t = [s | la <- cncnames pgf, s <- take 1 (linearizesMark pgf la t)]
|
linsMark t = [s | la <- cncnames pgf, s <- take 1 (linearizesMark pgf la t)]
|
||||||
|
|
||||||
lin2graph :: [String] -> [String]
|
lin2graph :: [String] -> [String]
|
||||||
|
|||||||
Reference in New Issue
Block a user