Metrics can be selected by name

This commit is contained in:
Filip Gralinski 2020-08-08 17:31:45 +02:00
parent d21cfe64fb
commit 425c1b5102

View File

@ -38,7 +38,7 @@ import GEval.Validation
import GEval.Model
import GEval.ModelTraining
import Data.List (intercalate)
import Data.List (find, intercalate)
import Data.Conduit.SmartSource
import Data.CartesianStrings
@ -193,7 +193,8 @@ specParser = GEvalSpecification
<> showDefault
<> metavar "INPUT"
<> help "The name of the file with the input (applicable only for some metrics)" )
<*> ((flip fromMaybe) <$> (singletonMaybe <$> altMetricReader) <*> metricReader)
<*> (selectMetricsByName <$> selectMetricReader
<*> ((flip fromMaybe) <$> (singletonMaybe <$> altMetricReader) <*> metricReader))
<*> formatParser
<*> (optional $ option auto
( long "tokenizer"
@ -238,6 +239,13 @@ specParser = GEvalSpecification
<> metavar "FILE"
<> help "One-line TSV file specifying a list of field names for output and expected files"))
selectMetricsByName :: [String] -> [EvaluationScheme] -> [EvaluationScheme]
selectMetricsByName [] schemes = schemes
selectMetricsByName metricNames schemes = map (selectMetric schemes) metricNames
where selectMetric schemes metricName = case find (\s -> evaluationSchemeName s == metricName) schemes of
Just scheme -> scheme
Nothing -> error $ "Cannot find metric named '" ++ metricName ++ "'"
defaultMinFrequency :: Integer
defaultMinFrequency = 1
@ -298,6 +306,13 @@ altMetricReader = optional $ option auto
<> metavar "METRIC"
<> help "Alternative metric (overrides --metric option)" )
selectMetricReader :: Parser [String]
selectMetricReader = many $ strOption
( long "select-metric"
<> metavar "METRIC-NAME"
<> help "Select metric(s) by name" )
runGEval :: [String] -> IO (Either (ParserResult GEvalOptions) (Maybe [(SourceSpec, [MetricResult])]))
runGEval args = do
ret <- runGEvalGetOptions args