folgerhs 0.1.0.0 → 0.1.0.1
raw patch · 5 files changed
+101/−24 lines, 5 filesdep ~basenew-component:exe:folger-protagonismPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Folgerhs.Stage: type Character = String
+ Folgerhs.Stage: type Line = String
+ Folgerhs.Stage: type State = (Line, Character, [Character])
Files
- app/Main.hs +0/−18
- app/Protagonism/Main.hs +34/−0
- app/Stage/Main.hs +49/−0
- folgerhs.cabal +11/−2
- src/Folgerhs/Stage.hs +7/−4
− app/Main.hs
@@ -1,18 +0,0 @@-module Main (main) where--import Control.Monad-import System.Environment--import Text.XML.Light.Input (parseXML)--import Folgerhs.Stage---main :: IO ()-main = do args <- getArgs- guard (length args == 1)- source <- readFile $ head args- let contents = parseXML source- results = states (corpus contents) beginning- mapM_ print results- return ()
+ app/Protagonism/Main.hs view
@@ -0,0 +1,34 @@+module Main (main) where++import Control.Monad+import System.Environment+import Data.Function (on)+import Data.List++import Text.XML.Light.Input (parseXML)+import Text.Printf (printf)++import Folgerhs.Stage++speaker :: State -> String+speaker (_, s, _) = s++count :: Eq a => a -> [a] -> Int+count e = length . filter (e ==)++protagonism :: [String] -> [(String, Float)]+protagonism ss = sortBy (flip $ on compare snd) $ map (`charProt` ss) (nub ss)+ where charProt c ss = (c, fromIntegral (count c ss) / fromIntegral (length ss))++reprProt :: (String, Float) -> String+reprProt (c, r) = printf "%.2f%% \t %s" (r*100) c++main :: IO ()+main = do args <- getArgs+ if length args /= 1+ then error "Expecting filename."+ else do source <- readFile $ head args+ let contents = parseXML source+ speakers = map speaker $ states (corpus contents) beginning+ mapM_ (putStrLn . reprProt) (protagonism speakers)+ return ()
+ app/Stage/Main.hs view
@@ -0,0 +1,49 @@+module Main (main) where++import Control.Monad+import System.Environment+import Data.List+import Data.Bool+import Data.Maybe++import Text.XML.Light.Input (parseXML)++import Folgerhs.Stage+++displayState :: [Character] -> State -> String+displayState gcs (l, s, cs) = l ++ "," ++ s ++ "," ++ displayStageChar gcs cs+ where displayStageChar gcs cs = intercalate "," $ map (bool "0" "1" . (`elem` cs)) gcs++displayStage :: Character -> [Character] -> Character -> String+displayStage s cs c = if s == c+ then "Speaker"+ else bool "Absent" "Present" (elem c cs)++displayRow :: [Character] -> State -> String+displayRow gcs (l, s, cs) = l ++ "," ++ intercalate "," (map (displayStage s cs) gcs)++displayCharacter :: Character -> String+displayCharacter c = let n = fromMaybe c (stripPrefix "#" c)+ in case span (/= '_') $ reverse n of+ ("", p) -> p+ (s, "") -> s+ (s, p) -> reverse $ tail p++displayHeader :: [Character] -> String+displayHeader gcs = "Act.Scene.Line," ++ intercalate "," (map displayCharacter gcs)++characters :: [State] -> [Character]+characters = nub . concatMap (\(_, _, cs) -> cs)++main :: IO ()+main = do args <- getArgs+ if length args /= 1+ then error "Expecting filename."+ else do source <- readFile $ head args+ let contents = parseXML source+ results = states (corpus contents) beginning+ gcs = characters results+ putStrLn $ displayHeader gcs+ mapM_ (putStrLn . displayRow gcs) results+ return ()
folgerhs.cabal view
@@ -1,5 +1,5 @@ name: folgerhs-version: 0.1.0.0+version: 0.1.0.1 synopsis: Toolset for Folger Shakespeare Library's XML annotated plays description: Toolset for Folger Shakespeare Library's XML annotated plays homepage: https://github.com/SU-LOSP/tools#readme@@ -22,7 +22,16 @@ executable folger-stage hs-source-dirs: app- main-is: Main.hs+ main-is: Stage/Main.hs+ ghc-options: -threaded -rtsopts -with-rtsopts=-N+ build-depends: base+ , folgerhs+ , xml >= 1.3.14 && < 1.3.15+ default-language: Haskell2010++executable folger-protagonism+ hs-source-dirs: app+ main-is: Protagonism/Main.hs ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: base , folgerhs
src/Folgerhs/Stage.hs view
@@ -1,7 +1,10 @@-module Folgerhs.Stage ( corpus- , beginning- , states- ) where+module Folgerhs.Stage ( State+ , Character+ , Line+ , corpus+ , beginning+ , states+ ) where import Data.List import Control.Monad