packages feed

duckling 0.1.4.0 → 0.1.5.0

raw patch · 377 files changed

+21872/−12510 lines, 377 filesdep ~aesondep ~basedep ~deepseqnew-component:exe:custom-dimension-examplenew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: aeson, base, deepseq, dependent-sum, hashable, text, text-show, unordered-containers

API changes (from Hackage documentation)

- Duckling.AmountOfMoney.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.AmountOfMoney.Types.AmountOfMoneyValue
- Duckling.AmountOfMoney.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.AmountOfMoney.Types.Currency
- Duckling.AmountOfMoney.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.AmountOfMoney.Types.SingleValue
- Duckling.Debug: debugContext :: Context -> Text -> [Some Dimension] -> IO [Entity]
- Duckling.Dimensions.Types: instance Data.GADT.Compare.GEq Duckling.Dimensions.Types.Dimension
- Duckling.Dimensions.Types: instance Data.GADT.Show.GShow Duckling.Dimensions.Types.Dimension
- Duckling.Dimensions.Types: instance Data.Hashable.Class.Hashable (Data.Some.Some Duckling.Dimensions.Types.Dimension)
- Duckling.Dimensions.Types: instance Data.Hashable.Class.Hashable (Duckling.Dimensions.Types.Dimension a)
- Duckling.Dimensions.Types: instance GHC.Show.Show (Duckling.Dimensions.Types.Dimension a)
- Duckling.Dimensions.Types: instance TextShow.Classes.TextShow (Data.Some.Some Duckling.Dimensions.Types.Dimension)
- Duckling.Dimensions.Types: instance TextShow.Classes.TextShow (Duckling.Dimensions.Types.Dimension a)
- Duckling.Distance.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Distance.Types.DistanceValue
- Duckling.Distance.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Distance.Types.SingleValue
- Duckling.Distance.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Distance.Types.Unit
- Duckling.Duration.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Duration.Types.DurationData
- Duckling.Email.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Email.Types.EmailData
- Duckling.Numeral.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Numeral.Types.NumeralValue
- Duckling.Ordinal.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Ordinal.Types.OrdinalData
- Duckling.PhoneNumber.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.PhoneNumber.Types.PhoneNumberValue
- Duckling.Quantity.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Quantity.Types.QuantityValue
- Duckling.Quantity.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Quantity.Types.SingleValue
- Duckling.Quantity.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Quantity.Types.Unit
- Duckling.Temperature.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Temperature.Types.TemperatureUnit
- Duckling.Temperature.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Temperature.Types.TemperatureValue
- Duckling.Time.EN.US.Rules: ruleMMDD :: Rule
- Duckling.Time.EN.US.Rules: ruleMMDDYYYY :: Rule
- Duckling.Time.EN.US.Rules: ruleMMDDYYYYDot :: Rule
- Duckling.Time.EN.US.Rules: ruleThanksgiving :: Rule
- Duckling.Time.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Time.Types.InstantValue
- Duckling.Time.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Time.Types.SingleTimeValue
- Duckling.Time.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Time.Types.TimeValue
- Duckling.TimeGrain.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.TimeGrain.Types.Grain
- Duckling.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Types.Entity
- Duckling.Url.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Url.Types.UrlData
- Duckling.Volume.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Volume.Types.Unit
- Duckling.Volume.Types: instance Data.Aeson.Types.ToJSON.ToJSON Duckling.Volume.Types.VolumeValue
+ Duckling.AmountOfMoney.Helpers: isCent :: Predicate
+ Duckling.AmountOfMoney.Helpers: isCurrencyOnly :: Predicate
+ Duckling.AmountOfMoney.Helpers: isDime :: Predicate
+ Duckling.AmountOfMoney.Helpers: isSimpleAmountOfMoney :: Predicate
+ Duckling.AmountOfMoney.NL.Corpus: corpus :: Corpus
+ Duckling.AmountOfMoney.NL.Rules: rules :: [Rule]
+ Duckling.AmountOfMoney.Types: CNY :: Currency
+ Duckling.AmountOfMoney.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.AmountOfMoney.Types.AmountOfMoneyValue
+ Duckling.AmountOfMoney.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.AmountOfMoney.Types.Currency
+ Duckling.AmountOfMoney.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.AmountOfMoney.Types.SingleValue
+ Duckling.AmountOfMoney.ZH.Corpus: corpus :: Corpus
+ Duckling.AmountOfMoney.ZH.Rules: rules :: [Rule]
+ Duckling.Core: Options :: Bool -> Options
+ Duckling.Core: TA :: Lang
+ Duckling.Core: [CustomDimension] :: CustomDimension a => a -> Dimension (DimensionData a)
+ Duckling.Core: [latent] :: Entity -> Bool
+ Duckling.Core: [withLatent] :: Options -> Bool
+ Duckling.Core: newtype Options
+ Duckling.Debug: debugCustom :: Context -> Options -> Text -> [Some Dimension] -> IO [Entity]
+ Duckling.Dimensions.TA: allDimensions :: [Some Dimension]
+ Duckling.Dimensions.Types: [CustomDimension] :: CustomDimension a => a -> Dimension (DimensionData a)
+ Duckling.Distance.BG.Corpus: corpus :: Corpus
+ Duckling.Distance.BG.Rules: rules :: [Rule]
+ Duckling.Distance.SV.Corpus: corpus :: Corpus
+ Duckling.Distance.SV.Rules: rules :: [Rule]
+ Duckling.Distance.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Distance.Types.DistanceValue
+ Duckling.Distance.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Distance.Types.SingleValue
+ Duckling.Distance.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Distance.Types.Unit
+ Duckling.Distance.ZH.Corpus: corpus :: Corpus
+ Duckling.Distance.ZH.Rules: rules :: [Rule]
+ Duckling.Duration.BG.Corpus: corpus :: Corpus
+ Duckling.Duration.BG.Rules: rules :: [Rule]
+ Duckling.Duration.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Duration.Types.DurationData
+ Duckling.Duration.Types: instance Data.Semigroup.Semigroup Duckling.Duration.Types.DurationData
+ Duckling.Duration.Types: withGrain :: Grain -> DurationData -> DurationData
+ Duckling.Email.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Email.Types.EmailData
+ Duckling.Locale: TA :: Lang
+ Duckling.Numeral.Helpers: diffIntegerDigits :: Double -> Double -> Int
+ Duckling.Numeral.Helpers: hasGrain :: Predicate
+ Duckling.Numeral.TA.Corpus: corpus :: Corpus
+ Duckling.Numeral.TA.Rules: rules :: [Rule]
+ Duckling.Numeral.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Numeral.Types.NumeralValue
+ Duckling.Ordinal.BG.Corpus: corpus :: Corpus
+ Duckling.Ordinal.BG.Rules: rules :: [Rule]
+ Duckling.Ordinal.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Ordinal.Types.OrdinalData
+ Duckling.PhoneNumber.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.PhoneNumber.Types.PhoneNumberValue
+ Duckling.Quantity.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Quantity.Types.QuantityValue
+ Duckling.Quantity.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Quantity.Types.SingleValue
+ Duckling.Quantity.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Quantity.Types.Unit
+ Duckling.Ranking.Classifiers.TA_XX: classifiers :: Classifiers
+ Duckling.Resolve: Options :: Bool -> Options
+ Duckling.Resolve: [withLatent] :: Options -> Bool
+ Duckling.Resolve: instance GHC.Classes.Eq Duckling.Resolve.Options
+ Duckling.Resolve: instance GHC.Show.Show Duckling.Resolve.Options
+ Duckling.Resolve: newtype Options
+ Duckling.Rules.TA: defaultRules :: Some Dimension -> [Rule]
+ Duckling.Rules.TA: langRules :: Some Dimension -> [Rule]
+ Duckling.Rules.TA: localeRules :: Region -> Some Dimension -> [Rule]
+ Duckling.Temperature.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Temperature.Types.TemperatureUnit
+ Duckling.Temperature.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Temperature.Types.TemperatureValue
+ Duckling.Testing.Types: simpleCheck :: ToJSON a => a -> TestPredicate
+ Duckling.Testing.Types: testOptions :: Options
+ Duckling.Time.Computed: chanukah :: TimeData
+ Duckling.Time.Computed: chineseNewYear :: TimeData
+ Duckling.Time.Computed: dhanteras :: TimeData
+ Duckling.Time.Computed: easterSunday :: TimeData
+ Duckling.Time.Computed: eidalAdha :: TimeData
+ Duckling.Time.Computed: eidalFitr :: TimeData
+ Duckling.Time.Computed: lagBaOmer :: TimeData
+ Duckling.Time.Computed: mawlid :: TimeData
+ Duckling.Time.Computed: muharram :: TimeData
+ Duckling.Time.Computed: navaratri :: TimeData
+ Duckling.Time.Computed: orthodoxEaster :: TimeData
+ Duckling.Time.Computed: passover :: TimeData
+ Duckling.Time.Computed: rajab :: TimeData
+ Duckling.Time.Computed: rakshaBandhan :: TimeData
+ Duckling.Time.Computed: ramadan :: TimeData
+ Duckling.Time.Computed: roshHashana :: TimeData
+ Duckling.Time.Computed: thaiPongal :: TimeData
+ Duckling.Time.Computed: thiruOnam :: TimeData
+ Duckling.Time.Computed: tishaBAv :: TimeData
+ Duckling.Time.Computed: tuBishvat :: TimeData
+ Duckling.Time.Computed: vasantPanchami :: TimeData
+ Duckling.Time.Computed: yomHaatzmaut :: TimeData
+ Duckling.Time.Corpus: datetimeHoliday :: Datetime -> Grain -> Text -> Context -> TimeValue
+ Duckling.Time.Corpus: datetimeIntervalHoliday :: (Datetime, Datetime) -> Grain -> Text -> Context -> TimeValue
+ Duckling.Time.EN.Corpus: latentCorpus :: Corpus
+ Duckling.Time.EN.US.Rules: rulesBackwardCompatible :: [Rule]
+ Duckling.Time.Helpers: durationIntervalAgo :: DurationData -> TimeData
+ Duckling.Time.Helpers: inDurationInterval :: DurationData -> TimeData
+ Duckling.Time.Helpers: mkRuleHolidays' :: [(Text, String, Maybe TimeData)] -> [Rule]
+ Duckling.Time.Helpers: mkRuleMonthsWithLatent :: [(Text, String, Bool)] -> [Rule]
+ Duckling.Time.Helpers: predNthClosest :: Int -> TimeData -> TimeData -> TimeData
+ Duckling.Time.Helpers: season :: TimeData
+ Duckling.Time.Helpers: timeComputed :: [TimeObject] -> Predicate
+ Duckling.Time.Helpers: weekday :: TimeData
+ Duckling.Time.Types: Fall :: SeasonName
+ Duckling.Time.Types: Season :: Integer -> SeasonName -> Season
+ Duckling.Time.Types: Spring :: SeasonName
+ Duckling.Time.Types: Summer :: SeasonName
+ Duckling.Time.Types: Winter :: SeasonName
+ Duckling.Time.Types: [holiday] :: TimeData -> Maybe Text
+ Duckling.Time.Types: [seasonName] :: Season -> SeasonName
+ Duckling.Time.Types: [startYear] :: Season -> Integer
+ Duckling.Time.Types: data Season
+ Duckling.Time.Types: data SeasonName
+ Duckling.Time.Types: diffStartTime :: TimeObject -> TimeObject -> NominalDiffTime
+ Duckling.Time.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Time.Types.InstantValue
+ Duckling.Time.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Time.Types.SingleTimeValue
+ Duckling.Time.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Time.Types.TimeValue
+ Duckling.Time.Types: instance GHC.Classes.Eq Duckling.Time.Types.Season
+ Duckling.Time.Types: instance GHC.Classes.Eq Duckling.Time.Types.SeasonName
+ Duckling.Time.Types: instance GHC.Classes.Ord Duckling.Time.Types.Season
+ Duckling.Time.Types: instance GHC.Classes.Ord Duckling.Time.Types.SeasonName
+ Duckling.Time.Types: instance GHC.Enum.Enum Duckling.Time.Types.SeasonName
+ Duckling.Time.Types: instance GHC.Show.Show Duckling.Time.Types.Season
+ Duckling.Time.Types: instance GHC.Show.Show Duckling.Time.Types.SeasonName
+ Duckling.Time.Types: nextSeason :: Season -> Season
+ Duckling.Time.Types: prevSeason :: Season -> Season
+ Duckling.Time.Types: seasonEnd :: Season -> Day
+ Duckling.Time.Types: seasonOf :: Day -> Season
+ Duckling.Time.Types: seasonPredicate :: Predicate
+ Duckling.Time.Types: seasonStart :: Season -> Day
+ Duckling.Time.Types: toMidnight :: Day -> UTCTime
+ Duckling.Time.Types: weekdayPredicate :: Predicate
+ Duckling.TimeGrain.BG.Rules: rules :: [Rule]
+ Duckling.TimeGrain.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.TimeGrain.Types.Grain
+ Duckling.Types: [AmountOfMoney] :: Dimension AmountOfMoneyData
+ Duckling.Types: [CustomDimension] :: CustomDimension a => a -> Dimension (DimensionData a)
+ Duckling.Types: [Distance] :: Dimension DistanceData
+ Duckling.Types: [Duration] :: Dimension DurationData
+ Duckling.Types: [Email] :: Dimension EmailData
+ Duckling.Types: [Numeral] :: Dimension NumeralData
+ Duckling.Types: [Ordinal] :: Dimension OrdinalData
+ Duckling.Types: [PhoneNumber] :: Dimension PhoneNumberData
+ Duckling.Types: [Quantity] :: Dimension QuantityData
+ Duckling.Types: [RegexMatch] :: Dimension GroupMatch
+ Duckling.Types: [Temperature] :: Dimension TemperatureData
+ Duckling.Types: [TimeGrain] :: Dimension Grain
+ Duckling.Types: [Time] :: Dimension TimeData
+ Duckling.Types: [Url] :: Dimension UrlData
+ Duckling.Types: [Volume] :: Dimension VolumeData
+ Duckling.Types: [isLatent] :: ResolvedToken -> Bool
+ Duckling.Types: [latent] :: Entity -> Bool
+ Duckling.Types: class (Show a, Typeable a) => CustomDimension a where {
+ Duckling.Types: data Dimension a
+ Duckling.Types: dimDependents :: CustomDimension a => a -> HashSet (Some Dimension)
+ Duckling.Types: dimLangRules :: CustomDimension a => Lang -> a -> [Rule]
+ Duckling.Types: dimLocaleRules :: CustomDimension a => Region -> a -> [Rule]
+ Duckling.Types: dimRules :: CustomDimension a => a -> [Rule]
+ Duckling.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Types.Entity
+ Duckling.Types: instance Data.GADT.Compare.GEq Duckling.Types.Dimension
+ Duckling.Types: instance Data.GADT.Show.GShow Duckling.Types.Dimension
+ Duckling.Types: instance Data.Hashable.Class.Hashable (Data.Some.Some Duckling.Types.Dimension)
+ Duckling.Types: instance Data.Hashable.Class.Hashable (Duckling.Types.Dimension a)
+ Duckling.Types: instance GHC.Show.Show (Duckling.Types.Dimension a)
+ Duckling.Types: instance TextShow.Classes.TextShow (Data.Some.Some Duckling.Types.Dimension)
+ Duckling.Types: instance TextShow.Classes.TextShow (Duckling.Types.Dimension a)
+ Duckling.Types: type family DimensionData a;
+ Duckling.Types: }
+ Duckling.Url.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Url.Types.UrlData
+ Duckling.Volume.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Volume.Types.Unit
+ Duckling.Volume.Types: instance Data.Aeson.Types.Class.ToJSON Duckling.Volume.Types.VolumeValue
- Duckling.Api: analyze :: Text -> Context -> HashSet (Some Dimension) -> [ResolvedToken]
+ Duckling.Api: analyze :: Text -> Context -> Options -> HashSet (Some Dimension) -> [ResolvedToken]
- Duckling.Api: parse :: Text -> Context -> [Some Dimension] -> [Entity]
+ Duckling.Api: parse :: Text -> Context -> Options -> [Some Dimension] -> [Entity]
- Duckling.Core: Entity :: Text -> Text -> Value -> Int -> Int -> Node -> Entity
+ Duckling.Core: Entity :: Text -> Text -> Value -> Int -> Int -> Bool -> Node -> Entity
- Duckling.Core: parse :: Text -> Context -> [Some Dimension] -> [Entity]
+ Duckling.Core: parse :: Text -> Context -> Options -> [Some Dimension] -> [Entity]
- Duckling.Engine: parseAndResolve :: [Rule] -> Text -> Context -> [ResolvedToken]
+ Duckling.Engine: parseAndResolve :: [Rule] -> Text -> Context -> Options -> [ResolvedToken]
- Duckling.Resolve: resolve :: Resolve a => Context -> a -> Maybe (ResolvedValue a)
+ Duckling.Resolve: resolve :: Resolve a => Context -> Options -> a -> Maybe (ResolvedValue a, Bool)
- Duckling.Testing.Types: type Corpus = (Context, [Example])
+ Duckling.Testing.Types: type Corpus = (Context, Options, [Example])
- Duckling.Testing.Types: type NegativeCorpus = (Context, [Text])
+ Duckling.Testing.Types: type NegativeCorpus = (Context, Options, [Text])
- Duckling.Testing.Types: withLocale :: (Context, [a]) -> Locale -> [a] -> (Context, [a])
+ Duckling.Testing.Types: withLocale :: (Context, Options, [a]) -> Locale -> [a] -> (Context, Options, [a])
- Duckling.Time.Corpus: datetime :: Datetime -> Grain -> Context -> SingleTimeValue
+ Duckling.Time.Corpus: datetime :: Datetime -> Grain -> Context -> TimeValue
- Duckling.Time.Corpus: datetimeInterval :: (Datetime, Datetime) -> Grain -> Context -> SingleTimeValue
+ Duckling.Time.Corpus: datetimeInterval :: (Datetime, Datetime) -> Grain -> Context -> TimeValue
- Duckling.Time.Corpus: datetimeOpenInterval :: IntervalDirection -> Datetime -> Grain -> Context -> SingleTimeValue
+ Duckling.Time.Corpus: datetimeOpenInterval :: IntervalDirection -> Datetime -> Grain -> Context -> TimeValue
- Duckling.Time.Types: TimeData :: Predicate -> Bool -> Grain -> Bool -> Maybe Form -> Maybe IntervalDirection -> Bool -> TimeData
+ Duckling.Time.Types: TimeData :: Predicate -> Bool -> Grain -> Bool -> Maybe Form -> Maybe IntervalDirection -> Bool -> Maybe Text -> TimeData
- Duckling.Time.Types: TimeValue :: SingleTimeValue -> [SingleTimeValue] -> TimeValue
+ Duckling.Time.Types: TimeValue :: SingleTimeValue -> [SingleTimeValue] -> (Maybe Text) -> TimeValue
- Duckling.Types: Entity :: Text -> Text -> Value -> Int -> Int -> Node -> Entity
+ Duckling.Types: Entity :: Text -> Text -> Value -> Int -> Int -> Bool -> Node -> Entity
- Duckling.Types: Resolved :: Range -> Node -> Value -> ResolvedToken
+ Duckling.Types: Resolved :: Range -> Node -> Value -> Bool -> ResolvedToken

Files

Duckling/AmountOfMoney/AR/Corpus.hs view
@@ -21,7 +21,8 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing},+  testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/AR/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.AR.Rules@@ -28,6 +29,20 @@ import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ rulePounds :: Rule rulePounds = Rule   { name = "£"@@ -373,7 +388,8 @@  rules :: [Rule] rules =-  [ ruleCent+  [ ruleUnitAmount+  , ruleCent   , rulePounds   , ruleDinars   , ruleDirhams
Duckling/AmountOfMoney/BG/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale BG Nothing}, allExamples)+corpus = (testContext {locale = makeLocale BG Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/BG/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.BG.Rules@@ -16,18 +17,30 @@ import Data.Maybe import Data.String import Prelude-import qualified Data.Text as Text  import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..))-import Duckling.Regex.Types import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleBGN :: Rule ruleBGN = Rule   { name = "лв"@@ -255,7 +268,8 @@  rules :: [Rule] rules =-  [ ruleBGN+  [ ruleUnitAmount+  , ruleBGN   , ruleDollar   , ruleCent   , ruleEUR
Duckling/AmountOfMoney/EN/Corpus.hs view
@@ -20,14 +20,14 @@ import Duckling.Testing.Types  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "exactly dollars"       ]  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/EN/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.EN.Rules@@ -28,6 +29,20 @@ import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ rulePounds :: Rule rulePounds = Rule   { name = "£"@@ -310,7 +325,8 @@  rules :: [Rule] rules =-  [ ruleACurrency+  [ ruleUnitAmount+  , ruleACurrency   , ruleBucks   , ruleCent   , ruleDinars
Duckling/AmountOfMoney/ES/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/ES/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.ES.Rules@@ -20,12 +21,26 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleDollar :: Rule ruleDollar = Rule   { name = "dollar"@@ -115,7 +130,8 @@  rules :: [Rule] rules =-  [ ruleCent+  [ ruleUnitAmount+  , ruleCent   , ruleDollar   , ruleIntersect   , ruleIntersectAndNumeral
Duckling/AmountOfMoney/FR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/FR/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.FR.Rules@@ -26,6 +27,20 @@ import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleIntersectAndNumeral :: Rule ruleIntersectAndNumeral = Rule   { name = "intersect (and number)"@@ -242,7 +257,8 @@  rules :: [Rule] rules =-  [ ruleCent+  [ ruleUnitAmount+  , ruleCent   , ruleIntersect   , ruleIntersectAndNumeral   , ruleIntersectAndXCents
Duckling/AmountOfMoney/GA/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/GA/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.GA.Rules@@ -20,12 +21,26 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency (..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleDollar :: Rule ruleDollar = Rule   { name = "$"@@ -148,7 +163,8 @@  rules :: [Rule] rules =-  [ ruleAmountofmoneyGlan+  [ ruleUnitAmount+  , ruleAmountofmoneyGlan   , ruleCent   , ruleDollar   , ruleInr
Duckling/AmountOfMoney/HR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/HR/Rules.hs view
@@ -6,6 +6,7 @@ -- of patent rights can be found in the PATENTS file in the same directory.  {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.HR.Rules@@ -21,13 +22,27 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Regex.Types import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleIntersectAndNumber :: Rule ruleIntersectAndNumber = Rule   { name = "intersect (and number)"@@ -185,7 +200,8 @@  rules :: [Rule] rules =-  [ ruleDollar+  [ ruleUnitAmount+  , ruleDollar   , rulePound   , ruleOtherPounds   , ruleAed
Duckling/AmountOfMoney/Helpers.hs view
@@ -12,7 +12,11 @@ module Duckling.AmountOfMoney.Helpers   ( currencyOnly   , financeWith+  , isSimpleAmountOfMoney+  , isCent   , isCents+  , isCurrencyOnly+  , isDime   , isMoneyWithValue   , isWithoutCents   , withCents@@ -27,7 +31,7 @@ import Prelude  import Duckling.AmountOfMoney.Types (Currency (..), AmountOfMoneyData (..))-import Duckling.Numeral.Types (isInteger)+import Duckling.Numeral.Types (getIntValue, isInteger) import Duckling.Dimensions.Types import Duckling.Types hiding (Entity(..)) @@ -53,6 +57,28 @@ isMoneyWithValue (Token AmountOfMoney AmountOfMoneyData{value = v1, minValue = v2, maxValue = v3}) =  any isJust [v1, v2, v3] isMoneyWithValue _ = False++isCurrencyOnly :: Predicate+isCurrencyOnly (Token AmountOfMoney AmountOfMoneyData+  {value = Nothing, minValue = Nothing, maxValue = Nothing}) = True+isCurrencyOnly _ = False++isSimpleAmountOfMoney :: Predicate+isSimpleAmountOfMoney (Token AmountOfMoney AmountOfMoneyData+  {minValue = Nothing, maxValue = Nothing}) = True+isSimpleAmountOfMoney _ = False++isDime :: Predicate+isDime (Token AmountOfMoney AmountOfMoneyData+  {value = Just d, currency = Cent}) =+  maybe False (\i -> (i `mod` 10) == 0) $ getIntValue d+isDime _ = False++isCent :: Predicate+isCent (Token AmountOfMoney AmountOfMoneyData+  {value = Just c, currency = Cent}) =+  maybe False (\i -> i >= 0 && i <= 9) $ getIntValue c+isCent _ = False  -- ----------------------------------------------------------------- -- Production
Duckling/AmountOfMoney/ID/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ID Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ID Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/ID/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.ID.Rules@@ -18,14 +19,28 @@ import Prelude  import Duckling.AmountOfMoney.Helpers-import Duckling.AmountOfMoney.Types (Currency(..))+import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData(..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleDollar :: Rule ruleDollar = Rule   { name = "$"@@ -78,7 +93,8 @@  rules :: [Rule] rules =-  [ ruleDollar+  [ ruleUnitAmount+  , ruleDollar   , ruleIdr   , ruleIntersect   , ruleJpy
Duckling/AmountOfMoney/KO/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/KO/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.KO.Rules@@ -20,9 +21,26 @@ import Duckling.Dimensions.Types import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..))+import Duckling.Numeral.Helpers (isPositive)+import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney+import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleAmountofmoneyAbout :: Rule ruleAmountofmoneyAbout = Rule   { name = "<amount-of-money> about"@@ -147,7 +165,8 @@  rules :: [Rule] rules =-  [ ruleAboutAmountofmoney+  [ ruleUnitAmount+  , ruleAboutAmountofmoney   , ruleAmountofmoneyAbout   , ruleAud   , ruleCent
Duckling/AmountOfMoney/NB/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NB Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NB Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/NB/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.NB.Rules@@ -20,12 +21,26 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency (..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleIntersectAndNumeral :: Rule ruleIntersectAndNumeral = Rule   { name = "intersect (and number)"@@ -152,7 +167,8 @@  rules :: [Rule] rules =-  [ ruleAboutAmountofmoney+  [ ruleUnitAmount+  , ruleAboutAmountofmoney   , ruleCent   , ruleDirham   , ruleIntersect
+ Duckling/AmountOfMoney/NL/Corpus.hs view
@@ -0,0 +1,106 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.AmountOfMoney.NL.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.AmountOfMoney.Types+import Duckling.Locale+import Duckling.Resolve+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale NL Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (simple Dollar 1)+             [ "$1"+             , "1 dollar"+             ]+  , examples (simple Dollar 10)+             [ "$10"+             , "$ 10"+             , "10$"+             , "10 dollars"+             , "tien dollar"+             ]+  , examples (simple Cent 10)+             [ "10 cent"+             , "tien pennies"+             , "tien cents"+             , "10 c"+             , "10¢"+             ]+  , examples (simple Dollar 10000)+             [ "$10K"+             , "10k$"+             , "$10000"+             , "10000,00 $"+             ]+  , examples (simple USD 3.14)+             [ "USD3,14"+             , "3,14US$"+             , "US$ 3,14"+             ]+  , examples (simple EUR 20)+             [ "20\x20ac"+             , "20 euros"+             , "20 Euro"+             , "20 Euros"+             , "EUR 20"+             , "EUR 20,0"+             , "20€"+             , "20 €ur"+             ]+  , examples (simple Dollar 20.43)+             [ "$20 en 43c"+             , "$20,43"+             , "20 dollar 43c"+             , "20 dollars 43 cents"+             , "20 dollar 43"+             ]+  , examples (simple GBP 3.01)+             [ "GBP3,01"+             , "GBP 3,01"+             , "3 GBP een penny"+             ]+  , examples (simple Unnamed 42)+             [ "42 bucks"+             , "ongeveer twee-en-veertig bucks"+             , "precies 42 bucks"+             ]+  , examples (between Dollar (10, 20))+             [ "vanaf 10 dollars tot 20 dollars"+             , "rond de 10-20 dollars"+             , "tussen 10 dollars en 20 dollars"+             , "ongeveer $10-$20"+             , "10-20 dollars"+             ]+  , examples (between Dollar (1.1, 1.3))+             [ "tussen 1,1 dollar en 1,3 dollars"+             , "van 1,1$ en 1,3 dollars"+             ]+  , examples (under EUR 7)+             [ "minder dan 7 euros"+             , "minder dan zeven EUR"+             , "lager dan 7€"+             ]+  , examples (above Dollar 1.42)+             [ "meer dan 1 dollar en 42 cents"+             , "minstens $1,42"+             , "boven de 1,42 dollars"+             , "boven de 1 dollar en 42 cents"+             ]+  ]
+ Duckling/AmountOfMoney/NL/Rules.hs view
@@ -0,0 +1,270 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++module Duckling.AmountOfMoney.NL.Rules+  ( rules+  ) where++import Data.Maybe+import Data.String+import Prelude+import qualified Data.Text as Text++import Duckling.AmountOfMoney.Helpers+import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..))+import Duckling.Dimensions.Types+import Duckling.Numeral.Helpers (isNatural, isPositive)+import Duckling.Numeral.Types (NumeralData (..))+import Duckling.Regex.Types+import Duckling.Types+import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney+import qualified Duckling.Numeral.Types as TNumeral++ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }++rulePounds :: Rule+rulePounds = Rule+  { name = "£"+  , pattern =+    [ regex "pou?nds?"+    ]+  , prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Pound+  }++ruleCent :: Rule+ruleCent = Rule+  { name = "cent"+  , pattern =+    [ regex "cents?|penn(y|ies)|pence|sens?"+    ]+  , prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Cent+  }++ruleBucks :: Rule+ruleBucks = Rule+  { name = "bucks"+  , pattern =+    [ regex "bucks?"+    ]+  , prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Unnamed+  }++ruleIntersectAndXCents :: Rule+ruleIntersectAndXCents = Rule+  { name = "intersect (and X cents)"+  , pattern =+    [ Predicate isWithoutCents+    , regex "en"+    , Predicate isCents+    ]+  , prod = \tokens -> case tokens of+      (Token AmountOfMoney fd:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just c}:+       _) -> Just . Token AmountOfMoney $ withCents c fd+      _ -> Nothing+  }++ruleIntersect :: Rule+ruleIntersect = Rule+  { name = "intersect"+  , pattern =+    [ Predicate isWithoutCents+    , Predicate isNatural+    ]+  , prod = \tokens -> case tokens of+      (Token AmountOfMoney fd:+       Token Numeral NumeralData{TNumeral.value = c}:+       _) -> Just . Token AmountOfMoney $ withCents c fd+      _ -> Nothing+  }++ruleIntersectAndNumeral :: Rule+ruleIntersectAndNumeral = Rule+  { name = "intersect (and number)"+  , pattern =+    [ Predicate isWithoutCents+    , regex "en"+    , Predicate isNatural+    ]+  , prod = \tokens -> case tokens of+      (Token AmountOfMoney fd:+       _:+       Token Numeral NumeralData{TNumeral.value = c}:+       _) -> Just . Token AmountOfMoney $ withCents c fd+      _ -> Nothing+  }++ruleIntersectXCents :: Rule+ruleIntersectXCents = Rule+  { name = "intersect (X cents)"+  , pattern =+    [ Predicate isWithoutCents+    , Predicate isCents+    ]+  , prod = \tokens -> case tokens of+      (Token AmountOfMoney fd:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just c}:+       _) -> Just . Token AmountOfMoney $ withCents c fd+      _ -> Nothing+  }++rulePrecision :: Rule+rulePrecision = Rule+  { name = "about|exactly <amount-of-money>"+  , pattern =+    [ regex "precies|ongeveer|over|dicht|bijna|in de buurt|rond de"+    , Predicate isMoneyWithValue+    ]+  , prod = \tokens -> case tokens of+      (_:token:_) -> Just token+      _ -> Nothing+  }++ruleIntervalBetweenNumeral :: Rule+ruleIntervalBetweenNumeral = Rule+  { name = "between|from <numeral> to|and <amount-of-money>"+  , pattern =+    [ regex "tussen|vanaf|van"+    , Predicate isPositive+    , regex "tot|en"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \tokens -> case tokens of+      (_:+       Token Numeral NumeralData{TNumeral.value = from}:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       _) | from < to ->+        Just . Token AmountOfMoney . withInterval (from, to) $ currencyOnly c+      _ -> Nothing+  }++ruleIntervalBetween :: Rule+ruleIntervalBetween = Rule+  { name = "between|from <amount-of-money> to|and <amount-of-money>"+  , pattern =+    [ regex "tussen|vanaf|van"+    , financeWith TAmountOfMoney.value isJust+    , regex "tot|en"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \tokens -> case tokens of+      (_:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just from,+                  TAmountOfMoney.currency = c1}:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c2}:+       _) | from < to && c1 == c2 ->+        Just . Token AmountOfMoney . withInterval (from, to) $ currencyOnly c1+      _ -> Nothing+  }++ruleIntervalNumeralDash :: Rule+ruleIntervalNumeralDash = Rule+  { name = "<numeral> - <amount-of-money>"+  , pattern =+    [ Predicate isNatural+    , regex "\\-"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \tokens -> case tokens of+      (Token Numeral NumeralData{TNumeral.value = from}:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       _) | from < to ->+         Just . Token AmountOfMoney . withInterval (from, to) $ currencyOnly c+      _ -> Nothing+  }++ruleIntervalDash :: Rule+ruleIntervalDash = Rule+  { name = "<amount-of-money> - <amount-of-money>"+  , pattern =+    [ financeWith TAmountOfMoney.value isJust+    , regex "\\-"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \tokens -> case tokens of+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just from,+                  TAmountOfMoney.currency = c1}:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c2}:+       _) | from < to && c1 == c2 ->+        Just . Token AmountOfMoney . withInterval (from, to) $ currencyOnly c1+      _ -> Nothing+  }++ruleIntervalMax :: Rule+ruleIntervalMax = Rule+  { name = "under/less/lower/no more than <amount-of-money>"+  , pattern =+    [ regex "(minder|lager|niet? meer) dan"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \tokens -> case tokens of+      (_:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       _) -> Just . Token AmountOfMoney . withMax to $ currencyOnly c+      _ -> Nothing+  }++ruleIntervalMin :: Rule+ruleIntervalMin = Rule+  { name = "over/above/at least/more than <amount-of-money>"+  , pattern =+    [ regex "boven de|minstens|meer dan"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \tokens -> case tokens of+      (_:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       _) -> Just . Token AmountOfMoney . withMin to $ currencyOnly c+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleUnitAmount+  , ruleBucks+  , ruleCent+  , ruleIntersect+  , ruleIntersectAndNumeral+  , ruleIntersectAndXCents+  , ruleIntersectXCents+  , ruleIntervalBetweenNumeral+  , ruleIntervalBetween+  , ruleIntervalMax+  , ruleIntervalMin+  , ruleIntervalNumeralDash+  , ruleIntervalDash+  , rulePounds+  , rulePrecision+  ]
Duckling/AmountOfMoney/PT/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/PT/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.PT.Rules@@ -20,12 +21,26 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleIntersectAndNumeral :: Rule ruleIntersectAndNumeral = Rule   { name = "intersect (and number)"@@ -124,7 +139,8 @@  rules :: [Rule] rules =-  [ ruleBrl+  [ ruleUnitAmount+  , ruleBrl   , ruleCent   , ruleDollar   , ruleIntersect
Duckling/AmountOfMoney/RO/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/RO/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.RO.Rules@@ -21,13 +22,27 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Regex.Types import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleIntersectAndNumeral :: Rule ruleIntersectAndNumeral = Rule   { name = "intersect (and number)"@@ -195,7 +210,8 @@  rules :: [Rule] rules =-  [ ruleAed+  [ ruleUnitAmount+  , ruleAed   , ruleCent   , ruleDollar   , ruleInr
Duckling/AmountOfMoney/RU/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/RU/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.RU.Rules@@ -28,6 +29,20 @@ import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleRuble :: Rule ruleRuble = Rule   { name = "руб"@@ -284,7 +299,8 @@  rules :: [Rule] rules =-  [ ruleBucks+  [ ruleUnitAmount+  , ruleBucks   , ruleCent   , ruleDollar   , ruleEUR
Duckling/AmountOfMoney/Rules.hs view
@@ -40,6 +40,9 @@   , ("byn", BYN)   , ("¢", Cent)   , ("c", Cent)+  , ("cny", CNY)+  , ("rmb", CNY)+  , ("yuan", CNY)   , ("$", Dollar)   , ("dinar", Dinar)   , ("dinars", Dinar)@@ -103,7 +106,7 @@ ruleCurrencies = Rule   { name = "currencies"   , pattern =-    [ regex "(aed|aud|bgn|brl|byn|¢|c|\\$|dinars?|dollars?|egp|(e|€)uro?s?|€|gbp|hrk|idr|ils|inr|iqd|jod|¥|jpy|krw|kwd|lbp|mad|myr|rm|nok|£|pta?s?|qar|₽|rs\\.?|riy?als?|ron|rub|rupees?|sar|sek|sgb|shekels?|us(d|\\$)|vnd|yen)"+    [ regex "(aed|aud|bgn|brl|byn|¢|c|cny|\\$|dinars?|dollars?|egp|(e|€)uro?s?|€|gbp|hrk|idr|ils|inr|iqd|jod|¥|jpy|krw|kwd|lbp|mad|myr|rm|nok|£|pta?s?|qar|₽|rs\\.?|riy?als?|ron|rub|rupees?|sar|sek|sgb|shekels?|us(d|\\$)|vnd|yen|yuan)"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (match:_)):_) -> do@@ -117,7 +120,7 @@   { name = "<amount> <unit>"   , pattern =     [ Predicate isPositive-    , financeWith TAmountOfMoney.value isNothing+    , Predicate isCurrencyOnly     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v}:@@ -126,23 +129,8 @@       _ -> Nothing   } -ruleUnitAmount :: Rule-ruleUnitAmount = Rule-  { name = "<unit> <amount>"-  , pattern =-    [ financeWith TAmountOfMoney.value isNothing-    , Predicate isPositive-    ]-  , prod = \tokens -> case tokens of-      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:-       Token Numeral NumeralData{TNumeral.value = v}:-       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c-      _ -> Nothing-  }- rules :: [Rule] rules =   [ ruleAmountUnit   , ruleCurrencies-  , ruleUnitAmount   ]
Duckling/AmountOfMoney/SV/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale SV Nothing}, allExamples)+corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/AmountOfMoney/SV/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.SV.Rules@@ -20,12 +21,26 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleIntersectAndNumeral :: Rule ruleIntersectAndNumeral = Rule   { name = "intersect (and number)"@@ -157,7 +172,8 @@  rules :: [Rule] rules =-  [ ruleAboutAmountofmoney+  [ ruleUnitAmount+  , ruleAboutAmountofmoney   , ruleCent   , ruleDirham   , ruleExactlyAmountofmoney
Duckling/AmountOfMoney/Types.hs view
@@ -41,6 +41,7 @@   | BGN   | BRL   | BYN+  | CNY   | EGP   | EUR   | GBP@@ -82,6 +83,7 @@   toJSON BGN     = "BGN"   toJSON BRL     = "BRL"   toJSON BYN     = "BYN"+  toJSON CNY     = "CNY"   toJSON EGP     = "EGP"   toJSON EUR     = "EUR"   toJSON GBP     = "GBP"@@ -118,19 +120,19 @@  instance Resolve AmountOfMoneyData where   type ResolvedValue AmountOfMoneyData = AmountOfMoneyValue-  resolve _ AmountOfMoneyData {value = Nothing, minValue = Nothing+  resolve _ _ AmountOfMoneyData {value = Nothing, minValue = Nothing                               , maxValue = Nothing} = Nothing-  resolve _ AmountOfMoneyData {value = Just value, currency} =-    Just $ simple currency value-  resolve _ AmountOfMoneyData {value = Nothing, currency = c+  resolve _ _ AmountOfMoneyData {value = Just value, currency} =+    Just (simple currency value, False)+  resolve _ _ AmountOfMoneyData {value = Nothing, currency = c                               , minValue = Just from, maxValue = Just to} =-    Just $ between c (from, to)-  resolve _ AmountOfMoneyData {value = Nothing, currency = c+    Just (between c (from, to), False)+  resolve _ _ AmountOfMoneyData {value = Nothing, currency = c                               , minValue = Just v, maxValue = Nothing} =-    Just $ above c v-  resolve _ AmountOfMoneyData {value = Nothing, currency = c+    Just (above c v, False)+  resolve _ _ AmountOfMoneyData {value = Nothing, currency = c                               , minValue = Nothing, maxValue = Just v} =-    Just $ under c v+    Just (under c v, False)  data IntervalDirection = Above | Under   deriving (Eq, Generic, Hashable, Ord, Show, NFData)
Duckling/AmountOfMoney/VI/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale VI Nothing}, allExamples)+corpus = (testContext {locale = makeLocale VI Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat@@ -37,12 +37,12 @@              , "mười xu"              ]   , examples (simple Dollar 10000)-             [ "$10,000"+             [ "$10.000"              , "10K$"              , "$10k"              ]   , examples (simple USD 1.23)-             [ "USD1.23"+             [ "USD1,23"              ]   , examples (simple Dollar 2.23)              [ "2 đô la và 23 xen"@@ -56,7 +56,7 @@              [ "mười đồng"              ]   , examples (simple VND 10000)-             [ "10,000 đồng"+             [ "10.000 đồng"              , "10K đồng"              , "10k đồng"              ]@@ -72,7 +72,7 @@              , "EUR 20"              ]   , examples (simple EUR 29.99)-             [ "EUR29.99"+             [ "EUR29,99"              ]   , examples (simple INR 20)              [ "Rs. 20"@@ -94,8 +94,8 @@              , "chín pounds"              ]   , examples (simple GBP 3.01)-             [ "GBP3.01"-             , "GBP 3.01"+             [ "GBP3,01"+             , "GBP 3,01"              ]   , examples (simple AED 1)              [ "1 AED."
Duckling/AmountOfMoney/VI/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.AmountOfMoney.VI.Rules@@ -20,12 +21,26 @@ import Duckling.AmountOfMoney.Helpers import Duckling.AmountOfMoney.Types (Currency(..), AmountOfMoneyData (..)) import Duckling.Dimensions.Types-import Duckling.Numeral.Helpers (isNatural)+import Duckling.Numeral.Helpers (isNatural, isPositive) import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Types import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney import qualified Duckling.Numeral.Types as TNumeral +ruleUnitAmount :: Rule+ruleUnitAmount = Rule+  { name = "<unit> <amount>"+  , pattern =+    [ Predicate isCurrencyOnly+    , Predicate isPositive+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.currency = c}:+       Token Numeral NumeralData{TNumeral.value = v}:+       _) -> Just . Token AmountOfMoney . withValue v $ currencyOnly c+      _ -> Nothing+  }+ ruleNg :: Rule ruleNg = Rule   { name = "đồng"@@ -142,7 +157,8 @@  rules :: [Rule] rules =-  [ ruleCent+  [ ruleUnitAmount+  , ruleCent   , ruleDirham   , ruleDollar   , ruleIntersect
+ Duckling/AmountOfMoney/ZH/Corpus.hs view
@@ -0,0 +1,68 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.AmountOfMoney.ZH.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.AmountOfMoney.Types+import Duckling.Locale+import Duckling.Resolve+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale ZH Nothing},+  testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (simple Cent 5)+             [ "五分"+             , "5分"+             ]+  , examples (simple Cent 20)+             [ "20分"+             , "二十分"+             , "2角"+             , "两毛"+             ]+  , examples (simple Cent 25)+             [ "25分"+             , "二十五分"+             , "两角五分"+             , "两毛五"+             ]+  , examples (simple Dollar 7)+             [ "7块"+             , "七元"+             ]+  , examples (simple CNY 3.14)+             [ "3.14人民币"+             , "人民幣3.14"+             ]+  , examples (under Dollar 1.2)+             [ "1.2元以下"+             , "最多一块二角"+             , "最多一块二"+             ]+  , examples (above Dollar 3.04)+             [ "3.04块以上"+             , "至少三块四分"+             , "至少三块零四"+             ]+  , examples (between Dollar (5.6, 5.78))+             [ "5.6到5.78元"+             , "五元六角-五元七毛八分"+             , "五块六到五块七毛八"+             ]+  ]
+ Duckling/AmountOfMoney/ZH/Rules.hs view
@@ -0,0 +1,274 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++module Duckling.AmountOfMoney.ZH.Rules+  ( rules+  ) where++import Data.Maybe+import Data.String+import Prelude+import qualified Data.Text as Text++import Duckling.AmountOfMoney.Helpers+import Duckling.AmountOfMoney.Types (Currency (..), AmountOfMoneyData (..))+import Duckling.Dimensions.Types+import Duckling.Numeral.Helpers (isNatural, isPositive, oneOf)+import Duckling.Numeral.Types (NumeralData (..))+import Duckling.Regex.Types+import Duckling.Types+import qualified Duckling.AmountOfMoney.Types as TAmountOfMoney+import qualified Duckling.Numeral.Types as TNumeral++ruleCNY :: Rule+ruleCNY = Rule+  { name = "cny"+  , pattern =+    [ regex "人民币|人民幣"+    ]+  , prod = \_ -> Just . Token AmountOfMoney $ currencyOnly CNY+  }++ruleCNYPrefix :: Rule+ruleCNYPrefix = Rule+  { name = "cny prefix"+  , pattern =+    [ regex "人民币|人民幣"+    , Predicate isPositive+    ]+  , prod = \case+      (_:Token Numeral NumeralData{TNumeral.value = v}:_) ->+        Just . Token AmountOfMoney . withValue v $ currencyOnly CNY+      _ -> Nothing+  }++ruleCent :: Rule+ruleCent = Rule+  { name = "cent"+  , pattern =+    [ regex "分"+    ]+  , prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Cent+}++ruleDime :: Rule+ruleDime = Rule+  { name = "dime"+  , pattern =+    [ Predicate isPositive+    , regex "角|毛"+    ]+  , prod = \case+      (Token Numeral NumeralData{TNumeral.value = v}:_) ->+        Just . Token AmountOfMoney $+        withCents (v * 10) $ currencyOnly Cent+      _ -> Nothing+  }++ruleDollar :: Rule+ruleDollar = Rule+  { name = "dollar"+  , pattern =+    [ regex "元|圆|块"+    ]+  , prod = \_ -> Just . Token AmountOfMoney $ currencyOnly Dollar+  }++rulePrecision :: Rule+rulePrecision = Rule+  { name = "exactly/about <amount-of-money>"+  , pattern =+    [ regex "刚好|恰好|大概"+    , Predicate isMoneyWithValue+    ]+  , prod = \case+      (_:token:_) -> Just token+      _ -> Nothing+  }++rulePrecision2 :: Rule+rulePrecision2 = Rule+  { name = "about <amount-of-money>"+  , pattern =+    [ Predicate isMoneyWithValue+    , regex "左右"+    ]+  , prod = \case+      (token:_) -> Just token+      _ -> Nothing+  }++ruleIntersectDimesAndCents :: Rule+ruleIntersectDimesAndCents = Rule+  { name = "intersect (X dimes and X cents)"+  , pattern =+    [ Predicate $ and . sequence [isSimpleAmountOfMoney, isDime]+    , Predicate $ and . sequence [isSimpleAmountOfMoney, isCent]+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just d}:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just c}:+       _) ->+         Just . Token AmountOfMoney $ withCents (c + d) $ currencyOnly Cent+      _ -> Nothing+  }++ruleIntersectDollarsAndDimesCents :: Rule+ruleIntersectDollarsAndDimesCents = Rule+  { name = "intersect (X dollars and X dimes/cents)"+  , pattern =+    [ Predicate $ and . sequence [isSimpleAmountOfMoney, isWithoutCents]+    , Predicate $ and . sequence [isSimpleAmountOfMoney, isCents]+    ]+  , prod = \case+      (Token AmountOfMoney fd:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just c}:+       _) -> Just . Token AmountOfMoney $ withCents c fd+      _ -> Nothing+  }++ruleIntersect :: Rule+ruleIntersect = Rule+  { name = "intersect (implicit 0 delimited cents)"+  , pattern =+    [ Predicate $ and . sequence [isSimpleAmountOfMoney, isWithoutCents]+    , regex "0|零|〇"+    , oneOf [1..9]+    ]+  , prod = \case+      (Token AmountOfMoney fd:_:+       Token Numeral NumeralData{TNumeral.value = c}:+       _) -> Just . Token AmountOfMoney $ withCents c fd+      _ -> Nothing+  }++ruleIntersect2 :: Rule+ruleIntersect2 = Rule+  { name = "intersect (implicit unitless cents)"+  , pattern =+    [ Predicate $ and . sequence [isSimpleAmountOfMoney, isDime]+    , Predicate isNatural+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just v}:+       Token Numeral NumeralData{TNumeral.value = c}:+       _) -> Just . Token AmountOfMoney $ withCents (v + c) $ currencyOnly Cent+      _ -> Nothing+  }++ruleIntersect3 :: Rule+ruleIntersect3 = Rule+  { name = "intersect (implicit unitless dimes)"+  , pattern =+    [ Predicate $ and . sequence [isSimpleAmountOfMoney, isWithoutCents]+    , Predicate isNatural+    ]+  , prod = \case+      (Token AmountOfMoney fd:+       Token Numeral NumeralData{TNumeral.value = d}:+       _) -> Just . Token AmountOfMoney $ withCents (d * 10) fd+      _ -> Nothing+  }++ruleIntervalNumeralDash :: Rule+ruleIntervalNumeralDash = Rule+  { name = "<numeral> - <amount-of-money>"+  , pattern =+    [ Predicate isPositive+    , regex "-|~|到"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \case+      (Token Numeral NumeralData{TNumeral.value = from}:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       _) | from < to ->+         Just . Token AmountOfMoney . withInterval (from, to) $ currencyOnly c+      _ -> Nothing+  }++ruleIntervalDash :: Rule+ruleIntervalDash = Rule+  { name = "<amount-of-money> - <amount-of-money>"+  , pattern =+    [ financeWith TAmountOfMoney.value isJust+    , regex "-|~|到"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just from,+                  TAmountOfMoney.currency = c1}:+       _:+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c2}:+       _) | from < to && c1 == c2 ->+        Just . Token AmountOfMoney . withInterval (from, to) $ currencyOnly c1+      _ -> Nothing+  }++ruleIntervalBound :: Rule+ruleIntervalBound = Rule+  { name = "under/less/lower/no more than <amount-of-money> (最多|至少|最少)"+  , pattern =+    [ regex "(最多|至少|最少)"+    , financeWith TAmountOfMoney.value isJust+    ]+  , prod = \case+      (Token RegexMatch (GroupMatch (match:_)):+       Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       _) -> case match of+        "最多" -> Just . Token AmountOfMoney . withMax to $ currencyOnly c+        "最少" -> Just . Token AmountOfMoney . withMin to $ currencyOnly c+        "至少" -> Just . Token AmountOfMoney . withMin to $ currencyOnly c+        _ -> Nothing+      _ -> Nothing+  }++ruleIntervalBound2 :: Rule+ruleIntervalBound2 = Rule+  { name = "under/less/lower/no more than <amount-of-money> (以下|以上)"+  , pattern =+    [ financeWith TAmountOfMoney.value isJust+    , regex "(以下|以上)"+    ]+  , prod = \case+      (Token AmountOfMoney AmountOfMoneyData{TAmountOfMoney.value = Just to,+                  TAmountOfMoney.currency = c}:+       Token RegexMatch (GroupMatch (match:_)):+       _) -> case match of+        "以下" -> Just . Token AmountOfMoney . withMax to $ currencyOnly c+        "以上" -> Just . Token AmountOfMoney . withMin to $ currencyOnly c+        _ -> Nothing+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleCent+  , ruleCNY+  , ruleCNYPrefix+  , ruleDime+  , ruleDollar+  , ruleIntersect+  , ruleIntersect2+  , ruleIntersect3+  , ruleIntersectDimesAndCents+  , ruleIntersectDollarsAndDimesCents+  , ruleIntervalDash+  , ruleIntervalNumeralDash+  , ruleIntervalBound+  , ruleIntervalBound2+  , rulePrecision+  , rulePrecision2+  ]
Duckling/Api.hs view
@@ -21,7 +21,6 @@ import Data.HashSet (HashSet) import Data.Text (Text) import Prelude-import TextShow import qualified Data.HashMap.Strict as HashMap import qualified Data.HashSet as HashSet import qualified Data.Text as Text@@ -37,8 +36,9 @@ import Duckling.Types  -- | Parses `input` and returns a curated list of entities found.-parse :: Text -> Context -> [Some Dimension] -> [Entity]-parse input ctx = map (formatToken input) . analyze input ctx . HashSet.fromList+parse :: Text -> Context -> Options -> [Some Dimension] -> [Entity]+parse input ctx options = map (formatToken input) . analyze input ctx options .+  HashSet.fromList  supportedDimensions :: HashMap Lang [Some Dimension] supportedDimensions =@@ -46,18 +46,19 @@  -- | Returns a curated list of resolved tokens found -- When `targets` is non-empty, returns only tokens of such dimensions.-analyze :: Text -> Context -> HashSet (Some Dimension) -> [ResolvedToken]-analyze input context@Context{..} targets =+analyze :: Text -> Context -> Options -> HashSet (Some Dimension)+  -> [ResolvedToken]+analyze input context@Context{..} options targets =   rank (classifiers locale) targets   . filter (\Resolved{node = Node{token = (Token d _)}} ->       HashSet.null targets || HashSet.member (This d) targets     )-  $ parseAndResolve (rulesFor locale targets) input context+  $ parseAndResolve (rulesFor locale targets) input context options  -- | Converts the resolved token to the API format formatToken :: Text -> ResolvedToken -> Entity formatToken sentence-  (Resolved (Range start end) node@Node{token = Token dimension _} value) =-  Entity (toName dimension) body value start end node+  (Resolved (Range start end) node@Node{token = Token dimension _} value latent)+  = Entity (toName dimension) body value start end latent node   where     body = Text.drop start $ Text.take end sentence
Duckling/Core.hs view
@@ -12,13 +12,14 @@  module Duckling.Core   ( Context(..)-  , Region(..)   , Dimension(..)   , Entity(..)-  , Node(..)-  , Range(..)   , Lang(..)   , Locale+  , Node(..)+  , Options(..)+  , Range(..)+  , Region(..)   , Some(..)   , fromName   , makeLocale@@ -36,7 +37,6 @@   ) where  import Data.HashMap.Strict (HashMap)-import Data.Maybe import Data.Text (Text) import Data.Time import Data.Time.LocalTime.TimeZone.Series
Duckling/Debug.hs view
@@ -13,7 +13,7 @@ module Duckling.Debug   ( allParses   , debug-  , debugContext+  , debugCustom   , fullParses   , ptree   ) where@@ -38,7 +38,7 @@ -- API  debug :: Locale -> Text -> [Some Dimension] -> IO [Entity]-debug locale = debugContext testContext {locale = locale}+debug locale = debugCustom testContext {locale = locale} testOptions  allParses :: Locale -> Text -> [Some Dimension] -> IO [Entity] allParses l sentence targets = debugTokens sentence $ parses l sentence targets@@ -50,8 +50,13 @@   where     n = Text.length sentence +debugCustom :: Context -> Options -> Text -> [Some Dimension] -> IO [Entity]+debugCustom context options sentence targets = debugTokens sentence .+  analyze sentence context options $ HashSet.fromList targets+ ptree :: Text -> Entity -> IO () ptree sentence Entity {enode} = pnode sentence 0 enode+ -- ----------------------------------------------------------------- -- Internals @@ -62,12 +67,8 @@       [] -> True       _ -> elem (This d) targets   where-    tokens = parseAndResolve rules sentence testContext {locale = l}+    tokens = parseAndResolve rules sentence testContext {locale = l} testOptions     rules = rulesFor l $ HashSet.fromList targets--debugContext :: Context -> Text -> [Some Dimension] -> IO [Entity]-debugContext context sentence targets =-  debugTokens sentence . analyze sentence context $ HashSet.fromList targets  debugTokens :: Text -> [ResolvedToken] -> IO [Entity] debugTokens sentence tokens = do
Duckling/Dimensions.hs view
@@ -19,6 +19,8 @@ import qualified Data.HashSet as HashSet  import Duckling.Dimensions.Types+import Duckling.Locale+import Duckling.Types import qualified Duckling.Dimensions.Common as CommonDimensions import qualified Duckling.Dimensions.AR as ARDimensions import qualified Duckling.Dimensions.BG as BGDimensions@@ -49,11 +51,11 @@ import qualified Duckling.Dimensions.RO as RODimensions import qualified Duckling.Dimensions.RU as RUDimensions import qualified Duckling.Dimensions.SV as SVDimensions+import qualified Duckling.Dimensions.TA as TADimensions import qualified Duckling.Dimensions.TR as TRDimensions import qualified Duckling.Dimensions.UK as UKDimensions import qualified Duckling.Dimensions.VI as VIDimensions import qualified Duckling.Dimensions.ZH as ZHDimensions-import Duckling.Locale  allDimensions :: Lang -> [Some Dimension] allDimensions lang = CommonDimensions.allDimensions ++ langDimensions lang@@ -81,6 +83,7 @@ dependents (This TimeGrain) = HashSet.empty dependents (This Url) = HashSet.empty dependents (This Volume) = HashSet.singleton (This Numeral)+dependents (This (CustomDimension dim)) = dimDependents dim  langDimensions :: Lang -> [Some Dimension] langDimensions AR = ARDimensions.allDimensions@@ -112,6 +115,7 @@ langDimensions RO = RODimensions.allDimensions langDimensions RU = RUDimensions.allDimensions langDimensions SV = SVDimensions.allDimensions+langDimensions TA = TADimensions.allDimensions langDimensions TR = TRDimensions.allDimensions langDimensions UK = UKDimensions.allDimensions langDimensions VI = VIDimensions.allDimensions
Duckling/Dimensions/BG.hs view
@@ -14,5 +14,8 @@  allDimensions :: [Some Dimension] allDimensions =-  [ This Numeral+  [ This Distance+  , This Duration+  , This Numeral+  , This Ordinal   ]
Duckling/Dimensions/SV.hs view
@@ -14,7 +14,8 @@  allDimensions :: [Some Dimension] allDimensions =-  [ This Duration+  [ This Distance+  , This Duration   , This Numeral   , This Ordinal   , This Time
+ Duckling/Dimensions/TA.hs view
@@ -0,0 +1,18 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.Dimensions.TA+  ( allDimensions+  ) where++import Duckling.Dimensions.Types++allDimensions :: [Some Dimension]+allDimensions =+  [ This Numeral+  ]
Duckling/Dimensions/Types.hs view
@@ -6,12 +6,8 @@ -- of patent rights can be found in the PATENTS file in the same directory.  --{-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NoRebindableSyntax #-}-{-# LANGUAGE TypeOperators #-}   module Duckling.Dimensions.Types@@ -22,99 +18,14 @@   , toName   ) where -import Data.GADT.Compare-import Data.GADT.Show-import Data.Hashable-import qualified Data.HashMap.Strict as HashMap import Data.Maybe import Data.Some import Data.Text (Text)--- Intentionally limit use of Typeable to avoid casting or typeOf usage-import Data.Typeable ((:~:)(..))-import TextShow (TextShow(..))-import qualified TextShow as TS import Prelude--import Duckling.AmountOfMoney.Types (AmountOfMoneyData)-import Duckling.Distance.Types (DistanceData)-import Duckling.Duration.Types (DurationData)-import Duckling.Email.Types (EmailData)-import Duckling.Numeral.Types (NumeralData)-import Duckling.Ordinal.Types (OrdinalData)-import Duckling.PhoneNumber.Types (PhoneNumberData)-import Duckling.Quantity.Types (QuantityData)-import Duckling.Regex.Types (GroupMatch)-import Duckling.Temperature.Types (TemperatureData)-import Duckling.Time.Types (TimeData)-import Duckling.TimeGrain.Types (Grain)-import Duckling.Url.Types (UrlData)-import Duckling.Volume.Types (VolumeData)---- -------------------------------------------------------------------- Dimension---- | GADT for differentiating between dimensions--- Each dimension should have its own constructor and provide the data structure--- for its parsed data-data Dimension a where-  RegexMatch :: Dimension GroupMatch-  AmountOfMoney :: Dimension AmountOfMoneyData-  Distance :: Dimension DistanceData-  Duration :: Dimension DurationData-  Email :: Dimension EmailData-  Numeral :: Dimension NumeralData-  Ordinal :: Dimension OrdinalData-  PhoneNumber :: Dimension PhoneNumberData-  Quantity :: Dimension QuantityData-  Temperature :: Dimension TemperatureData-  Time :: Dimension TimeData-  TimeGrain :: Dimension Grain-  Url :: Dimension UrlData-  Volume :: Dimension VolumeData---- Show-instance Show (Dimension a) where-  show RegexMatch = "RegexMatch"-  show Distance = "Distance"-  show Duration = "Duration"-  show Email = "Email"-  show AmountOfMoney = "AmountOfMoney"-  show Numeral = "Numeral"-  show Ordinal = "Ordinal"-  show PhoneNumber = "PhoneNumber"-  show Quantity = "Quantity"-  show Temperature = "Temperature"-  show Time = "Time"-  show TimeGrain = "TimeGrain"-  show Url = "Url"-  show Volume = "Volume"-instance GShow Dimension where gshowsPrec = showsPrec---- TextShow-instance TextShow (Dimension a) where-  showb d = TS.fromString $ show d-instance TextShow (Some Dimension) where-  showb (This d) = showb d---- Hashable-instance Hashable (Some Dimension) where-  hashWithSalt s (This a) = hashWithSalt s a-instance Hashable (Dimension a) where-  hashWithSalt s RegexMatch  = hashWithSalt s (0::Int)-  hashWithSalt s Distance    = hashWithSalt s (1::Int)-  hashWithSalt s Duration    = hashWithSalt s (2::Int)-  hashWithSalt s Email       = hashWithSalt s (3::Int)-  hashWithSalt s AmountOfMoney     = hashWithSalt s (4::Int)-  hashWithSalt s Numeral     = hashWithSalt s (5::Int)-  hashWithSalt s Ordinal     = hashWithSalt s (6::Int)-  hashWithSalt s PhoneNumber = hashWithSalt s (7::Int)-  hashWithSalt s Quantity    = hashWithSalt s (8::Int)-  hashWithSalt s Temperature = hashWithSalt s (9::Int)-  hashWithSalt s Time        = hashWithSalt s (10::Int)-  hashWithSalt s TimeGrain   = hashWithSalt s (11::Int)-  hashWithSalt s Url         = hashWithSalt s (12::Int)-  hashWithSalt s Volume      = hashWithSalt s (13::Int)+import qualified Data.HashMap.Strict as HashMap+import qualified Data.Text as Text +import Duckling.Types  toName :: Dimension a -> Text toName RegexMatch = "regex"@@ -131,6 +42,7 @@ toName TimeGrain = "time-grain" toName Url = "url" toName Volume = "volume"+toName (CustomDimension dim) = Text.pack (show dim)  fromName :: Text -> Maybe (Some Dimension) fromName name = HashMap.lookup name m@@ -149,33 +61,3 @@       , ("url", This Url)       , ("volume", This Volume)       ]--instance GEq Dimension where-  geq RegexMatch RegexMatch = Just Refl-  geq RegexMatch _ = Nothing-  geq Distance Distance = Just Refl-  geq Distance _ = Nothing-  geq Duration Duration = Just Refl-  geq Duration _ = Nothing-  geq Email Email = Just Refl-  geq Email _ = Nothing-  geq AmountOfMoney AmountOfMoney = Just Refl-  geq AmountOfMoney _ = Nothing-  geq Numeral Numeral = Just Refl-  geq Numeral _ = Nothing-  geq Ordinal Ordinal = Just Refl-  geq Ordinal _ = Nothing-  geq PhoneNumber PhoneNumber = Just Refl-  geq PhoneNumber _ = Nothing-  geq Quantity Quantity = Just Refl-  geq Quantity _ = Nothing-  geq Temperature Temperature = Just Refl-  geq Temperature _ = Nothing-  geq Time Time = Just Refl-  geq Time _ = Nothing-  geq TimeGrain TimeGrain = Just Refl-  geq TimeGrain _ = Nothing-  geq Url Url = Just Refl-  geq Url _ = Nothing-  geq Volume Volume = Just Refl-  geq Volume _ = Nothing
Duckling/Dimensions/ZH.hs view
@@ -14,7 +14,8 @@  allDimensions :: [Some Dimension] allDimensions =-  [ This Duration+  [ This Distance+  , This Duration   , This Numeral   , This Ordinal   , This Temperature
+ Duckling/Distance/BG/Corpus.hs view
@@ -0,0 +1,66 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.Distance.BG.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.Locale+import Duckling.Resolve+import Duckling.Distance.Types+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale BG Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (simple Kilometre 3)+             [ "3 километра"+             , "3 км"+             , "3км"+             , "3.0 км"+             ]+  , examples (simple Mile 8)+             [ "8 мили"+             , "осем мили"+             ]+  , examples (simple Metre 1)+             [ "1 м",+               "1 метър",+               "един метър"+             ]+  , examples (simple Centimetre 2)+             [ "2см"+             , "2 сантиметра"+             ]+  , examples (simple Millimetre 4)+             [ "4мм"+             , "4 милиметра"+             ]+  , examples (simple Inch 5)+             [ "5 инча"+             , "5''"+             , "пет инча"+             , "5\""+             ]+  , examples (simple Foot 35)+             [ "35 фута"+             , "35'"+             , "тридесет и пет фута"+             ]+  , examples (simple Yard 47)+             [ "47 ярда"+             , "четиридесет и седем ярда"+             ]+  ]
+ Duckling/Distance/BG/Rules.hs view
@@ -0,0 +1,50 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}++module Duckling.Distance.BG.Rules+  ( rules+  ) where++import Data.String+import Data.Text (Text)+import Prelude++import Duckling.Dimensions.Types+import Duckling.Distance.Helpers+import Duckling.Distance.Types (DistanceData(..))+import Duckling.Types+import qualified Duckling.Distance.Types as TDistance++distances :: [(Text, String, TDistance.Unit)]+distances = [ ("<latent dist> km", "км|километ(ра|ри|ър)", TDistance.Kilometre)+            , ("<latent dist> feet", "('|фут(а|ове)?)", TDistance.Foot)+            , ("<latent dist> inch", "(\"|''|инч(а|ове)?)", TDistance.Inch)+            , ("<latent dist> yard", "ярд(а|ове)?", TDistance.Yard)+            , ("<dist> meters", "м(етър|етр(а|и))?", TDistance.Metre)+            , ("<dist> centimeters", "см|сантимет(ри|ра|ър)", TDistance.Centimetre)+            , ("<dist> millimeters", "мм|милимет(ра|ри|ър)", TDistance.Millimetre)+            , ("<dist> miles", "мил(я|и)", TDistance.Mile)+            ]++ruleDistances :: [Rule]+ruleDistances = map go distances+  where+    go :: (Text, String, TDistance.Unit) -> Rule+    go (name, regexPattern, u) = Rule+      { name = name+      , pattern = [ dimension Distance, regex regexPattern ]+      , prod = \tokens -> case tokens of+          (Token Distance dd:_) -> Just . Token Distance $ withUnit u dd+          _ -> Nothing+      }++rules :: [Rule]+rules = ruleDistances
Duckling/Distance/CS/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale CS Nothing}, allExamples)+corpus = (testContext {locale = makeLocale CS Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/EN/Corpus.hs view
@@ -9,16 +9,17 @@ {-# LANGUAGE OverloadedStrings #-}  module Duckling.Distance.EN.Corpus-  ( corpus ) where+  ( corpus+  ) where -import Prelude import Data.String+import Prelude  import Duckling.Distance.Types import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/ES/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/FR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/GA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/HR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/KO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/NL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/PT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/RO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/RU/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/Rules.hs view
@@ -20,8 +20,8 @@ import Duckling.Dimensions.Types import Duckling.Distance.Helpers import Duckling.Numeral.Types (NumeralData (..))-import qualified Duckling.Numeral.Types as TNumeral import Duckling.Types+import qualified Duckling.Numeral.Types as TNumeral  ruleNumeralAsDistance :: Rule ruleNumeralAsDistance = Rule
+ Duckling/Distance/SV/Corpus.hs view
@@ -0,0 +1,50 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.Distance.SV.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.Distance.Types+import Duckling.Locale+import Duckling.Resolve+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (simple Kilometre 3)+             [ "3 kilometer"+             , "3 km"+             , "3km"+             , "3k"+             ]+  , examples (simple Kilometre 30)+             [ "3 mil"+             , "tre mil"+             , "några få mil"+             ]+  , examples (simple Kilometre 3.0)+             [ "3,0 km"+             ]+  , examples (simple Metre 9)+             [ "9 meter"+             , "9m"+             ]+  , examples (simple Centimetre 2)+             [ "2cm"+             , "2 centimeter"+             ]+  ]
+ Duckling/Distance/SV/Rules.hs view
@@ -0,0 +1,84 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}++module Duckling.Distance.SV.Rules+  ( rules+  ) where++import Data.String+import Prelude++import Duckling.Dimensions.Types+import Duckling.Distance.Helpers+import Duckling.Distance.Types (DistanceData(..))+import Duckling.Types+import qualified Duckling.Distance.Types as TDistance++ruleLatentDistKm :: Rule+ruleLatentDistKm = Rule+  { name = "<latent dist> km"+  , pattern =+    [ dimension Distance+    , regex "k(ilo)?m?(eter)?"+    ]+  , prod = \tokens -> case tokens of+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Kilometre dd+      _ -> Nothing+  }++ruleDistMeters :: Rule+ruleDistMeters = Rule+  { name = "<dist> meter"+  , pattern =+    [ dimension Distance+    , regex "m(eter)?"+    ]+  , prod = \tokens -> case tokens of+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Metre dd+      _ -> Nothing+  }++ruleDistCentimeters :: Rule+ruleDistCentimeters = Rule+  { name = "<dist> centimeters"+  , pattern =+    [ dimension Distance+    , regex "cm|centimeter"+    ]+  , prod = \tokens -> case tokens of+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Centimetre dd+      _ -> Nothing+  }++ruleDistMils :: Rule+ruleDistMils = Rule+  { name = "<dist> mils"+  , pattern =+    [ dimension Distance+    , regex "mils?"+    ]+  , prod = \tokens -> case tokens of+      (Token Distance dd@DistanceData {TDistance.value = Just x}:_) ->+        Just . Token Distance . withValue (10 * x)+          $ withUnit TDistance.Kilometre dd+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleDistCentimeters+  , ruleDistMeters+  , ruleDistMils+  , ruleLatentDistKm+  ]
Duckling/Distance/TR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale TR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale TR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Distance/Types.hs view
@@ -51,18 +51,18 @@  instance Resolve DistanceData where   type ResolvedValue DistanceData = DistanceValue-  resolve _ DistanceData {unit = Just unit, value = Just val} =-    Just $ simple unit val-  resolve _ DistanceData {unit = Just unit, value = Nothing+  resolve _ _ DistanceData {unit = Just unit, value = Just val} =+    Just (simple unit val, False)+  resolve _ _ DistanceData {unit = Just unit, value = Nothing                          , minValue = Just from, maxValue = Just to} =-    Just $ between unit (from, to)-  resolve _ DistanceData {unit = Just unit, value = Nothing+    Just (between unit (from, to), False)+  resolve _ _ DistanceData {unit = Just unit, value = Nothing                          , minValue = Just from, maxValue = Nothing} =-    Just $ above unit from-  resolve _ DistanceData {unit = Just unit, value = Nothing+    Just (above unit from, False)+  resolve _ _ DistanceData {unit = Just unit, value = Nothing                          , minValue = Nothing, maxValue = Just to} =-    Just $ under unit to-  resolve _ _ = Nothing+    Just (under unit to, False)+  resolve _ _ _ = Nothing  data IntervalDirection = Above | Under   deriving (Eq, Generic, Hashable, Ord, Show, NFData)
+ Duckling/Distance/ZH/Corpus.hs view
@@ -0,0 +1,72 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.Distance.ZH.Corpus+  ( corpus ) where++import Data.String+import Prelude++import Duckling.Distance.Types+import Duckling.Locale+import Duckling.Resolve+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale ZH Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (simple Centimetre 2)+             [ "2cm"+             , "2 厘米"+             , "二厘米"+             , "2公分"+             , "二公分"+             ]+  , examples (simple Metre 9)+             [ "9m"+             , "9 m"+             , "九米"+             , "9公尺"+             ]+  , examples (simple Kilometre 3)+             [ "3公里"+             , "三公裏"+             , "3 km"+             , "3km"+             ]+  , examples (simple Kilometre 3.0)+             [ "3.0 公里"+             ]+  , examples (simple Foot 8)+             [ "8 foot"+             , "8 feet"+             , "8 foots"+             , "8 feets"+             , "8'"+             , "8英尺"+             , "8呎"+             ]+  , examples (simple Inch 4)+             [ "4 inch"+             , "4 inches"+             , "4''"+             , "4英寸"+             , "4英吋"+             , "四吋"+             ]+  , examples (simple Mile 1)+             [ "1 mile"+             , "1 miles"+             , "1英里"+             , "一英裏"+             ]+  ]
+ Duckling/Distance/ZH/Rules.hs view
@@ -0,0 +1,129 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++module Duckling.Distance.ZH.Rules+  ( rules ) where++import Data.String+import Prelude++import Duckling.Dimensions.Types+import Duckling.Distance.Helpers+import Duckling.Numeral.Types (NumeralData (..))+import Duckling.Types+import qualified Duckling.Distance.Types as TDistance+import qualified Duckling.Numeral.Types as TNumeral++ruleDistCentimeters :: Rule+ruleDistCentimeters = Rule+  { name = "<dist> centimeters"+  , pattern =+    [ dimension Distance+    , regex "cm|厘米|公分"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Centimetre dd+      _ -> Nothing+  }++ruleDistMeters :: Rule+ruleDistMeters = Rule+  { name = "<dist> meters"+  , pattern =+    [ dimension Distance+    , regex "m|米|公尺"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Metre dd+      _ -> Nothing+  }++ruleDistKm :: Rule+ruleDistKm = Rule+  { name = "<dist> km"+  , pattern =+    [ dimension Distance+    , regex "km|千米|公(里|裏)"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Kilometre dd+      _ -> Nothing+  }+++ruleDistFeetAndDistInch :: Rule+ruleDistFeetAndDistInch = Rule+  { name = "<dist> feet and <dist> inch "+  , pattern =+    [ dimension Distance+    , regex "'|f(oo|ee)?ts?|英尺|呎"+    , dimension Distance+    , regex "''|inch(es)?|英寸|英吋|吋"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Foot dd+      _ -> Nothing+  }++ruleDistInch :: Rule+ruleDistInch = Rule+  { name = "<dist> inch"+  , pattern =+    [ dimension Distance+    , regex "''|inch(es)?|英寸|英吋|吋"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Inch dd+      _ -> Nothing+  }++ruleDistFeet :: Rule+ruleDistFeet = Rule+  { name = "<dist> feet"+  , pattern =+    [ dimension Distance+    , regex "'|f(oo|ee)?ts?|英尺|呎"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Foot dd+      _ -> Nothing+  }++ruleDistMiles :: Rule+ruleDistMiles = Rule+  { name = "<dist> miles"+  , pattern =+    [ dimension Distance+    , regex "miles?|英(里|裏)"+    ]+  , prod = \case+      (Token Distance dd:_) ->+        Just . Token Distance $ withUnit TDistance.Mile dd+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleDistCentimeters+  , ruleDistFeet+  , ruleDistFeetAndDistInch+  , ruleDistInch+  , ruleDistKm+  , ruleDistMeters+  , ruleDistMiles+  ]
Duckling/Duration/AR/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
+ Duckling/Duration/BG/Corpus.hs view
@@ -0,0 +1,95 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.Duration.BG.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.Duration.Types+import Duckling.Locale+import Duckling.Resolve+import Duckling.Testing.Types+import Duckling.TimeGrain.Types (Grain(..))++corpus :: Corpus+corpus = (testContext {locale = makeLocale BG Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (DurationData 1 Second)+             [ "1 сек"+             , "1 секунда"+             , "секунда"+             , "1\""+             ]+  , examples (DurationData 15 Minute)+             [ "15 мин"+             , "петнадесет минути"+             , "15'"+             ]+  , examples (DurationData 30 Minute)+             [ "30 минути"+             , "половин час"+             , "тридесет минути"+             ]+  , examples (DurationData 90 Minute)+             [ "час и половина"+             , "90 мин"+             ]+  , examples (DurationData 5400 Second)+             [ "1.5 часа"+             , "5400 секунди"+             ]+  , examples (DurationData 8 Hour)+             [ "8 часа"+             , "8 ч"+             , "осем часа"+             ]+  , examples (DurationData 15 Day)+             [ "15 дни"+             , "петнадесет дни"+             , "половин месец"+             ]+  , examples (DurationData 7 Week)+             [ "7 седмици"+             , "седем седмици"+             ]+  , examples (DurationData 1 Month)+             [ "1 месец"+             , "месец"+             ]+  , examples (DurationData 6 Month)+             [ "6 месеца"+             , "шест месеца"+             , "половин година"+             ]+  , examples (DurationData 9072000 Second)+             [ "3.5 месеца"+             , "приблизително 3.5 месеца"+             ]+  , examples (DurationData 30 Month)+             [ "две години и половина"+             , "2 години и половина"+             ]+  , examples (DurationData 3 Quarter)+             [ "3 тримесечия"+             ]+  , examples (DurationData 2 Year)+             [ "2 години"+             , "две години"+             ]+  , examples (DurationData 12 Hour)+             [ "12 часа"+             , "дванадесет часа"+             ]+  ]
+ Duckling/Duration/BG/Rules.hs view
@@ -0,0 +1,134 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE NoRebindableSyntax #-}+{-# LANGUAGE OverloadedStrings #-}++module Duckling.Duration.BG.Rules+  ( rules+  ) where++import Data.String+import Data.Text (Text)+import Prelude+import qualified Data.Text as Text++import Duckling.Dimensions.Types+import Duckling.Duration.Helpers+import Duckling.Numeral.Helpers (numberWith)+import Duckling.Numeral.Types (NumeralData(..), isInteger)+import Duckling.Duration.Types (DurationData (DurationData))+import Duckling.Regex.Types+import Duckling.Types+import Duckling.TimeGrain.Types+import qualified Duckling.Numeral.Types as TNumeral++ruleHalves :: Rule+ruleHalves = Rule+  { name = "half of a <time-grain>"+  , pattern =+    [ regex "половин"+    , dimension TimeGrain+    ]+  , prod = \tokens -> case tokens of+      (_:Token TimeGrain grain:_) -> Token Duration <$> timesOneAndAHalf grain 0+      _ -> Nothing+  }++ruleGrainAndAHalf :: Rule+ruleGrainAndAHalf = Rule+  { name = "<time-grain> and a half"+  , pattern =+    [ dimension TimeGrain+    , regex "и половина"+    ]+  , prod = \tokens -> case tokens of+      (Token TimeGrain grain:_) -> Token Duration <$> timesOneAndAHalf grain 1+      _ -> Nothing+  }++ruleDurationAndAHalf :: Rule+ruleDurationAndAHalf = Rule+  { name = "<positive-numeral> <time-grain> and a half"+  , pattern =+    [ Predicate isNatural+    , dimension TimeGrain+    , regex "и половина"+    ]+  , prod = \tokens -> case tokens of+      (Token Numeral NumeralData{TNumeral.value = v}:+       Token TimeGrain grain:+       _) -> timesOneAndAHalf grain (floor $ v) >>= Just . Token Duration+      _ -> Nothing+  }++ruleNumeralQuotes :: Rule+ruleNumeralQuotes = Rule+  { name = "<integer> + '\""+  , pattern =+    [ Predicate isNatural+    , regex "(['\"])"+    ]+  , prod = \tokens -> case tokens of+      (Token Numeral NumeralData{TNumeral.value = v}:+       Token RegexMatch (GroupMatch (x:_)):+       _) -> case x of+         "'"  -> Just . Token Duration . duration Minute $ floor v+         "\"" -> Just . Token Duration . duration Second $ floor v+         _    -> Nothing+      _ -> Nothing+  }++ruleDurationPrecision :: Rule+ruleDurationPrecision = Rule+  { name = "about|exactly <duration>"+  , pattern =+    [ regex "(към|приблизително|примерно|някъде)"+    , dimension Duration+    ]+    , prod = \tokens -> case tokens of+        (_:token:_) -> Just token+        _ -> Nothing+  }++ruleGrainAsDuration :: Rule+ruleGrainAsDuration = Rule+  { name = "a <unit-of-duration>"+  , pattern =+    [ dimension TimeGrain+    ]+  , prod = \tokens -> case tokens of+      (Token TimeGrain grain:_) -> Just . Token Duration $ duration grain 1+      _ -> Nothing+  }++rulePositiveDuration :: Rule+rulePositiveDuration = Rule+  { name = "<positive-numeral> <time-grain>"+  , pattern =+    [ numberWith TNumeral.value $ and . sequence [not . isInteger, (>0)]+    , dimension TimeGrain+    ]+  , prod = \tokens -> case tokens of+      (Token Numeral NumeralData{TNumeral.value = v}:+       Token TimeGrain grain:+       _) -> Just . Token Duration . duration Second . floor $ inSeconds grain v+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleDurationAndAHalf+  , ruleGrainAndAHalf+  , rulePositiveDuration+  , ruleDurationPrecision+  , ruleNumeralQuotes+  , ruleGrainAsDuration+  , ruleHalves+  ]
Duckling/Duration/EL/Corpus.hs view
@@ -26,10 +26,10 @@ context = testContext {locale = makeLocale EL Nothing}  corpus :: Corpus-corpus = (context, allExamples)+corpus = (context, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (context, examples)+negativeCorpus = (context, testOptions, examples)   where     examples =       [ "για μήνες"
Duckling/Duration/EN/Corpus.hs view
@@ -21,10 +21,10 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "for months"@@ -61,5 +61,12 @@              ]   , examples (DurationData 2 Year)              [ "2 years"+             ]+  , examples (DurationData 27 Month)+             [ "2 years and 3 months"+             , "2 years, 3 months"+             ]+  , examples (DurationData 31719604 Second)+             [ "1 year, 2 days, 3 hours and 4 seconds"              ]   ]
Duckling/Duration/EN/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoRebindableSyntax #-} {-# LANGUAGE OverloadedStrings #-} @@ -14,16 +15,19 @@   ( rules   ) where +import Data.Semigroup ((<>)) import Data.String import Prelude import qualified Data.Text as Text  import Duckling.Dimensions.Types import Duckling.Duration.Helpers+import Duckling.Duration.Types (DurationData(..)) import Duckling.Numeral.Helpers (parseInt, parseInteger) import Duckling.Numeral.Types (NumeralData(..)) import Duckling.Regex.Types import Duckling.Types+import qualified Duckling.Duration.Types as TDuration import qualified Duckling.Numeral.Types as TNumeral import qualified Duckling.TimeGrain.Types as TG @@ -70,7 +74,7 @@     [ Predicate isNatural     , regex "(['\"])"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token Numeral NumeralData{TNumeral.value = v}:        Token RegexMatch (GroupMatch (x:_)):        _) -> case x of@@ -88,7 +92,7 @@     , regex "more|less"     , dimension TimeGrain     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token Numeral nd:_:Token TimeGrain grain:_) ->         Just . Token Duration . duration grain . floor $ TNumeral.value nd       _ -> Nothing@@ -100,7 +104,7 @@   , pattern =     [ regex "(\\d+)\\.(\\d+) *hours?"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token RegexMatch (GroupMatch (h:m:_)):_) -> do         hh <- parseInteger h         mnum <- parseInteger m@@ -116,7 +120,7 @@     [ Predicate isNatural     , regex "and (an? )?half hours?"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token Numeral NumeralData{TNumeral.value = v}:_) ->         Just . Token Duration . duration TG.Minute $ 30 + 60 * floor v       _ -> Nothing@@ -129,7 +133,7 @@     [ regex "an?"     , dimension TimeGrain     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (_:Token TimeGrain grain:_) -> Just . Token Duration $ duration grain 1       _ -> Nothing   }@@ -141,11 +145,29 @@     [ regex "(about|around|approximately|exactly)"     , dimension Duration     ]-    , prod = \tokens -> case tokens of+    , prod = \case         (_:token:_) -> Just token         _ -> Nothing   } +ruleCompositeDuration :: Rule+ruleCompositeDuration = Rule+  { name = "composite <duration>"+  , pattern =+    [ Predicate isNatural+    , dimension TimeGrain+    , regex ",|and"+    , dimension Duration+    ]+  , prod = \case+      (Token Numeral NumeralData{TNumeral.value = v}:+       Token TimeGrain g:+       _:+       Token Duration dd@DurationData{TDuration.grain = dg}:+       _) | g > dg -> Just . Token Duration $ duration g (floor v) <> dd+      _ -> Nothing+  }+ rules :: [Rule] rules =   [ ruleDurationQuarterOfAnHour@@ -158,4 +180,5 @@   , ruleDurationA   , ruleDurationPrecision   , ruleNumeralQuotes+  , ruleCompositeDuration   ]
Duckling/Duration/FR/Corpus.hs view
@@ -23,10 +23,10 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale FR Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale FR Nothing}, testOptions, examples)   where     examples =       [ "les jours"
Duckling/Duration/GA/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/HU/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale HU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HU Nothing}, testOptions, allExamples)   allExamples :: [Example]
Duckling/Duration/JA/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale JA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale JA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/KO/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/NB/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale NB Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NB Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/NL/Corpus.hs view
@@ -23,10 +23,10 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale NL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NL Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale NL Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale NL Nothing}, testOptions, examples)   where     examples =       [ "voor maanden"
Duckling/Duration/PL/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale PL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/PT/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/RO/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/RU/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.Duration.Rules@@ -29,7 +30,7 @@     [ Predicate isNatural     , dimension TimeGrain     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token Numeral NumeralData{TNumeral.value = v}:        Token TimeGrain grain:        _) -> Just . Token Duration . duration grain $ floor v
Duckling/Duration/SV/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale SV Nothing}, allExamples)+corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/TR/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain (..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale TR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale TR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Duration/Types.hs view
@@ -18,7 +18,9 @@ import Control.DeepSeq import Data.Aeson import Data.Hashable+import Data.Semigroup import Data.Text (Text)+import Data.Tuple.Extra (both) import GHC.Generics import TextShow (showt) import Prelude@@ -34,8 +36,14 @@  instance Resolve DurationData where   type ResolvedValue DurationData = DurationData-  resolve _ x = Just x+  resolve _ _ x = Just (x, False) +instance Semigroup DurationData where+  d1@(DurationData _ g1) <> d2@(DurationData _ g2) = DurationData (v1+v2) g+    where+    g = g1 `min` g2+    (DurationData v1 _, DurationData v2 _) = both (withGrain g) (d1,d2)+ instance ToJSON DurationData where   toJSON DurationData {value, grain} = object     [ "type"       .= ("value" :: Text)@@ -47,3 +55,12 @@       , "value" .= inSeconds grain value       ]     ]++-- | Convert a duration to the given grain, rounded to the+-- nearest integer. For example, 1 month is converted to 4 weeks.+withGrain :: Grain -> DurationData -> DurationData+withGrain g d@(DurationData v1 g1)+  | g == g1 = d+  | otherwise = DurationData v g+      where+      v = round $ inSeconds g1 (fromIntegral v1 :: Double) / inSeconds g 1
Duckling/Duration/ZH/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types (Grain(..))  corpus :: Corpus-corpus = (testContext {locale = makeLocale ZH Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ZH Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Email/Corpus.hs view
@@ -20,10 +20,10 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "hey@6"
Duckling/Email/EN/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "fitness at 6.40"@@ -35,7 +35,7 @@       ]  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Email/FR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Email/IT/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale IT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale IT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Email/Types.hs view
@@ -29,7 +29,7 @@  instance Resolve EmailData where   type ResolvedValue EmailData = EmailData-  resolve _ x = Just x+  resolve _ _ x = Just (x, False)  instance ToJSON EmailData where   toJSON EmailData {value} = object [ "value" .= value ]
Duckling/Engine.hs view
@@ -19,7 +19,7 @@  import Control.DeepSeq import Control.Monad.Extra-import Data.Aeson+import Data.Aeson (toJSON) import Data.ByteString (ByteString) import Data.Functor.Identity import Data.Maybe@@ -48,10 +48,10 @@ runDuckling :: Duckling a -> a runDuckling ma = runIdentity ma -parseAndResolve :: [Rule] -> Text -> Context -> [ResolvedToken]-parseAndResolve rules input context = mapMaybe (resolveNode context) .-  force $ Stash.toPosOrderedList $ runDuckling $-  parseString rules (Document.fromText input)+parseAndResolve :: [Rule] -> Text -> Context -> Options -> [ResolvedToken]+parseAndResolve rules input context options =+  mapMaybe (resolveNode context options) . force $ Stash.toPosOrderedList $+  runDuckling $ parseString rules (Document.fromText input)  produce :: Match -> Maybe Node produce (_, _, []) = Nothing@@ -218,11 +218,13 @@   headPredicateRules =     [ rule | rule@Rule{pattern = (Predicate _ : _)} <- rules ] -resolveNode :: Context -> Node -> Maybe ResolvedToken-resolveNode context n@Node{token = (Token _ dd), nodeRange = nodeRange} = do-  val <- resolve context dd+resolveNode :: Context -> Options -> Node -> Maybe ResolvedToken+resolveNode context options n@Node{token = (Token _ dd), nodeRange = nodeRange}+  = do+  (val, latent) <- resolve context options dd   Just Resolved     { range = nodeRange     , node = n     , jsonValue = toJSON val+    , isLatent = latent     }
Duckling/Locale.hs view
@@ -60,6 +60,7 @@   | RO   | RU   | SV+  | TA   | TR   | UK   | VI
Duckling/Numeral/AR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/AR/Rules.hs view
@@ -310,7 +310,7 @@   , pattern =     [ dimension Numeral     , regex "فاصل[ةه]"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/BG/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale BG Nothing}, allExamples)+corpus = (testContext {locale = makeLocale BG Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/BG/Rules.hs view
@@ -16,7 +16,6 @@  import Data.HashMap.Strict (HashMap) import Data.Maybe-import Data.String import Data.Text (Text) import Prelude import qualified Data.HashMap.Strict as HashMap@@ -164,7 +163,7 @@   , pattern =     [ dimension Numeral     , regex "цяло и"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/CS/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale CS Nothing}, allExamples)+corpus = (testContext {locale = makeLocale CS Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/DA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale DA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale DA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/DA/Rules.hs view
@@ -110,7 +110,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -269,7 +269,7 @@   , pattern =     [ dimension Numeral     , regex "komma"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/DE/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale DE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale DE Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/DE/Rules.hs view
@@ -151,7 +151,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -294,7 +294,7 @@   , pattern =     [ dimension Numeral     , regex "komma"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/EL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale EL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale EL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/EL/Rules.hs view
@@ -190,7 +190,7 @@ ruleSum = Rule   { name = "intersect 2 numbers"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -230,7 +230,7 @@   , pattern =     [ dimension Numeral     , regex "κόμμα"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/EN/Corpus.hs view
@@ -18,7 +18,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat@@ -126,6 +126,10 @@   , examples (NumeralValue 5000)              [ "5 thousand"              , "five thousand"+             ]+  , examples (NumeralValue (-504))+             [ "-504"+             , "negative five hundred and four"              ]   , examples (NumeralValue (-1.2e6))              [ "- 1,200,000"
Duckling/Numeral/EN/Rules.hs view
@@ -205,7 +205,7 @@   , pattern =     [ dimension Numeral     , regex "point|dot"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->@@ -218,7 +218,7 @@   { name = "point 77"   , pattern =     [ regex "point|dot"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (_:Token Numeral nd:_) -> double . decimalsToDouble $ TNumeral.value nd@@ -282,7 +282,7 @@ ruleSum = Rule   { name = "intersect 2 numbers"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate $ and . sequence [hasGrain, isPositive]     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -296,7 +296,7 @@ ruleSumAnd = Rule   { name = "intersect 2 numbers (with and)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate $ and . sequence [hasGrain, isPositive]     , regex "and"     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]
Duckling/Numeral/ES/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/ES/Rules.hs view
@@ -260,7 +260,7 @@   , pattern =     [ dimension Numeral     , regex "punto"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/ET/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ET Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ET Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/ET/Rules.hs view
@@ -121,7 +121,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -247,7 +247,7 @@   , pattern =     [ dimension Numeral     , regex "dot|point"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/FR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/FR/Rules.hs view
@@ -270,7 +270,7 @@ ruleSum = Rule   { name = "intersect 2 numbers"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of
Duckling/Numeral/GA/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/HE/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HE Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/HE/Rules.hs view
@@ -38,7 +38,7 @@ ruleIntersectNumerals = Rule   { name = "intersect numbers"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -52,7 +52,7 @@ ruleIntersectWithAnd = Rule   { name = "intersect (with and)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , regex "ו"     , Predicate isMultipliable     ]@@ -324,7 +324,7 @@   , pattern =     [ dimension Numeral     , regex "נקודה"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/HI/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HI Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HI Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/HR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/HR/Rules.hs view
@@ -158,7 +158,7 @@ ruleSum = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -309,7 +309,7 @@   , pattern =     [ dimension Numeral     , regex "cijela|to(c|č)ka|zarez"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/HU/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/Helpers.hs view
@@ -11,12 +11,14 @@  module Duckling.Numeral.Helpers   ( decimalsToDouble+  , diffIntegerDigits   , double   , integer   , multiply   , isMultipliable   , isNatural   , isPositive+  , hasGrain   , divide   , notOkForAnyTime   , numberBetween@@ -79,6 +81,18 @@       [] -> 0       (multiplier : _) -> x / multiplier +-- diffIntegerDigits a b = # of digits in a - # of digits in b+-- ignores the nondecimal components+diffIntegerDigits :: Double -> Double -> Int+diffIntegerDigits a b = digitsOf a - digitsOf b+  where+    digitsOf :: Double -> Int+    digitsOf = digitsOfInt . floor . abs++    digitsOfInt :: Int -> Int+    digitsOfInt 0 = 0+    digitsOfInt a = 1 + digitsOfInt (a `div` 10)+ -- ----------------------------------------------------------------- -- Patterns @@ -107,6 +121,10 @@ isMultipliable :: Predicate isMultipliable (Token Numeral nd) = multipliable nd isMultipliable _ = False++hasGrain :: Predicate+hasGrain (Token Numeral NumeralData {grain = Just g}) = g > 1+hasGrain _ = False  oneOf :: [Double] -> PatternItem oneOf vs = Predicate $ \x ->
Duckling/Numeral/ID/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ID Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ID Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/ID/Rules.hs view
@@ -62,7 +62,7 @@   , pattern =     [ dimension Numeral     , regex "koma"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->@@ -146,7 +146,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of
Duckling/Numeral/IT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale IT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale IT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/JA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale JA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale JA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/KA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/KO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/KO/Rules.hs view
@@ -206,7 +206,7 @@ ruleSum = Rule   { name = "intersect 2 numbers"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of
Duckling/Numeral/MY/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale MY Nothing}, allExamples)+corpus = (testContext {locale = makeLocale MY Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/NB/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NB Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NB Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/NB/Rules.hs view
@@ -32,7 +32,7 @@ ruleIntersectWithAnd = Rule   { name = "intersect (with and)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , regex "og"     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]@@ -129,7 +129,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -268,7 +268,7 @@   , pattern =     [ dimension Numeral     , regex "komma"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/NE/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NE Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/NL/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/NL/Rules.hs view
@@ -115,7 +115,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of
Duckling/Numeral/PL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/PL/Rules.hs view
@@ -65,7 +65,7 @@ ruleIntersectWithAnd = Rule   { name = "intersect (with and)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , regex "i|a"     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]@@ -328,7 +328,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -514,7 +514,7 @@   , pattern =     [ dimension Numeral     , regex "dot|point"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/PT/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/PT/Rules.hs view
@@ -249,7 +249,7 @@   , pattern =     [ dimension Numeral     , regex "ponto"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->@@ -262,7 +262,7 @@   { name = "point 77"   , pattern =     [ regex "ponto"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (_:Token Numeral nd:_) -> double . decimalsToDouble $ TNumeral.value nd@@ -326,7 +326,7 @@ ruleSum = Rule   { name = "intersect 2 numbers"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -340,7 +340,7 @@ ruleSumAnd = Rule   { name = "intersect 2 numbers (with and)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , regex "e"     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]
Duckling/Numeral/RO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/RO/Rules.hs view
@@ -109,7 +109,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -123,7 +123,7 @@ ruleIntersectCuI = Rule   { name = "intersect (cu și)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , regex "(s|ș)i"     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]
Duckling/Numeral/RU/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/RU/Rules.hs view
@@ -248,7 +248,7 @@   , pattern =     [ dimension Numeral     , regex "точка"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/SV/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale SV Nothing}, allExamples)+corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/SV/Rules.hs view
@@ -32,7 +32,7 @@ ruleIntersectWithAnd = Rule   { name = "intersect (with and)"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , regex "och"     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]@@ -119,7 +119,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -264,7 +264,7 @@   , pattern =     [ dimension Numeral     , regex "komma"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
+ Duckling/Numeral/TA/Corpus.hs view
@@ -0,0 +1,88 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.Numeral.TA.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.Locale+import Duckling.Numeral.Types+import Duckling.Resolve+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale TA Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (NumeralValue 0)+             [ "பூஜ்ஜியம்"+             ]+  , examples (NumeralValue 1)+             [ "ஒன்று"+             ]+  , examples (NumeralValue 2)+             [ "இரண்டு"+             ]+  , examples (NumeralValue 3)+             [ "மூன்று"+             ]+  , examples (NumeralValue 4)+             [ "நான்கு"+             ]+  , examples (NumeralValue 5)+             [ "ஐந்து"+             ]+  , examples (NumeralValue 6)+             [ "ஆறு"+             ]+  , examples (NumeralValue 7)+             [ "ஏழு"+             ]+  , examples (NumeralValue 8)+             [ "எட்டு"+             ]+  , examples (NumeralValue 9)+             [ "ஒன்பது"+             ]+  , examples (NumeralValue 10)+             [ "பத்து"+             ]+  , examples (NumeralValue 11)+             [ "பதினொன்று"+             ]+  , examples (NumeralValue 12)+             [ "பன்னிரண்டு"+             ]+  , examples (NumeralValue 20)+             [ "இருபது"+             ]+  , examples (NumeralValue 21)+             [ "இருபத்திஒன்று"+             ]+  , examples (NumeralValue 22)+             [ "இருபத்திஇரண்டு"+             ]+  , examples (NumeralValue 26)+             [ "இருபத்திஆறு"+             ]+  , examples (NumeralValue 30)+             [ "முப்பது"+             ]+   , examples (NumeralValue 33)+             [ "முப்பத்துமூன்று"+             ]+  , examples (NumeralValue 50)+             [ "ஐம்பது"+             ]+  ]
+ Duckling/Numeral/TA/Rules.hs view
@@ -0,0 +1,137 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoRebindableSyntax #-}+{-# LANGUAGE LambdaCase #-}++module Duckling.Numeral.TA.Rules+  ( rules+  ) where++import Data.HashMap.Strict (HashMap)+import Data.Maybe+import Data.String+import Data.Text (Text)+import Prelude+import qualified Data.HashMap.Strict as HashMap+import qualified Data.Text as Text++import Duckling.Dimensions.Types+import Duckling.Numeral.Helpers+import Duckling.Numeral.Types (NumeralData (..))+import Duckling.Regex.Types+import Duckling.Types+import qualified Duckling.Numeral.Types as TNumeral++zeroToNineMap :: HashMap Text Integer+zeroToNineMap = HashMap.fromList+  [ ( "பூஜ்ஜியம்", 0 )+  , ( "ஒன்று", 1 )+  , ( "இரண்டு", 2 )+  , ( "மூன்று", 3 )+  , ( "நான்கு", 4 )+  , ( "ஐந்து", 5 )+  , ( "ஆறு", 6 )+  , ( "ஏழு", 7 )+  , ( "எட்டு", 8 )+  , ( "ஒன்பது", 9 )+  ]++ruleZeroToNine :: Rule+ruleZeroToNine = Rule+  { name = "integer (0..9)"+  , pattern =+    [ regex "(பூஜ்ஜியம்|ஒன்று|இரண்டு|மூன்று|நான்கு|ஐந்து|ஆறு|ஏழு|எட்டு|ஒன்பது)"+    ]+  , prod = \case+      (Token RegexMatch (GroupMatch (match:_)):_) ->+        HashMap.lookup (Text.toLower match) zeroToNineMap >>= integer+      _ -> Nothing+  }++tenToNineteenMap :: HashMap Text Integer+tenToNineteenMap = HashMap.fromList+  [ ( "பத்து", 10 )+  , ( "பதினொன்று", 11 )+  , ( "பன்னிரண்டு", 12 )+  , ( "பதின்மூன்று", 13 )+  , ( "பதினான்கு", 14 )+  , ( "பதினைந்து", 15 )+  , ( "பதினாறு", 16 )+  , ( "பதினேழு", 17 )+  , ( "பதினெட்டு", 18 )+  , ( "பத்தொன்பது", 19 )+  ]++ruleTenToNineteen :: Rule+ruleTenToNineteen = Rule+  { name = "integer (10..19)"+  , pattern =+    [ regex "(பத்து|பதினொன்று|பன்னிரண்டு|பதின்மூன்று|பதினான்கு|பதினைந்து|பதினாறு|பதினேழு|பதினெட்டு|பத்தொன்பது)"+    ]+  , prod = \case+      (Token RegexMatch (GroupMatch (match:_)):_) ->+        HashMap.lookup (Text.toLower match) tenToNineteenMap >>= integer+      _ -> Nothing+  }++tensMap :: HashMap Text Integer+tensMap = HashMap.fromList+  [ ( "இருபது", 20 )+  , ( "இருபத்தி", 20 )+  , ( "முப்பது", 30 )+  , ( "முப்பத்து", 30 )+  , ( "நாற்பது", 40 )+  , ( "நாற்பத்து", 40 )+  , ( "ஐம்பது", 50 )+  , ( "ஐம்பத்தி", 50 )+  , ( "அறுபது", 60 )+  , ( "அறுபத்", 60 )+  , ( "எழுபது", 70 )+  , ( "எழுபத்தி", 70 )+  , ( "எண்பது", 80 )+  , ( "எண்பத்", 80 )+  , ( "தொண்ணூறு", 90 )+  , ( "தொண்ணுற்று", 90 )+  ]++ruleTens :: Rule+ruleTens = Rule+  { name = "integer (20..90)"+  , pattern =+    [ regex "(இருபது|முப்பது|நாற்பது|ஐம்பது|அறுபது|எழுபது|எண்பது|தொண்ணூறு)"+    ]+  , prod = \case+      (Token RegexMatch (GroupMatch (match:_)):_) ->+        HashMap.lookup (Text.toLower match) tensMap >>= integer+      _ -> Nothing+  }++ruleCompositeTens :: Rule+ruleCompositeTens = Rule+  { name = "integer ([2-9][1-9])"+  , pattern =+    [ regex "(இருபத்தி|முப்பத்து|நாற்பத்து|ஐம்பத்தி|அறுபத்|எழுபத்தி|எண்பத்|தொண்ணுற்று)(ஒன்று|இரண்டு|மூன்று|நான்கு|ஐந்து|ஆறு|ஏழு|எட்டு|ஒன்பது)"+    ]+  , prod = \case+      (Token RegexMatch (GroupMatch (m1:m2:_)):_) -> do+        v1 <- HashMap.lookup (Text.toLower m1) tensMap+        v2 <- HashMap.lookup (Text.toLower m2) zeroToNineMap+        integer $ v1 + v2+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleZeroToNine+  , ruleTenToNineteen+  , ruleTens+  , ruleCompositeTens+  ]
Duckling/Numeral/TR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale TR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale TR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/TR/Rules.hs view
@@ -305,7 +305,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -666,7 +666,7 @@   , pattern =     [ dimension Numeral     , regex "nokta|virgül"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral NumeralData{TNumeral.value = v1}:
Duckling/Numeral/Types.hs view
@@ -39,7 +39,7 @@  instance Resolve NumeralData where   type ResolvedValue NumeralData = NumeralValue-  resolve _ NumeralData {value} = Just NumeralValue {vValue = value}+  resolve _ _ NumeralData {value} = Just (NumeralValue {vValue = value}, False)  newtype NumeralValue = NumeralValue { vValue :: Double }   deriving (Eq, Show)
Duckling/Numeral/UK/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale UK Nothing}, allExamples)+corpus = (testContext {locale = makeLocale UK Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Numeral/UK/Rules.hs view
@@ -225,7 +225,7 @@   , pattern =     [ dimension Numeral     , regex "крапка"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->
Duckling/Numeral/VI/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale VI Nothing}, allExamples)+corpus = (testContext {locale = makeLocale VI Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat@@ -61,16 +61,16 @@             , "tră"             ]   , examples (NumeralValue 1.1)-             [ "1.1"-             , "1.10"-             , "01.10"+             [ "1,1"+             , "1,10"+             , "01,10"              ]   , examples (NumeralValue 0.77)-             [ "0.77"-             , ".77"+             [ "0,77"+             , ",77"              ]   , examples (NumeralValue 100000)-             [ "100,000"+             [ "100.000"              , "100000"              , "100K"              , "100k"@@ -79,22 +79,22 @@              [ "3M"              , "3000K"              , "3000000"-             , "3,000,000"+             , "3.000.000"              ]   , examples (NumeralValue 1200000)-             [ "1,200,000"+             [ "1.200.000"              , "1200000"-             , "1.2M"+             , "1,2M"              , "1200K"-             , ".0012G"+             , ",0012G"              ]   , examples (NumeralValue (-1200000))-             [ "- 1,200,000"+             [ "- 1.200.000"              , "-1200000"-             , "âm 1,200,000"-             , "-1.2M"+             , "âm 1.200.000"+             , "-1,2M"              , "-1200K"-             , "-.0012G"+             , "-,0012G"              ]   , examples (NumeralValue 5000)              [ "5 nghìn"
Duckling/Numeral/VI/Rules.hs view
@@ -79,11 +79,11 @@ ruleDecimalWithThousandsSeparator = Rule   { name = "decimal with thousands separator"   , pattern =-    [ regex "(\\d+(,\\d\\d\\d)+\\.\\d+)"+    [ regex "(\\d+(\\.\\d\\d\\d)+,\\d+)"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (match:_)):_) ->-        parseDouble (Text.replace "," Text.empty match) >>= double+        parseDouble (Text.replace "." Text.empty match) >>= double       _ -> Nothing   } @@ -91,10 +91,10 @@ ruleDecimalNumeral = Rule   { name = "decimal number"   , pattern =-    [ regex "(\\d*\\.\\d+)"+    [ regex "(\\d*,\\d+)"     ]   , prod = \tokens -> case tokens of-      (Token RegexMatch (GroupMatch (match:_)):_) -> parseDecimal True match+      (Token RegexMatch (GroupMatch (match:_)):_) -> parseDecimal False match       _ -> Nothing   } @@ -118,7 +118,7 @@   , pattern =     [ dimension Numeral     , regex "chấm|phẩy"-    , numberWith TNumeral.grain isNothing+    , Predicate $ not . hasGrain     ]   , prod = \tokens -> case tokens of       (Token Numeral nd1:_:Token Numeral nd2:_) ->@@ -130,7 +130,7 @@ ruleIntersect = Rule   { name = "intersect"   , pattern =-    [ numberWith (fromMaybe 0 . TNumeral.grain) (>1)+    [ Predicate hasGrain     , Predicate $ and . sequence [not . isMultipliable, isPositive]     ]   , prod = \tokens -> case tokens of@@ -275,11 +275,11 @@ ruleIntegerWithThousandsSeparator = Rule   { name = "integer with thousands separator ,"   , pattern =-    [ regex "(\\d{1,3}(,\\d\\d\\d){1,5})"+    [ regex "(\\d{1,3}(\\.\\d\\d\\d){1,5})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (match:_)):-       _) -> let fmt = Text.replace "," Text.empty match+       _) -> let fmt = Text.replace "." Text.empty match         in parseDouble fmt >>= double       _ -> Nothing   }
Duckling/Numeral/ZH/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ZH Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ZH Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat@@ -66,6 +66,24 @@              [ "96"              , "九十六"              ]+  , examples (NumeralValue 203)+             [ "203"+             , "二百零三"+             ]+  , examples (NumeralValue 534)+             [ "534"+             , "五百三十四"+             ]+  , examples (NumeralValue 34567)+             [ "34567"+             , "34,567"+             , "三万四千五百六十七"+             ]+  , examples (NumeralValue 10040)+             [ "10040"+             , "10,040"+             , "一万零四十"+             ]   , examples (NumeralValue 1.1)              [ "1.1"              , "1.10"@@ -75,24 +93,36 @@              [ "0.77"              , ".77"              ]+  , examples (NumeralValue 34507)+             [ "34507"+             , "34,507"+             , "三万四千五百零七"+             ]   , examples (NumeralValue 100000)              [ "100,000"              , "100000"              , "100K"              , "100k"+             , "十万"              ]   , examples (NumeralValue 3000000)              [ "3M"-             , "3000K"              , "3000000"              , "3,000,000"+             , "三百万"              ]+  , examples (NumeralValue 1040000)+             [ "1,040,000"+             , "1040000"+             , "1.04M"+             , "一百零四万"+             ]   , examples (NumeralValue 1200000)              [ "1,200,000"              , "1200000"              , "1.2M"-             , "1200K"              , ".0012G"+             , "一百二十万"              ]   , examples (NumeralValue (-1200000))              [ "- 1,200,000"@@ -105,5 +135,6 @@              , "-1.2M"              , "-1200K"              , "-.0012G"+             , "负一百二十万"              ]   ]
Duckling/Numeral/ZH/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}  module Duckling.Numeral.ZH.Rules@@ -15,6 +16,7 @@  import Data.Maybe import Data.String+import Data.Text (Text) import Prelude import qualified Data.HashMap.Strict as HashMap import qualified Data.Text as Text@@ -26,19 +28,19 @@ import Duckling.Types import qualified Duckling.Numeral.Types as TNumeral -ruleInteger5 :: Rule-ruleInteger5 = Rule+ruleInteger :: Rule+ruleInteger = Rule   { name = "integer (0..10)"   , pattern =-    [ regex "(〇|零|一|二|两|兩|三|四|五|六|七|八|九|十)(个|個)?"+    [ regex "(〇|零|一|二|两|兩|三|四|五|六|七|八|九|十)"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token RegexMatch (GroupMatch (match:_)):_) ->         HashMap.lookup match integerMap >>= integer       _ -> Nothing   } -integerMap :: HashMap.HashMap Text.Text Integer+integerMap :: HashMap.HashMap Text Integer integerMap = HashMap.fromList   [ ( "〇", 0 )   , ( "零", 0 )@@ -64,7 +66,7 @@     [ regex "-|负|負"     , Predicate isPositive     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (_:Token Numeral nd:_) -> double (TNumeral.value nd * (-1))       _ -> Nothing   }@@ -75,7 +77,7 @@   , pattern =     [ regex "(\\d+(,\\d\\d\\d)+\\.\\d+)"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token RegexMatch (GroupMatch (match:_)):_) ->         parseDouble (Text.replace "," Text.empty match) >>= double       _ -> Nothing@@ -87,102 +89,124 @@   , pattern =     [ regex "(\\d*\\.\\d+)"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (Token RegexMatch (GroupMatch (match:_)):_) -> parseDecimal True match       _ -> Nothing   }  ruleNumeral :: Rule ruleNumeral = Rule-  { name = "<number>个"+  { name = "<number>个/個"   , pattern =     [ dimension Numeral-    , regex "个"+    , regex "个|個"     ]-  , prod = \tokens -> case tokens of+  , prod = \case       (token:_) -> Just token       _ -> Nothing   } -ruleInteger3 :: Rule-ruleInteger3 = Rule-  { name = "integer (20..90)"-  , pattern =-    [ numberBetween 2 10-    , regex "十"-    ]-  , prod = \tokens -> case tokens of-      (Token Numeral NumeralData{TNumeral.value = v}:_) -> double $ v * 10-      _ -> Nothing-  }+numeralSuffixList :: [(Text, Maybe Token)]+numeralSuffixList =+  [ ("K", double 1e3 >>= withGrain 3 >>= withMultipliable)+  , ("M", double 1e6 >>= withGrain 6 >>= withMultipliable)+  , ("G", double 1e9 >>= withGrain 9 >>= withMultipliable)+  , ("十", double 1e1 >>= withGrain 1 >>= withMultipliable)+  , ("百", double 1e2 >>= withGrain 2 >>= withMultipliable)+  , ("千", double 1e3 >>= withGrain 3 >>= withMultipliable)+  , ("万", double 1e4 >>= withGrain 4 >>= withMultipliable)+  , ("亿", double 1e8 >>= withGrain 8 >>= withMultipliable)+  ] -ruleNumeralsSuffixesKMG :: Rule-ruleNumeralsSuffixesKMG = Rule-  { name = "numbers suffixes (K, M, G)"+ruleNumeralSuffixes :: [Rule]+ruleNumeralSuffixes = uncurry constructNumeralSuffixRule <$> numeralSuffixList+  where+    constructNumeralSuffixRule :: Text -> Maybe Token -> Rule+    constructNumeralSuffixRule suffixName production = Rule+      { name = "number suffix: " `mappend` suffixName+      , pattern =+        [ regex $ Text.unpack suffixName+        ]+      , prod = const production+      }+++ruleMultiply :: Rule+ruleMultiply = Rule+  { name = "compose by multiplication"   , pattern =     [ dimension Numeral-    , regex "([kmg])"+    , Predicate isMultipliable     ]-  , prod = \tokens -> case tokens of-      (Token Numeral NumeralData{TNumeral.value = v}:-       Token RegexMatch (GroupMatch (match:_)):-       _) -> case Text.toLower match of-         "k" -> double $ v * 1e3-         "m" -> double $ v * 1e6-         "g" -> double $ v * 1e9-         _   -> Nothing+  , prod = \case+      (token1:token2:_) -> multiply token1 token2       _ -> Nothing   } -ruleInteger4 :: Rule-ruleInteger4 = Rule-  { name = "integer 21..99"+ruleIntegerWithThousandsSeparator :: Rule+ruleIntegerWithThousandsSeparator = Rule+  { name = "integer with thousands separator ,"   , pattern =-    [ oneOf [70, 20, 60, 50, 40, 90, 30, 80]-    , numberBetween 1 10+    [ regex "(\\d{1,3}(,\\d\\d\\d){1,5})"     ]-  , prod = \tokens -> case tokens of-      (Token Numeral NumeralData{TNumeral.value = v1}:-       Token Numeral NumeralData{TNumeral.value = v2}:-       _) -> double $ v1 + v2+  , prod = \case+      (Token RegexMatch (GroupMatch (match:_)):+       _) -> let fmt = Text.replace "," Text.empty match+        in parseDouble fmt >>= double       _ -> Nothing   } -ruleInteger2 :: Rule-ruleInteger2 = Rule-  { name = "integer (11..19)"+ruleNumeralsIntersectNonconsectiveUnit :: Rule+ruleNumeralsIntersectNonconsectiveUnit = Rule+  { name = "integer with nonconsecutive unit modifiers"   , pattern =-    [ regex "十"-    , numberBetween 1 10+    [ Predicate isPositive+    , regex "零|〇"+    , Predicate isPositive     ]-  , prod = \tokens -> case tokens of-      (_:Token Numeral NumeralData{TNumeral.value = v}:_) -> double $ 10 + v+  , prod = \case+      (Token Numeral NumeralData{TNumeral.value = v1}:_:+       Token Numeral NumeralData{TNumeral.value = v2}:_) ->+        sumConnectedNumbers v1 v2 (diffIntegerDigits v1 v2)+        >>= double       _ -> Nothing   }+  where+    sumConnectedNumbers :: Double -> Double -> Int -> Maybe Double+    sumConnectedNumbers v1 v2 d+      | d <= 1 = Nothing+      | otherwise = Just $ v1 + v2 -ruleIntegerWithThousandsSeparator :: Rule-ruleIntegerWithThousandsSeparator = Rule-  { name = "integer with thousands separator ,"+ruleNumeralsIntersectConsecutiveUnit :: Rule+ruleNumeralsIntersectConsecutiveUnit = Rule+  { name = "integer with consecutive unit modifiers"   , pattern =-    [ regex "(\\d{1,3}(,\\d\\d\\d){1,5})"+    [ Predicate isPositive+    , Predicate isPositive     ]-  , prod = \tokens -> case tokens of-      (Token RegexMatch (GroupMatch (match:_)):-       _) -> let fmt = Text.replace "," Text.empty match-        in parseDouble fmt >>= double+  , prod = \case+      (Token Numeral NumeralData{TNumeral.value = v1}:+       Token Numeral NumeralData{TNumeral.value = v2}:_) ->+        sumConnectedNumbers v1 v2 (diffIntegerDigits v1 v2)+        >>= double       _ -> Nothing   }+  where+    sumConnectedNumbers :: Double -> Double -> Int -> Maybe Double+    sumConnectedNumbers v1 v2 d+      | d == 1 = Just $ v1 + v2+      | otherwise = Nothing  rules :: [Rule] rules =   [ ruleDecimalNumeral   , ruleDecimalWithThousandsSeparator-  , ruleInteger2-  , ruleInteger3-  , ruleInteger4-  , ruleInteger5+  , ruleInteger   , ruleIntegerWithThousandsSeparator   , ruleNumeral+  , ruleNumeralsIntersectConsecutiveUnit+  , ruleNumeralsIntersectNonconsectiveUnit   , ruleNumeralsPrefixWithNegativeOrMinus-  , ruleNumeralsSuffixesKMG+  , ruleMultiply   ]+  ++ ruleNumeralSuffixes
Duckling/Ordinal/AR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/AR/Rules.hs view
@@ -15,7 +15,6 @@   ) where  import Data.HashMap.Strict (HashMap)-import Data.String import Data.Text (Text) import Prelude import qualified Data.Text as Text
+ Duckling/Ordinal/BG/Corpus.hs view
@@ -0,0 +1,262 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.Ordinal.BG.Corpus+  ( corpus+  ) where++import Data.String+import Prelude++import Duckling.Locale+import Duckling.Ordinal.Types+import Duckling.Resolve+import Duckling.Testing.Types++corpus :: Corpus+corpus = (testContext {locale = makeLocale BG Nothing}, testOptions, allExamples)++allExamples :: [Example]+allExamples = concat+  [ examples (OrdinalData 1)+             [ "първи"+             , "първите"+             , "първия"+             , "първият"+             , "първо"+             , "първото"+             , "първа"+             , "първата"+             , "1ви"+             , "1-ви"+             , "1вите"+             , "1-вите"+             , "1вия"+             , "1-вия"+             , "1вият"+             , "1-вият"+             , "1во"+             , "1-во"+             , "1вото"+             , "1-вото"+             , "1ва"+             , "1-ва"+             , "1вата"+             , "1-вата"+             ]+  , examples (OrdinalData 3)+             [ "трети"+             , "третите"+             , "третия"+             , "третият"+             , "трето"+             , "третото"+             , "трета"+             , "третата"+             , "3ти"+             , "3-ти"+             , "3тите"+             , "3-тите"+             , "3тия"+             , "3-тия"+             , "3тият"+             , "3-тият"+             , "3то"+             , "3-то"+             , "3тото"+             , "3-тото"+             , "3та"+             , "3-та"+             , "3тата"+             , "3-тата"+             ]+  , examples (OrdinalData 8)+             [ "осми"+             , "осмите"+             , "осмия"+             , "осмият"+             , "осмо"+             , "осмото"+             , "осма"+             , "осмата"+             , "8ми"+             , "8-ми"+             , "8мите"+             , "8-мите"+             , "8мия"+             , "8-мия"+             , "8мият"+             , "8-мият"+             , "8мо"+             , "8-мо"+             , "8мото"+             , "8-мото"+             , "8ма"+             , "8-ма"+             , "8мата"+             , "8-мата"+             ]+  , examples (OrdinalData 15)+             [ "петнадесети"+             , "петнадесетите"+             , "петнадесетия"+             , "петнадесетият"+             , "петнадесето"+             , "петнадесетото"+             , "петнадесета"+             , "петнадесетата"+             , "15ти"+             , "15-ти"+             , "15тите"+             , "15-тите"+             , "15тия"+             , "15-тия"+             , "15тият"+             , "15-тият"+             , "15то"+             , "15-то"+             , "15тото"+             , "15-тото"+             , "15та"+             , "15-та"+             , "15тата"+             , "15-тата"+             ]+  , examples (OrdinalData 21)+             [ "двадесет и първи"+             , "двадесет и първите"+             , "двадесет и първия"+             , "двадесет и първият"+             , "двадесет и първо"+             , "двадесет и първото"+             , "двадесет и първа"+             , "двадесет и първата"+             , "21ви"+             , "21-ви"+             , "21вите"+             , "21-вите"+             , "21вия"+             , "21-вия"+             , "21вият"+             , "21-вият"+             , "21во"+             , "21-во"+             , "21вото"+             , "21-вото"+             , "21ва"+             , "21-ва"+             , "21вата"+             , "21-вата"+             ]+  , examples (OrdinalData 23)+             [ "двадесет и трети"+             , "двадесет и третите"+             , "двадесет и третия"+             , "двадесет и третият"+             , "двадесет и трето"+             , "двадесет и третото"+             , "двадесет и трета"+             , "двадесет и третата"+             , "23ти"+             , "23-ти"+             , "23тите"+             , "23-тите"+             , "23тия"+             , "23-тия"+             , "23тият"+             , "23-тият"+             , "23то"+             , "23-то"+             , "23тото"+             , "23-тото"+             , "23та"+             , "23-та"+             , "23тата"+             , "23-тата"+             ]+  , examples (OrdinalData 31)+             [ "тридесет и първи"+             , "тридесет и първите"+             , "тридесет и първия"+             , "тридесет и първият"+             , "тридесет и първо"+             , "тридесет и първото"+             , "тридесет и първа"+             , "тридесет и първата"+             , "31ви"+             , "31-ви"+             , "31вите"+             , "31-вите"+             , "31вия"+             , "31-вия"+             , "31вият"+             , "31-вият"+             , "31во"+             , "31-во"+             , "31вото"+             , "31-вото"+             , "31ва"+             , "31-ва"+             , "31вата"+             , "31-вата"+             ]+  , examples (OrdinalData 48)+             [ "четирдесет и осми"+             , "четирдесет и осмите"+             , "четирдесет и осмия"+             , "четирдесет и осмият"+             , "четирдесет и осмо"+             , "четирдесет и осмото"+             , "четирдесет и осма"+             , "четирдесет и осмата"+             , "48ми"+             , "48-ми"+             , "48мите"+             , "48-мите"+             , "48мия"+             , "48-мия"+             , "48мият"+             , "48-мият"+             , "48мо"+             , "48-мо"+             , "48мото"+             , "48-мото"+             , "48ма"+             , "48-ма"+             , "48мата"+             , "48-мата"+             ]+  , examples (OrdinalData 99)+             [ "деветдесет и девети"+             , "деветдесет и деветите"+             , "деветдесет и деветия"+             , "деветдесет и деветият"+             , "деветдесет и девето"+             , "деветдесет и деветото"+             , "деветдесет и девета"+             , "деветдесет и деветата"+             , "99ти"+             , "99-ти"+             , "99тите"+             , "99-тите"+             , "99тия"+             , "99-тия"+             , "99тият"+             , "99-тият"+             , "99то"+             , "99-то"+             , "99тото"+             , "99-тото"+             , "99та"+             , "99-та"+             , "99тата"+             , "99-тата"+             ]+  ]
+ Duckling/Ordinal/BG/Rules.hs view
@@ -0,0 +1,110 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoRebindableSyntax #-}++module Duckling.Ordinal.BG.Rules+  ( rules+  ) where++import Data.HashMap.Strict (HashMap)+import Data.Text (Text)+import Prelude+import qualified Data.HashMap.Strict as HashMap+import qualified Data.Text as Text++import Duckling.Dimensions.Types+import Duckling.Numeral.Helpers (parseInt)+import Duckling.Ordinal.Helpers+import Duckling.Regex.Types+import Duckling.Types++ordinalsMap :: HashMap Text Int+ordinalsMap = HashMap.fromList+  [ ( "първ"         , 1 )+  , ( "втор"         , 2 )+  , ( "трет"         , 3 )+  , ( "четвърт"      , 4 )+  , ( "пет"          , 5 )+  , ( "шест"         , 6 )+  , ( "седм"         , 7 )+  , ( "осм"          , 8 )+  , ( "девет"        , 9 )+  , ( "десет"        , 10 )+  , ( "единадесет"   , 11 )+  , ( "дванадесет"   , 12 )+  , ( "тринадесет"   , 13 )+  , ( "четиринадесет", 14 )+  , ( "петнадесет"   , 15 )+  , ( "шестнадесет"  , 16 )+  , ( "седемнадесет" , 17 )+  , ( "осемнадесет"  , 18 )+  , ( "деветнадесет" , 19 )+  , ( "двадесет"     , 20 )+  ]++ruleOrdinalsFirstth :: Rule+ruleOrdinalsFirstth = Rule+  { name = "ordinals (first..19th)"+  , pattern =+    [ regex "(първ|втор|трет|четвърт|пет|шест|седм|осм|девет|десет|единадесет|дванадесет|тринадесет|четиринадесет|петнадесет|шестнадесет|седемнадесет|осемнадесет|деветнадесет|двадесет)(и(я(т)?|те)?|а(та)?|о(то)?)"+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (match:_)):_) ->+        ordinal <$> HashMap.lookup (Text.toLower match) ordinalsMap+      _ -> Nothing+  }++dozensMap :: HashMap Text Int+dozensMap = HashMap.fromList+  [ ( "двадесет"  , 20 )+  , ( "тридесет"  , 30 )+  , ( "четирдесет", 40 )+  , ( "петдесет"  , 50 )+  , ( "шестдесет" , 60 )+  , ( "седемдесет", 70 )+  , ( "осемдесет" , 80 )+  , ( "деветдесет", 90 )+  ]++ruleOrdinal :: Rule+ruleOrdinal = Rule+  { name = "ordinal 21..99"+  , pattern =+    [ regex "(двадесет|тридесет|четирдесет|петдесет|шестдесет|седемдесет|осемдесет|деветдесет)"+    , regex "и (първ|втор|трет|четвърт|пет|шест|седм|осм|девет)(и(ят?|те)?|а(та)?|о(то)?)"+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (m1:_)):+       Token RegexMatch (GroupMatch (m2:_)):+       _) -> do+         dozen <- HashMap.lookup (Text.toLower m1) dozensMap+         unit <- HashMap.lookup (Text.toLower m2) ordinalsMap+         Just . ordinal $ dozen + unit+      _ -> Nothing+  }++ruleOrdinalDigits :: Rule+ruleOrdinalDigits = Rule+  { name = "ordinal (digits)"+  , pattern =+    [ regex "0*(\\d+)-?((в|р|м|т)(и(я(т)?|те)?|а(та)?|о(то)?))"+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (match:_)):_) -> ordinal <$> parseInt match+      _ -> Nothing+  }++rules :: [Rule]+rules =+  [ ruleOrdinal+  , ruleOrdinalDigits+  , ruleOrdinalsFirstth+  ]
Duckling/Ordinal/DA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale DA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale DA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples =
Duckling/Ordinal/DE/Corpus.hs view
@@ -22,10 +22,10 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale DE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale DE Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale DE Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale DE Nothing}, testOptions, examples)   where     examples =       [ "1.1"
Duckling/Ordinal/EL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale EL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale EL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/EN/Corpus.hs view
@@ -9,16 +9,17 @@ {-# LANGUAGE OverloadedStrings #-}  module Duckling.Ordinal.EN.Corpus-  ( corpus ) where+  ( corpus+  ) where -import Prelude import Data.String+import Prelude  import Duckling.Ordinal.Types import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/EN/Rules.hs view
@@ -70,7 +70,6 @@   , ( "ninety", 90 )   ] - ruleOrdinals :: Rule ruleOrdinals = Rule   { name = "ordinals (first..twentieth,thirtieth,...)"
Duckling/Ordinal/ES/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/ET/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ET Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ET Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples =
Duckling/Ordinal/FR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/GA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/HE/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HE Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/HI/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HI Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HI Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/HR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/HU/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/ID/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ID Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ID Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/IT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale IT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale IT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/JA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale JA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale JA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples =
Duckling/Ordinal/KO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/NB/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NB Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NB Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/NL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/PL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples =
Duckling/Ordinal/PT/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/RO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/RU/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/RU/Rules.hs view
@@ -8,14 +8,17 @@  {-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoRebindableSyntax #-}  module Duckling.Ordinal.RU.Rules-  ( rules ) where+  ( rules+  ) where -import Control.Monad (join)-import qualified Data.Text as Text-import Prelude+import Data.HashMap.Strict (HashMap) import Data.String+import Prelude+import qualified Data.HashMap.Strict as HashMap+import qualified Data.Text as Text  import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (parseInt)@@ -23,6 +26,42 @@ import Duckling.Regex.Types import Duckling.Types +ordinalsFirstthMap :: HashMap Text.Text Int+ordinalsFirstthMap = HashMap.fromList+  [ ( "перв", 1 )+  , ( "втор", 2 )+  , ( "трет", 3 )+  , ( "четверт", 4 )+  , ( "пят", 5 )+  , ( "шест", 6 )+  , ( "седьм", 7 )+  , ( "восьм", 8 )+  , ( "девят", 9 )+  , ( "десят", 10 )+  , ( "одинадцат", 11 )+  , ( "двенадцат", 12 )+  , ( "тринадцат", 13 )+  , ( "четырнадцат", 14 )+  , ( "пятнадцат", 15 )+  , ( "шестнадцат", 16 )+  , ( "семнадцат", 17 )+  , ( "восемнадцат", 18 )+  , ( "девятнадцат", 19 )+  , ( "двадцат", 20 )+  ]++cardinalsMap :: HashMap Text.Text Int+cardinalsMap = HashMap.fromList+  [ ( "двадцать", 20 )+  , ( "тридцать", 30 )+  , ( "сорок", 40 )+  , ( "пятьдесят", 50 )+  , ( "шестьдесят", 60 )+  , ( "семьдесят", 70 )+  , ( "восемьдесят", 80 )+  , ( "девяносто", 90 )+  ]+ ruleOrdinalsFirstth :: Rule ruleOrdinalsFirstth = Rule   { name = "ordinals (first..19th)"@@ -30,28 +69,8 @@     [ regex "(перв|втор|трет|четверт|пят|шест|седьм|восьм|девят|десят|одинадцат|двенадцат|тринадцат|четырнадцат|пятнадцат|шестнадцат|семнадцат|восемнадцат|девятнадцат|двадцат)(ье(го|й)?|ого|ый|ой|ий|ая|ое|ья)"     ]   , prod = \tokens -> case tokens of-      (Token RegexMatch (GroupMatch (match:_)):_) -> case Text.toLower match of-        "перв" -> Just $ ordinal 1-        "втор" -> Just $ ordinal 2-        "трет" -> Just $ ordinal 3-        "четверт" -> Just $ ordinal 4-        "пят" -> Just $ ordinal 5-        "шест" -> Just $ ordinal 6-        "седьм" -> Just $ ordinal 7-        "восьм" -> Just $ ordinal 8-        "девят" -> Just $ ordinal 9-        "десят" -> Just $ ordinal 10-        "одинадцат" -> Just $ ordinal 11-        "двенадцат" -> Just $ ordinal 12-        "тринадцат" -> Just $ ordinal 13-        "четырнадцат" -> Just $ ordinal 14-        "пятнадцат" -> Just $ ordinal 15-        "шестнадцат" -> Just $ ordinal 16-        "семнадцат" -> Just $ ordinal 17-        "восемнадцат" -> Just $ ordinal 18-        "девятнадцат" -> Just $ ordinal 19-        "двадцат" -> Just $ ordinal 20-        _ -> Nothing+      (Token RegexMatch (GroupMatch (match:_)):_) ->+        ordinal <$> HashMap.lookup (Text.toLower match) ordinalsFirstthMap       _ -> Nothing   } @@ -66,27 +85,8 @@       (Token RegexMatch (GroupMatch (m1:_)):        Token RegexMatch (GroupMatch (m2:_)):        _) -> do-         dozen <- case Text.toLower m1 of-           "двадцать" -> Just 20-           "тридцать" -> Just 30-           "сорок" -> Just 40-           "пятьдесят" -> Just 50-           "шестьдесят" -> Just 60-           "семьдесят" -> Just 70-           "восемьдесят" -> Just 80-           "девяносто" -> Just 90-           _ -> Nothing-         unit <- case Text.toLower m2 of-           "перв" -> Just 1-           "втор" -> Just 2-           "трет" -> Just 3-           "четверт" -> Just 4-           "пят" -> Just 5-           "шест" -> Just 6-           "седьм" -> Just 7-           "восьм" -> Just 8-           "девят" -> Just 9-           _ -> Nothing+         dozen <- HashMap.lookup (Text.toLower m1) cardinalsMap+         unit <- HashMap.lookup (Text.toLower m2) ordinalsFirstthMap          Just . ordinal $ dozen + unit       _ -> Nothing   }
Duckling/Ordinal/SV/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale SV Nothing}, allExamples)+corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/TR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale TR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale TR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/Types.hs view
@@ -28,7 +28,7 @@  instance Resolve OrdinalData where   type ResolvedValue OrdinalData = OrdinalData-  resolve _ x = Just x+  resolve _ _ x = Just (x, False)  instance ToJSON OrdinalData where   toJSON (OrdinalData value) = object
Duckling/Ordinal/UK/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale UK Nothing}, allExamples)+corpus = (testContext {locale = makeLocale UK Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/VI/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale VI Nothing}, allExamples)+corpus = (testContext {locale = makeLocale VI Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Ordinal/ZH/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ZH Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ZH Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/PhoneNumber/Corpus.hs view
@@ -20,10 +20,10 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "12345"
Duckling/PhoneNumber/PT/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/PhoneNumber/Types.hs view
@@ -37,8 +37,8 @@  instance Resolve PhoneNumberData where   type ResolvedValue PhoneNumberData = PhoneNumberValue-  resolve _ PhoneNumberData {prefix, number, extension} = Just PhoneNumberValue-    {value = Text.concat [p, number, e]}+  resolve _ _ PhoneNumberData {prefix, number, extension} = Just+    (PhoneNumberValue {value = Text.concat [p, number, e]}, False)     where       p = case prefix of         Just p -> "(+" <> TS.showt p <> ") "
Duckling/Quantity/AR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/EN/Corpus.hs view
@@ -18,7 +18,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/FR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/HR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/KO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/PT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/RO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/RU/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Quantity/Types.hs view
@@ -55,33 +55,33 @@ instance Resolve QuantityData where   type ResolvedValue QuantityData = QuantityValue -  resolve _ QuantityData {value = Just value+  resolve _ _ QuantityData {value = Just value                          , unit = Just unit                          , aproduct = aproduct}-   = Just $ simple unit value aproduct+   = Just (simple unit value aproduct, False) -  resolve _ QuantityData {value = Nothing+  resolve _ _ QuantityData {value = Nothing                          , unit = Just unit                          , aproduct = aproduct                          , minValue = Just from                          , maxValue = Just to}-   = Just $ between unit (from, to) aproduct+   = Just (between unit (from, to) aproduct, False) -  resolve _ QuantityData {value = Nothing+  resolve _ _ QuantityData {value = Nothing                          , unit = Just unit                          , aproduct = aproduct                          , minValue = Just from                          , maxValue = Nothing}-   = Just $ above unit from aproduct+   = Just (above unit from aproduct, False) -  resolve _ QuantityData {value = Nothing+  resolve _ _ QuantityData {value = Nothing                          , unit = Just unit                          , aproduct = aproduct                          , minValue = Nothing                          , maxValue = Just to}-   = Just $ under unit to aproduct+   = Just (under unit to aproduct, False) -  resolve _ _ = Nothing+  resolve _ _ _ = Nothing  data IntervalDirection = Above | Under   deriving (Eq, Generic, Hashable, Ord, Show, NFData)
Duckling/Ranking/Classifiers.hs view
@@ -45,6 +45,7 @@ import qualified Duckling.Ranking.Classifiers.RO_XX as RO_XXClassifiers import qualified Duckling.Ranking.Classifiers.RU_XX as RU_XXClassifiers import qualified Duckling.Ranking.Classifiers.SV_XX as SV_XXClassifiers+import qualified Duckling.Ranking.Classifiers.TA_XX as TA_XXClassifiers import qualified Duckling.Ranking.Classifiers.TR_XX as TR_XXClassifiers import qualified Duckling.Ranking.Classifiers.UK_XX as UK_XXClassifiers import qualified Duckling.Ranking.Classifiers.VI_XX as VI_XXClassifiers@@ -82,6 +83,7 @@ classifiers (Locale RO _) = RO_XXClassifiers.classifiers classifiers (Locale RU _) = RU_XXClassifiers.classifiers classifiers (Locale SV _) = SV_XXClassifiers.classifiers+classifiers (Locale TA _) = TA_XXClassifiers.classifiers classifiers (Locale TR _) = TR_XXClassifiers.classifiers classifiers (Locale UK _) = UK_XXClassifiers.classifiers classifiers (Locale VI _) = VI_XXClassifiers.classifiers
Duckling/Ranking/Classifiers/DE_XX.hs view
@@ -35,11 +35,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (numeric)",         Classifier{okData =-                     ClassData{prior = -0.9246589815446716, unseen = -4.795790545596741,+                     ClassData{prior = -0.921320080279157, unseen = -4.795790545596741,                                likelihoods = HashMap.fromList [("", 0.0)], n = 119},                    koData =-                     ClassData{prior = -0.5052854433903752, unseen = -5.209486152841421,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 181}}),+                     ClassData{prior = -0.507486722500476, unseen = -5.204006687076795,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 180}}),        ("exactly <time-of-day>",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.3025850929940455,@@ -52,13 +52,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("Father's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("<hour-of-day> <half> (as relative minutes)",         Classifier{okData =                      ClassData{prior = -infinity, unseen = -1.0986122886681098,@@ -216,6 +209,13 @@                                     ("<time-of-day> am|pm", -1.9095425048844386),                                     ("hour", -1.349926716949016), ("minute", -2.1972245773362196)],                                n = 8}}),+       ("Neujahr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("absorption of , after named day",         Classifier{okData =                      ClassData{prior = -7.410797215372185e-2,@@ -301,6 +301,13 @@                                    [("hh:mmtime-of-day (latent)", -1.0986122886681098),                                     ("minutehour", -1.0986122886681098)],                                n = 1}}),+       ("Halloween",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("between <datetime> and <datetime> (interval)",         Classifier{okData =                      ClassData{prior = -0.6931471805599453,@@ -365,6 +372,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("Valentinstag",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("hour (grain)",         Classifier{okData =                      ClassData{prior = -0.15415067982725836,@@ -391,285 +405,286 @@                                n = 1}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.2639842810219578, unseen = -6.92951677076365,+                     ClassData{prior = -0.26452876747706405,+                               unseen = -6.926577033222725,                                likelihoods =                                  HashMap.fromList-                                   [("Samstag<time-of-day>  o'clock", -6.23539063760472),-                                    ("hourday", -4.982627669109352),-                                    ("<datetime> - <datetime> (interval)year", -4.982627669109352),-                                    ("dayhour", -2.571828991475074),-                                    ("daymonth", -3.167337702471103),+                                   [("Samstag<time-of-day>  o'clock", -6.2324480165505225),+                                    ("hourday", -4.979685048055154),+                                    ("<datetime> - <datetime> (interval)year", -4.979685048055154),+                                    ("dayhour", -2.568886370420876),+                                    ("daymonth", -3.1879255788270995),                                     ("<day-of-month>(ordinal) <named-month> year<time-of-day>  o'clock",-                                     -6.23539063760472),-                                    ("monthyear", -4.5306425453662955),-                                    ("yearhour", -6.23539063760472),-                                    ("Juliintersect", -6.23539063760472),-                                    ("intersect<time-of-day>  o'clock", -4.095324474108449),-                                    ("christmasyear", -6.23539063760472),-                                    ("after lunchat <time-of-day>", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("monthyear", -4.527699924312097),+                                    ("yearhour", -6.2324480165505225),+                                    ("Juliintersect", -6.2324480165505225),+                                    ("intersect<time-of-day>  o'clock", -4.092381853054252),+                                    ("after lunchat <time-of-day>", -6.2324480165505225),                                     ("absorption of , after named daymm/dd/yyyy",-                                     -6.23539063760472),-                                    ("intersectJuli", -5.5422434570447745),-                                    ("<day-of-month> (ordinal)Dienstag", -6.23539063760472),-                                    ("intersect by 'of', 'from', 'syear", -5.829925529496556),-                                    ("<time-of-day> am|pmintersect", -5.136778348936611),-                                    ("<day-of-month> (ordinal)September", -5.829925529496556),-                                    ("intersect<time> <part-of-day>", -4.155949095924885),-                                    ("<time-of-day>  o'clockafter lunch", -5.5422434570447745),-                                    ("<day-of-month> (ordinal)Mittwoch", -6.23539063760472),-                                    ("Montagthis <cycle>", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("intersectJuli", -5.539300835990577),+                                    ("<day-of-month> (ordinal)Dienstag", -6.2324480165505225),+                                    ("intersect by 'of', 'from', 'syear", -5.826982908442359),+                                    ("<time-of-day> am|pmintersect", -5.133835727882413),+                                    ("<day-of-month> (ordinal)September", -5.826982908442359),+                                    ("intersect<time> <part-of-day>", -4.153006474870687),+                                    ("<time-of-day>  o'clockafter lunch", -5.539300835990577),+                                    ("<day-of-month> (ordinal)Mittwoch", -6.2324480165505225),+                                    ("Montagthis <cycle>", -6.2324480165505225),                                     ("<time> <part-of-day><time-of-day>  o'clock",-                                     -6.23539063760472),-                                    ("Oktoberyear", -5.136778348936611),-                                    ("today<time-of-day>  o'clock", -6.23539063760472),-                                    ("<time-of-day>  o'clockon <date>", -5.829925529496556),-                                    ("<time-of-day> am|pmintersect by ','", -5.5422434570447745),-                                    ("intersect by ','year", -5.136778348936611),-                                    ("on <date><time-of-day>  o'clock", -6.23539063760472),-                                    ("exactly <time-of-day>tomorrow", -5.829925529496556),-                                    ("mm/dd<time-of-day>  o'clock", -6.23539063760472),-                                    ("monthhour", -5.829925529496556),+                                     -6.2324480165505225),+                                    ("Oktoberyear", -5.133835727882413),+                                    ("today<time-of-day>  o'clock", -6.2324480165505225),+                                    ("<time-of-day>  o'clockon <date>", -5.826982908442359),+                                    ("<time-of-day> am|pmintersect by ','", -5.539300835990577),+                                    ("intersect by ','year", -5.133835727882413),+                                    ("on <date><time-of-day>  o'clock", -6.2324480165505225),+                                    ("exactly <time-of-day>tomorrow", -5.826982908442359),+                                    ("mm/dd<time-of-day>  o'clock", -6.2324480165505225),+                                    ("monthhour", -5.826982908442359),                                     ("on <date>between <datetime> and <datetime> (interval)",-                                     -6.23539063760472),-                                    ("last <day-of-week> of <time>year", -6.23539063760472),-                                    ("hourmonth", -5.829925529496556),-                                    ("todayat <time-of-day>", -5.5422434570447745),-                                    ("mm/ddabout <time-of-day>", -5.829925529496556),+                                     -6.2324480165505225),+                                    ("last <day-of-week> of <time>year", -6.2324480165505225),+                                    ("hourmonth", -5.826982908442359),+                                    ("todayat <time-of-day>", -5.539300835990577),+                                    ("mm/ddabout <time-of-day>", -5.826982908442359),                                     ("Donnerstagfrom <datetime> - <datetime> (interval)",-                                     -5.829925529496556),+                                     -5.826982908442359),                                     ("on <date>between <time-of-day> and <time-of-day> (interval)",-                                     -6.23539063760472),-                                    ("on <date>at <time-of-day>", -5.829925529496556),-                                    ("dayday", -3.0573368072567746),-                                    ("<time> <part-of-day>at <time-of-day>", -5.829925529496556),+                                     -6.2324480165505225),+                                    ("on <date>at <time-of-day>", -5.826982908442359),+                                    ("dayday", -3.054394186202577),+                                    ("<time> <part-of-day>at <time-of-day>", -5.826982908442359),                                     ("<time-of-day> am|pmabsorption of , after named day",-                                     -6.23539063760472),-                                    ("about <time-of-day>on <date>", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("about <time-of-day>on <date>", -6.2324480165505225),                                     ("<hour-of-day> <integer> (as relative minutes)in|during the <part-of-day>",-                                     -5.829925529496556),-                                    ("<day-of-month> (ordinal)intersect", -5.136778348936611),-                                    ("hourhour", -3.7096619932964647),-                                    ("hh:mmintersect by ','", -4.982627669109352),+                                     -5.826982908442359),+                                    ("<day-of-month> (ordinal)intersect", -5.133835727882413),+                                    ("hourhour", -3.7067193722422673),+                                    ("hh:mmintersect by ','", -4.979685048055154),                                     ("Donnerstagfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.5422434570447745),-                                    ("Dienstagthis <cycle>", -6.23539063760472),-                                    ("<part-of-day> of <time>Februar", -5.829925529496556),-                                    ("dayyear", -3.317619905520441),-                                    ("Mittwochthis <cycle>", -6.23539063760472),+                                     -5.539300835990577),+                                    ("Dienstagthis <cycle>", -6.2324480165505225),+                                    ("<part-of-day> of <time>Februar", -5.826982908442359),+                                    ("dayyear", -3.3146772844662435),+                                    ("Mittwochthis <cycle>", -6.2324480165505225),                                     ("<time-of-day>  o'clockin|during the <part-of-day>",-                                     -5.136778348936611),-                                    ("tomorrow<time-of-day>  o'clock", -6.23539063760472),-                                    ("<time-of-day>  o'clocktomorrow", -5.5422434570447745),+                                     -5.133835727882413),+                                    ("tomorrow<time-of-day>  o'clock", -6.2324480165505225),+                                    ("<time-of-day>  o'clocktomorrow", -5.539300835990577),                                     ("<day-of-month>(ordinal) <named-month>year",-                                     -5.829925529496556),+                                     -5.826982908442359),                                     ("half <integer> (german style hour-of-day)after lunch",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("absorption of , after named day<day-of-month>(ordinal) <named-month>",-                                     -4.982627669109352),-                                    ("hourminute", -5.5422434570447745),-                                    ("the <day-of-month> (ordinal)Juli", -6.23539063760472),+                                     -4.979685048055154),+                                    ("hourminute", -5.539300835990577),+                                    ("the <day-of-month> (ordinal)Juli", -6.2324480165505225),                                     ("on <date><day-of-month>(ordinal) <named-month>",-                                     -5.829925529496556),-                                    ("minutemonth", -3.5612419881781916),-                                    ("minutehour", -3.984098838998225),+                                     -5.826982908442359),+                                    ("minutemonth", -3.558299367123994),+                                    ("minutehour", -3.9811562179440276),                                     ("at <time-of-day>in|during the <part-of-day>",-                                     -5.319099905730565),+                                     -5.316157284676367),                                     ("absorption of , after named day<day-of-month>(ordinal) <named-month> year",-                                     -5.829925529496556),+                                     -5.826982908442359),                                     ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",-                                     -5.136778348936611),+                                     -5.133835727882413),                                     ("<day-of-month>(ordinal) <named-month> year<time> <part-of-day>",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("<hour-of-day> <integer> (as relative minutes)after lunch",-                                     -6.23539063760472),-                                    ("Donnerstag<time> timezone", -5.829925529496556),-                                    ("Samstagat <time-of-day>", -5.829925529496556),-                                    ("<time-of-day> am|pmSamstag", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("Donnerstag<time> timezone", -5.826982908442359),+                                    ("Samstagat <time-of-day>", -5.826982908442359),+                                    ("<time-of-day> am|pmSamstag", -6.2324480165505225),                                     ("intersect<day-of-month>(ordinal) <named-month>",-                                     -4.84909627648483),-                                    ("this <part-of-day><time-of-day>  o'clock", -6.23539063760472),+                                     -4.846153655430633),+                                    ("this <part-of-day><time-of-day>  o'clock",+                                     -6.2324480165505225),                                     ("<day-of-month>(ordinal) <named-month>intersect",-                                     -6.23539063760472),-                                    ("hh:mmintersect", -3.793043602235516),-                                    ("Donnerstaghh:mm", -6.23539063760472),-                                    ("<day-of-month> (ordinal)Juli", -5.5422434570447745),-                                    ("intersect by ','intersect", -4.982627669109352),-                                    ("intersect by 'of', 'from', 'sJuli", -6.23539063760472),-                                    ("<day-of-month> (ordinal)Oktober", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("hh:mmintersect", -3.790100981181318),+                                    ("Donnerstaghh:mm", -6.2324480165505225),+                                    ("Weihnachtenyear", -6.2324480165505225),+                                    ("<day-of-month> (ordinal)Juli", -5.539300835990577),+                                    ("intersect by ','intersect", -4.979685048055154),+                                    ("intersect by 'of', 'from', 'sJuli", -6.2324480165505225),                                     ("half <integer> (german style hour-of-day)in|during the <part-of-day>",-                                     -5.829925529496556),+                                     -5.826982908442359),                                     ("from <datetime> - <datetime> (interval)year",-                                     -5.5422434570447745),-                                    ("at <time-of-day>intersect", -4.443631168376665),+                                     -5.539300835990577),+                                    ("at <time-of-day>intersect", -4.440688547322468),                                     ("on <date>from <time-of-day> - <time-of-day> (interval)",-                                     -5.829925529496556),+                                     -5.826982908442359),                                     ("<time> <part-of-day>from <time-of-day> - <time-of-day> (interval)",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("absorption of , after named day<day-of-month> (ordinal)",-                                     -4.982627669109352),+                                     -4.979685048055154),                                     ("Donnerstagbetween <time-of-day> and <time-of-day> (interval)",-                                     -6.23539063760472),-                                    ("dayminute", -3.984098838998225),+                                     -6.2324480165505225),+                                    ("dayminute", -3.9811562179440276),                                     ("on <date>from <datetime> - <datetime> (interval)",-                                     -6.23539063760472),-                                    ("Mittwochnext <cycle>", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("Mittwochnext <cycle>", -6.2324480165505225),                                     ("Donnerstagbetween <datetime> and <datetime> (interval)",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("<time> <part-of-day>from <datetime> - <datetime> (interval)",-                                     -6.23539063760472),-                                    ("intersectyear", -4.443631168376665),-                                    ("on <date>intersect", -5.829925529496556),-                                    ("on <date><day-of-month> (ordinal)", -5.829925529496556),-                                    ("intersectSeptember", -3.4945506136795195),-                                    ("<ordinal> <cycle> of <time>year", -6.23539063760472),-                                    ("minuteday", -2.2557089837027595),+                                     -6.2324480165505225),+                                    ("intersectyear", -4.440688547322468),+                                    ("on <date>intersect", -5.826982908442359),+                                    ("on <date><day-of-month> (ordinal)", -5.826982908442359),+                                    ("intersectSeptember", -3.4916079926253216),+                                    ("<ordinal> <cycle> of <time>year", -6.2324480165505225),+                                    ("minuteday", -2.252766362648562),                                     ("absorption of , after named dayintersect",-                                     -3.8374953648063497),-                                    ("intersect by ','September", -4.731313240828446),-                                    ("year<time-of-day>  o'clock", -6.23539063760472),-                                    ("Juliyear", -5.829925529496556),-                                    ("at <time-of-day>intersect by ','", -5.5422434570447745),-                                    ("hh:mmabsorption of , after named day", -5.829925529496556),-                                    ("intersect by ','<time> <part-of-day>", -5.319099905730565),-                                    ("hh:mmon <date>", -3.793043602235516),+                                     -3.8345527437521523),+                                    ("intersect by ','September", -4.728370619774249),+                                    ("year<time-of-day>  o'clock", -6.2324480165505225),+                                    ("Juliyear", -5.826982908442359),+                                    ("at <time-of-day>intersect by ','", -5.539300835990577),+                                    ("hh:mmabsorption of , after named day", -5.826982908442359),+                                    ("intersect by ','<time> <part-of-day>", -5.316157284676367),+                                    ("hh:mmon <date>", -3.790100981181318),                                     ("at <time-of-day>absorption of , after named day",-                                     -6.23539063760472),-                                    ("until <time-of-day>after lunch", -6.23539063760472),-                                    ("mm/ddyear", -5.829925529496556),-                                    ("intersect by ','<time-of-day>  o'clock", -5.319099905730565),-                                    ("intersect<day-of-month> (ordinal)", -4.84909627648483),-                                    ("absorption of , after named daymm/dd", -6.23539063760472),-                                    ("on <date>September", -5.319099905730565),-                                    ("Septemberyear", -5.829925529496556),+                                     -6.2324480165505225),+                                    ("until <time-of-day>after lunch", -6.2324480165505225),+                                    ("mm/ddyear", -5.826982908442359),+                                    ("intersect by ','<time-of-day>  o'clock", -5.316157284676367),+                                    ("intersect<day-of-month> (ordinal)", -4.846153655430633),+                                    ("absorption of , after named daymm/dd", -6.2324480165505225),+                                    ("on <date>September", -5.316157284676367),+                                    ("Septemberyear", -5.826982908442359),                                     ("<day-of-month> (ordinal)intersect by 'of', 'from', 's",-                                     -5.5422434570447745),-                                    ("at <time-of-day>on <date>", -4.363588460703129),-                                    ("intersectintersect", -4.095324474108449),-                                    ("<day-of-month> (ordinal)Februar", -5.136778348936611),-                                    ("dayweek", -5.136778348936611),-                                    ("intersect by ','Juli", -5.5422434570447745),+                                     -5.539300835990577),+                                    ("at <time-of-day>on <date>", -4.360645839648932),+                                    ("intersectintersect", -4.092381853054252),+                                    ("<day-of-month> (ordinal)Februar", -5.133835727882413),+                                    ("dayweek", -5.133835727882413),+                                    ("intersect by ','Juli", -5.539300835990577),                                     ("absorption of , after named daythe <day-of-month> (ordinal)",-                                     -6.23539063760472),-                                    ("weekyear", -5.829925529496556),-                                    ("hh:mmin|during the <part-of-day>", -5.319099905730565),-                                    ("Marzyear", -6.23539063760472),-                                    ("tomorrowat <time-of-day>", -5.829925529496556),+                                     -6.2324480165505225),+                                    ("weekyear", -5.826982908442359),+                                    ("hh:mmin|during the <part-of-day>", -5.316157284676367),+                                    ("Marzyear", -6.2324480165505225),+                                    ("tomorrowat <time-of-day>", -5.826982908442359),                                     ("<hour-of-day> <integer> (as relative minutes)on <date>",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("Donnerstag<time-of-day> - <time-of-day> (interval)",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("Donnerstag<datetime> - <datetime> (interval)",-                                     -6.23539063760472),-                                    ("Sonntaglast <cycle>", -6.23539063760472),-                                    ("at <time-of-day>tomorrow", -6.23539063760472),+                                     -6.2324480165505225),+                                    ("Sonntaglast <cycle>", -6.2324480165505225),+                                    ("at <time-of-day>tomorrow", -6.2324480165505225),                                     ("about <time-of-day>in|during the <part-of-day>",-                                     -5.829925529496556),+                                     -5.826982908442359),                                     ("half <integer> (german style hour-of-day)on <date>",-                                     -6.23539063760472),-                                    ("this <part-of-day>at <time-of-day>", -5.829925529496556),-                                    ("<datetime> - <datetime> (interval)Juli", -5.829925529496556),+                                     -6.2324480165505225),+                                    ("this <part-of-day>at <time-of-day>", -5.826982908442359),+                                    ("<datetime> - <datetime> (interval)Juli", -5.826982908442359),                                     ("after lunch<hour-of-day> <integer> (as relative minutes)",-                                     -5.829925529496556),-                                    ("<day-of-month> (ordinal)Marz", -6.23539063760472),-                                    ("last <cycle> of <time>year", -5.829925529496556),+                                     -5.826982908442359),+                                    ("<day-of-month> (ordinal)Marz", -6.2324480165505225),+                                    ("last <cycle> of <time>year", -5.826982908442359),                                     ("<named-month> <day-of-month> (non ordinal)year",-                                     -6.23539063760472),+                                     -6.2324480165505225),                                     ("<day-of-month> (non ordinal) <named-month>year",-                                     -6.23539063760472)],-                               n = 427},+                                     -6.2324480165505225)],+                               n = 426},                    koData =-                     ClassData{prior = -1.4609558898889103, unseen = -6.05443934626937,+                     ClassData{prior = -1.4591557093847622, unseen = -6.052089168924417,                                likelihoods =                                  HashMap.fromList                                    [("Juli<day-of-month> (non ordinal) <named-month>",-                                     -5.358941988364472),+                                     -5.356586274672012),                                     ("absorption of , after named daythe <day-of-month> (non ordinal)",-                                     -5.358941988364472),-                                    ("<datetime> - <datetime> (interval)year", -5.358941988364472),-                                    ("dayhour", -4.665794807804526),+                                     -5.356586274672012),+                                    ("<datetime> - <datetime> (interval)year", -5.356586274672012),+                                    ("dayhour", -4.663439094112067),                                     ("<named-month> <day-of-month> (non ordinal)Juli",-                                     -5.358941988364472),-                                    ("daymonth", -3.48713981146288),-                                    ("monthday", -4.953476880256307),-                                    ("monthyear", -5.358941988364472),-                                    ("yearhour", -5.358941988364472),-                                    ("after lunchat <time-of-day>", -4.953476880256307),-                                    ("mm/dduntil <time-of-day>", -4.953476880256307),-                                    ("until <time-of-day>year", -4.953476880256307),-                                    ("<day-of-month> (ordinal)Dienstag", -4.953476880256307),-                                    ("absorption of , after named dayFebruar", -4.260329699696362),-                                    ("on <date>Februar", -5.358941988364472),-                                    ("intersect by 'of', 'from', 'syear", -4.665794807804526),-                                    ("<time-of-day> am|pmintersect", -3.654193896126046),-                                    ("intersect<time> <part-of-day>", -5.358941988364472),-                                    ("<time-of-day>  o'clockafter lunch", -5.358941988364472),-                                    ("<day-of-month> (ordinal)Mittwoch", -5.358941988364472),-                                    ("after lunch<time-of-day>  o'clock", -5.358941988364472),-                                    ("absorption of , after named dayhh:mm", -5.358941988364472),-                                    ("<time-of-day> am|pmintersect by ','", -4.106179019869104),+                                     -5.356586274672012),+                                    ("daymonth", -3.484784097770421),+                                    ("monthday", -4.951121166563848),+                                    ("monthyear", -5.356586274672012),+                                    ("yearhour", -5.356586274672012),+                                    ("after lunchat <time-of-day>", -4.951121166563848),+                                    ("mm/dduntil <time-of-day>", -4.951121166563848),+                                    ("until <time-of-day>year", -4.951121166563848),+                                    ("<day-of-month> (ordinal)Dienstag", -4.951121166563848),+                                    ("absorption of , after named dayFebruar", -4.257973986003902),+                                    ("on <date>Februar", -5.356586274672012),+                                    ("intersect by 'of', 'from', 'syear", -4.663439094112067),+                                    ("<time-of-day> am|pmintersect", -3.651838182433587),+                                    ("intersect<time> <part-of-day>", -5.356586274672012),+                                    ("<time-of-day>  o'clockafter lunch", -5.356586274672012),+                                    ("<day-of-month> (ordinal)Mittwoch", -5.356586274672012),+                                    ("after lunch<time-of-day>  o'clock", -5.356586274672012),+                                    ("absorption of , after named dayhh:mm", -5.356586274672012),+                                    ("<time-of-day> am|pmintersect by ','", -4.103823306176644),                                     ("<time-of-day>  o'clock<time> <part-of-day>",-                                     -4.442651256490317),-                                    ("<time-of-day> am|pmFreitag", -4.953476880256307),-                                    ("mm/ddhh:mm", -4.442651256490317),-                                    ("monthhour", -5.358941988364472),+                                     -4.440295542797857),+                                    ("<time-of-day> am|pmFreitag", -4.951121166563848),+                                    ("mm/ddhh:mm", -4.440295542797857),+                                    ("monthhour", -5.356586274672012),                                     ("on <date>between <datetime> and <datetime> (interval)",-                                     -5.358941988364472),-                                    ("todayat <time-of-day>", -5.358941988364472),+                                     -5.356586274672012),+                                    ("todayat <time-of-day>", -5.356586274672012),                                     ("Donnerstagfrom <datetime> - <datetime> (interval)",-                                     -4.953476880256307),+                                     -4.951121166563848),                                     ("on <date>between <time-of-day> and <time-of-day> (interval)",-                                     -5.358941988364472),-                                    ("dayday", -3.972647627244581),+                                     -5.356586274672012),+                                    ("dayday", -3.970291913552122),                                     ("<time-of-day> am|pmabsorption of , after named day",-                                     -4.953476880256307),-                                    ("hourhour", -3.8548645915881976),+                                     -4.951121166563848),+                                    ("hourhour", -3.8525088778957386),                                     ("Donnerstagfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.665794807804526),-                                    ("Donnerstagafter <time-of-day>", -5.358941988364472),-                                    ("dayyear", -3.2795004466846356),-                                    ("minutemonth", -3.48713981146288),-                                    ("Aprilyear", -5.358941988364472),-                                    ("Dienstagafter <time-of-day>", -5.358941988364472),+                                     -4.663439094112067),+                                    ("Donnerstagafter <time-of-day>", -5.356586274672012),+                                    ("dayyear", -3.2771447329921766),+                                    ("minutemonth", -3.484784097770421),+                                    ("Aprilyear", -5.356586274672012),+                                    ("Dienstagafter <time-of-day>", -5.356586274672012),                                     ("intersect<day-of-month>(ordinal) <named-month>",-                                     -4.665794807804526),-                                    ("Donnerstaghh:mm", -4.953476880256307),-                                    ("<day-of-month> (ordinal)Juli", -4.953476880256307),-                                    ("<day-of-month> (ordinal)hh:mm", -4.442651256490317),+                                     -4.663439094112067),+                                    ("Donnerstaghh:mm", -4.951121166563848),+                                    ("<day-of-month> (ordinal)Juli", -4.951121166563848),+                                    ("<day-of-month> (ordinal)hh:mm", -4.440295542797857),                                     ("<named-month> <day-of-month> (non ordinal)August",-                                     -5.358941988364472),+                                     -5.356586274672012),                                     ("August<day-of-month> (non ordinal) <named-month>",-                                     -5.358941988364472),-                                    ("at <time-of-day>intersect", -4.260329699696362),+                                     -5.356586274672012),+                                    ("at <time-of-day>intersect", -4.257973986003902),                                     ("on <date>from <time-of-day> - <time-of-day> (interval)",-                                     -4.953476880256307),+                                     -4.951121166563848),                                     ("Donnerstagbetween <time-of-day> and <time-of-day> (interval)",-                                     -5.358941988364472),-                                    ("dayminute", -2.6847933389379426),+                                     -5.356586274672012),+                                    ("dayminute", -2.6824376252454836),                                     ("on <date>from <datetime> - <datetime> (interval)",-                                     -5.358941988364472),+                                     -5.356586274672012),                                     ("Donnerstagbetween <datetime> and <datetime> (interval)",-                                     -5.358941988364472),-                                    ("until <time-of-day>Juli", -5.358941988364472),-                                    ("intersectSeptember", -3.7495040759303713),-                                    ("minuteday", -2.3632097148104805),-                                    ("intersect by ','September", -4.665794807804526),-                                    ("at <time-of-day>intersect by ','", -4.665794807804526),-                                    ("at <time-of-day>Freitag", -5.358941988364472),+                                     -5.356586274672012),+                                    ("until <time-of-day>Juli", -5.356586274672012),+                                    ("intersectSeptember", -3.747148362237912),+                                    ("minuteday", -2.3608540011180215),+                                    ("intersect by ','September", -4.663439094112067),+                                    ("at <time-of-day>intersect by ','", -4.663439094112067),+                                    ("at <time-of-day>Freitag", -5.356586274672012),                                     ("at <time-of-day>absorption of , after named day",-                                     -5.358941988364472),-                                    ("year<time> <part-of-day>", -5.358941988364472),-                                    ("mm/ddyear", -3.8548645915881976),-                                    ("intersect<day-of-month> (ordinal)", -4.665794807804526),+                                     -5.356586274672012),+                                    ("year<time> <part-of-day>", -5.356586274672012),+                                    ("mm/ddyear", -3.8525088778957386),+                                    ("intersect<day-of-month> (ordinal)", -4.663439094112067),                                     ("<day-of-month> (ordinal)intersect by 'of', 'from', 's",-                                     -4.953476880256307),-                                    ("intersectintersect", -4.665794807804526),-                                    ("Donnerstag<part-of-day> of <time>", -5.358941988364472),-                                    ("<day-of-month> (ordinal)April", -5.358941988364472),+                                     -4.951121166563848),+                                    ("intersectintersect", -4.663439094112067),+                                    ("Donnerstag<part-of-day> of <time>", -5.356586274672012),+                                    ("<day-of-month> (ordinal)April", -5.356586274672012),                                     ("Donnerstag<time-of-day> - <time-of-day> (interval)",-                                     -5.358941988364472),-                                    ("after <time-of-day>year", -5.358941988364472),-                                    ("on <date>after <time-of-day>", -5.358941988364472),-                                    ("tomorrownoon", -5.358941988364472)],+                                     -5.356586274672012),+                                    ("after <time-of-day>year", -5.356586274672012),+                                    ("on <date>after <time-of-day>", -5.356586274672012),+                                    ("tomorrownoon", -5.356586274672012)],                                n = 129}}),        ("<ordinal> <cycle> of <time>",         Classifier{okData =@@ -730,6 +745,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("Muttertag",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("next <cycle>",         Classifier{okData =                      ClassData{prior = -0.15415067982725836,@@ -778,6 +800,13 @@                                    [("hh:mmtime-of-day (latent)", -1.0986122886681098),                                     ("minutehour", -1.0986122886681098)],                                n = 3}}),+       ("Silvester",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("year (latent)",         Classifier{okData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,@@ -828,6 +857,13 @@                      ClassData{prior = -2.4849066497880004,                                unseen = -1.0986122886681098,                                likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Weihnachten",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("quarter to|till|before <integer> (hour-of-day)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.6094379124341003,@@ -881,6 +917,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("Vatertag",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("week (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -3.332204510175204,@@ -908,13 +951,6 @@                                    [("hourhour", -1.3862943611198906),                                     ("morningtime-of-day (latent)", -1.3862943611198906)],                                n = 1}}),-       ("valentine's day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("Sonntag",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -961,24 +997,22 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<day-of-month>(ordinal) <named-month>",         Classifier{okData =-                     ClassData{prior = -0.2231435513142097,-                               unseen = -3.4657359027997265,+                     ClassData{prior = -0.2411620568168881, unseen = -3.367295829986474,                                likelihoods =                                  HashMap.fromList-                                   [("ordinal (digits)Juli", -2.0476928433652555),-                                    ("ordinal (digits)September", -2.3353749158170367),-                                    ("ordinal (digits)Oktober", -2.740840023925201),-                                    ("month", -0.8690378470236094),-                                    ("ordinal (digits)Februar", -1.6422277352570913),-                                    ("ordinals (first..19th)Marz", -2.740840023925201)],-                               n = 12},+                                   [("ordinal (digits)Juli", -1.9459101490553135),+                                    ("ordinal (digits)September", -2.2335922215070942),+                                    ("month", -0.8472978603872037),+                                    ("ordinal (digits)Februar", -1.540445040947149),+                                    ("ordinals (first..19th)Marz", -2.639057329615259)],+                               n = 11},                    koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,+                     ClassData{prior = -1.540445040947149, unseen = -2.5649493574615367,                                likelihoods =                                  HashMap.fromList-                                   [("ordinal (digits)Juli", -1.466337068793427),-                                    ("ordinal (digits)April", -1.8718021769015913),-                                    ("month", -1.1786549963416462)],+                                   [("ordinal (digits)Juli", -1.3862943611198906),+                                    ("ordinal (digits)April", -1.791759469228055),+                                    ("month", -1.0986122886681098)],                                n = 3}}),        ("numbers prefix with -, negative or minus",         Classifier{okData =@@ -1006,13 +1040,6 @@                                    [("after lunch", -1.252762968495368),                                     ("hour", -1.252762968495368)],                                n = 1}}),-       ("new year's eve",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("tomorrow",         Classifier{okData =                      ClassData{prior = -0.13353139262452263,@@ -1022,13 +1049,6 @@                      ClassData{prior = -2.0794415416798357,                                unseen = -1.0986122886681098,                                likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("Mother's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("<time> after next",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.0794415416798357,@@ -1245,8 +1265,8 @@                      ClassData{prior = 0.0, unseen = -2.0794415416798357,                                likelihoods =                                  HashMap.fromList-                                   [("a <unit-of-duration>christmas", -1.252762968495368),-                                    ("<integer> <unit-of-duration>christmas", -1.252762968495368),+                                   [("<integer> <unit-of-duration>Weihnachten", -1.252762968495368),+                                    ("a <unit-of-duration>Weihnachten", -1.252762968495368),                                     ("yearday", -0.8472978603872037)],                                n = 2},                    koData =@@ -1273,8 +1293,8 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("Oktober",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),@@ -1505,15 +1525,14 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<day-of-month> (ordinal)",         Classifier{okData =-                     ClassData{prior = -0.5520685823000397,-                               unseen = -3.0910424533583156,+                     ClassData{prior = -0.5753641449035618, unseen = -3.044522437723423,                                likelihoods =                                  HashMap.fromList-                                   [("ordinals (first..19th)", -1.6582280766035324),-                                    ("ordinal (digits)", -0.2113090936672069)],-                               n = 19},+                                   [("ordinals (first..19th)", -1.6094379124341003),+                                    ("ordinal (digits)", -0.2231435513142097)],+                               n = 18},                    koData =-                     ClassData{prior = -0.8574502318512216, unseen = -2.833213344056216,+                     ClassData{prior = -0.8266785731844679, unseen = -2.833213344056216,                                likelihoods =                                  HashMap.fromList                                    [("ordinals (first..19th)", -0.8266785731844679),@@ -1627,13 +1646,6 @@                                     ("day", -1.791759469228055),                                     ("day (grain)", -1.791759469228055)],                                n = 2}}),-       ("christmas",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("Tag der Deutschen Einheit",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.0986122886681098,@@ -1641,13 +1653,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("new year's day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("next n <cycle>",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -4.143134726391533,@@ -1677,13 +1682,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -3.1354942159291497,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("halloween day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("by the end of <time>",         Classifier{okData =                      ClassData{prior = -infinity, unseen = -1.6094379124341003,@@ -1823,9 +1821,9 @@                      ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,                                likelihoods =                                  HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..19th)Dienstagchristmas",-                                     -0.916290731874155)],+                                   [("ordinals (first..19th)DienstagWeihnachten",+                                     -0.916290731874155),+                                    ("dayday", -0.916290731874155)],                                n = 1}}),        ("<named-month> <day-of-month> (non ordinal)",         Classifier{okData =@@ -1893,10 +1891,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("ordinal (digits)",         Classifier{okData =-                     ClassData{prior = -0.2876820724517809, unseen = -2.995732273553991,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 18},+                     ClassData{prior = -0.3022808718729337,+                               unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},                    koData =-                     ClassData{prior = -1.3862943611198906,+                     ClassData{prior = -1.3437347467010947,                                unseen = -2.0794415416798357,                                likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),        ("quarter (grain)",@@ -1969,10 +1968,10 @@                                  HashMap.fromList                                    [("<time-of-day>  o'clock", -2.3025850929940455),                                     ("intersect", -2.3025850929940455),+                                    ("Weihnachten", -1.8971199848858813),                                     ("day", -1.6094379124341003),                                     ("time-of-day (latent)", -2.3025850929940455),                                     ("hh:mm", -2.3025850929940455), ("hour", -1.8971199848858813),-                                    ("christmas", -1.8971199848858813),                                     ("minute", -2.3025850929940455)],                                n = 6}}),        ("day (grain)",
Duckling/Ranking/Classifiers/EN_CA.hs view
@@ -21,2389 +21,3102 @@ classifiers :: Classifiers classifiers   = HashMap.fromList-      [("<integer> to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)noon|midnight|EOD|end of day",-                                     -0.916290731874155),-                                    ("hour", -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.7537718023763802),-                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],-                               n = 7}}),-       ("<time> timezone",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -1.824549292051046),-                                    ("<time-of-day> am|pm", -1.6422277352570913),-                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),-                                    ("minute", -1.824549292051046)],-                               n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thursday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (numeric)",-        Classifier{okData =-                     ClassData{prior = -0.7765287894989963, unseen = -5.225746673713201,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 184},-                   koData =-                     ClassData{prior = -0.616186139423817, unseen = -5.384495062789089,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 216}}),-       ("<duration> hence|ago",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.784189633918261,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),-                                    ("year", -2.662587827025453),-                                    ("<integer> <unit-of-duration>", -1.0531499145913523),-                                    ("a <unit-of-duration>", -2.662587827025453),-                                    ("month", -2.662587827025453),-                                    ("fortnight", -2.662587827025453)],-                               n = 18},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("noon|midnight|EOD|end of day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Father's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = -0.5596157879354228, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.6094379124341003),-                                    ("dayday", -1.0986122886681098),-                                    ("day (grain)yesterday", -1.6094379124341003)],-                               n = 4},-                   koData =-                     ClassData{prior = -0.8472978603872037, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.466337068793427),-                                    ("year (grain)Christmas", -1.8718021769015913),-                                    ("day (grain)intersect", -1.466337068793427),-                                    ("yearday", -1.8718021769015913)],-                               n = 3}}),-       ("Martin Luther King's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (20..90)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("mm/yyyy",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("integer after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.8109302162163288),-                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),-                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal or number) <named-month>",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)December", -2.1400661634962708),-                                    ("ordinal (digits)February", -2.1400661634962708),-                                    ("integer (numeric)April", -2.1400661634962708),-                                    ("month", -1.4469189829363254)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -3.4011973816621555,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)October", -2.6741486494265287),-                                    ("ordinal (digits)July", -2.6741486494265287),-                                    ("integer (numeric)September", -2.268683541318364),-                                    ("ordinal (digits)August", -2.6741486494265287),-                                    ("integer (numeric)August", -2.6741486494265287),-                                    ("ordinal (digits)April", -2.6741486494265287),-                                    ("month", -1.0647107369924282),-                                    ("integer (numeric)July", -2.268683541318364)],-                               n = 9}}),-       ("<time> <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.844007281325252e-2,-                               unseen = -4.430816798843313,-                               likelihoods =-                                 HashMap.fromList-                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("dayhour", -1.5284688499004333),-                                    ("Mondayearly morning", -3.3202283191284883),-                                    ("time-of-day (latent)tonight", -3.3202283191284883),-                                    ("hourhour", -2.339399066116762),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("todaypart of days", -3.7256934272366524),-                                    ("minutehour", -2.627081138568543),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -3.3202283191284883),-                                    ("time-of-day (latent)this <part-of-day>", -3.7256934272366524),-                                    ("Mondayin|during the <part-of-day>", -3.7256934272366524),-                                    ("intersectpart of days", -3.7256934272366524),-                                    ("intersectin|during the <part-of-day>", -3.7256934272366524),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("tomorrowpart of days", -2.339399066116762),-                                    ("hh:mmin|during the <part-of-day>", -3.0325462466767075),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("hhmm (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("yesterdaypart of days", -3.7256934272366524),-                                    ("Mondaypart of days", -3.7256934272366524)],-                               n = 29},-                   koData =-                     ClassData{prior = -2.367123614131617, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("yearhour", -2.740840023925201),-                                    ("monthhour", -2.740840023925201),-                                    ("hourhour", -2.740840023925201),-                                    ("past year (latent)in|during the <part-of-day>",-                                     -2.740840023925201),-                                    ("Februaryin|during the <part-of-day>", -2.740840023925201),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -2.740840023925201)],-                               n = 3}}),-       ("today",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("mm/dd",-        Classifier{okData =-                     ClassData{prior = -1.4271163556401458,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -0.2744368457017603, unseen = -3.044522437723423,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 19}}),-       ("at <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.381875521765486e-2,-                               unseen = -4.90527477843843,-                               likelihoods =-                                 HashMap.fromList-                                   [("<time> timezone", -3.7992275112828016),-                                    ("noon|midnight|EOD|end of day", -3.7992275112828016),-                                    ("integer after|past <hour-of-day>", -3.7992275112828016),-                                    ("half after|past <hour-of-day>", -4.204692619390966),-                                    ("time-of-day (latent)", -1.7197859696029658),-                                    ("hhmm (latent)", -3.5115454388310208),-                                    ("<time-of-day> am|pm", -1.8067973465925955),-                                    ("hh:mm", -3.288401887516811),-                                    ("about|exactly <time-of-day>", -3.7992275112828016),-                                    ("hour", -1.0911773101805915),-                                    ("<time-of-day> sharp|exactly", -4.204692619390966),-                                    ("minute", -2.0074680420547466)],-                               n = 61},-                   koData =-                     ClassData{prior = -2.412933150162911, unseen = -3.2188758248682006,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -1.2321436812926323),-                                    ("hour", -1.2321436812926323)],-                               n = 6}}),-       ("December",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("absorption of , after named day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("on <date>", -2.1972245773362196),-                                    ("Wednesday", -2.6026896854443837),-                                    ("Saturday", -2.6026896854443837),-                                    ("Monday", -2.1972245773362196),-                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),-                                    ("Sunday", -2.6026896854443837)],-                               n = 10},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("September",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("tonight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("last|past|next <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.456735772821304), ("second", -2.639057329615259),-                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),-                                    ("<integer> <unit-of-duration>", -0.7827593392496325),-                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),-                                    ("minute", -2.639057329615259)],-                               n = 31},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the ides of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("on <date>",-        Classifier{okData =-                     ClassData{prior = -0.1670540846631662, unseen = -4.007333185232471,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -1.791759469228055), ("mm/dd", -3.295836866004329),-                                    ("absorption of , after named day", -2.890371757896165),-                                    ("intersect", -2.890371757896165),-                                    ("Saturday", -2.6026896854443837),-                                    ("Friday", -3.295836866004329), ("day", -0.8979415932059586),-                                    ("the <day-of-month> (ordinal)", -2.890371757896165),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -2.6026896854443837),-                                    ("hour", -3.295836866004329)],-                               n = 22},-                   koData =-                     ClassData{prior = -1.8718021769015913,-                               unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.791759469228055)],-                               n = 4}}),-       ("integer (0..19)",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.784189633918261,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 42},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),-       ("between <time-of-day> and <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -0.916290731874155),-                                    ("hh:mmhh:mm", -0.916290731874155)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -0.916290731874155),-                                    ("minutehour", -0.916290731874155)],-                               n = 3}}),-       ("Halloween",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -1.6094379124341003),-                                    ("month", -0.916290731874155),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("October",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from|since|after <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742, unseen = -4.02535169073515,-                               likelihoods =-                                 HashMap.fromList-                                   [("July", -3.3141860046725258),-                                    ("time-of-day (latent)", -2.3978952727983707),-                                    ("<time-of-day> am|pm", -2.3978952727983707),-                                    ("hh:mm", -2.3978952727983707), ("hour", -1.8101086078962516),-                                    ("month", -2.908720896564361), ("minute", -2.3978952727983707),-                                    ("August", -3.3141860046725258)],-                               n = 14},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -4.836281906951478,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.7297014486341915),-                                    ("week", -4.135166556742356),-                                    ("<day-of-month> (ordinal or number) <named-month>",-                                     -4.135166556742356),-                                    ("today", -4.135166556742356),-                                    ("intersect", -2.7488721956224653),-                                    ("second", -4.135166556742356), ("now", -3.4420193761824103),-                                    ("tomorrow", -3.7297014486341915),-                                    ("this|last|next <cycle>", -4.135166556742356),-                                    ("day", -1.995100393246085),-                                    ("time-of-day (latent)", -4.135166556742356),-                                    ("<time-of-day> am|pm", -3.7297014486341915),-                                    ("nograin", -3.4420193761824103),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -4.135166556742356),-                                    ("Christmas", -3.4420193761824103),-                                    ("hour", -2.8824035882469876),-                                    ("<datetime> - <datetime> (interval)", -2.7488721956224653),-                                    ("<time-of-day> - <time-of-day> (interval)",-                                     -2.430418464503931),-                                    ("<named-month> <day-of-month> (non ordinal)",-                                     -3.7297014486341915),-                                    ("minute", -1.6928195213731514),-                                    ("right now", -4.135166556742356),-                                    ("<month> dd-dd (interval)", -3.4420193761824103),-                                    ("dd-dd <month> (interval)", -3.7297014486341915)],-                               n = 49}}),-       ("month (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> more <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)minute (grain)", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> o'clock",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in|within|after <duration>",-        Classifier{okData =-                     ClassData{prior = -4.652001563489282e-2,-                               unseen = -4.61512051684126,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -3.2188758248682006),-                                    ("<integer> more <unit-of-duration>", -3.912023005428146),-                                    ("three-quarters of an hour", -2.995732273553991),-                                    ("<integer> + '\"", -3.2188758248682006),-                                    ("number.number hours", -3.912023005428146),-                                    ("second", -3.506557897319982), ("day", -3.2188758248682006),-                                    ("half an hour", -2.995732273553991),-                                    ("<integer> <unit-of-duration>", -1.6094379124341003),-                                    ("a <unit-of-duration>", -2.995732273553991),-                                    ("quarter of an hour", -2.995732273553991),-                                    ("hour", -2.5257286443082556),-                                    ("about|exactly <duration>", -3.912023005428146),-                                    ("<integer> and an half hour", -3.912023005428146),-                                    ("minute", -1.2729656758128873)],-                               n = 42},-                   koData =-                     ClassData{prior = -3.0910424533583156, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -1.8971199848858813),-                                    ("<integer> <unit-of-duration>", -2.3025850929940455),-                                    ("a <unit-of-duration>", -2.3025850929940455)],-                               n = 2}}),-       ("three-quarters of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Wednesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> + '\"",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half <integer> (UK style hour-of-day)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("July",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hour (grain)",-        Classifier{okData =-                     ClassData{prior = -0.8209805520698302,-                               unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),-       ("<ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),-                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",-                                     -1.466337068793427),-                                    ("quarter", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),-                                    ("quarter", -0.8109302162163288)],-                               n = 3}}),-       ("one twenty two",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("intersect",-        Classifier{okData =-                     ClassData{prior = -0.4957877464014501, unseen = -6.293419278846481,-                               likelihoods =-                                 HashMap.fromList-                                   [("<datetime> - <datetime> (interval)on <date>",-                                     -4.345658990503007),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.345658990503007),-                                    ("hourday", -3.8936738667599493),-                                    ("dayhour", -2.765208614942159),-                                    ("daymonth", -4.90527477843843),-                                    ("monthday", -5.19295685089021),-                                    ("monthyear", -3.9889840465642745),-                                    ("Tuesdaythe <day-of-month> (ordinal)", -5.598421958998375),-                                    ("Christmasyear", -5.598421958998375),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.598421958998375),-                                    ("houryear", -5.598421958998375),-                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.90527477843843),-                                    ("<time-of-day> am|pmintersect", -4.345658990503007),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -5.598421958998375),-                                    ("Marchyear", -5.598421958998375),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year",-                                     -5.19295685089021),-                                    ("intersect<time-of-day> am|pm", -5.598421958998375),-                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -5.598421958998375),-                                    ("monthhour", -5.19295685089021),-                                    ("last <day-of-week> of <time>year", -5.598421958998375),-                                    ("todayat <time-of-day>", -5.598421958998375),-                                    ("Thursday<time> timezone", -3.8936738667599493),-                                    ("this <time>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("dayday", -3.58351893845611),-                                    ("Thanksgiving Dayyear", -4.499809670330265),-                                    ("<time> <part-of-day>at <time-of-day>", -5.598421958998375),-                                    ("Tuesdayin <named-month>", -5.598421958998375),-                                    ("mm/ddat <time-of-day>", -5.598421958998375),-                                    ("tonightat <time-of-day>", -5.598421958998375),-                                    ("<time-of-day> am|pmabsorption of , after named day",-                                     -4.90527477843843),-                                    ("today<time-of-day> am|pm", -5.598421958998375),-                                    ("Februarythe <day-of-month> (ordinal)", -5.19295685089021),-                                    ("at <time-of-day><time> <part-of-day>", -5.598421958998375),-                                    ("mm/dd<time-of-day> am|pm", -5.598421958998375),-                                    ("hourhour", -4.345658990503007),-                                    ("<time-of-day> am|pmon <date>", -3.58351893845611),-                                    ("Wednesdaythis|last|next <cycle>", -5.598421958998375),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -4.0943445622221),-                                    ("dayyear", -3.1560749236291703),-                                    ("last weekend of <named-month>year", -5.598421958998375),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursdayat <time-of-day>", -5.19295685089021),-                                    ("<time-of-day> am|pmtomorrow", -4.90527477843843),-                                    ("minutehour", -4.68213122712422),-                                    ("Mother's Dayyear", -5.598421958998375),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -5.19295685089021),-                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",-                                     -3.8936738667599493),-                                    ("for <duration> from <time>December", -5.598421958998375),-                                    ("tomorrow<time-of-day> sharp|exactly", -5.598421958998375),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -5.19295685089021),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.68213122712422),-                                    ("Mondayin|during the <part-of-day>", -5.598421958998375),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.19295685089021),-                                    ("intersectin|during the <part-of-day>", -5.598421958998375),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.345658990503007),-                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -4.68213122712422),-                                    ("at <time-of-day>intersect", -5.19295685089021),-                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.598421958998375),-                                    ("dayminute", -2.924273309571846),-                                    ("from <datetime> - <datetime> (interval)on <date>",-                                     -5.19295685089021),-                                    ("<datetime> - <datetime> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.19295685089021),-                                    ("<ordinal> <cycle> of <time>year", -5.598421958998375),-                                    ("minuteday", -2.132686056198648),-                                    ("absorption of , after named dayintersect",-                                     -5.598421958998375),-                                    ("Octoberyear", -4.345658990503007),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("at <time-of-day>absorption of , after named day",-                                     -5.598421958998375),-                                    ("<day-of-month> (ordinal or number) <named-month>year",-                                     -5.598421958998375),-                                    ("year<time-of-day> am|pm", -5.598421958998375),-                                    ("Septemberyear", -5.19295685089021),-                                    ("at <time-of-day>on <date>", -4.499809670330265),-                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("Halloweenyear", -5.598421958998375),-                                    ("dayweek", -5.598421958998375),-                                    ("Thursday<time-of-day> am|pm", -5.598421958998375),-                                    ("weekyear", -5.19295685089021),-                                    ("hh:mmin|during the <part-of-day>", -4.90527477843843),-                                    ("Father's Dayyear", -5.598421958998375),-                                    ("<cycle> after|before <time><time-of-day> am|pm",-                                     -5.19295685089021),-                                    ("February<time> <part-of-day>", -5.598421958998375),-                                    ("Martin Luther King's Dayyear", -5.19295685089021),-                                    ("tomorrowat <time-of-day>", -4.90527477843843),-                                    ("between <time> and <time>on <date>", -4.90527477843843),-                                    ("Thursdayfrom|since|after <time-of-day>", -4.90527477843843),-                                    ("at <time-of-day>tomorrow", -5.19295685089021),-                                    ("tomorrow<time-of-day> am|pm", -5.598421958998375),-                                    ("in|during the <part-of-day>at <time-of-day>",-                                     -5.598421958998375),-                                    ("Labor Dayyear", -5.598421958998375),-                                    ("Februaryintersect", -5.598421958998375),-                                    ("last <cycle> of <time>year", -4.90527477843843),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -5.598421958998375),-                                    ("yearminute", -5.598421958998375),-                                    ("Black Fridayyear", -5.19295685089021)],-                               n = 201},-                   koData =-                     ClassData{prior = -0.9392802500988537, unseen = -5.983936280687191,-                               likelihoods =-                                 HashMap.fromList-                                   [("in <named-month>year", -5.288267030694535),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -5.288267030694535),-                                    ("hourday", -5.288267030694535),-                                    ("<named-month> <day-of-month> (non ordinal)July",-                                     -5.288267030694535),-                                    ("dayhour", -2.890371757896165),-                                    ("daymonth", -3.2088254890146994),-                                    ("monthday", -4.882801922586371),-                                    ("monthyear", -4.59511985013459),-                                    ("intersecthh:mm", -5.288267030694535),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.288267030694535),-                                    ("houryear", -5.288267030694535),-                                    ("from <time-of-day> - <time-of-day> (interval)July",-                                     -5.288267030694535),-                                    ("until <time-of-day><time-of-day> am|pm", -5.288267030694535),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.59511985013459),-                                    ("<time-of-day> am|pmintersect", -4.035504062199167),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.37197629882038),-                                    ("from|since|after <time-of-day>on <date>", -4.37197629882038),-                                    ("July<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("absorption of , after named dayJuly", -4.882801922586371),-                                    ("monthhour", -5.288267030694535),-                                    ("hourmonth", -4.59511985013459),-                                    ("todayat <time-of-day>", -5.288267030694535),-                                    ("from|since|after <time-of-day>July", -5.288267030694535),-                                    ("dayday", -4.882801922586371),-                                    ("mm/ddat <time-of-day>", -4.882801922586371),-                                    ("<time-of-day> am|pmon <date>", -4.035504062199167),-                                    ("dayyear", -4.035504062199167),-                                    ("Thursdaymm/dd", -5.288267030694535),-                                    ("Thursdayat <time-of-day>", -4.035504062199167),-                                    ("<integer> to|till|before <hour-of-day>September",-                                     -5.288267030694535),-                                    ("monthminute", -5.288267030694535),-                                    ("<time-of-day> am|pmtomorrow", -5.288267030694535),-                                    ("Thursdayhh:mm", -4.37197629882038),-                                    ("August<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("Fridayyear", -4.882801922586371),-                                    ("minutemonth", -3.4965075614664802),-                                    ("Sundayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.882801922586371),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("Aprilyear", -5.288267030694535),-                                    ("mm/dd<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.288267030694535),-                                    ("<duration> after|before|from <time>December",-                                     -5.288267030694535),-                                    ("yesterday<time-of-day> am|pm", -5.288267030694535),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -4.37197629882038),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -5.288267030694535),-                                    ("until <time-of-day>on <date>", -4.59511985013459),-                                    ("at <time-of-day>intersect", -4.882801922586371),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("dayminute", -2.7625383863862796),-                                    ("intersectSeptember", -3.784189633918261),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("minuteday", -2.3704962986102562),-                                    ("absorption of , after named dayintersect",-                                     -5.288267030694535),-                                    ("Februaryin|during the <part-of-day>", -5.288267030694535),-                                    ("week-endin <named-month>", -5.288267030694535),-                                    ("Octoberyear", -5.288267030694535),-                                    ("from|since|after <time-of-day>year", -5.288267030694535),-                                    ("yearhh:mm", -5.288267030694535),-                                    ("hh:mmon <date>", -3.784189633918261),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -5.288267030694535),-                                    ("absorption of , after named daySeptember", -4.37197629882038),-                                    ("on <date>September", -4.882801922586371),-                                    ("at <time-of-day>on <date>", -4.882801922586371),-                                    ("dayweek", -5.288267030694535),-                                    ("Thursday<time-of-day> am|pm", -4.882801922586371),-                                    ("absorption of , after named dayFebruary", -4.37197629882038),-                                    ("July<integer> to|till|before <hour-of-day>",-                                     -5.288267030694535),-                                    ("tomorrowat <time-of-day>", -5.288267030694535),-                                    ("<integer> to|till|before <hour-of-day>July",-                                     -5.288267030694535),-                                    ("Thursdayfrom|since|after <time-of-day>", -3.6788291182604347),-                                    ("tomorrow<time-of-day> am|pm", -5.288267030694535),-                                    ("Tuesdayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("yearminute", -5.288267030694535)],-                               n = 129}}),-       ("one eleven",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("after lunch/work/school",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("early morning",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <number> (implicit minutes)",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.3184537311185346),-                                    ("integer (0..19)", -1.2992829841302609)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.16251892949777494),-                                    ("integer (0..19)", -1.8971199848858813)],-                               n = 18}}),-       ("<ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -2.0149030205422647),-                                    ("quarteryear", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",-                                     -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",-                                     -2.0149030205422647),-                                    ("weekmonth", -1.6094379124341003),-                                    ("ordinal (digits)quarter (grain)year", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",-                                     -2.0149030205422647)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("year (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.1354942159291497,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 21},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -1.0116009116784799,-                               unseen = -3.6375861597263857,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -2.001480000210124),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("hh:mmhh:mm", -2.001480000210124),-                                    ("dayday", -2.512305623976115),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),-                                    ("hourhour", -2.512305623976115),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.45198512374305727,-                               unseen = -3.912023005428146,-                               likelihoods =-                                 HashMap.fromList-                                   [("hourday", -3.1986731175506815),-                                    ("dayhour", -2.793208009442517),-                                    ("<day-of-month> (ordinal)time-of-day (latent)",-                                     -3.1986731175506815),-                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),-                                    ("minuteminute", -2.793208009442517),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.793208009442517),-                                    ("dayday", -3.1986731175506815),-                                    ("hourhour", -2.505525936990736),-                                    ("dayyear", -3.1986731175506815),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)past year (latent)",-                                     -3.1986731175506815),-                                    ("minutehour", -2.2823823856765264),-                                    ("hh:mmintersect", -2.793208009442517),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<time-of-day> am|pm",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",-                                     -3.1986731175506815)],-                               n = 14}}),-       ("Saturday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -1.7346010553881064),-                                    ("weekmonth", -1.7346010553881064),-                                    ("week (grain)October", -1.7346010553881064),-                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",-                                     -1.7346010553881064),-                                    ("weekday", -1.2237754316221157)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("number.number hours",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.6094379124341003),-                                    ("hh:mmhh:mm", -1.6094379124341003),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),-                                    ("hourhour", -2.3025850929940455),-                                    ("hourminute", -2.3025850929940455),-                                    ("time-of-day (latent)<time-of-day> sharp|exactly",-                                     -2.70805020110221),-                                    ("time-of-day (latent)hh:mm", -2.70805020110221),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.0149030205422647),-                                    ("hourhour", -1.791759469228055),-                                    ("minutehour", -1.6094379124341003),-                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],-                               n = 9}}),-       ("integer 21..99",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),-                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],-                               n = 4}}),-       ("yyyy-mm-dd",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("mm/dd/yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -1.6094379124341003,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("Monday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("yesterday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<ordinal> quarter <year>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh:mm:ss",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<hour-of-day> <integer>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),-                                    ("hour", -0.9808292530117262),-                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>integer (numeric)",-                                     -1.0986122886681098),-                                    ("hour", -1.0986122886681098)],-                               n = 1}}),-       ("nth <time> of <time>",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.9808292530117262),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -2.0794415416798357),-                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",-                                     -1.6739764335716716),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",-                                     -1.6739764335716716)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.5649493574615367,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -1.0986122886681098),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",-                                     -1.791759469228055),-                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",-                                     -1.3862943611198906)],-                               n = 3}}),-       ("Valentine's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("April",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("end of month",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("week (grain)",-        Classifier{okData =-                     ClassData{prior = -8.004270767353637e-2,-                               unseen = -3.6375861597263857,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 36},-                   koData =-                     ClassData{prior = -2.5649493574615367,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("<part-of-day> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.6094379124341003),-                                    ("hourday", -0.916290731874155),-                                    ("part of daysthe <day-of-month> (ordinal)",-                                     -1.6094379124341003),-                                    ("part of daysthe <day-of-month> (number)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("past year (latent)",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 2}}),-       ("six thirty six a.m.",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -1.252762968495368),-                                    ("one twenty two", -0.8472978603872037),-                                    ("one eleven", -1.252762968495368)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("now",-        Classifier{okData =-                     ClassData{prior = -0.15415067982725836,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -1.9459101490553135,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("<day-of-month> (ordinal or number) of <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.0910424533583156,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)July", -2.3513752571634776),-                                    ("ordinals (first..twentieth,thirtieth,...)March",-                                     -2.3513752571634776),-                                    ("ordinal (digits)February", -2.3513752571634776),-                                    ("integer (numeric)February", -1.9459101490553135),-                                    ("month", -0.9650808960435872),-                                    ("ordinal (digits)March", -2.3513752571634776),-                                    ("integer (numeric)July", -2.3513752571634776)],-                               n = 7},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)February", -1.5040773967762742),-                                    ("month", -1.5040773967762742)],-                               n = 1}}),-       ("this <part-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.6931471805599453),-                                    ("part of days", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Friday",-        Classifier{okData =-                     ClassData{prior = -0.3677247801253174,-                               unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("in|during the <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -8.701137698962981e-2,-                               unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("early morning", -2.5257286443082556),-                                    ("hour", -0.7339691750802004),-                                    ("part of days", -0.8209805520698302)],-                               n = 11},-                   koData =-                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.916290731874155),-                                    ("part of days", -0.916290731874155)],-                               n = 1}}),-       ("tomorrow",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh(:mm) - <time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this|last|next <cycle>",-        Classifier{okData =-                     ClassData{prior = -0.15822400521489416,-                               unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.5488132906176655),-                                    ("month (grain)", -2.995732273553991),-                                    ("year (grain)", -1.817077277212345),-                                    ("week (grain)", -1.5488132906176655),-                                    ("quarter", -2.772588722239781), ("year", -1.817077277212345),-                                    ("month", -2.995732273553991),-                                    ("quarter (grain)", -2.772588722239781)],-                               n = 35},-                   koData =-                     ClassData{prior = -1.9218125974762528,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.4816045409242156),-                                    ("week (grain)", -1.4816045409242156),-                                    ("day", -1.9924301646902063),-                                    ("day (grain)", -1.9924301646902063)],-                               n = 6}}),-       ("Mother's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Eve",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -2.1972245773362196),-                                    ("end of month", -2.1972245773362196),-                                    ("time-of-day (latent)", -2.1972245773362196),-                                    ("<time-of-day> am|pm", -2.1972245773362196),-                                    ("hh:mm", -2.1972245773362196), ("hour", -1.791759469228055),-                                    ("month", -2.1972245773362196), ("minute", -1.791759469228055)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2006706954621511,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinals (first..twentieth,thirtieth,...)",-                                     -1.7047480922384253),-                                    ("ordinal (digits)", -0.2006706954621511)],-                               n = 9},-                   koData =-                     ClassData{prior = -1.7047480922384253,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],-                               n = 2}}),-       ("last weekend of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),-                                    ("month", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (number)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("fractional number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17}}),-       ("Sunday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("February",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("minute (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1}}),-       ("time-of-day (latent)",-        Classifier{okData =-                     ClassData{prior = -0.5315058290035293,-                               unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.12136085700426748),-                                    ("integer (0..19)", -2.3025850929940455)],-                               n = 67},-                   koData =-                     ClassData{prior = -0.8860508466844369,-                               unseen = -3.9318256327243257,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.10536051565782628),-                                    ("integer (0..19)", -2.8134107167600364),-                                    ("integer 21..99", -3.2188758248682006)],-                               n = 47}}),-       ("year",-        Classifier{okData =-                     ClassData{prior = -0.23483959107740107, unseen = -3.58351893845611,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 34},-                   koData =-                     ClassData{prior = -1.563975538357343, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 9}}),-       ("last <day-of-week> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.916290731874155),-                                    ("SundayMarch", -1.6094379124341003),-                                    ("MondayMarch", -1.6094379124341003),-                                    ("Sundayintersect", -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.1479201300766222,-                               unseen = -5.0875963352323845,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.4423470353692043),-                                    ("integer (0..19)year (grain)", -3.289644895756408),-                                    ("integer (numeric)day (grain)", -2.6835090921860925),-                                    ("integer (0..19)second (grain) ", -3.6951100038645723),-                                    ("integer (0..19)hour (grain)", -3.001962823304627),-                                    ("second", -3.289644895756408),-                                    ("integer (numeric)second (grain) ", -3.982792076316353),-                                    ("integer (numeric)year (grain)", -3.6951100038645723),-                                    ("day", -2.4423470353692043), ("year", -2.8841797876482436),-                                    ("integer (numeric)week (grain)", -3.001962823304627),-                                    ("integer (0..19)month (grain)", -3.4719664525503626),-                                    ("hour", -2.5964977151964628), ("month", -3.1354942159291497),-                                    ("integer (numeric)minute (grain)", -3.1354942159291497),-                                    ("integer (0..19)minute (grain)", -3.001962823304627),-                                    ("integer (numeric)month (grain)", -3.982792076316353),-                                    ("minute", -2.4423470353692043),-                                    ("integer (numeric)hour (grain)", -3.4719664525503626),-                                    ("integer (0..19)day (grain)", -3.6951100038645723),-                                    ("integer (0..19)week (grain)", -3.1354942159291497)],-                               n = 69},-                   koData =-                     ClassData{prior = -1.984131361875511, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),-                                    ("integer (numeric)hour (grain)", -1.4087672169719492),-                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],-                               n = 11}}),-       ("hhmm (latent)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = -0.2929871246814741,-                               unseen = -5.3230099791384085,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer after|past <hour-of-day>", -3.9318256327243257),-                                    ("at <time-of-day>", -2.2270775404859005),-                                    ("from|since|after <time-of-day>", -3.708682081410116),-                                    ("<time-of-day> o'clock", -4.219507705176107),-                                    ("half after|past <hour-of-day>", -4.219507705176107),-                                    ("time-of-day (latent)", -1.7346010553881064),-                                    ("hhmm (latent)", -4.624972813284271),-                                    ("hh:mm", -2.2735975561207935),-                                    ("quarter after|past <hour-of-day>", -4.624972813284271),-                                    ("about|exactly <time-of-day>", -4.624972813284271),-                                    ("until <time-of-day>", -3.9318256327243257),-                                    ("hour", -1.2237754316221157),-                                    ("<time-of-day> sharp|exactly", -4.624972813284271),-                                    ("minute", -1.7346010553881064)],-                               n = 94},-                   koData =-                     ClassData{prior = -1.3705460041517514, unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),-                                    ("from|since|after <time-of-day>", -3.283414346005772),-                                    ("<hour-of-day> <integer>", -3.6888794541139363),-                                    ("time-of-day (latent)", -1.0498221244986778),-                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],-                               n = 32}}),-       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),-                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thanksgiving Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("a <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.5753641449035618,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.0794415416798357),-                                    ("year (grain)", -2.772588722239781),-                                    ("second", -2.772588722239781),-                                    ("week (grain)", -2.0794415416798357),-                                    ("day", -2.0794415416798357),-                                    ("minute (grain)", -2.772588722239781),-                                    ("year", -2.772588722239781),-                                    ("second (grain) ", -2.772588722239781),-                                    ("minute", -2.772588722239781),-                                    ("day (grain)", -2.0794415416798357)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.8266785731844679, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour (grain)", -1.7227665977411035),-                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),-                                    ("quarter (grain)", -1.9459101490553135)],-                               n = 7}}),-       ("hh:mm",-        Classifier{okData =-                     ClassData{prior = -6.782259633876106e-2,-                               unseen = -4.07753744390572,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 57},-                   koData =-                     ClassData{prior = -2.7245795030534206, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("quarter of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("second (grain) ",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinals (first..twentieth,thirtieth,...)",-        Classifier{okData =-                     ClassData{prior = -6.899287148695143e-2,-                               unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},-                   koData =-                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("quarter after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.252762968495368),-                                    ("dayday", -0.8472978603872037),-                                    ("day (grain)yesterday", -1.252762968495368)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("about|exactly <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.639057329615259),-                                    ("hh(:mm) - <time-of-day> am|pm", -2.639057329615259),-                                    ("this|last|next <cycle>", -2.639057329615259),-                                    ("day", -2.2335922215070942),-                                    ("time-of-day (latent)", -2.639057329615259),-                                    ("hhmm (latent)", -2.2335922215070942),-                                    ("<time-of-day> am|pm", -2.639057329615259),-                                    ("hour", -1.9459101490553135),-                                    ("next <time>", -2.639057329615259),-                                    ("this|next <day-of-week>", -2.639057329615259),-                                    ("minute", -2.2335922215070942)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("mm/dd", -2.0794415416798357), ("day", -2.0794415416798357),-                                    ("time-of-day (latent)", -2.0794415416798357),-                                    ("hour", -2.0794415416798357)],-                               n = 2}}),-       ("intersect by \",\", \"of\", \"from\", \"'s\"",-        Classifier{okData =-                     ClassData{prior = -0.48130318449966897,-                               unseen = -5.170483995038151,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayhour", -3.2188758248682006),-                                    ("daymonth", -3.2188758248682006),-                                    ("<named-month> <day-of-month> (non ordinal)Friday",-                                     -4.471638793363569),-                                    ("Friday<named-month> <day-of-month> (non ordinal)",-                                     -3.7784916128036232),-                                    ("Wednesdayintersect", -4.471638793363569),-                                    ("Labor Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Black Fridaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.471638793363569),-                                    ("<part-of-day> of <time>February", -4.471638793363569),-                                    ("Saturday<time-of-day> am|pm", -4.471638793363569),-                                    ("Martin Luther King's Daythis|last|next <cycle>",-                                     -4.471638793363569),-                                    ("on <date><time-of-day> am|pm", -4.471638793363569),-                                    ("hourmonth", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.471638793363569),-                                    ("dayday", -2.5998366164619773),-                                    ("the <day-of-month> (ordinal)February", -4.0661736852554045),-                                    ("WednesdayOctober", -4.471638793363569),-                                    ("Wednesdaythis|last|next <cycle>", -4.0661736852554045),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -3.5553480614894135),-                                    ("dayyear", -2.8622008809294686),-                                    ("Saturday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.471638793363569),-                                    ("Thursdayhh:mm", -4.0661736852554045),-                                    ("Thanksgiving Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Memorial Daythis|last|next <cycle>", -4.471638793363569),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("TuesdayOctober", -4.471638793363569),-                                    ("the <day-of-month> (ordinal)March", -4.471638793363569),-                                    ("Mondaythis|last|next <cycle>", -4.471638793363569),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.0661736852554045),-                                    ("Fridayintersect", -4.471638793363569),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -3.7784916128036232),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.5553480614894135),-                                    ("Tuesdaythis|last|next <cycle>", -4.471638793363569),-                                    ("Sunday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayminute", -2.6798793241355137),-                                    ("intersectyear", -4.471638793363569),-                                    ("minuteday", -3.5553480614894135),-                                    ("this|last|next <cycle>Sunday", -4.471638793363569),-                                    ("Sundaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersectintersect", -4.471638793363569),-                                    ("weekday", -4.471638793363569),-                                    ("dayweek", -3.373026504695459),-                                    ("Thursday<time-of-day> am|pm", -4.471638793363569),-                                    ("Monday<named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -4.0661736852554045)],-                               n = 55},-                   koData =-                     ClassData{prior = -0.9622758451159785, unseen = -4.897839799950911,-                               likelihoods =-                                 HashMap.fromList-                                   [("week-endJuly", -4.197201947661808),-                                    ("week-endOctober", -3.5040547671018634),-                                    ("daymonth", -1.9999773703255892),-                                    ("TuesdaySeptember", -4.197201947661808),-                                    ("Wednesdayintersect", -4.197201947661808),-                                    ("hourmonth", -3.0985896589936988),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.197201947661808),-                                    ("Fridaythis|last|next <cycle>", -4.197201947661808),-                                    ("SundayFebruary", -4.197201947661808),-                                    ("WednesdayOctober", -4.197201947661808),-                                    ("week-endintersect", -4.197201947661808),-                                    ("dayyear", -4.197201947661808),-                                    ("FridayJuly", -3.791736839553644),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.197201947661808),-                                    ("FridaySeptember", -4.197201947661808),-                                    ("WednesdayFebruary", -4.197201947661808),-                                    ("minutemonth", -3.2809112157876537),-                                    ("SundayMarch", -4.197201947661808),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.197201947661808),-                                    ("MondayFebruary", -3.791736839553644),-                                    ("Fridayintersect", -4.197201947661808),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.791736839553644),-                                    ("dayminute", -2.810907586541918),-                                    ("SaturdaySeptember", -4.197201947661808),-                                    ("intersectSeptember", -3.2809112157876537),-                                    ("MondayMarch", -4.197201947661808),-                                    ("on <date>September", -3.791736839553644),-                                    ("intersectintersect", -4.197201947661808),-                                    ("Tuesdayintersect", -4.197201947661808),-                                    ("Sundayintersect", -4.197201947661808)],-                               n = 34}}),-       ("last <time>",-        Classifier{okData =-                     ClassData{prior = -0.6286086594223742, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("Father's Day", -2.6026896854443837),-                                    ("Martin Luther King's Day", -2.6026896854443837),-                                    ("Memorial Day", -2.6026896854443837),-                                    ("Mother's Day", -2.6026896854443837),-                                    ("day", -1.2163953243244932), ("Sunday", -2.6026896854443837),-                                    ("Thanksgiving Day", -2.6026896854443837),-                                    ("hour", -2.6026896854443837), ("Tuesday", -2.6026896854443837),-                                    ("week-end", -2.6026896854443837)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.7621400520468967, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Monday", -2.5257286443082556), ("day", -2.120263536200091),-                                    ("Sunday", -2.5257286443082556), ("hour", -1.4271163556401458),-                                    ("week-end", -1.4271163556401458)],-                               n = 7}}),-       ("March",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<named-month>|<named-day> <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Octoberordinal (digits)", -2.120263536200091),-                                    ("Thursdayordinal (digits)", -2.5257286443082556),-                                    ("day", -2.120263536200091),-                                    ("Augustordinal (digits)", -2.5257286443082556),-                                    ("Marchordinals (first..twentieth,thirtieth,...)",-                                     -2.120263536200091),-                                    ("Tuesdayordinal (digits)", -2.5257286443082556),-                                    ("month", -1.2729656758128873),-                                    ("Marchordinal (digits)", -2.5257286443082556)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("from|since|after <time-of-day>ordinal (digits)",-                                     -1.8718021769015913),-                                    ("Augustordinal (digits)", -1.8718021769015913),-                                    ("month", -1.466337068793427)],-                               n = 2}}),-       ("Labor Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Christmas",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("until <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -2.3025850929940455),-                                    ("<time-of-day> am|pm", -1.6094379124341003),-                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),-                                    ("minute", -1.3862943611198906)],-                               n = 6},-                   koData =-                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.7227665977411035),-                                    ("yesterday", -2.2335922215070942),-                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),-                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],-                               n = 10}}),-       ("mm.dd.yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<duration> after|before|from <time>",-        Classifier{okData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("a <unit-of-duration>now", -2.70805020110221),-                                    ("a <unit-of-duration>Christmas", -2.70805020110221),-                                    ("<integer> <unit-of-duration>today", -2.70805020110221),-                                    ("daysecond", -2.70805020110221),-                                    ("a <unit-of-duration>right now", -2.70805020110221),-                                    ("minutenograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>Christmas", -2.70805020110221),-                                    ("secondnograin", -2.70805020110221),-                                    ("yearday", -2.0149030205422647),-                                    ("daynograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>now", -2.3025850929940455)],-                               n = 7},-                   koData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -2.3978952727983707),-                                    ("dayday", -1.9924301646902063),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -2.3978952727983707)],-                               n = 3}}),-       ("Independence Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("decimal number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("next <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5263605246161616,-                               likelihoods =-                                 HashMap.fromList-                                   [("Martin Luther King's Day", -2.803360380906535),-                                    ("Halloween", -2.803360380906535),-                                    ("Wednesday", -2.803360380906535),-                                    ("Memorial Day", -2.803360380906535),-                                    ("Monday", -2.803360380906535),-                                    ("Mother's Day", -2.803360380906535),-                                    ("day", -1.0986122886681098),-                                    ("Thanksgiving Day", -2.803360380906535),-                                    ("March", -2.803360380906535), ("month", -2.803360380906535),-                                    ("Tuesday", -2.1102132003465894)],-                               n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.4849066497880004,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> sharp|exactly",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -2.1400661634962708),-                                    ("time-of-day (latent)", -2.1400661634962708),-                                    ("hhmm (latent)", -2.1400661634962708),-                                    ("<time-of-day> am|pm", -2.1400661634962708),-                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),-                                    ("minute", -1.4469189829363254)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("negative numbers",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -7.696104113612832e-2),-                                    ("integer (0..19)", -2.6026896854443837)],-                               n = 25}}),-       ("about|exactly <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("half an hour", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time> before last|after next",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday", -1.8718021769015913),-                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),-                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by the end of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("this|last|next <cycle>", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hhmm (military) am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersecthh:mm", -3.1918471524802814),-                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),-                                    ("minuteminute", -1.457246097092175),-                                    ("hh:mmhh:mm", -2.093234863812172),-                                    ("dayday", -3.1918471524802814),-                                    ("hourhour", -2.093234863812172),-                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),-                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],-                               n = 26},-                   koData =-                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("<named-month> <day-of-month> (non ordinal)July",-                                     -3.1135153092103742),-                                    ("daymonth", -2.70805020110221),-                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),-                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),-                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),-                                    ("minuteminute", -1.8607523407150064),-                                    ("hourhour", -2.70805020110221),-                                    ("minutehour", -2.70805020110221),-                                    ("hh:mmintersect", -2.1972245773362196),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -3.1135153092103742),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.1135153092103742)],-                               n = 12}}),-       ("Tuesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Day",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),-       ("fortnight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> and an half hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -1.252762968495368), ("March", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.8472978603872037),-                                    ("month", -0.8472978603872037)],-                               n = 2}}),-       ("<time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.529395204760564),-                                    ("hh:mmhh:mm", -1.8971199848858813),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -2.4849066497880004),-                                    ("hourhour", -1.6964492894237302),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -3.4011973816621555),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.4011973816621555),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),-                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],-                               n = 22},-                   koData =-                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>time-of-day (latent)",-                                     -3.4657359027997265),-                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),-                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -3.4657359027997265),-                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),-                                    ("hourhour", -2.2129729343043585),-                                    ("minutehour", -1.2144441041932315),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.4657359027997265),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -2.5494451709255714),-                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),-                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",-                                     -3.0602707946915624)],-                               n = 24}}),-       ("military spelled out numbers am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods =-                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("winter",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("nth <time> after <time>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",-                                     -0.916290731874155)],-                               n = 1}}),-       ("<named-month> <day-of-month> (non ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.42121346507630353,-                               unseen = -3.951243718581427,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.5455312716044354),-                                    ("Marchinteger (numeric)", -2.833213344056216),-                                    ("Aprilinteger (numeric)", -3.2386784521643803),-                                    ("month", -0.8407831793660099),-                                    ("Februaryinteger (numeric)", -1.9859154836690123),-                                    ("Septemberinteger (numeric)", -2.833213344056216),-                                    ("Octoberinteger (numeric)", -2.833213344056216),-                                    ("Julyinteger (numeric)", -2.1400661634962708)],-                               n = 21},-                   koData =-                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.3353749158170367),-                                    ("Marchinteger (numeric)", -2.740840023925201),-                                    ("Aprilinteger (numeric)", -2.740840023925201),-                                    ("month", -0.9490805546971459),-                                    ("from|since|after <time-of-day>integer (numeric)",-                                     -2.3353749158170367),-                                    ("Julyinteger (numeric)", -1.6422277352570913)],-                               n = 11}}),-       ("this|next <day-of-week>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.2512917986064953),-                                    ("Wednesday", -2.2512917986064953),-                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),-                                    ("Tuesday", -1.55814461804655)],-                               n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinal (digits)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5553480614894135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 33},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter (grain)",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("last <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)October", -1.791759469228055),-                                    ("daymonth", -1.2809338454620642),-                                    ("day (grain)intersect", -1.791759469228055),-                                    ("weekmonth", -1.791759469228055),-                                    ("week (grain)intersect", -2.1972245773362196),-                                    ("week (grain)September", -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month>(ordinal) <named-month> year",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)April", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Black Friday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Labor Day",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("week-end",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7}}),-       ("day (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.2188758248682006,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("right now",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("for <duration> from <time>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -1.5040773967762742),-                                    ("dayday", -1.0986122886681098),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -1.5040773967762742)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.252762968495368),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -1.252762968495368)],-                               n = 1}}),-       ("between <time> and <time>",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.0116009116784799),-                                    ("hh:mmhh:mm", -1.0116009116784799)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.4469189829363254),-                                    ("minuteminute", -1.4469189829363254),-                                    ("minutehour", -1.4469189829363254),-                                    ("hh:mmintersect", -1.4469189829363254)],-                               n = 6}}),-       ("<month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),-                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",-                                     -2.740840023925201),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -2.3353749158170367),-                                    ("month", -0.8690378470236094),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -2.3353749158170367)],-                               n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of days",-        Classifier{okData =-                     ClassData{prior = -4.0821994520255166e-2,-                               unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -3.2188758248682006,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("summer",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("dd-dd <month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)September",-                                     -1.791759469228055),-                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),-                                    ("ordinal (digits)ordinal (digits)October",-                                     -2.1972245773362196),-                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),-                                    ("month", -0.9444616088408514),-                                    ("ordinal (digits)ordinal (digits)August",-                                     -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.5257286443082556),-                                    ("Martin Luther King's Day", -2.5257286443082556),-                                    ("Monday", -2.5257286443082556), ("day", -1.1394342831883648),-                                    ("Thanksgiving Day", -2.5257286443082556),-                                    ("hour", -2.5257286443082556), ("winter", -2.5257286443082556),-                                    ("week-end", -2.5257286443082556),-                                    ("summer", -2.120263536200091)],-                               n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.3025850929940455,+      [("Bhai Dooj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)noon|midnight|EOD|end of day",+                                     -0.916290731874155),+                                    ("hour", -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.7537718023763802),+                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],+                               n = 7}}),+       ("<time> timezone",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -1.824549292051046),+                                    ("<time-of-day> am|pm", -1.6422277352570913),+                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),+                                    ("minute", -1.824549292051046)],+                               n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thursday",+        Classifier{okData =+                     ClassData{prior = -9.53101798043249e-2,+                               unseen = -3.4657359027997265,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 30},+                   koData =+                     ClassData{prior = -2.3978952727983707,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("integer (numeric)",+        Classifier{okData =+                     ClassData{prior = -0.6142532380902823, unseen = -5.676753802268282,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 290},+                   koData =+                     ClassData{prior = -0.7788026251384392,+                               unseen = -5.5134287461649825,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 246}}),+       ("<duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = -5.406722127027582e-2,+                               unseen = -3.784189633918261,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),+                                    ("year", -2.662587827025453),+                                    ("<integer> <unit-of-duration>", -1.0531499145913523),+                                    ("a <unit-of-duration>", -2.662587827025453),+                                    ("month", -2.662587827025453),+                                    ("fortnight", -2.662587827025453)],+                               n = 18},+                   koData =+                     ClassData{prior = -2.9444389791664407,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("year", -1.5040773967762742),+                                    ("<integer> <unit-of-duration>", -1.5040773967762742)],+                               n = 1}}),+       ("noon|midnight|EOD|end of day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Father's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.6739764335716716),+                                    ("dayday", -1.1631508098056809),+                                    ("day (grain)yesterday", -1.6739764335716716)],+                               n = 4},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.6739764335716716),+                                    ("year (grain)Christmas", -2.0794415416798357),+                                    ("dayday", -2.0794415416798357),+                                    ("day (grain)intersect", -1.6739764335716716),+                                    ("day (grain)Easter Sunday", -2.0794415416798357),+                                    ("yearday", -2.0794415416798357)],+                               n = 4}}),+       ("Easter Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Navaratri",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Martin Luther King's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("integer (20..90)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Shemini Atzeret",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ramadan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lazarus Saturday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect 2 numbers",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("compose by multiplicationinteger (0..19)",+                                     -0.2231435513142097)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("powers of tensinteger (0..19)", -0.2231435513142097)],+                               n = 3}}),+       ("mm/yyyy",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("integer after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.8109302162163288),+                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),+                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom HaShoah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal or number) <named-month>",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)December", -2.1400661634962708),+                                    ("ordinal (digits)February", -2.1400661634962708),+                                    ("integer (numeric)April", -2.1400661634962708),+                                    ("month", -1.4469189829363254)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.4011973816621555,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)October", -2.6741486494265287),+                                    ("ordinal (digits)July", -2.6741486494265287),+                                    ("integer (numeric)September", -2.268683541318364),+                                    ("ordinal (digits)August", -2.6741486494265287),+                                    ("integer (numeric)August", -2.6741486494265287),+                                    ("ordinal (digits)April", -2.6741486494265287),+                                    ("month", -1.0647107369924282),+                                    ("integer (numeric)July", -2.268683541318364)],+                               n = 9}}),+       ("<time> <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -9.237332013101517e-2,+                               unseen = -4.48863636973214,+                               likelihoods =+                                 HashMap.fromList+                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("dayhour", -1.4816045409242156),+                                    ("Mondayearly morning", -3.378724525810097),+                                    ("time-of-day (latent)tonight", -3.378724525810097),+                                    ("hourhour", -2.3978952727983707),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("todaypart of days", -3.784189633918261),+                                    ("minutehour", -2.6855773452501515),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -3.378724525810097),+                                    ("time-of-day (latent)this <part-of-day>", -3.784189633918261),+                                    ("Mondayin|during the <part-of-day>", -3.784189633918261),+                                    ("intersectpart of days", -3.784189633918261),+                                    ("intersectin|during the <part-of-day>", -3.784189633918261),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("tomorrowpart of days", -2.3978952727983707),+                                    ("hh:mmin|during the <part-of-day>", -3.0910424533583156),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("hhmm (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("yesterdaypart of days", -3.378724525810097),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("Mondaypart of days", -3.784189633918261)],+                               n = 31},+                   koData =+                     ClassData{prior = -2.4277482359480516,+                               unseen = -3.4965075614664802,+                               likelihoods =+                                 HashMap.fromList+                                   [("yearhour", -2.772588722239781),+                                    ("monthhour", -2.772588722239781),+                                    ("hourhour", -2.772588722239781),+                                    ("year (latent)in|during the <part-of-day>",+                                     -2.772588722239781),+                                    ("Februaryin|during the <part-of-day>", -2.772588722239781),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -2.772588722239781)],+                               n = 3}}),+       ("today",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("mm/dd",+        Classifier{okData =+                     ClassData{prior = -1.2729656758128873,+                               unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},+                   koData =+                     ClassData{prior = -0.3285040669720361, unseen = -2.995732273553991,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 18}}),+       ("at <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.961215868968717e-2,+                               unseen = -4.948759890378168,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time> timezone", -3.8430301339411947),+                                    ("noon|midnight|EOD|end of day", -3.8430301339411947),+                                    ("integer after|past <hour-of-day>", -3.8430301339411947),+                                    ("half after|past <hour-of-day>", -4.248495242049359),+                                    ("time-of-day (latent)", -1.6835458845878222),+                                    ("hhmm (latent)", -3.5553480614894135),+                                    ("<time-of-day> am|pm", -1.8061482066801546),+                                    ("hh:mm", -3.332204510175204),+                                    ("about|exactly <time-of-day>", -3.8430301339411947),+                                    ("hour", -1.0704414117014134),+                                    ("<time-of-day> sharp|exactly", -4.248495242049359),+                                    ("minute", -2.05127066471314)],+                               n = 64},+                   koData =+                     ClassData{prior = -2.456735772821304, unseen = -3.2188758248682006,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -1.2321436812926323),+                                    ("hour", -1.2321436812926323)],+                               n = 6}}),+       ("December",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("absorption of , after named day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("on <date>", -2.1972245773362196),+                                    ("Wednesday", -2.6026896854443837),+                                    ("Saturday", -2.6026896854443837),+                                    ("Monday", -2.1972245773362196),+                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),+                                    ("Sunday", -2.6026896854443837)],+                               n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("September",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("tonight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|past|next <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.2626798770413155,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.456735772821304), ("second", -2.639057329615259),+                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),+                                    ("<integer> <unit-of-duration>", -0.7827593392496325),+                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),+                                    ("minute", -2.639057329615259)],+                               n = 31},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the ides of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("on <date>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -4.204692619390966,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -1.4816045409242156),+                                    ("mm/dd", -3.4965075614664802),+                                    ("absorption of , after named day", -3.0910424533583156),+                                    ("intersect", -3.0910424533583156),+                                    ("Saturday", -2.803360380906535),+                                    ("Friday", -3.4965075614664802), ("day", -0.8574502318512216),+                                    ("the <day-of-month> (ordinal)", -3.0910424533583156),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.803360380906535),+                                    ("hour", -3.4965075614664802)],+                               n = 28},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -1.791759469228055)],+                               n = 4}}),+       ("integer (0..19)",+        Classifier{okData =+                     ClassData{prior = -0.11122563511022437,+                               unseen = -3.970291913552122,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 51},+                   koData =+                     ClassData{prior = -2.2512917986064953,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),+       ("between <time-of-day> and <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.7884573603642702),+                                    ("hh:mmhh:mm", -0.7884573603642702)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -0.7884573603642702),+                                    ("minutehour", -0.7884573603642702)],+                               n = 9}}),+       ("Halloween",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Passover",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -1.6094379124341003),+                                    ("month", -0.916290731874155),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("October",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from|since|after <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -1.5950491749820006, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("July", -3.332204510175204),+                                    ("time-of-day (latent)", -2.4159137783010487),+                                    ("<time-of-day> am|pm", -2.4159137783010487),+                                    ("hh:mm", -2.4159137783010487), ("hour", -1.8281271133989299),+                                    ("month", -2.9267394020670396), ("minute", -2.4159137783010487),+                                    ("August", -3.332204510175204)],+                               n = 14},+                   koData =+                     ClassData{prior = -0.22677331936478848,+                               unseen = -4.9344739331306915,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.828641396489095),+                                    ("week", -4.23410650459726),+                                    ("<day-of-month> (ordinal or number) <named-month>",+                                     -4.23410650459726),+                                    ("today", -4.23410650459726), ("intersect", -2.362304327695668),+                                    ("second", -4.23410650459726), ("now", -3.5409593240373143),+                                    ("tomorrow", -3.828641396489095),+                                    ("this|last|next <cycle>", -4.23410650459726),+                                    ("day", -1.8827312474337816),+                                    ("time-of-day (latent)", -4.23410650459726),+                                    ("<time-of-day> am|pm", -3.828641396489095),+                                    ("nograin", -3.5409593240373143),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -4.23410650459726),+                                    ("Easter Sunday", -4.23410650459726),+                                    ("Christmas", -3.5409593240373143),+                                    ("hour", -2.981343536101891), ("month", -4.23410650459726),+                                    ("<datetime> - <datetime> (interval)", -2.847812143477369),+                                    ("<time-of-day> - <time-of-day> (interval)",+                                     -2.5293584123588344),+                                    ("<named-month> <day-of-month> (non ordinal)",+                                     -3.828641396489095),+                                    ("minute", -1.749199854809259),+                                    ("right now", -4.23410650459726),+                                    ("<month> dd-dd (interval)", -3.5409593240373143),+                                    ("dd-dd <month> (interval)", -3.828641396489095)],+                               n = 55}}),+       ("month (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> more <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)minute (grain)", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> o'clock",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in|within|after <duration>",+        Classifier{okData =+                     ClassData{prior = -0.11000089521432846,+                               unseen = -4.6443908991413725,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -3.248434627109745),+                                    ("<integer> more <unit-of-duration>", -3.9415818076696905),+                                    ("three-quarters of an hour", -3.0252910757955354),+                                    ("<integer> + '\"", -3.248434627109745),+                                    ("number.number hours", -3.9415818076696905),+                                    ("second", -3.536116699561526), ("day", -3.248434627109745),+                                    ("half an hour", -3.0252910757955354),+                                    ("year", -3.9415818076696905),+                                    ("<integer> <unit-of-duration>", -1.5902065505062128),+                                    ("a <unit-of-duration>", -3.0252910757955354),+                                    ("quarter of an hour", -3.0252910757955354),+                                    ("hour", -2.5552874465498),+                                    ("about|exactly <duration>", -3.9415818076696905),+                                    ("<integer> and an half hour", -3.9415818076696905),+                                    ("minute", -1.3025244780544318)],+                               n = 43},+                   koData =+                     ClassData{prior = -2.2617630984737906, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -2.1972245773362196), ("year", -1.9095425048844386),+                                    ("<integer> <unit-of-duration>", -1.9095425048844386),+                                    ("a <unit-of-duration>", -2.1972245773362196)],+                               n = 5}}),+       ("January",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("three-quarters of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Mattu Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Wednesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> + '\"",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half <integer> (UK style hour-of-day)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Family Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("July",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hour (grain)",+        Classifier{okData =+                     ClassData{prior = -0.8209805520698302,+                               unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),+       ("Shavuot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Vimy Ridge Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> <duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayyear", -0.6931471805599453),+                                    ("Diwali<integer> <unit-of-duration>", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),+                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",+                                     -1.466337068793427),+                                    ("quarter", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),+                                    ("quarter", -0.8109302162163288)],+                               n = 3}}),+       ("Boss's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Orthodox Easter Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("one twenty two",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect",+        Classifier{okData =+                     ClassData{prior = -0.44339892331178415,+                               unseen = -6.7464121285733745,+                               likelihoods =+                                 HashMap.fromList+                                   [("Navaratriyear (latent)", -6.052089168924417),+                                    ("Father's Dayyear (latent)", -6.052089168924417),+                                    ("Ramadanyear (latent)", -6.052089168924417),+                                    ("<datetime> - <datetime> (interval)on <date>",+                                     -4.799326200429049),+                                    ("Bhai Doojyear (latent)", -6.052089168924417),+                                    ("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -4.799326200429049),+                                    ("hourday", -4.347341076685992),+                                    ("dayhour", -3.134318436840138),+                                    ("Martin Luther King's Dayyear (latent)", -5.646624060816253),+                                    ("Shemini Atzeretyear (latent)", -6.052089168924417),+                                    ("daymonth", -5.358941988364472),+                                    ("monthday", -5.646624060816253),+                                    ("monthyear", -4.442651256490317),+                                    ("Yom Ha'atzmautyear (latent)", -6.052089168924417),+                                    ("Vijayadashamiyear (latent)", -6.052089168924417),+                                    ("Thanksgiving Dayyear (latent)", -4.953476880256307),+                                    ("Thai Pongalyear (latent)", -5.358941988364472),+                                    ("Thiru Onamyear (latent)", -5.358941988364472),+                                    ("Tuesdaythe <day-of-month> (ordinal)", -6.052089168924417),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -6.052089168924417),+                                    ("houryear", -5.358941988364472),+                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",+                                     -6.052089168924417),+                                    ("Christmas<time-of-day> am|pm", -6.052089168924417),+                                    ("last <day-of-week> of <time>year (latent)",+                                     -6.052089168924417),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.358941988364472),+                                    ("<time-of-day> am|pmintersect", -4.799326200429049),+                                    ("Family Dayyear (latent)", -5.135798437050262),+                                    ("Octoberyear (latent)", -4.799326200429049),+                                    ("intersect<time-of-day> am|pm", -6.052089168924417),+                                    ("Mattu Pongalyear (latent)", -6.052089168924417),+                                    ("Shavuotyear (latent)", -6.052089168924417),+                                    ("Dhanterasin <named-month>|year", -6.052089168924417),+                                    ("at <time-of-day>in|within|after <duration>",+                                     -6.052089168924417),+                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -6.052089168924417),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -5.646624060816253),+                                    ("Marchyear (latent)", -6.052089168924417),+                                    ("Sukkotyear (latent)", -5.646624060816253),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -6.052089168924417),+                                    ("Clean Mondayyear (latent)", -5.646624060816253),+                                    ("monthhour", -5.646624060816253),+                                    ("todayat <time-of-day>", -6.052089168924417),+                                    ("Thursday<time> timezone", -4.347341076685992),+                                    ("this <time>hh(:mm) - <time-of-day> am|pm",+                                     -6.052089168924417),+                                    ("Palm SundaySunday", -5.646624060816253),+                                    ("dayday", -3.8548645915881976),+                                    ("<time> <part-of-day>at <time-of-day>", -6.052089168924417),+                                    ("mm/ddat <time-of-day>", -6.052089168924417),+                                    ("tonightat <time-of-day>", -6.052089168924417),+                                    ("<time-of-day> am|pmabsorption of , after named day",+                                     -5.358941988364472),+                                    ("today<time-of-day> am|pm", -6.052089168924417),+                                    ("Februarythe <day-of-month> (ordinal)", -5.646624060816253),+                                    ("at <time-of-day><time> <part-of-day>", -6.052089168924417),+                                    ("mm/dd<time-of-day> am|pm", -6.052089168924417),+                                    ("hourhour", -4.799326200429049),+                                    ("<time-of-day> am|pmon <date>", -4.037186148382152),+                                    ("National Patriots' Dayyear (latent)", -5.358941988364472),+                                    ("Wednesdaythis|last|next <cycle>", -6.052089168924417),+                                    ("Lentyear (latent)", -6.052089168924417),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -4.548011772148143),+                                    ("Boghiyear (latent)", -6.052089168924417),+                                    ("dayyear", -1.9330519941119446),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -6.052089168924417),+                                    ("Thursdayat <time-of-day>", -5.646624060816253),+                                    ("Islamic New Yearyear (latent)", -5.646624060816253),+                                    ("Laylat al-Qadryear (latent)", -5.135798437050262),+                                    ("Chhathin <named-month>|year", -6.052089168924417),+                                    ("Vasant Panchamiin <named-month>|year", -6.052089168924417),+                                    ("Diwaliin <named-month>|year", -6.052089168924417),+                                    ("Discovery Dayyear (latent)", -5.646624060816253),+                                    ("Shrove Tuesdayyear (latent)", -6.052089168924417),+                                    ("<time-of-day> am|pmtomorrow", -5.358941988364472),+                                    ("Yom Kippuryear (latent)", -6.052089168924417),+                                    ("<part-of-day> of <time>year (latent)", -6.052089168924417),+                                    ("minutehour", -5.135798437050262),+                                    ("Kaanum Pongalyear (latent)", -5.646624060816253),+                                    ("Maha Saptamiyear (latent)", -6.052089168924417),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -5.646624060816253),+                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",+                                     -4.347341076685992),+                                    ("for <duration> from <time>December", -6.052089168924417),+                                    ("tomorrow<time-of-day> sharp|exactly", -6.052089168924417),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.135798437050262),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -5.646624060816253),+                                    ("Pentecostyear (latent)", -6.052089168924417),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.135798437050262),+                                    ("Eid al-Fitryear (latent)", -6.052089168924417),+                                    ("Mondayin|during the <part-of-day>", -6.052089168924417),+                                    ("Raksha Bandhanyear (latent)", -6.052089168924417),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.646624060816253),+                                    ("Navaratriin <named-month>|year", -6.052089168924417),+                                    ("Ashurayear (latent)", -6.052089168924417),+                                    ("Chinese New Yearyear (latent)", -6.052089168924417),+                                    ("Sundayyear (latent)", -6.052089168924417),+                                    ("Lag BaOmeryear (latent)", -6.052089168924417),+                                    ("last weekend of <named-month>year (latent)",+                                     -6.052089168924417),+                                    ("Eid al-Adhayear (latent)", -5.135798437050262),+                                    ("intersectin|during the <part-of-day>", -6.052089168924417),+                                    ("Christmasat <time-of-day>", -6.052089168924417),+                                    ("Passoveryear (latent)", -6.052089168924417),+                                    ("Lazarus Saturdayyear (latent)", -6.052089168924417),+                                    ("<day-of-month> (ordinal or number) <named-month>year (latent)",+                                     -6.052089168924417),+                                    ("Yom HaShoahyear (latent)", -5.646624060816253),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -5.135798437050262),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -6.052089168924417),+                                    ("Thai Pongalin <named-month>|year", -6.052089168924417),+                                    ("Septemberyear (latent)", -5.646624060816253),+                                    ("mm/ddyear (latent)", -6.052089168924417),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -4.799326200429049),+                                    ("Halloweenyear (latent)", -6.052089168924417),+                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.358941988364472),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -5.135798437050262),+                                    ("at <time-of-day>intersect", -5.646624060816253),+                                    ("Rosh Hashanahyear (latent)", -6.052089168924417),+                                    ("Dhanterasyear (latent)", -6.052089168924417),+                                    ("Tu BiShvatyear (latent)", -6.052089168924417),+                                    ("Holiyear (latent)", -5.358941988364472),+                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",+                                     -6.052089168924417),+                                    ("Holika Dahanyear (latent)", -5.358941988364472),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.052089168924417),+                                    ("dayminute", -3.4130318393091583),+                                    ("Mawlidyear (latent)", -6.052089168924417),+                                    ("from <datetime> - <datetime> (interval)on <date>",+                                     -5.646624060816253),+                                    ("<datetime> - <datetime> (interval)tomorrow",+                                     -6.052089168924417),+                                    ("Jumu'atul-Widayear (latent)", -5.135798437050262),+                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.052089168924417),+                                    ("minuteday", -2.414503009198031),+                                    ("absorption of , after named dayintersect",+                                     -6.052089168924417),+                                    ("intersectyear (latent)", -6.052089168924417),+                                    ("Orthodox Easter Sundayyear (latent)", -6.052089168924417),+                                    ("<ordinal> <cycle> of <time>year (latent)",+                                     -6.052089168924417),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -6.052089168924417),+                                    ("Boss's Dayyear (latent)", -5.646624060816253),+                                    ("Tisha B'Avyear (latent)", -6.052089168924417),+                                    ("Isra and Mi'rajyear (latent)", -5.135798437050262),+                                    ("at <time-of-day>absorption of , after named day",+                                     -6.052089168924417),+                                    ("Christmasyear (latent)", -5.646624060816253),+                                    ("Naraka Chaturdashiyear (latent)", -5.646624060816253),+                                    ("at <time-of-day>on <date>", -4.953476880256307),+                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",+                                     -4.442651256490317),+                                    ("dayweek", -6.052089168924417),+                                    ("Easter Sundayyear (latent)", -5.358941988364472),+                                    ("Thursday<time-of-day> am|pm", -6.052089168924417),+                                    ("Labour Dayyear (latent)", -6.052089168924417),+                                    ("weekyear", -5.646624060816253),+                                    ("hh:mmin|during the <part-of-day>", -5.358941988364472),+                                    ("<cycle> after|before <time><time-of-day> am|pm",+                                     -5.646624060816253),+                                    ("Hanukkahyear (latent)", -6.052089168924417),+                                    ("February<time> <part-of-day>", -6.052089168924417),+                                    ("Tuesdayin <named-month>|year", -6.052089168924417),+                                    ("Great Lentyear (latent)", -6.052089168924417),+                                    ("tomorrowat <time-of-day>", -5.358941988364472),+                                    ("between <time> and <time>on <date>", -4.442651256490317),+                                    ("Thursdayfrom|since|after <time-of-day>", -5.358941988364472),+                                    ("last <cycle> of <time>year (latent)", -5.358941988364472),+                                    ("at <time-of-day>tomorrow", -5.646624060816253),+                                    ("tomorrow<time-of-day> am|pm", -6.052089168924417),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -6.052089168924417),+                                    ("Diwaliyear (latent)", -6.052089168924417),+                                    ("Black Fridayyear (latent)", -5.646624060816253),+                                    ("in|during the <part-of-day>at <time-of-day>",+                                     -6.052089168924417),+                                    ("Chhathyear (latent)", -5.646624060816253),+                                    ("Vasant Panchamiyear (latent)", -6.052089168924417),+                                    ("Palm Sundayintersect", -6.052089168924417),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -6.052089168924417),+                                    ("Februaryintersect", -6.052089168924417),+                                    ("Mother's Dayyear (latent)", -6.052089168924417),+                                    ("Simchat Torahyear (latent)", -6.052089168924417),+                                    ("Victoria Dayyear (latent)", -5.646624060816253)],+                               n = 319},+                   koData =+                     ClassData{prior = -1.0268064758045434, unseen = -6.343880434126331,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.648974238161206),+                                    ("hourday", -5.648974238161206),+                                    ("<named-month> <day-of-month> (non ordinal)July",+                                     -5.648974238161206),+                                    ("dayhour", -3.2066272027920015),+                                    ("daymonth", -3.56953269648137),+                                    ("monthday", -5.243509130053042),+                                    ("monthyear", -4.396211269665838),+                                    ("<time-of-day> am|pmyear (latent)", -5.243509130053042),+                                    ("Thai Pongalyear (latent)", -4.955827057601261),+                                    ("intersecthh:mm", -5.648974238161206),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -5.648974238161206),+                                    ("houryear", -4.732683506287051),+                                    ("from <time-of-day> - <time-of-day> (interval)July",+                                     -5.648974238161206),+                                    ("until <time-of-day><time-of-day> am|pm", -5.648974238161206),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.955827057601261),+                                    ("<time-of-day> am|pmintersect", -4.396211269665838),+                                    ("Octoberyear (latent)", -5.648974238161206),+                                    ("from|since|after <time-of-day>year (latent)",+                                     -4.396211269665838),+                                    ("from|since|after <time-of-day>on <date>", -4.732683506287051),+                                    ("July<day-of-month> (ordinal or number) <named-month>",+                                     -5.648974238161206),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -4.396211269665838),+                                    ("about|exactly <time-of-day>year (latent)",+                                     -5.648974238161206),+                                    ("absorption of , after named dayJuly", -5.243509130053042),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.732683506287051),+                                    ("Clean Mondayyear (latent)", -5.648974238161206),+                                    ("monthhour", -5.648974238161206),+                                    ("hourmonth", -4.955827057601261),+                                    ("todayat <time-of-day>", -5.648974238161206),+                                    ("from|since|after <time-of-day>July", -5.648974238161206),+                                    ("Mondayyear (latent)", -4.955827057601261),+                                    ("dayday", -5.243509130053042),+                                    ("mm/ddat <time-of-day>", -5.243509130053042),+                                    ("<time-of-day> am|pmon <date>", -4.396211269665838),+                                    ("dayyear", -2.678559772591505),+                                    ("Thursdaymm/dd", -5.648974238161206),+                                    ("New Year's Dayyear (latent)", -5.243509130053042),+                                    ("Thursdayat <time-of-day>", -4.396211269665838),+                                    ("<integer> to|till|before <hour-of-day>September",+                                     -5.648974238161206),+                                    ("Aprilyear (latent)", -5.648974238161206),+                                    ("monthminute", -5.648974238161206),+                                    ("<time-of-day> am|pmtomorrow", -5.648974238161206),+                                    ("Thursdayhh:mm", -4.732683506287051),+                                    ("August<day-of-month> (ordinal or number) <named-month>",+                                     -5.648974238161206),+                                    ("minutemonth", -3.857214768933151),+                                    ("Sundayfrom|since|after <time-of-day>", -5.648974238161206),+                                    ("week-endin <named-month>|year", -5.648974238161206),+                                    ("Augustyear (latent)", -5.243509130053042),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.243509130053042),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.243509130053042),+                                    ("mm/dd<time-of-day> - <time-of-day> (interval)",+                                     -5.243509130053042),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.648974238161206),+                                    ("Sundayyear (latent)", -4.955827057601261),+                                    ("Christmasat <time-of-day>", -5.648974238161206),+                                    ("<duration> after|before|from <time>December",+                                     -5.648974238161206),+                                    ("yesterday<time-of-day> am|pm", -5.648974238161206),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -4.732683506287051),+                                    ("mm/ddyear (latent)", -5.648974238161206),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -5.243509130053042),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -5.648974238161206),+                                    ("until <time-of-day>on <date>", -4.955827057601261),+                                    ("at <time-of-day>intersect", -5.243509130053042),+                                    ("hh:mmyear (latent)", -4.550361949493096),+                                    ("Holiyear (latent)", -5.648974238161206),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.648974238161206),+                                    ("dayminute", -3.164067588373206),+                                    ("intersectSeptember", -4.144896841384932),+                                    ("minuteday", -2.580921303027589),+                                    ("absorption of , after named dayintersect",+                                     -5.648974238161206),+                                    ("Februaryin|during the <part-of-day>", -5.648974238161206),+                                    ("hh:mmon <date>", -3.634071217618941),+                                    ("Saturdayyear (latent)", -5.648974238161206),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -5.648974238161206),+                                    ("absorption of , after named daySeptember",+                                     -4.732683506287051),+                                    ("Naraka Chaturdashiyear (latent)", -5.648974238161206),+                                    ("on <date>September", -5.243509130053042),+                                    ("at <time-of-day>on <date>", -5.243509130053042),+                                    ("in <named-month>|yearyear (latent)", -5.648974238161206),+                                    ("dayweek", -5.648974238161206),+                                    ("Easter Sundayyear (latent)", -5.243509130053042),+                                    ("Thursday<time-of-day> am|pm", -5.243509130053042),+                                    ("absorption of , after named dayFebruary", -4.732683506287051),+                                    ("July<integer> to|till|before <hour-of-day>",+                                     -5.648974238161206),+                                    ("tomorrowat <time-of-day>", -5.648974238161206),+                                    ("<integer> to|till|before <hour-of-day>July",+                                     -5.648974238161206),+                                    ("Thursdayfrom|since|after <time-of-day>", -4.039536325727106),+                                    ("tomorrow<time-of-day> am|pm", -5.648974238161206),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -4.955827057601261),+                                    ("Diwaliyear (latent)", -5.243509130053042),+                                    ("Tuesdayfrom|since|after <time-of-day>", -5.648974238161206),+                                    ("Fridayyear (latent)", -5.243509130053042),+                                    ("minuteyear", -4.396211269665838)],+                               n = 178}}),+       ("one eleven",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("after lunch/work/school",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("early morning",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <number> (implicit minutes)",+        Classifier{okData =+                     ClassData{prior = -1.2039728043259361,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.3184537311185346),+                                    ("integer (0..19)", -1.2992829841302609)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.35667494393873245,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.19105523676270922),+                                    ("integer (0..19)", -1.749199854809259)],+                               n = 21}}),+       ("<ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.791759469228055),+                                    ("ordinal (digits)quarter (grain)year (latent)",+                                     -2.1972245773362196),+                                    ("quarteryear", -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",+                                     -2.1972245773362196),+                                    ("ordinal (digits)day (grain)this|last|next <cycle>",+                                     -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",+                                     -2.1972245773362196),+                                    ("weekmonth", -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",+                                     -2.1972245773362196)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 26},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -1.0116009116784799,+                               unseen = -3.6375861597263857,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -2.001480000210124),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("hh:mmhh:mm", -2.001480000210124),+                                    ("dayday", -2.512305623976115),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),+                                    ("hourhour", -2.512305623976115),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],+                               n = 8},+                   koData =+                     ClassData{prior = -0.45198512374305727,+                               unseen = -3.912023005428146,+                               likelihoods =+                                 HashMap.fromList+                                   [("hourday", -3.1986731175506815),+                                    ("dayhour", -2.793208009442517),+                                    ("<day-of-month> (ordinal)time-of-day (latent)",+                                     -3.1986731175506815),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -3.1986731175506815),+                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),+                                    ("minuteminute", -2.793208009442517),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.793208009442517),+                                    ("dayday", -3.1986731175506815),+                                    ("hourhour", -2.505525936990736),+                                    ("dayyear", -3.1986731175506815),+                                    ("minutehour", -2.2823823856765264),+                                    ("hh:mmintersect", -2.793208009442517),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<time-of-day> am|pm",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",+                                     -3.1986731175506815)],+                               n = 14}}),+       ("Saturday",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("the <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -1.7346010553881064),+                                    ("weekmonth", -1.7346010553881064),+                                    ("week (grain)October", -1.7346010553881064),+                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",+                                     -1.7346010553881064),+                                    ("weekday", -1.2237754316221157)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("number.number hours",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.6094379124341003),+                                    ("hh:mmhh:mm", -1.6094379124341003),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),+                                    ("hourhour", -2.3025850929940455),+                                    ("hourminute", -2.3025850929940455),+                                    ("time-of-day (latent)<time-of-day> sharp|exactly",+                                     -2.70805020110221),+                                    ("time-of-day (latent)hh:mm", -2.70805020110221),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.0149030205422647),+                                    ("hourhour", -1.791759469228055),+                                    ("minutehour", -1.6094379124341003),+                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],+                               n = 9}}),+       ("integer 21..99",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),+                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],+                               n = 4}}),+       ("Tisha B'Av",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("yyyy-mm-dd",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (latent)",+        Classifier{okData =+                     ClassData{prior = -0.14892327639210656,+                               unseen = -4.955827057601261,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -4.348511193973878e-2),+                                    ("intersect 2 numbers", -3.5624655292582776)],+                               n = 137},+                   koData =+                     ClassData{prior = -1.9778617488619157, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.3121863889661687),+                                    ("negative numbers", -0.6190392084062235),+                                    ("compose by multiplication", -1.8718021769015913)],+                               n = 22}}),+       ("mm/dd/yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Civic Holiday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Memorial Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Monday",+        Classifier{okData =+                     ClassData{prior = -0.3483066942682157, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.2237754316221157,+                               unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5}}),+       ("yesterday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm:ss",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Hanukkah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<hour-of-day> <integer>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),+                                    ("hour", -0.9808292530117262),+                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>integer (numeric)",+                                     -1.0986122886681098),+                                    ("hour", -1.0986122886681098)],+                               n = 1}}),+       ("Labour Day",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("nth <time> of <time>",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.9808292530117262),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -2.0794415416798357),+                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",+                                     -1.6739764335716716),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",+                                     -1.6739764335716716)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.0986122886681098),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",+                                     -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",+                                     -1.3862943611198906)],+                               n = 3}}),+       ("Valentine's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("April",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maha Saptami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Discovery Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week (grain)",+        Classifier{okData =+                     ClassData{prior = -4.0821994520255166e-2,+                               unseen = -4.304065093204169,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 72},+                   koData =+                     ClassData{prior = -3.2188758248682006,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("<part-of-day> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.3513752571634776),+                                    ("part of daysintersect", -2.3513752571634776),+                                    ("hourday", -0.9650808960435872),+                                    ("part of daysthe <day-of-month> (ordinal)",+                                     -2.3513752571634776),+                                    ("part of daysthe <day-of-month> (number)",+                                     -2.3513752571634776),+                                    ("part of daysthis <time>", -2.3513752571634776),+                                    ("part of daysChristmas", -1.9459101490553135)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("six thirty six a.m.",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.252762968495368),+                                    ("one twenty two", -0.8472978603872037),+                                    ("one eleven", -1.252762968495368)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Shrove Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("now",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("<day-of-month> (ordinal or number) of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.3513752571634776),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.3513752571634776),+                                    ("ordinal (digits)February", -2.3513752571634776),+                                    ("integer (numeric)February", -1.9459101490553135),+                                    ("month", -0.9650808960435872),+                                    ("ordinal (digits)March", -2.3513752571634776),+                                    ("integer (numeric)July", -2.3513752571634776)],+                               n = 7},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.5040773967762742),+                                    ("month", -1.5040773967762742)],+                               n = 1}}),+       ("this <part-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.6931471805599453),+                                    ("part of days", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Kaanum Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom Kippur",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("The Twelfth",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("powers of tens",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Friday",+        Classifier{okData =+                     ClassData{prior = -0.3677247801253174,+                               unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},+                   koData =+                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("in|during the <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.701137698962981e-2,+                               unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("early morning", -2.5257286443082556),+                                    ("hour", -0.7339691750802004),+                                    ("part of days", -0.8209805520698302)],+                               n = 11},+                   koData =+                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.916290731874155),+                                    ("part of days", -0.916290731874155)],+                               n = 1}}),+       ("tomorrow",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh(:mm) - <time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Groundhog Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|last|next <cycle>",+        Classifier{okData =+                     ClassData{prior = -7.503518594291408e-2,+                               unseen = -5.10594547390058,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.1295745142720766),+                                    ("month (grain)", -2.797281334830153),+                                    ("year (grain)", -2.5349170703626616),+                                    ("week (grain)", -1.1295745142720766),+                                    ("quarter", -3.4904285153900982), ("year", -2.5349170703626616),+                                    ("month", -2.797281334830153),+                                    ("quarter (grain)", -3.4904285153900982)],+                               n = 77},+                   koData =+                     ClassData{prior = -2.627081138568543, unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.4816045409242156),+                                    ("week (grain)", -1.4816045409242156),+                                    ("day", -1.9924301646902063),+                                    ("day (grain)", -1.9924301646902063)],+                               n = 6}}),+       ("Mother's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Simchat Torah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Victoria Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Eve",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Raksha Bandhan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ashura",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Palm Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Adha",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -1.9459101490553135),+                                    ("time-of-day (latent)", -1.9459101490553135),+                                    ("<time-of-day> am|pm", -1.9459101490553135),+                                    ("hh:mm", -1.9459101490553135), ("hour", -1.540445040947149),+                                    ("minute", -1.540445040947149)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinals (first..twentieth,thirtieth,...)",+                                     -1.7047480922384253),+                                    ("ordinal (digits)", -0.2006706954621511)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinals (first..twentieth,thirtieth,...)",+                                     -0.916290731874155),+                                    ("ordinal (digits)", -0.5108256237659907)],+                               n = 3}}),+       ("last weekend of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),+                                    ("month", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (number)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lag BaOmer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("fractional number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17}}),+       ("Sunday",+        Classifier{okData =+                     ClassData{prior = -0.262364264467491, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -1.466337068793427, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Chinese New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("February",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("minute (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|this|next <season>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1}}),+       ("time-of-day (latent)",+        Classifier{okData =+                     ClassData{prior = -0.5699145401359973, unseen = -4.290459441148391,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.11778303565638351),+                                    ("integer (0..19)", -2.330755969960742)],+                               n = 69},+                   koData =+                     ClassData{prior = -0.8337291311811348, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -9.352605801082348e-2),+                                    ("integer (0..19)", -2.9267394020670396),+                                    ("integer 21..99", -3.332204510175204)],+                               n = 53}}),+       ("beginning of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last <day-of-week> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.916290731874155),+                                    ("SundayMarch", -1.6094379124341003),+                                    ("MondayMarch", -1.6094379124341003),+                                    ("Sundayintersect", -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.13858616328614667,+                               unseen = -5.147494476813453,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.5026062268874014),+                                    ("integer (0..19)year (grain)", -3.062222014822824),+                                    ("integer (numeric)day (grain)", -2.743768283704289),+                                    ("integer (0..19)second (grain) ", -3.7553691953827695),+                                    ("integer (0..19)hour (grain)", -3.062222014822824),+                                    ("second", -3.349904087274605),+                                    ("integer (numeric)second (grain) ", -4.04305126783455),+                                    ("integer (numeric)year (grain)", -3.349904087274605),+                                    ("day", -2.4336133554004498), ("year", -2.576714199041123),+                                    ("integer (numeric)week (grain)", -3.062222014822824),+                                    ("integer (0..19)month (grain)", -3.5322256440685593),+                                    ("hour", -2.6567569067146595), ("month", -3.1957534074473464),+                                    ("integer (numeric)minute (grain)", -3.1957534074473464),+                                    ("integer (0..19)minute (grain)", -3.062222014822824),+                                    ("integer (numeric)month (grain)", -4.04305126783455),+                                    ("minute", -2.5026062268874014),+                                    ("integer (numeric)hour (grain)", -3.5322256440685593),+                                    ("integer (0..19)day (grain)", -3.5322256440685593),+                                    ("integer (0..19)week (grain)", -3.1957534074473464)],+                               n = 74},+                   koData =+                     ClassData{prior = -2.044755983691946, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),+                                    ("integer (numeric)hour (grain)", -1.4087672169719492),+                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],+                               n = 11}}),+       ("hhmm (latent)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -5.342334251964811,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer after|past <hour-of-day>", -3.951243718581427),+                                    ("at <time-of-day>", -2.202043863772168),+                                    ("from|since|after <time-of-day>", -3.7281001672672174),+                                    ("<time-of-day> o'clock", -4.238925791033208),+                                    ("half after|past <hour-of-day>", -4.238925791033208),+                                    ("time-of-day (latent)", -1.7266201670570935),+                                    ("hhmm (latent)", -4.6443908991413725),+                                    ("hh:mm", -2.293015641977895),+                                    ("quarter after|past <hour-of-day>", -4.6443908991413725),+                                    ("about|exactly <time-of-day>", -4.6443908991413725),+                                    ("until <time-of-day>", -3.951243718581427),+                                    ("hour", -1.2104036946562264),+                                    ("<time-of-day> sharp|exactly", -4.6443908991413725),+                                    ("minute", -1.754019141245208)],+                               n = 96},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -4.394449154672439,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),+                                    ("from|since|after <time-of-day>", -3.283414346005772),+                                    ("<hour-of-day> <integer>", -3.6888794541139363),+                                    ("time-of-day (latent)", -1.0498221244986778),+                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],+                               n = 32}}),+       ("Yom Ha'atzmaut",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),+                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),+                                    ("month", -0.8472978603872037)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thiru Onam",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thai Pongal",+        Classifier{okData =+                     ClassData{prior = -0.5596157879354228, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -0.8472978603872037,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Vijayadashami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thanksgiving Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("a <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.5306282510621704,+                               unseen = -3.5553480614894135,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.1400661634962708),+                                    ("year (grain)", -2.4277482359480516),+                                    ("second", -2.833213344056216),+                                    ("week (grain)", -2.1400661634962708),+                                    ("day", -2.1400661634962708),+                                    ("minute (grain)", -2.833213344056216),+                                    ("year", -2.4277482359480516),+                                    ("second (grain) ", -2.833213344056216),+                                    ("minute", -2.833213344056216),+                                    ("day (grain)", -2.1400661634962708)],+                               n = 10},+                   koData =+                     ClassData{prior = -0.8873031950009028, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour (grain)", -1.7227665977411035),+                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),+                                    ("quarter (grain)", -1.9459101490553135)],+                               n = 7}}),+       ("at the beginning|end of <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("year (latent)", -0.6931471805599453),+                                    ("year", -0.6931471805599453)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Dhanteras",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Tu BiShvat",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Whit Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm",+        Classifier{okData =+                     ClassData{prior = -5.6352936551131744e-2,+                               unseen = -4.2626798770413155,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 69},+                   koData =+                     ClassData{prior = -2.9041650800285006, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("Holi",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Rosh Hashanah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Holika Dahan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("second (grain) ",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinals (first..twentieth,thirtieth,...)",+        Classifier{okData =+                     ClassData{prior = -0.1941560144409575, unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},+                   koData =+                     ClassData{prior = -1.7346010553881064,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Mawlid",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Jumu'atul-Wida",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.252762968495368),+                                    ("dayday", -0.8472978603872037),+                                    ("day (grain)yesterday", -1.252762968495368)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("about|exactly <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -3.6109179126442243,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.791759469228055),+                                    ("hh(:mm) - <time-of-day> am|pm", -2.890371757896165),+                                    ("this|last|next <cycle>", -1.791759469228055),+                                    ("day", -2.4849066497880004),+                                    ("time-of-day (latent)", -2.890371757896165),+                                    ("hhmm (latent)", -2.4849066497880004),+                                    ("<time-of-day> am|pm", -2.890371757896165),+                                    ("hour", -2.1972245773362196),+                                    ("next <time>", -2.890371757896165),+                                    ("this|next <day-of-week>", -2.890371757896165),+                                    ("minute", -2.4849066497880004)],+                               n = 12},+                   koData =+                     ClassData{prior = -1.9459101490553135, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("mm/dd", -2.0794415416798357), ("day", -2.0794415416798357),+                                    ("time-of-day (latent)", -2.0794415416798357),+                                    ("hour", -2.0794415416798357)],+                               n = 2}}),+       ("Sukkot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> in <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("monthyear", -1.2992829841302609),+                                    ("Marcha <unit-of-duration>", -1.7047480922384253),+                                    ("March<integer> <unit-of-duration>", -1.7047480922384253),+                                    ("Vijayadashami<integer> <unit-of-duration>",+                                     -1.7047480922384253),+                                    ("dayyear", -1.7047480922384253)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("World Vegan Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect by \",\", \"of\", \"from\", \"'s\"",+        Classifier{okData =+                     ClassData{prior = -0.46262352194811296,+                               unseen = -5.099866427824199,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",+                                     -4.400603020246817),+                                    ("dayhour", -3.147840051751449),+                                    ("daymonth", -3.147840051751449),+                                    ("<named-month> <day-of-month> (non ordinal)Friday",+                                     -4.400603020246817),+                                    ("Friday<named-month> <day-of-month> (non ordinal)",+                                     -3.7074558396868715),+                                    ("Wednesdayintersect", -4.400603020246817),+                                    ("Black Fridaythis|last|next <cycle>", -4.400603020246817),+                                    ("Labour Daythis|last|next <cycle>", -4.400603020246817),+                                    ("<part-of-day> of <time>February", -4.400603020246817),+                                    ("Saturday<time-of-day> am|pm", -4.400603020246817),+                                    ("Martin Luther King's Daythis|last|next <cycle>",+                                     -3.9951379121386528),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.400603020246817),+                                    ("on <date><time-of-day> am|pm", -4.400603020246817),+                                    ("hourmonth", -4.400603020246817),+                                    ("dayday", -2.5288008433452256),+                                    ("the <day-of-month> (ordinal)February", -3.9951379121386528),+                                    ("WednesdayOctober", -4.400603020246817),+                                    ("Wednesdaythis|last|next <cycle>", -3.9951379121386528),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -3.484312288372662),+                                    ("dayyear", -2.791165107812717),+                                    ("Saturday<named-month> <day-of-month> (non ordinal)",+                                     -4.400603020246817),+                                    ("Thursdayhh:mm", -3.9951379121386528),+                                    ("Thanksgiving Daythis|last|next <cycle>", -4.400603020246817),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -3.9951379121386528),+                                    ("TuesdayOctober", -4.400603020246817),+                                    ("the <day-of-month> (ordinal)March", -4.400603020246817),+                                    ("Mondaythis|last|next <cycle>", -4.400603020246817),+                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.400603020246817),+                                    ("Fridayintersect", -4.400603020246817),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -3.7074558396868715),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.484312288372662),+                                    ("Tuesdaythis|last|next <cycle>", -4.400603020246817),+                                    ("Sunday<named-month> <day-of-month> (non ordinal)",+                                     -4.400603020246817),+                                    ("dayminute", -3.0143086591269266),+                                    ("minuteday", -3.484312288372662),+                                    ("this|last|next <cycle>Sunday", -4.400603020246817),+                                    ("intersectyear (latent)", -4.400603020246817),+                                    ("Sundaythis|last|next <cycle>", -4.400603020246817),+                                    ("weekday", -4.400603020246817),+                                    ("dayweek", -3.3019907315787074),+                                    ("Thursday<time-of-day> am|pm", -4.400603020246817),+                                    ("Monday<named-month> <day-of-month> (non ordinal)",+                                     -3.9951379121386528),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -3.9951379121386528)],+                               n = 51},+                   koData =+                     ClassData{prior = -0.9932517730102834, unseen = -4.804021044733257,+                               likelihoods =+                                 HashMap.fromList+                                   [("week-endJuly", -4.102643365036796),+                                    ("week-endOctober", -3.4094961844768505),+                                    ("daymonth", -1.9054187877005764),+                                    ("TuesdaySeptember", -4.102643365036796),+                                    ("Wednesdayintersect", -4.102643365036796),+                                    ("hourmonth", -3.004031076368686),+                                    ("Fridaythis|last|next <cycle>", -4.102643365036796),+                                    ("SundayFebruary", -4.102643365036796),+                                    ("WednesdayOctober", -4.102643365036796),+                                    ("week-endintersect", -4.102643365036796),+                                    ("dayyear", -4.102643365036796),+                                    ("FridayJuly", -3.6971782569286313),+                                    ("FridaySeptember", -4.102643365036796),+                                    ("WednesdayFebruary", -4.102643365036796),+                                    ("minutemonth", -3.186352633162641),+                                    ("SundayMarch", -4.102643365036796),+                                    ("MondayFebruary", -3.6971782569286313),+                                    ("Fridayintersect", -4.102643365036796),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.6971782569286313),+                                    ("dayminute", -3.4094961844768505),+                                    ("SaturdaySeptember", -4.102643365036796),+                                    ("intersectSeptember", -3.186352633162641),+                                    ("MondayMarch", -4.102643365036796),+                                    ("on <date>September", -3.6971782569286313),+                                    ("Tuesdayintersect", -4.102643365036796),+                                    ("Sundayintersect", -4.102643365036796)],+                               n = 30}}),+       ("last <time>",+        Classifier{okData =+                     ClassData{prior = -0.5306282510621704,+                               unseen = -3.4965075614664802,+                               likelihoods =+                                 HashMap.fromList+                                   [("Father's Day", -2.772588722239781),+                                    ("Martin Luther King's Day", -2.772588722239781),+                                    ("Mother's Day", -2.772588722239781),+                                    ("day", -1.1631508098056809), ("Sunday", -2.772588722239781),+                                    ("Chinese New Year", -2.367123614131617),+                                    ("Thanksgiving Day", -2.772588722239781),+                                    ("Easter Sunday", -2.772588722239781),+                                    ("hour", -2.772588722239781), ("Tuesday", -2.772588722239781),+                                    ("week-end", -2.772588722239781)],+                               n = 10},+                   koData =+                     ClassData{prior = -0.8873031950009028, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("Monday", -2.5649493574615367), ("day", -2.159484249353372),+                                    ("Sunday", -2.5649493574615367), ("hour", -1.466337068793427),+                                    ("week-end", -1.466337068793427)],+                               n = 7}}),+       ("March",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.044522437723423,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 19},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<named-month>|<named-day> <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("Octoberordinal (digits)", -2.120263536200091),+                                    ("Thursdayordinal (digits)", -2.5257286443082556),+                                    ("day", -2.120263536200091),+                                    ("Augustordinal (digits)", -2.5257286443082556),+                                    ("Marchordinals (first..twentieth,thirtieth,...)",+                                     -2.120263536200091),+                                    ("Tuesdayordinal (digits)", -2.5257286443082556),+                                    ("month", -1.2729656758128873),+                                    ("Marchordinal (digits)", -2.5257286443082556)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("from|since|after <time-of-day>ordinal (digits)",+                                     -1.8718021769015913),+                                    ("Augustordinal (digits)", -1.8718021769015913),+                                    ("month", -1.466337068793427)],+                               n = 2}}),+       ("Clean Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Easter Sunday",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),+       ("Christmas",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("until <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -2.3025850929940455),+                                    ("<time-of-day> am|pm", -1.6094379124341003),+                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),+                                    ("minute", -1.3862943611198906)],+                               n = 6},+                   koData =+                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.7227665977411035),+                                    ("yesterday", -2.2335922215070942),+                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),+                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],+                               n = 10}}),+       ("mm.dd.yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Isra and Mi'raj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<duration> after|before|from <time>",+        Classifier{okData =+                     ClassData{prior = -0.3184537311185346,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("a <unit-of-duration>now", -2.803360380906535),+                                    ("a <unit-of-duration>Christmas", -2.803360380906535),+                                    ("dayday", -2.803360380906535),+                                    ("<integer> <unit-of-duration>today", -2.803360380906535),+                                    ("daysecond", -2.803360380906535),+                                    ("a <unit-of-duration>right now", -2.803360380906535),+                                    ("minutenograin", -2.803360380906535),+                                    ("<integer> <unit-of-duration>Christmas", -2.803360380906535),+                                    ("<integer> <unit-of-duration>Easter Sunday",+                                     -2.803360380906535),+                                    ("secondnograin", -2.803360380906535),+                                    ("yearday", -2.1102132003465894),+                                    ("daynograin", -2.803360380906535),+                                    ("<integer> <unit-of-duration>now", -2.3978952727983707)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.2992829841302609,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -2.4423470353692043),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -2.4423470353692043),+                                    ("dayday", -2.03688192726104),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -2.4423470353692043),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -2.4423470353692043)],+                               n = 3}}),+       ("<day-of-month> (ordinal or number) of <month>",+        Classifier{okData =+                     ClassData{prior = -8.004270767353637e-2,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.803360380906535),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.803360380906535),+                                    ("ordinal (digits)this|last|next <cycle>", -2.1102132003465894),+                                    ("integer (numeric)this|last|next <cycle>",+                                     -2.3978952727983707),+                                    ("ordinal (digits)February", -2.803360380906535),+                                    ("integer (numeric)February", -2.3978952727983707),+                                    ("month", -0.9315582040049435),+                                    ("ordinal (digits)March", -2.803360380906535),+                                    ("integer (numeric)July", -2.803360380906535)],+                               n = 12},+                   koData =+                     ClassData{prior = -2.5649493574615367,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.7047480922384253),+                                    ("month", -1.7047480922384253)],+                               n = 1}}),+       ("decimal number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Labour Day weekend",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Naraka Chaturdashi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("beginning of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("next <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.6888794541139363,+                               likelihoods =+                                 HashMap.fromList+                                   [("Martin Luther King's Day", -2.9704144655697013),+                                    ("Halloween", -2.9704144655697013),+                                    ("Wednesday", -2.9704144655697013),+                                    ("Boss's Day", -2.9704144655697013),+                                    ("Memorial Day", -2.9704144655697013),+                                    ("Monday", -2.9704144655697013),+                                    ("Discovery Day", -2.9704144655697013),+                                    ("Mother's Day", -2.9704144655697013),+                                    ("day", -1.0986122886681098),+                                    ("Thanksgiving Day", -2.9704144655697013),+                                    ("March", -2.9704144655697013), ("month", -2.9704144655697013),+                                    ("Tuesday", -2.277267285009756)],+                               n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> sharp|exactly",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -2.1400661634962708),+                                    ("time-of-day (latent)", -2.1400661634962708),+                                    ("hhmm (latent)", -2.1400661634962708),+                                    ("<time-of-day> am|pm", -2.1400661634962708),+                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),+                                    ("minute", -1.4469189829363254)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <named-month>|year",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -2.4423470353692043),+                                    ("year (latent)", -1.0560526742493137),+                                    ("year", -1.0560526742493137), ("March", -2.4423470353692043),+                                    ("month", -2.03688192726104)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.2992829841302609),+                                    ("year (latent)", -1.7047480922384253),+                                    ("year", -1.7047480922384253), ("month", -1.2992829841302609)],+                               n = 3}}),+       ("Islamic New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("negative numbers",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -7.696104113612832e-2),+                                    ("integer (0..19)", -2.6026896854443837)],+                               n = 25}}),+       ("about|exactly <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("half an hour", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time> before last|after next",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday", -1.8718021769015913),+                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),+                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by the end of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("this|last|next <cycle>", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hhmm (military) am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersecthh:mm", -3.1918471524802814),+                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),+                                    ("minuteminute", -1.457246097092175),+                                    ("hh:mmhh:mm", -2.093234863812172),+                                    ("dayday", -3.1918471524802814),+                                    ("hourhour", -2.093234863812172),+                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),+                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],+                               n = 26},+                   koData =+                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("<named-month> <day-of-month> (non ordinal)July",+                                     -3.1135153092103742),+                                    ("daymonth", -2.70805020110221),+                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),+                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),+                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),+                                    ("minuteminute", -1.8607523407150064),+                                    ("hourhour", -2.70805020110221),+                                    ("minutehour", -2.70805020110221),+                                    ("hh:mmintersect", -2.1972245773362196),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -3.1135153092103742),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.1135153092103742)],+                               n = 12}}),+       ("Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Day",+        Classifier{okData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8}}),+       ("fortnight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> and an half hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("National Patriots' Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Laylat al-Qadr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Boghi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("at the beginning|end of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("January", -1.3862943611198906),+                                    ("April", -1.3862943611198906), ("month", -0.8754687373538999)],+                               n = 4},+                   koData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.0986122886681098),+                                    ("month", -1.0986122886681098)],+                               n = 1}}),+       ("<time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.529395204760564),+                                    ("hh:mmhh:mm", -1.8971199848858813),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -2.4849066497880004),+                                    ("hourhour", -1.6964492894237302),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -3.4011973816621555),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.4011973816621555),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),+                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],+                               n = 22},+                   koData =+                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>time-of-day (latent)",+                                     -3.4657359027997265),+                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),+                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -3.4657359027997265),+                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),+                                    ("hourhour", -2.2129729343043585),+                                    ("minutehour", -1.2144441041932315),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.4657359027997265),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -2.5494451709255714),+                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),+                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",+                                     -3.0602707946915624)],+                               n = 24}}),+       ("military spelled out numbers am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("winter",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("nth <time> after <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",+                                     -0.916290731874155)],+                               n = 1}}),+       ("<named-month> <day-of-month> (non ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.42121346507630353,+                               unseen = -3.951243718581427,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.5455312716044354),+                                    ("Marchinteger (numeric)", -2.833213344056216),+                                    ("Aprilinteger (numeric)", -3.2386784521643803),+                                    ("month", -0.8407831793660099),+                                    ("Februaryinteger (numeric)", -1.9859154836690123),+                                    ("Septemberinteger (numeric)", -2.833213344056216),+                                    ("Octoberinteger (numeric)", -2.833213344056216),+                                    ("Julyinteger (numeric)", -2.1400661634962708)],+                               n = 21},+                   koData =+                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.3353749158170367),+                                    ("Marchinteger (numeric)", -2.740840023925201),+                                    ("Aprilinteger (numeric)", -2.740840023925201),+                                    ("month", -0.9490805546971459),+                                    ("from|since|after <time-of-day>integer (numeric)",+                                     -2.3353749158170367),+                                    ("Julyinteger (numeric)", -1.6422277352570913)],+                               n = 11}}),+       ("Diwali",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("last night",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|next <day-of-week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.2512917986064953),+                                    ("Wednesday", -2.2512917986064953),+                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),+                                    ("Tuesday", -1.55814461804655)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinal (digits)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.6635616461296463,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 37},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter (grain)",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("last <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)October", -1.791759469228055),+                                    ("daymonth", -1.2809338454620642),+                                    ("day (grain)intersect", -1.791759469228055),+                                    ("weekmonth", -1.791759469228055),+                                    ("week (grain)intersect", -2.1972245773362196),+                                    ("week (grain)September", -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Chhath",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Vasant Panchami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month>(ordinal) <named-month> year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)April", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Black Friday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week-end",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),+       ("Great Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maundy Thursday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("day (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.295836866004329,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 25},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("right now",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("for <duration> from <time>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -1.5040773967762742),+                                    ("dayday", -1.0986122886681098),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -1.5040773967762742)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.252762968495368),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -1.252762968495368)],+                               n = 1}}),+       ("compose by multiplication",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)powers of tens", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("between <time> and <time>",+        Classifier{okData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.832909122935104),+                                    ("hh:mmhh:mm", -0.832909122935104)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -3.7376696182833684,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.410986973710262),+                                    ("minuteminute", -1.410986973710262),+                                    ("minutehour", -1.410986973710262),+                                    ("hh:mmintersect", -1.410986973710262)],+                               n = 18}}),+       ("<month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),+                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",+                                     -2.740840023925201),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -2.3353749158170367),+                                    ("month", -0.8690378470236094),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -2.3353749158170367)],+                               n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of days",+        Classifier{okData =+                     ClassData{prior = -3.509131981127006e-2,+                               unseen = -3.4011973816621555,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 28},+                   koData =+                     ClassData{prior = -3.367295829986474, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("at the beginning|end of <week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.330733340286331,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -0.706570200892086),+                                    ("this|last|next <cycle>", -0.8209805520698302),+                                    ("about|exactly <time-of-day>", -2.70805020110221)],+                               n = 36},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Fitr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("summer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Trinity Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("dd-dd <month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)September",+                                     -1.791759469228055),+                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),+                                    ("ordinal (digits)ordinal (digits)October",+                                     -2.1972245773362196),+                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),+                                    ("month", -0.9444616088408514),+                                    ("ordinal (digits)ordinal (digits)August",+                                     -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Pentecost",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.639057329615259),+                                    ("Martin Luther King's Day", -2.639057329615259),+                                    ("Monday", -2.639057329615259), ("day", -1.1349799328389845),+                                    ("Thanksgiving Day", -2.639057329615259),+                                    ("Christmas", -2.639057329615259), ("hour", -2.639057329615259),+                                    ("winter", -2.639057329615259),+                                    ("week-end", -2.639057329615259),+                                    ("summer", -2.2335922215070942)],+                               n = 9},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("August",         Classifier{okData =
Duckling/Ranking/Classifiers/EN_GB.hs view
@@ -21,2395 +21,3044 @@ classifiers :: Classifiers classifiers   = HashMap.fromList-      [("<integer> to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)noon|midnight|EOD|end of day",-                                     -0.916290731874155),-                                    ("hour", -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.7537718023763802),-                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],-                               n = 7}}),-       ("<time> timezone",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -1.824549292051046),-                                    ("<time-of-day> am|pm", -1.6422277352570913),-                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),-                                    ("minute", -1.824549292051046)],-                               n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thursday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (numeric)",-        Classifier{okData =-                     ClassData{prior = -0.7889513094975535, unseen = -5.225746673713201,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 184},-                   koData =-                     ClassData{prior = -0.6057243655887863, unseen = -5.407171771460119,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 221}}),-       ("<duration> hence|ago",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.784189633918261,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),-                                    ("year", -2.662587827025453),-                                    ("<integer> <unit-of-duration>", -1.0531499145913523),-                                    ("a <unit-of-duration>", -2.662587827025453),-                                    ("month", -2.662587827025453),-                                    ("fortnight", -2.662587827025453)],-                               n = 18},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("noon|midnight|EOD|end of day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Father's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = -0.5596157879354228, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.6094379124341003),-                                    ("dayday", -1.0986122886681098),-                                    ("day (grain)yesterday", -1.6094379124341003)],-                               n = 4},-                   koData =-                     ClassData{prior = -0.8472978603872037, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.466337068793427),-                                    ("year (grain)Christmas", -1.8718021769015913),-                                    ("day (grain)intersect", -1.466337068793427),-                                    ("yearday", -1.8718021769015913)],-                               n = 3}}),-       ("Martin Luther King's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (20..90)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("mm/yyyy",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("integer after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.8109302162163288),-                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),-                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal or number) <named-month>",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)December", -2.1400661634962708),-                                    ("ordinal (digits)February", -2.1400661634962708),-                                    ("integer (numeric)April", -2.1400661634962708),-                                    ("month", -1.4469189829363254)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -3.4011973816621555,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)October", -2.6741486494265287),-                                    ("ordinal (digits)July", -2.6741486494265287),-                                    ("integer (numeric)September", -2.268683541318364),-                                    ("ordinal (digits)August", -2.6741486494265287),-                                    ("integer (numeric)August", -2.6741486494265287),-                                    ("ordinal (digits)April", -2.6741486494265287),-                                    ("month", -1.0647107369924282),-                                    ("integer (numeric)July", -2.268683541318364)],-                               n = 9}}),-       ("<time> <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.844007281325252e-2,-                               unseen = -4.430816798843313,-                               likelihoods =-                                 HashMap.fromList-                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("dayhour", -1.5284688499004333),-                                    ("Mondayearly morning", -3.3202283191284883),-                                    ("time-of-day (latent)tonight", -3.3202283191284883),-                                    ("hourhour", -2.339399066116762),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("todaypart of days", -3.7256934272366524),-                                    ("minutehour", -2.627081138568543),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -3.3202283191284883),-                                    ("time-of-day (latent)this <part-of-day>", -3.7256934272366524),-                                    ("Mondayin|during the <part-of-day>", -3.7256934272366524),-                                    ("intersectpart of days", -3.7256934272366524),-                                    ("intersectin|during the <part-of-day>", -3.7256934272366524),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("tomorrowpart of days", -2.339399066116762),-                                    ("hh:mmin|during the <part-of-day>", -3.0325462466767075),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("hhmm (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("yesterdaypart of days", -3.7256934272366524),-                                    ("Mondaypart of days", -3.7256934272366524)],-                               n = 29},-                   koData =-                     ClassData{prior = -2.367123614131617, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("yearhour", -2.740840023925201),-                                    ("monthhour", -2.740840023925201),-                                    ("hourhour", -2.740840023925201),-                                    ("past year (latent)in|during the <part-of-day>",-                                     -2.740840023925201),-                                    ("Februaryin|during the <part-of-day>", -2.740840023925201),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -2.740840023925201)],-                               n = 3}}),-       ("dd/mm",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -0.2876820724517809, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24}}),-       ("today",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("at <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.381875521765486e-2,-                               unseen = -4.90527477843843,-                               likelihoods =-                                 HashMap.fromList-                                   [("<time> timezone", -3.7992275112828016),-                                    ("noon|midnight|EOD|end of day", -3.7992275112828016),-                                    ("integer after|past <hour-of-day>", -3.7992275112828016),-                                    ("half after|past <hour-of-day>", -4.204692619390966),-                                    ("time-of-day (latent)", -1.7197859696029658),-                                    ("hhmm (latent)", -3.5115454388310208),-                                    ("<time-of-day> am|pm", -1.8067973465925955),-                                    ("hh:mm", -3.288401887516811),-                                    ("about|exactly <time-of-day>", -3.7992275112828016),-                                    ("hour", -1.0911773101805915),-                                    ("<time-of-day> sharp|exactly", -4.204692619390966),-                                    ("minute", -2.0074680420547466)],-                               n = 61},-                   koData =-                     ClassData{prior = -2.412933150162911, unseen = -3.2188758248682006,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -1.2321436812926323),-                                    ("hour", -1.2321436812926323)],-                               n = 6}}),-       ("December",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("absorption of , after named day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("on <date>", -2.1972245773362196),-                                    ("Wednesday", -2.6026896854443837),-                                    ("Saturday", -2.6026896854443837),-                                    ("Monday", -2.1972245773362196),-                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),-                                    ("Sunday", -2.6026896854443837)],-                               n = 10},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("September",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("tonight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("last|past|next <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.456735772821304), ("second", -2.639057329615259),-                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),-                                    ("<integer> <unit-of-duration>", -0.7827593392496325),-                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),-                                    ("minute", -2.639057329615259)],-                               n = 31},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the ides of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("on <date>",-        Classifier{okData =-                     ClassData{prior = -0.1670540846631662, unseen = -4.007333185232471,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -1.791759469228055), ("dd/mm", -3.295836866004329),-                                    ("absorption of , after named day", -2.890371757896165),-                                    ("intersect", -2.890371757896165),-                                    ("Saturday", -2.6026896854443837),-                                    ("Friday", -3.295836866004329), ("day", -0.8979415932059586),-                                    ("the <day-of-month> (ordinal)", -2.890371757896165),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -2.6026896854443837),-                                    ("hour", -3.295836866004329)],-                               n = 22},-                   koData =-                     ClassData{prior = -1.8718021769015913,-                               unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.791759469228055)],-                               n = 4}}),-       ("integer (0..19)",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.784189633918261,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 42},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),-       ("between <time-of-day> and <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -0.916290731874155),-                                    ("hh:mmhh:mm", -0.916290731874155)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -0.916290731874155),-                                    ("minutehour", -0.916290731874155)],-                               n = 3}}),-       ("Halloween",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -1.6094379124341003),-                                    ("month", -0.916290731874155),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("October",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from|since|after <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742, unseen = -4.02535169073515,-                               likelihoods =-                                 HashMap.fromList-                                   [("July", -3.3141860046725258),-                                    ("time-of-day (latent)", -2.3978952727983707),-                                    ("<time-of-day> am|pm", -2.3978952727983707),-                                    ("hh:mm", -2.3978952727983707), ("hour", -1.8101086078962516),-                                    ("month", -2.908720896564361), ("minute", -2.3978952727983707),-                                    ("August", -3.3141860046725258)],-                               n = 14},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -4.836281906951478,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.7297014486341915),-                                    ("week", -4.135166556742356),-                                    ("<day-of-month> (ordinal or number) <named-month>",-                                     -4.135166556742356),-                                    ("today", -4.135166556742356),-                                    ("intersect", -2.7488721956224653),-                                    ("second", -4.135166556742356), ("now", -3.4420193761824103),-                                    ("tomorrow", -3.7297014486341915),-                                    ("this|last|next <cycle>", -4.135166556742356),-                                    ("day", -1.995100393246085),-                                    ("time-of-day (latent)", -4.135166556742356),-                                    ("<time-of-day> am|pm", -3.7297014486341915),-                                    ("nograin", -3.4420193761824103),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -4.135166556742356),-                                    ("Christmas", -3.4420193761824103),-                                    ("hour", -2.8824035882469876),-                                    ("<datetime> - <datetime> (interval)", -2.7488721956224653),-                                    ("<time-of-day> - <time-of-day> (interval)",-                                     -2.430418464503931),-                                    ("<named-month> <day-of-month> (non ordinal)",-                                     -3.7297014486341915),-                                    ("minute", -1.6928195213731514),-                                    ("right now", -4.135166556742356),-                                    ("<month> dd-dd (interval)", -3.4420193761824103),-                                    ("dd-dd <month> (interval)", -3.7297014486341915)],-                               n = 49}}),-       ("month (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> more <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)minute (grain)", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> o'clock",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in|within|after <duration>",-        Classifier{okData =-                     ClassData{prior = -4.652001563489282e-2,-                               unseen = -4.61512051684126,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -3.2188758248682006),-                                    ("<integer> more <unit-of-duration>", -3.912023005428146),-                                    ("three-quarters of an hour", -2.995732273553991),-                                    ("<integer> + '\"", -3.2188758248682006),-                                    ("number.number hours", -3.912023005428146),-                                    ("second", -3.506557897319982), ("day", -3.2188758248682006),-                                    ("half an hour", -2.995732273553991),-                                    ("<integer> <unit-of-duration>", -1.6094379124341003),-                                    ("a <unit-of-duration>", -2.995732273553991),-                                    ("quarter of an hour", -2.995732273553991),-                                    ("hour", -2.5257286443082556),-                                    ("about|exactly <duration>", -3.912023005428146),-                                    ("<integer> and an half hour", -3.912023005428146),-                                    ("minute", -1.2729656758128873)],-                               n = 42},-                   koData =-                     ClassData{prior = -3.0910424533583156, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -1.8971199848858813),-                                    ("<integer> <unit-of-duration>", -2.3025850929940455),-                                    ("a <unit-of-duration>", -2.3025850929940455)],-                               n = 2}}),-       ("three-quarters of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Wednesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> + '\"",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half <integer> (UK style hour-of-day)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("July",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hour (grain)",-        Classifier{okData =-                     ClassData{prior = -0.8209805520698302,-                               unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),-       ("<ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),-                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",-                                     -1.466337068793427),-                                    ("quarter", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),-                                    ("quarter", -0.8109302162163288)],-                               n = 3}}),-       ("one twenty two",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("intersect",-        Classifier{okData =-                     ClassData{prior = -0.4957877464014501, unseen = -6.293419278846481,-                               likelihoods =-                                 HashMap.fromList-                                   [("<datetime> - <datetime> (interval)on <date>",-                                     -4.345658990503007),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.345658990503007),-                                    ("hourday", -3.8936738667599493),-                                    ("dayhour", -2.765208614942159),-                                    ("daymonth", -4.90527477843843),-                                    ("monthday", -5.19295685089021),-                                    ("monthyear", -3.9889840465642745),-                                    ("Tuesdaythe <day-of-month> (ordinal)", -5.598421958998375),-                                    ("Christmasyear", -5.598421958998375),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.598421958998375),-                                    ("houryear", -5.598421958998375),-                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.90527477843843),-                                    ("<time-of-day> am|pmintersect", -4.345658990503007),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -5.598421958998375),-                                    ("Marchyear", -5.598421958998375),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year",-                                     -5.19295685089021),-                                    ("intersect<time-of-day> am|pm", -5.598421958998375),-                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -5.598421958998375),-                                    ("monthhour", -5.19295685089021),-                                    ("last <day-of-week> of <time>year", -5.598421958998375),-                                    ("todayat <time-of-day>", -5.598421958998375),-                                    ("Thursday<time> timezone", -3.8936738667599493),-                                    ("dd/mm<time-of-day> am|pm", -5.598421958998375),-                                    ("this <time>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("dayday", -3.58351893845611),-                                    ("Thanksgiving Dayyear", -4.499809670330265),-                                    ("dd/mmat <time-of-day>", -5.598421958998375),-                                    ("<time> <part-of-day>at <time-of-day>", -5.598421958998375),-                                    ("Tuesdayin <named-month>", -5.598421958998375),-                                    ("tonightat <time-of-day>", -5.598421958998375),-                                    ("<time-of-day> am|pmabsorption of , after named day",-                                     -4.90527477843843),-                                    ("today<time-of-day> am|pm", -5.598421958998375),-                                    ("Februarythe <day-of-month> (ordinal)", -5.19295685089021),-                                    ("at <time-of-day><time> <part-of-day>", -5.598421958998375),-                                    ("hourhour", -4.345658990503007),-                                    ("<time-of-day> am|pmon <date>", -3.58351893845611),-                                    ("Wednesdaythis|last|next <cycle>", -5.598421958998375),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -4.0943445622221),-                                    ("dayyear", -3.1560749236291703),-                                    ("last weekend of <named-month>year", -5.598421958998375),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursdayat <time-of-day>", -5.19295685089021),-                                    ("<time-of-day> am|pmtomorrow", -4.90527477843843),-                                    ("minutehour", -4.68213122712422),-                                    ("Mother's Dayyear", -5.598421958998375),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -5.19295685089021),-                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",-                                     -3.8936738667599493),-                                    ("for <duration> from <time>December", -5.598421958998375),-                                    ("tomorrow<time-of-day> sharp|exactly", -5.598421958998375),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -5.19295685089021),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.68213122712422),-                                    ("Mondayin|during the <part-of-day>", -5.598421958998375),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.19295685089021),-                                    ("intersectin|during the <part-of-day>", -5.598421958998375),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.345658990503007),-                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -4.68213122712422),-                                    ("at <time-of-day>intersect", -5.19295685089021),-                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.598421958998375),-                                    ("dayminute", -2.924273309571846),-                                    ("from <datetime> - <datetime> (interval)on <date>",-                                     -5.19295685089021),-                                    ("<datetime> - <datetime> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.19295685089021),-                                    ("<ordinal> <cycle> of <time>year", -5.598421958998375),-                                    ("minuteday", -2.132686056198648),-                                    ("absorption of , after named dayintersect",-                                     -5.598421958998375),-                                    ("Octoberyear", -4.345658990503007),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("at <time-of-day>absorption of , after named day",-                                     -5.598421958998375),-                                    ("<day-of-month> (ordinal or number) <named-month>year",-                                     -5.598421958998375),-                                    ("year<time-of-day> am|pm", -5.598421958998375),-                                    ("Septemberyear", -5.19295685089021),-                                    ("at <time-of-day>on <date>", -4.499809670330265),-                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("Halloweenyear", -5.598421958998375),-                                    ("dayweek", -5.598421958998375),-                                    ("Thursday<time-of-day> am|pm", -5.598421958998375),-                                    ("weekyear", -5.19295685089021),-                                    ("hh:mmin|during the <part-of-day>", -4.90527477843843),-                                    ("Father's Dayyear", -5.598421958998375),-                                    ("<cycle> after|before <time><time-of-day> am|pm",-                                     -5.19295685089021),-                                    ("February<time> <part-of-day>", -5.598421958998375),-                                    ("Martin Luther King's Dayyear", -5.19295685089021),-                                    ("tomorrowat <time-of-day>", -4.90527477843843),-                                    ("between <time> and <time>on <date>", -4.90527477843843),-                                    ("Thursdayfrom|since|after <time-of-day>", -4.90527477843843),-                                    ("at <time-of-day>tomorrow", -5.19295685089021),-                                    ("tomorrow<time-of-day> am|pm", -5.598421958998375),-                                    ("in|during the <part-of-day>at <time-of-day>",-                                     -5.598421958998375),-                                    ("Labor Dayyear", -5.598421958998375),-                                    ("Februaryintersect", -5.598421958998375),-                                    ("last <cycle> of <time>year", -4.90527477843843),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -5.598421958998375),-                                    ("yearminute", -5.598421958998375),-                                    ("Black Fridayyear", -5.19295685089021)],-                               n = 201},-                   koData =-                     ClassData{prior = -0.9392802500988537, unseen = -5.983936280687191,-                               likelihoods =-                                 HashMap.fromList-                                   [("in <named-month>year", -5.288267030694535),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -5.288267030694535),-                                    ("hourday", -5.288267030694535),-                                    ("<named-month> <day-of-month> (non ordinal)July",-                                     -5.288267030694535),-                                    ("dayhour", -2.890371757896165),-                                    ("daymonth", -3.2088254890146994),-                                    ("monthday", -4.882801922586371),-                                    ("monthyear", -4.59511985013459),-                                    ("intersecthh:mm", -5.288267030694535),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.288267030694535),-                                    ("houryear", -5.288267030694535),-                                    ("from <time-of-day> - <time-of-day> (interval)July",-                                     -5.288267030694535),-                                    ("until <time-of-day><time-of-day> am|pm", -5.288267030694535),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.59511985013459),-                                    ("<time-of-day> am|pmintersect", -4.035504062199167),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.37197629882038),-                                    ("from|since|after <time-of-day>on <date>", -4.37197629882038),-                                    ("July<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("absorption of , after named dayJuly", -4.882801922586371),-                                    ("monthhour", -5.288267030694535),-                                    ("hourmonth", -4.59511985013459),-                                    ("todayat <time-of-day>", -5.288267030694535),-                                    ("from|since|after <time-of-day>July", -5.288267030694535),-                                    ("dayday", -4.882801922586371),-                                    ("dd/mmat <time-of-day>", -4.882801922586371),-                                    ("<time-of-day> am|pmon <date>", -4.035504062199167),-                                    ("Thursdaydd/mm", -5.288267030694535),-                                    ("dayyear", -4.035504062199167),-                                    ("Thursdayat <time-of-day>", -4.035504062199167),-                                    ("<integer> to|till|before <hour-of-day>September",-                                     -5.288267030694535),-                                    ("monthminute", -5.288267030694535),-                                    ("<time-of-day> am|pmtomorrow", -5.288267030694535),-                                    ("Thursdayhh:mm", -4.37197629882038),-                                    ("August<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("Fridayyear", -4.882801922586371),-                                    ("minutemonth", -3.4965075614664802),-                                    ("Sundayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.882801922586371),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("Aprilyear", -5.288267030694535),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.288267030694535),-                                    ("dd/mm<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("<duration> after|before|from <time>December",-                                     -5.288267030694535),-                                    ("yesterday<time-of-day> am|pm", -5.288267030694535),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -4.37197629882038),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -5.288267030694535),-                                    ("until <time-of-day>on <date>", -4.59511985013459),-                                    ("at <time-of-day>intersect", -4.882801922586371),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("dayminute", -2.7625383863862796),-                                    ("intersectSeptember", -3.784189633918261),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("minuteday", -2.3704962986102562),-                                    ("absorption of , after named dayintersect",-                                     -5.288267030694535),-                                    ("Februaryin|during the <part-of-day>", -5.288267030694535),-                                    ("week-endin <named-month>", -5.288267030694535),-                                    ("Octoberyear", -5.288267030694535),-                                    ("from|since|after <time-of-day>year", -5.288267030694535),-                                    ("yearhh:mm", -5.288267030694535),-                                    ("hh:mmon <date>", -3.784189633918261),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -5.288267030694535),-                                    ("absorption of , after named daySeptember", -4.37197629882038),-                                    ("on <date>September", -4.882801922586371),-                                    ("at <time-of-day>on <date>", -4.882801922586371),-                                    ("dayweek", -5.288267030694535),-                                    ("Thursday<time-of-day> am|pm", -4.882801922586371),-                                    ("absorption of , after named dayFebruary", -4.37197629882038),-                                    ("July<integer> to|till|before <hour-of-day>",-                                     -5.288267030694535),-                                    ("tomorrowat <time-of-day>", -5.288267030694535),-                                    ("<integer> to|till|before <hour-of-day>July",-                                     -5.288267030694535),-                                    ("Thursdayfrom|since|after <time-of-day>", -3.6788291182604347),-                                    ("tomorrow<time-of-day> am|pm", -5.288267030694535),-                                    ("Tuesdayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("yearminute", -5.288267030694535)],-                               n = 129}}),-       ("one eleven",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("after lunch/work/school",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("early morning",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <number> (implicit minutes)",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.3184537311185346),-                                    ("integer (0..19)", -1.2992829841302609)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.16251892949777494),-                                    ("integer (0..19)", -1.8971199848858813)],-                               n = 18}}),-       ("<ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -2.0149030205422647),-                                    ("quarteryear", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",-                                     -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",-                                     -2.0149030205422647),-                                    ("weekmonth", -1.6094379124341003),-                                    ("ordinal (digits)quarter (grain)year", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",-                                     -2.0149030205422647)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("year (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.1354942159291497,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 21},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -1.0116009116784799,-                               unseen = -3.6375861597263857,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -2.001480000210124),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("hh:mmhh:mm", -2.001480000210124),-                                    ("dayday", -2.512305623976115),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),-                                    ("hourhour", -2.512305623976115),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.45198512374305727,-                               unseen = -3.912023005428146,-                               likelihoods =-                                 HashMap.fromList-                                   [("hourday", -3.1986731175506815),-                                    ("dayhour", -2.793208009442517),-                                    ("<day-of-month> (ordinal)time-of-day (latent)",-                                     -3.1986731175506815),-                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),-                                    ("minuteminute", -2.793208009442517),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.793208009442517),-                                    ("dayday", -3.1986731175506815),-                                    ("hourhour", -2.505525936990736),-                                    ("dayyear", -3.1986731175506815),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)past year (latent)",-                                     -3.1986731175506815),-                                    ("minutehour", -2.2823823856765264),-                                    ("hh:mmintersect", -2.793208009442517),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<time-of-day> am|pm",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",-                                     -3.1986731175506815)],-                               n = 14}}),-       ("Saturday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -1.7346010553881064),-                                    ("weekmonth", -1.7346010553881064),-                                    ("week (grain)October", -1.7346010553881064),-                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",-                                     -1.7346010553881064),-                                    ("weekday", -1.2237754316221157)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("number.number hours",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.6094379124341003),-                                    ("hh:mmhh:mm", -1.6094379124341003),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),-                                    ("hourhour", -2.3025850929940455),-                                    ("hourminute", -2.3025850929940455),-                                    ("time-of-day (latent)<time-of-day> sharp|exactly",-                                     -2.70805020110221),-                                    ("time-of-day (latent)hh:mm", -2.70805020110221),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.0149030205422647),-                                    ("hourhour", -1.791759469228055),-                                    ("minutehour", -1.6094379124341003),-                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],-                               n = 9}}),-       ("integer 21..99",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),-                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],-                               n = 4}}),-       ("yyyy-mm-dd",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -1.6094379124341003,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("Monday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("dd/mm/yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("yesterday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<ordinal> quarter <year>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh:mm:ss",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<hour-of-day> <integer>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),-                                    ("hour", -0.9808292530117262),-                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>integer (numeric)",-                                     -1.0986122886681098),-                                    ("hour", -1.0986122886681098)],-                               n = 1}}),-       ("nth <time> of <time>",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.9808292530117262),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -2.0794415416798357),-                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",-                                     -1.6739764335716716),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",-                                     -1.6739764335716716)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.5649493574615367,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -1.0986122886681098),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",-                                     -1.791759469228055),-                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",-                                     -1.3862943611198906)],-                               n = 3}}),-       ("Valentine's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("April",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("end of month",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("week (grain)",-        Classifier{okData =-                     ClassData{prior = -8.004270767353637e-2,-                               unseen = -3.6375861597263857,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 36},-                   koData =-                     ClassData{prior = -2.5649493574615367,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("<part-of-day> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.6094379124341003),-                                    ("hourday", -0.916290731874155),-                                    ("part of daysthe <day-of-month> (ordinal)",-                                     -1.6094379124341003),-                                    ("part of daysthe <day-of-month> (number)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("past year (latent)",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 2}}),-       ("six thirty six a.m.",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -1.252762968495368),-                                    ("one twenty two", -0.8472978603872037),-                                    ("one eleven", -1.252762968495368)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("now",-        Classifier{okData =-                     ClassData{prior = -0.15415067982725836,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -1.9459101490553135,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("<day-of-month> (ordinal or number) of <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.0910424533583156,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)July", -2.3513752571634776),-                                    ("ordinals (first..twentieth,thirtieth,...)March",-                                     -2.3513752571634776),-                                    ("ordinal (digits)February", -2.3513752571634776),-                                    ("integer (numeric)February", -1.9459101490553135),-                                    ("month", -0.9650808960435872),-                                    ("ordinal (digits)March", -2.3513752571634776),-                                    ("integer (numeric)July", -2.3513752571634776)],-                               n = 7},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)February", -1.5040773967762742),-                                    ("month", -1.5040773967762742)],-                               n = 1}}),-       ("this <part-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.6931471805599453),-                                    ("part of days", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Friday",-        Classifier{okData =-                     ClassData{prior = -0.3677247801253174,-                               unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("in|during the <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -8.701137698962981e-2,-                               unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("early morning", -2.5257286443082556),-                                    ("hour", -0.7339691750802004),-                                    ("part of days", -0.8209805520698302)],-                               n = 11},-                   koData =-                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.916290731874155),-                                    ("part of days", -0.916290731874155)],-                               n = 1}}),-       ("tomorrow",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh(:mm) - <time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this|last|next <cycle>",-        Classifier{okData =-                     ClassData{prior = -0.15822400521489416,-                               unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.5488132906176655),-                                    ("month (grain)", -2.995732273553991),-                                    ("year (grain)", -1.817077277212345),-                                    ("week (grain)", -1.5488132906176655),-                                    ("quarter", -2.772588722239781), ("year", -1.817077277212345),-                                    ("month", -2.995732273553991),-                                    ("quarter (grain)", -2.772588722239781)],-                               n = 35},-                   koData =-                     ClassData{prior = -1.9218125974762528,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.4816045409242156),-                                    ("week (grain)", -1.4816045409242156),-                                    ("day", -1.9924301646902063),-                                    ("day (grain)", -1.9924301646902063)],-                               n = 6}}),-       ("Mother's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Eve",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -2.1972245773362196),-                                    ("end of month", -2.1972245773362196),-                                    ("time-of-day (latent)", -2.1972245773362196),-                                    ("<time-of-day> am|pm", -2.1972245773362196),-                                    ("hh:mm", -2.1972245773362196), ("hour", -1.791759469228055),-                                    ("month", -2.1972245773362196), ("minute", -1.791759469228055)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2006706954621511,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinals (first..twentieth,thirtieth,...)",-                                     -1.7047480922384253),-                                    ("ordinal (digits)", -0.2006706954621511)],-                               n = 9},-                   koData =-                     ClassData{prior = -1.7047480922384253,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],-                               n = 2}}),-       ("last weekend of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),-                                    ("month", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (number)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("fractional number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -3.044522437723423,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 19}}),-       ("Sunday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("February",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("minute (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1}}),-       ("time-of-day (latent)",-        Classifier{okData =-                     ClassData{prior = -0.5315058290035293,-                               unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.12136085700426748),-                                    ("integer (0..19)", -2.3025850929940455)],-                               n = 67},-                   koData =-                     ClassData{prior = -0.8860508466844369,-                               unseen = -3.9318256327243257,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.10536051565782628),-                                    ("integer (0..19)", -2.8134107167600364),-                                    ("integer 21..99", -3.2188758248682006)],-                               n = 47}}),-       ("year",-        Classifier{okData =-                     ClassData{prior = -0.2578291093020998, unseen = -3.58351893845611,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 34},-                   koData =-                     ClassData{prior = -1.4816045409242156,-                               unseen = -2.4849066497880004,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 10}}),-       ("last <day-of-week> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.916290731874155),-                                    ("SundayMarch", -1.6094379124341003),-                                    ("MondayMarch", -1.6094379124341003),-                                    ("Sundayintersect", -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.1479201300766222,-                               unseen = -5.0875963352323845,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.4423470353692043),-                                    ("integer (0..19)year (grain)", -3.289644895756408),-                                    ("integer (numeric)day (grain)", -2.6835090921860925),-                                    ("integer (0..19)second (grain) ", -3.6951100038645723),-                                    ("integer (0..19)hour (grain)", -3.001962823304627),-                                    ("second", -3.289644895756408),-                                    ("integer (numeric)second (grain) ", -3.982792076316353),-                                    ("integer (numeric)year (grain)", -3.6951100038645723),-                                    ("day", -2.4423470353692043), ("year", -2.8841797876482436),-                                    ("integer (numeric)week (grain)", -3.001962823304627),-                                    ("integer (0..19)month (grain)", -3.4719664525503626),-                                    ("hour", -2.5964977151964628), ("month", -3.1354942159291497),-                                    ("integer (numeric)minute (grain)", -3.1354942159291497),-                                    ("integer (0..19)minute (grain)", -3.001962823304627),-                                    ("integer (numeric)month (grain)", -3.982792076316353),-                                    ("minute", -2.4423470353692043),-                                    ("integer (numeric)hour (grain)", -3.4719664525503626),-                                    ("integer (0..19)day (grain)", -3.6951100038645723),-                                    ("integer (0..19)week (grain)", -3.1354942159291497)],-                               n = 69},-                   koData =-                     ClassData{prior = -1.984131361875511, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),-                                    ("integer (numeric)hour (grain)", -1.4087672169719492),-                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],-                               n = 11}}),-       ("hhmm (latent)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = -0.2929871246814741,-                               unseen = -5.3230099791384085,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer after|past <hour-of-day>", -3.9318256327243257),-                                    ("at <time-of-day>", -2.2270775404859005),-                                    ("from|since|after <time-of-day>", -3.708682081410116),-                                    ("<time-of-day> o'clock", -4.219507705176107),-                                    ("half after|past <hour-of-day>", -4.219507705176107),-                                    ("time-of-day (latent)", -1.7346010553881064),-                                    ("hhmm (latent)", -4.624972813284271),-                                    ("hh:mm", -2.2735975561207935),-                                    ("quarter after|past <hour-of-day>", -4.624972813284271),-                                    ("about|exactly <time-of-day>", -4.624972813284271),-                                    ("until <time-of-day>", -3.9318256327243257),-                                    ("hour", -1.2237754316221157),-                                    ("<time-of-day> sharp|exactly", -4.624972813284271),-                                    ("minute", -1.7346010553881064)],-                               n = 94},-                   koData =-                     ClassData{prior = -1.3705460041517514, unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),-                                    ("from|since|after <time-of-day>", -3.283414346005772),-                                    ("<hour-of-day> <integer>", -3.6888794541139363),-                                    ("time-of-day (latent)", -1.0498221244986778),-                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],-                               n = 32}}),-       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),-                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thanksgiving Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("a <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.5753641449035618,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.0794415416798357),-                                    ("year (grain)", -2.772588722239781),-                                    ("second", -2.772588722239781),-                                    ("week (grain)", -2.0794415416798357),-                                    ("day", -2.0794415416798357),-                                    ("minute (grain)", -2.772588722239781),-                                    ("year", -2.772588722239781),-                                    ("second (grain) ", -2.772588722239781),-                                    ("minute", -2.772588722239781),-                                    ("day (grain)", -2.0794415416798357)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.8266785731844679, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour (grain)", -1.7227665977411035),-                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),-                                    ("quarter (grain)", -1.9459101490553135)],-                               n = 7}}),-       ("hh:mm",-        Classifier{okData =-                     ClassData{prior = -5.129329438755058e-2,-                               unseen = -4.07753744390572,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 57},-                   koData =-                     ClassData{prior = -2.995732273553991, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("quarter of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("second (grain) ",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinals (first..twentieth,thirtieth,...)",-        Classifier{okData =-                     ClassData{prior = -6.899287148695143e-2,-                               unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},-                   koData =-                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("quarter after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.252762968495368),-                                    ("dayday", -0.8472978603872037),-                                    ("day (grain)yesterday", -1.252762968495368)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("about|exactly <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.639057329615259),-                                    ("hh(:mm) - <time-of-day> am|pm", -2.639057329615259),-                                    ("this|last|next <cycle>", -2.639057329615259),-                                    ("day", -2.2335922215070942),-                                    ("time-of-day (latent)", -2.639057329615259),-                                    ("hhmm (latent)", -2.2335922215070942),-                                    ("<time-of-day> am|pm", -2.639057329615259),-                                    ("hour", -1.9459101490553135),-                                    ("next <time>", -2.639057329615259),-                                    ("this|next <day-of-week>", -2.639057329615259),-                                    ("minute", -2.2335922215070942)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("dd/mm", -2.0794415416798357), ("day", -2.0794415416798357),-                                    ("time-of-day (latent)", -2.0794415416798357),-                                    ("hour", -2.0794415416798357)],-                               n = 2}}),-       ("intersect by \",\", \"of\", \"from\", \"'s\"",-        Classifier{okData =-                     ClassData{prior = -0.48130318449966897,-                               unseen = -5.170483995038151,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayhour", -3.2188758248682006),-                                    ("daymonth", -3.2188758248682006),-                                    ("<named-month> <day-of-month> (non ordinal)Friday",-                                     -4.471638793363569),-                                    ("Friday<named-month> <day-of-month> (non ordinal)",-                                     -3.7784916128036232),-                                    ("Wednesdayintersect", -4.471638793363569),-                                    ("Labor Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Black Fridaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.471638793363569),-                                    ("<part-of-day> of <time>February", -4.471638793363569),-                                    ("Saturday<time-of-day> am|pm", -4.471638793363569),-                                    ("Martin Luther King's Daythis|last|next <cycle>",-                                     -4.471638793363569),-                                    ("on <date><time-of-day> am|pm", -4.471638793363569),-                                    ("hourmonth", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.471638793363569),-                                    ("dayday", -2.5998366164619773),-                                    ("the <day-of-month> (ordinal)February", -4.0661736852554045),-                                    ("WednesdayOctober", -4.471638793363569),-                                    ("Wednesdaythis|last|next <cycle>", -4.0661736852554045),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -3.5553480614894135),-                                    ("dayyear", -2.8622008809294686),-                                    ("Saturday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.471638793363569),-                                    ("Thursdayhh:mm", -4.0661736852554045),-                                    ("Thanksgiving Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Memorial Daythis|last|next <cycle>", -4.471638793363569),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("TuesdayOctober", -4.471638793363569),-                                    ("the <day-of-month> (ordinal)March", -4.471638793363569),-                                    ("Mondaythis|last|next <cycle>", -4.471638793363569),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.0661736852554045),-                                    ("Fridayintersect", -4.471638793363569),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -3.7784916128036232),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.5553480614894135),-                                    ("Tuesdaythis|last|next <cycle>", -4.471638793363569),-                                    ("Sunday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayminute", -2.6798793241355137),-                                    ("intersectyear", -4.471638793363569),-                                    ("minuteday", -3.5553480614894135),-                                    ("this|last|next <cycle>Sunday", -4.471638793363569),-                                    ("Sundaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersectintersect", -4.471638793363569),-                                    ("weekday", -4.471638793363569),-                                    ("dayweek", -3.373026504695459),-                                    ("Thursday<time-of-day> am|pm", -4.471638793363569),-                                    ("Monday<named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -4.0661736852554045)],-                               n = 55},-                   koData =-                     ClassData{prior = -0.9622758451159785, unseen = -4.897839799950911,-                               likelihoods =-                                 HashMap.fromList-                                   [("week-endJuly", -4.197201947661808),-                                    ("week-endOctober", -3.5040547671018634),-                                    ("daymonth", -1.9999773703255892),-                                    ("TuesdaySeptember", -4.197201947661808),-                                    ("Wednesdayintersect", -4.197201947661808),-                                    ("hourmonth", -3.0985896589936988),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.197201947661808),-                                    ("Fridaythis|last|next <cycle>", -4.197201947661808),-                                    ("SundayFebruary", -4.197201947661808),-                                    ("WednesdayOctober", -4.197201947661808),-                                    ("week-endintersect", -4.197201947661808),-                                    ("dayyear", -4.197201947661808),-                                    ("FridayJuly", -3.791736839553644),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.197201947661808),-                                    ("FridaySeptember", -4.197201947661808),-                                    ("WednesdayFebruary", -4.197201947661808),-                                    ("minutemonth", -3.2809112157876537),-                                    ("SundayMarch", -4.197201947661808),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.197201947661808),-                                    ("MondayFebruary", -3.791736839553644),-                                    ("Fridayintersect", -4.197201947661808),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.791736839553644),-                                    ("dayminute", -2.810907586541918),-                                    ("SaturdaySeptember", -4.197201947661808),-                                    ("intersectSeptember", -3.2809112157876537),-                                    ("MondayMarch", -4.197201947661808),-                                    ("on <date>September", -3.791736839553644),-                                    ("intersectintersect", -4.197201947661808),-                                    ("Tuesdayintersect", -4.197201947661808),-                                    ("Sundayintersect", -4.197201947661808)],-                               n = 34}}),-       ("last <time>",-        Classifier{okData =-                     ClassData{prior = -0.6286086594223742, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("Father's Day", -2.6026896854443837),-                                    ("Martin Luther King's Day", -2.6026896854443837),-                                    ("Memorial Day", -2.6026896854443837),-                                    ("Mother's Day", -2.6026896854443837),-                                    ("day", -1.2163953243244932), ("Sunday", -2.6026896854443837),-                                    ("Thanksgiving Day", -2.6026896854443837),-                                    ("hour", -2.6026896854443837), ("Tuesday", -2.6026896854443837),-                                    ("week-end", -2.6026896854443837)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.7621400520468967, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Monday", -2.5257286443082556), ("day", -2.120263536200091),-                                    ("Sunday", -2.5257286443082556), ("hour", -1.4271163556401458),-                                    ("week-end", -1.4271163556401458)],-                               n = 7}}),-       ("March",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<named-month>|<named-day> <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Octoberordinal (digits)", -2.120263536200091),-                                    ("Thursdayordinal (digits)", -2.5257286443082556),-                                    ("day", -2.120263536200091),-                                    ("Augustordinal (digits)", -2.5257286443082556),-                                    ("Marchordinals (first..twentieth,thirtieth,...)",-                                     -2.120263536200091),-                                    ("Tuesdayordinal (digits)", -2.5257286443082556),-                                    ("month", -1.2729656758128873),-                                    ("Marchordinal (digits)", -2.5257286443082556)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("from|since|after <time-of-day>ordinal (digits)",-                                     -1.8718021769015913),-                                    ("Augustordinal (digits)", -1.8718021769015913),-                                    ("month", -1.466337068793427)],-                               n = 2}}),-       ("Labor Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Christmas",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("until <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -2.3025850929940455),-                                    ("<time-of-day> am|pm", -1.6094379124341003),-                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),-                                    ("minute", -1.3862943611198906)],-                               n = 6},-                   koData =-                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.7227665977411035),-                                    ("yesterday", -2.2335922215070942),-                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),-                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],-                               n = 10}}),-       ("dd.mm.yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<duration> after|before|from <time>",-        Classifier{okData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("a <unit-of-duration>now", -2.70805020110221),-                                    ("a <unit-of-duration>Christmas", -2.70805020110221),-                                    ("<integer> <unit-of-duration>today", -2.70805020110221),-                                    ("daysecond", -2.70805020110221),-                                    ("a <unit-of-duration>right now", -2.70805020110221),-                                    ("minutenograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>Christmas", -2.70805020110221),-                                    ("secondnograin", -2.70805020110221),-                                    ("yearday", -2.0149030205422647),-                                    ("daynograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>now", -2.3025850929940455)],-                               n = 7},-                   koData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -2.3978952727983707),-                                    ("dayday", -1.9924301646902063),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -2.3978952727983707)],-                               n = 3}}),-       ("Independence Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("decimal number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("next <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5263605246161616,-                               likelihoods =-                                 HashMap.fromList-                                   [("Martin Luther King's Day", -2.803360380906535),-                                    ("Halloween", -2.803360380906535),-                                    ("Wednesday", -2.803360380906535),-                                    ("Memorial Day", -2.803360380906535),-                                    ("Monday", -2.803360380906535),-                                    ("Mother's Day", -2.803360380906535),-                                    ("day", -1.0986122886681098),-                                    ("Thanksgiving Day", -2.803360380906535),-                                    ("March", -2.803360380906535), ("month", -2.803360380906535),-                                    ("Tuesday", -2.1102132003465894)],-                               n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.4849066497880004,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> sharp|exactly",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -2.1400661634962708),-                                    ("time-of-day (latent)", -2.1400661634962708),-                                    ("hhmm (latent)", -2.1400661634962708),-                                    ("<time-of-day> am|pm", -2.1400661634962708),-                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),-                                    ("minute", -1.4469189829363254)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("negative numbers",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -7.696104113612832e-2),-                                    ("integer (0..19)", -2.6026896854443837)],-                               n = 25}}),-       ("about|exactly <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("half an hour", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time> before last|after next",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday", -1.8718021769015913),-                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),-                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by the end of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("this|last|next <cycle>", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hhmm (military) am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersecthh:mm", -3.1918471524802814),-                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),-                                    ("minuteminute", -1.457246097092175),-                                    ("hh:mmhh:mm", -2.093234863812172),-                                    ("dayday", -3.1918471524802814),-                                    ("hourhour", -2.093234863812172),-                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),-                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],-                               n = 26},-                   koData =-                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("<named-month> <day-of-month> (non ordinal)July",-                                     -3.1135153092103742),-                                    ("daymonth", -2.70805020110221),-                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),-                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),-                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),-                                    ("minuteminute", -1.8607523407150064),-                                    ("hourhour", -2.70805020110221),-                                    ("minutehour", -2.70805020110221),-                                    ("hh:mmintersect", -2.1972245773362196),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -3.1135153092103742),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.1135153092103742)],-                               n = 12}}),-       ("Tuesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Day",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),-       ("fortnight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> and an half hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -1.252762968495368), ("March", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.8472978603872037),-                                    ("month", -0.8472978603872037)],-                               n = 2}}),-       ("<time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.529395204760564),-                                    ("hh:mmhh:mm", -1.8971199848858813),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -2.4849066497880004),-                                    ("hourhour", -1.6964492894237302),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -3.4011973816621555),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.4011973816621555),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),-                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],-                               n = 22},-                   koData =-                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>time-of-day (latent)",-                                     -3.4657359027997265),-                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),-                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -3.4657359027997265),-                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),-                                    ("hourhour", -2.2129729343043585),-                                    ("minutehour", -1.2144441041932315),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.4657359027997265),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -2.5494451709255714),-                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),-                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",-                                     -3.0602707946915624)],-                               n = 24}}),-       ("military spelled out numbers am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods =-                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("winter",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("nth <time> after <time>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",-                                     -0.916290731874155)],-                               n = 1}}),-       ("<named-month> <day-of-month> (non ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.42121346507630353,-                               unseen = -3.951243718581427,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.5455312716044354),-                                    ("Marchinteger (numeric)", -2.833213344056216),-                                    ("Aprilinteger (numeric)", -3.2386784521643803),-                                    ("month", -0.8407831793660099),-                                    ("Februaryinteger (numeric)", -1.9859154836690123),-                                    ("Septemberinteger (numeric)", -2.833213344056216),-                                    ("Octoberinteger (numeric)", -2.833213344056216),-                                    ("Julyinteger (numeric)", -2.1400661634962708)],-                               n = 21},-                   koData =-                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.3353749158170367),-                                    ("Marchinteger (numeric)", -2.740840023925201),-                                    ("Aprilinteger (numeric)", -2.740840023925201),-                                    ("month", -0.9490805546971459),-                                    ("from|since|after <time-of-day>integer (numeric)",-                                     -2.3353749158170367),-                                    ("Julyinteger (numeric)", -1.6422277352570913)],-                               n = 11}}),-       ("this|next <day-of-week>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.2512917986064953),-                                    ("Wednesday", -2.2512917986064953),-                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),-                                    ("Tuesday", -1.55814461804655)],-                               n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinal (digits)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5553480614894135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 33},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter (grain)",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("last <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)October", -1.791759469228055),-                                    ("daymonth", -1.2809338454620642),-                                    ("day (grain)intersect", -1.791759469228055),-                                    ("weekmonth", -1.791759469228055),-                                    ("week (grain)intersect", -2.1972245773362196),-                                    ("week (grain)September", -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month>(ordinal) <named-month> year",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)April", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Black Friday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Labor Day",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("week-end",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7}}),-       ("day (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.2188758248682006,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("right now",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("for <duration> from <time>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -1.5040773967762742),-                                    ("dayday", -1.0986122886681098),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -1.5040773967762742)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.252762968495368),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -1.252762968495368)],-                               n = 1}}),-       ("between <time> and <time>",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.0116009116784799),-                                    ("hh:mmhh:mm", -1.0116009116784799)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.4469189829363254),-                                    ("minuteminute", -1.4469189829363254),-                                    ("minutehour", -1.4469189829363254),-                                    ("hh:mmintersect", -1.4469189829363254)],-                               n = 6}}),-       ("<month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),-                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",-                                     -2.740840023925201),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -2.3353749158170367),-                                    ("month", -0.8690378470236094),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -2.3353749158170367)],-                               n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of days",-        Classifier{okData =-                     ClassData{prior = -4.0821994520255166e-2,-                               unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -3.2188758248682006,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("summer",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("dd-dd <month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)September",-                                     -1.791759469228055),-                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),-                                    ("ordinal (digits)ordinal (digits)October",-                                     -2.1972245773362196),-                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),-                                    ("month", -0.9444616088408514),-                                    ("ordinal (digits)ordinal (digits)August",-                                     -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.5257286443082556),-                                    ("Martin Luther King's Day", -2.5257286443082556),-                                    ("Monday", -2.5257286443082556), ("day", -1.1394342831883648),-                                    ("Thanksgiving Day", -2.5257286443082556),-                                    ("hour", -2.5257286443082556), ("winter", -2.5257286443082556),-                                    ("week-end", -2.5257286443082556),-                                    ("summer", -2.120263536200091)],-                               n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("August",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}})]+      [("Bhai Dooj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)noon|midnight|EOD|end of day",+                                     -0.916290731874155),+                                    ("hour", -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.7537718023763802),+                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],+                               n = 7}}),+       ("<time> timezone",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -1.824549292051046),+                                    ("<time-of-day> am|pm", -1.6422277352570913),+                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),+                                    ("minute", -1.824549292051046)],+                               n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thursday",+        Classifier{okData =+                     ClassData{prior = -9.53101798043249e-2,+                               unseen = -3.4657359027997265,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 30},+                   koData =+                     ClassData{prior = -2.3978952727983707,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("integer (numeric)",+        Classifier{okData =+                     ClassData{prior = -0.6366143532277309, unseen = -5.648974238161206,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 282},+                   koData =+                     ClassData{prior = -0.7530684850340607, unseen = -5.53338948872752,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 251}}),+       ("<duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = -5.406722127027582e-2,+                               unseen = -3.784189633918261,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),+                                    ("year", -2.662587827025453),+                                    ("<integer> <unit-of-duration>", -1.0531499145913523),+                                    ("a <unit-of-duration>", -2.662587827025453),+                                    ("month", -2.662587827025453),+                                    ("fortnight", -2.662587827025453)],+                               n = 18},+                   koData =+                     ClassData{prior = -2.9444389791664407,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("year", -1.5040773967762742),+                                    ("<integer> <unit-of-duration>", -1.5040773967762742)],+                               n = 1}}),+       ("noon|midnight|EOD|end of day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Father's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.6739764335716716),+                                    ("dayday", -1.1631508098056809),+                                    ("day (grain)yesterday", -1.6739764335716716)],+                               n = 4},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.6739764335716716),+                                    ("year (grain)Christmas", -2.0794415416798357),+                                    ("dayday", -2.0794415416798357),+                                    ("day (grain)intersect", -1.6739764335716716),+                                    ("day (grain)Easter Sunday", -2.0794415416798357),+                                    ("yearday", -2.0794415416798357)],+                               n = 4}}),+       ("Easter Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Navaratri",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Martin Luther King's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("integer (20..90)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Shemini Atzeret",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ramadan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lazarus Saturday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect 2 numbers",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("compose by multiplicationinteger (0..19)",+                                     -0.2231435513142097)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("powers of tensinteger (0..19)", -0.2231435513142097)],+                               n = 3}}),+       ("mm/yyyy",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("integer after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.8109302162163288),+                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),+                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom HaShoah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal or number) <named-month>",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)December", -2.1400661634962708),+                                    ("ordinal (digits)February", -2.1400661634962708),+                                    ("integer (numeric)April", -2.1400661634962708),+                                    ("month", -1.4469189829363254)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.4011973816621555,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)October", -2.6741486494265287),+                                    ("ordinal (digits)July", -2.6741486494265287),+                                    ("integer (numeric)September", -2.268683541318364),+                                    ("ordinal (digits)August", -2.6741486494265287),+                                    ("integer (numeric)August", -2.6741486494265287),+                                    ("ordinal (digits)April", -2.6741486494265287),+                                    ("month", -1.0647107369924282),+                                    ("integer (numeric)July", -2.268683541318364)],+                               n = 9}}),+       ("<time> <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -9.237332013101517e-2,+                               unseen = -4.48863636973214,+                               likelihoods =+                                 HashMap.fromList+                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("dayhour", -1.4816045409242156),+                                    ("Mondayearly morning", -3.378724525810097),+                                    ("time-of-day (latent)tonight", -3.378724525810097),+                                    ("hourhour", -2.3978952727983707),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("todaypart of days", -3.784189633918261),+                                    ("minutehour", -2.6855773452501515),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -3.378724525810097),+                                    ("time-of-day (latent)this <part-of-day>", -3.784189633918261),+                                    ("Mondayin|during the <part-of-day>", -3.784189633918261),+                                    ("intersectpart of days", -3.784189633918261),+                                    ("intersectin|during the <part-of-day>", -3.784189633918261),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("tomorrowpart of days", -2.3978952727983707),+                                    ("hh:mmin|during the <part-of-day>", -3.0910424533583156),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("hhmm (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("yesterdaypart of days", -3.378724525810097),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("Mondaypart of days", -3.784189633918261)],+                               n = 31},+                   koData =+                     ClassData{prior = -2.4277482359480516,+                               unseen = -3.4965075614664802,+                               likelihoods =+                                 HashMap.fromList+                                   [("yearhour", -2.772588722239781),+                                    ("monthhour", -2.772588722239781),+                                    ("hourhour", -2.772588722239781),+                                    ("year (latent)in|during the <part-of-day>",+                                     -2.772588722239781),+                                    ("Februaryin|during the <part-of-day>", -2.772588722239781),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -2.772588722239781)],+                               n = 3}}),+       ("dd/mm",+        Classifier{okData =+                     ClassData{prior = -1.2685113254635072,+                               unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},+                   koData =+                     ClassData{prior = -0.33024168687057687,+                               unseen = -3.2188758248682006,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 23}}),+       ("today",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("at <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.961215868968717e-2,+                               unseen = -4.948759890378168,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time> timezone", -3.8430301339411947),+                                    ("noon|midnight|EOD|end of day", -3.8430301339411947),+                                    ("integer after|past <hour-of-day>", -3.8430301339411947),+                                    ("half after|past <hour-of-day>", -4.248495242049359),+                                    ("time-of-day (latent)", -1.6835458845878222),+                                    ("hhmm (latent)", -3.5553480614894135),+                                    ("<time-of-day> am|pm", -1.8061482066801546),+                                    ("hh:mm", -3.332204510175204),+                                    ("about|exactly <time-of-day>", -3.8430301339411947),+                                    ("hour", -1.0704414117014134),+                                    ("<time-of-day> sharp|exactly", -4.248495242049359),+                                    ("minute", -2.05127066471314)],+                               n = 64},+                   koData =+                     ClassData{prior = -2.456735772821304, unseen = -3.2188758248682006,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -1.2321436812926323),+                                    ("hour", -1.2321436812926323)],+                               n = 6}}),+       ("December",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("absorption of , after named day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("on <date>", -2.1972245773362196),+                                    ("Wednesday", -2.6026896854443837),+                                    ("Saturday", -2.6026896854443837),+                                    ("Monday", -2.1972245773362196),+                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),+                                    ("Sunday", -2.6026896854443837)],+                               n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("September",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("tonight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|past|next <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.2626798770413155,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.456735772821304), ("second", -2.639057329615259),+                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),+                                    ("<integer> <unit-of-duration>", -0.7827593392496325),+                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),+                                    ("minute", -2.639057329615259)],+                               n = 31},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the ides of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("on <date>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -4.204692619390966,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -1.4816045409242156),+                                    ("dd/mm", -3.4965075614664802),+                                    ("absorption of , after named day", -3.0910424533583156),+                                    ("intersect", -3.0910424533583156),+                                    ("Saturday", -2.803360380906535),+                                    ("Friday", -3.4965075614664802), ("day", -0.8574502318512216),+                                    ("the <day-of-month> (ordinal)", -3.0910424533583156),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.803360380906535),+                                    ("hour", -3.4965075614664802)],+                               n = 28},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -1.791759469228055)],+                               n = 4}}),+       ("integer (0..19)",+        Classifier{okData =+                     ClassData{prior = -0.11122563511022437,+                               unseen = -3.970291913552122,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 51},+                   koData =+                     ClassData{prior = -2.2512917986064953,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),+       ("between <time-of-day> and <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.7884573603642702),+                                    ("hh:mmhh:mm", -0.7884573603642702)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -0.7884573603642702),+                                    ("minutehour", -0.7884573603642702)],+                               n = 9}}),+       ("Halloween",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Passover",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -1.6094379124341003),+                                    ("month", -0.916290731874155),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("October",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from|since|after <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -1.5950491749820006, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("July", -3.332204510175204),+                                    ("time-of-day (latent)", -2.4159137783010487),+                                    ("<time-of-day> am|pm", -2.4159137783010487),+                                    ("hh:mm", -2.4159137783010487), ("hour", -1.8281271133989299),+                                    ("month", -2.9267394020670396), ("minute", -2.4159137783010487),+                                    ("August", -3.332204510175204)],+                               n = 14},+                   koData =+                     ClassData{prior = -0.22677331936478848,+                               unseen = -4.9344739331306915,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.828641396489095),+                                    ("week", -4.23410650459726),+                                    ("<day-of-month> (ordinal or number) <named-month>",+                                     -4.23410650459726),+                                    ("today", -4.23410650459726), ("intersect", -2.362304327695668),+                                    ("second", -4.23410650459726), ("now", -3.5409593240373143),+                                    ("tomorrow", -3.828641396489095),+                                    ("this|last|next <cycle>", -4.23410650459726),+                                    ("day", -1.8827312474337816),+                                    ("time-of-day (latent)", -4.23410650459726),+                                    ("<time-of-day> am|pm", -3.828641396489095),+                                    ("nograin", -3.5409593240373143),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -4.23410650459726),+                                    ("Easter Sunday", -4.23410650459726),+                                    ("Christmas", -3.5409593240373143),+                                    ("hour", -2.981343536101891), ("month", -4.23410650459726),+                                    ("<datetime> - <datetime> (interval)", -2.847812143477369),+                                    ("<time-of-day> - <time-of-day> (interval)",+                                     -2.5293584123588344),+                                    ("<named-month> <day-of-month> (non ordinal)",+                                     -3.828641396489095),+                                    ("minute", -1.749199854809259),+                                    ("right now", -4.23410650459726),+                                    ("<month> dd-dd (interval)", -3.5409593240373143),+                                    ("dd-dd <month> (interval)", -3.828641396489095)],+                               n = 55}}),+       ("month (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> more <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)minute (grain)", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> o'clock",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in|within|after <duration>",+        Classifier{okData =+                     ClassData{prior = -0.11000089521432846,+                               unseen = -4.6443908991413725,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -3.248434627109745),+                                    ("<integer> more <unit-of-duration>", -3.9415818076696905),+                                    ("three-quarters of an hour", -3.0252910757955354),+                                    ("<integer> + '\"", -3.248434627109745),+                                    ("number.number hours", -3.9415818076696905),+                                    ("second", -3.536116699561526), ("day", -3.248434627109745),+                                    ("half an hour", -3.0252910757955354),+                                    ("year", -3.9415818076696905),+                                    ("<integer> <unit-of-duration>", -1.5902065505062128),+                                    ("a <unit-of-duration>", -3.0252910757955354),+                                    ("quarter of an hour", -3.0252910757955354),+                                    ("hour", -2.5552874465498),+                                    ("about|exactly <duration>", -3.9415818076696905),+                                    ("<integer> and an half hour", -3.9415818076696905),+                                    ("minute", -1.3025244780544318)],+                               n = 43},+                   koData =+                     ClassData{prior = -2.2617630984737906, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -2.1972245773362196), ("year", -1.9095425048844386),+                                    ("<integer> <unit-of-duration>", -1.9095425048844386),+                                    ("a <unit-of-duration>", -2.1972245773362196)],+                               n = 5}}),+       ("January",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("three-quarters of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Mattu Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Wednesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> + '\"",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half <integer> (UK style hour-of-day)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("July",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hour (grain)",+        Classifier{okData =+                     ClassData{prior = -0.8209805520698302,+                               unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),+       ("Shavuot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> <duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayyear", -0.6931471805599453),+                                    ("Diwali<integer> <unit-of-duration>", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),+                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",+                                     -1.466337068793427),+                                    ("quarter", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),+                                    ("quarter", -0.8109302162163288)],+                               n = 3}}),+       ("Boss's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Orthodox Easter Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("one twenty two",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect",+        Classifier{okData =+                     ClassData{prior = -0.45868580431307404,+                               unseen = -6.723832440821209,+                               likelihoods =+                                 HashMap.fromList+                                   [("Navaratriyear (latent)", -6.029482614295503),+                                    ("Father's Dayyear (latent)", -6.029482614295503),+                                    ("Ramadanyear (latent)", -6.029482614295503),+                                    ("<datetime> - <datetime> (interval)on <date>",+                                     -4.776719645800135),+                                    ("Bhai Doojyear (latent)", -6.029482614295503),+                                    ("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -4.776719645800135),+                                    ("hourday", -4.324734522057078),+                                    ("dayhour", -3.1117118822112237),+                                    ("Martin Luther King's Dayyear (latent)", -5.6240175061873385),+                                    ("Shemini Atzeretyear (latent)", -6.029482614295503),+                                    ("daymonth", -5.336335433735558),+                                    ("monthday", -5.6240175061873385),+                                    ("monthyear", -4.420044701861403),+                                    ("Yom Ha'atzmautyear (latent)", -6.029482614295503),+                                    ("Vijayadashamiyear (latent)", -6.029482614295503),+                                    ("Thanksgiving Dayyear (latent)", -4.930870325627393),+                                    ("Thai Pongalyear (latent)", -5.336335433735558),+                                    ("Thiru Onamyear (latent)", -5.336335433735558),+                                    ("Tuesdaythe <day-of-month> (ordinal)", -6.029482614295503),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -6.029482614295503),+                                    ("houryear", -5.336335433735558),+                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",+                                     -6.029482614295503),+                                    ("Christmas<time-of-day> am|pm", -6.029482614295503),+                                    ("last <day-of-week> of <time>year (latent)",+                                     -6.029482614295503),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.336335433735558),+                                    ("<time-of-day> am|pmintersect", -4.776719645800135),+                                    ("Octoberyear (latent)", -4.776719645800135),+                                    ("intersect<time-of-day> am|pm", -6.029482614295503),+                                    ("Mattu Pongalyear (latent)", -6.029482614295503),+                                    ("Shavuotyear (latent)", -6.029482614295503),+                                    ("Dhanterasin <named-month>|year", -6.029482614295503),+                                    ("at <time-of-day>in|within|after <duration>",+                                     -6.029482614295503),+                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -6.029482614295503),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -5.6240175061873385),+                                    ("Marchyear (latent)", -6.029482614295503),+                                    ("Sukkotyear (latent)", -5.6240175061873385),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -6.029482614295503),+                                    ("Clean Mondayyear (latent)", -5.6240175061873385),+                                    ("monthhour", -5.6240175061873385),+                                    ("todayat <time-of-day>", -6.029482614295503),+                                    ("Thursday<time> timezone", -4.324734522057078),+                                    ("dd/mm<time-of-day> am|pm", -6.029482614295503),+                                    ("this <time>hh(:mm) - <time-of-day> am|pm",+                                     -6.029482614295503),+                                    ("Palm SundaySunday", -5.6240175061873385),+                                    ("dayday", -3.8322580369592836),+                                    ("dd/mmat <time-of-day>", -6.029482614295503),+                                    ("<time> <part-of-day>at <time-of-day>", -6.029482614295503),+                                    ("tonightat <time-of-day>", -6.029482614295503),+                                    ("<time-of-day> am|pmabsorption of , after named day",+                                     -5.336335433735558),+                                    ("today<time-of-day> am|pm", -6.029482614295503),+                                    ("Februarythe <day-of-month> (ordinal)", -5.6240175061873385),+                                    ("at <time-of-day><time> <part-of-day>", -6.029482614295503),+                                    ("hourhour", -4.776719645800135),+                                    ("<time-of-day> am|pmon <date>", -4.014579593753238),+                                    ("Wednesdaythis|last|next <cycle>", -6.029482614295503),+                                    ("Lentyear (latent)", -6.029482614295503),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -4.5254052175192285),+                                    ("Boghiyear (latent)", -6.029482614295503),+                                    ("dayyear", -1.9776976664921981),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -6.029482614295503),+                                    ("Thursdayat <time-of-day>", -5.6240175061873385),+                                    ("Islamic New Yearyear (latent)", -5.6240175061873385),+                                    ("Laylat al-Qadryear (latent)", -5.113191882421348),+                                    ("Chhathin <named-month>|year", -6.029482614295503),+                                    ("Vasant Panchamiin <named-month>|year", -6.029482614295503),+                                    ("Diwaliin <named-month>|year", -6.029482614295503),+                                    ("Shrove Tuesdayyear (latent)", -6.029482614295503),+                                    ("<time-of-day> am|pmtomorrow", -5.336335433735558),+                                    ("Yom Kippuryear (latent)", -6.029482614295503),+                                    ("<part-of-day> of <time>year (latent)", -6.029482614295503),+                                    ("minutehour", -5.113191882421348),+                                    ("Kaanum Pongalyear (latent)", -5.6240175061873385),+                                    ("Maha Saptamiyear (latent)", -6.029482614295503),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -5.6240175061873385),+                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",+                                     -4.324734522057078),+                                    ("for <duration> from <time>December", -6.029482614295503),+                                    ("tomorrow<time-of-day> sharp|exactly", -6.029482614295503),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.113191882421348),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -5.6240175061873385),+                                    ("Pentecostyear (latent)", -6.029482614295503),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.113191882421348),+                                    ("Eid al-Fitryear (latent)", -6.029482614295503),+                                    ("Mondayin|during the <part-of-day>", -6.029482614295503),+                                    ("Raksha Bandhanyear (latent)", -6.029482614295503),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.6240175061873385),+                                    ("Navaratriin <named-month>|year", -6.029482614295503),+                                    ("Ashurayear (latent)", -6.029482614295503),+                                    ("Chinese New Yearyear (latent)", -6.029482614295503),+                                    ("Sundayyear (latent)", -6.029482614295503),+                                    ("Lag BaOmeryear (latent)", -6.029482614295503),+                                    ("last weekend of <named-month>year (latent)",+                                     -6.029482614295503),+                                    ("Eid al-Adhayear (latent)", -5.113191882421348),+                                    ("intersectin|during the <part-of-day>", -6.029482614295503),+                                    ("Christmasat <time-of-day>", -6.029482614295503),+                                    ("Passoveryear (latent)", -6.029482614295503),+                                    ("Lazarus Saturdayyear (latent)", -6.029482614295503),+                                    ("dd/mmyear (latent)", -6.029482614295503),+                                    ("<day-of-month> (ordinal or number) <named-month>year (latent)",+                                     -6.029482614295503),+                                    ("Yom HaShoahyear (latent)", -5.6240175061873385),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -5.113191882421348),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -6.029482614295503),+                                    ("Thai Pongalin <named-month>|year", -6.029482614295503),+                                    ("Septemberyear (latent)", -5.6240175061873385),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -4.776719645800135),+                                    ("Halloweenyear (latent)", -6.029482614295503),+                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.336335433735558),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -5.113191882421348),+                                    ("at <time-of-day>intersect", -5.6240175061873385),+                                    ("Rosh Hashanahyear (latent)", -6.029482614295503),+                                    ("Dhanterasyear (latent)", -6.029482614295503),+                                    ("Tu BiShvatyear (latent)", -6.029482614295503),+                                    ("Holiyear (latent)", -5.336335433735558),+                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",+                                     -6.029482614295503),+                                    ("Holika Dahanyear (latent)", -5.336335433735558),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.029482614295503),+                                    ("dayminute", -3.3904252846802443),+                                    ("Mawlidyear (latent)", -6.029482614295503),+                                    ("from <datetime> - <datetime> (interval)on <date>",+                                     -5.6240175061873385),+                                    ("<datetime> - <datetime> (interval)tomorrow",+                                     -6.029482614295503),+                                    ("Jumu'atul-Widayear (latent)", -5.113191882421348),+                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.029482614295503),+                                    ("minuteday", -2.391896454569117),+                                    ("absorption of , after named dayintersect",+                                     -6.029482614295503),+                                    ("intersectyear (latent)", -6.029482614295503),+                                    ("Orthodox Easter Sundayyear (latent)", -6.029482614295503),+                                    ("<ordinal> <cycle> of <time>year (latent)",+                                     -6.029482614295503),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -6.029482614295503),+                                    ("Mothering Sundayyear (latent)", -5.6240175061873385),+                                    ("Boss's Dayyear (latent)", -5.6240175061873385),+                                    ("Tisha B'Avyear (latent)", -6.029482614295503),+                                    ("Isra and Mi'rajyear (latent)", -5.113191882421348),+                                    ("at <time-of-day>absorption of , after named day",+                                     -6.029482614295503),+                                    ("Christmasyear (latent)", -5.6240175061873385),+                                    ("Naraka Chaturdashiyear (latent)", -5.6240175061873385),+                                    ("at <time-of-day>on <date>", -4.930870325627393),+                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",+                                     -4.420044701861403),+                                    ("dayweek", -6.029482614295503),+                                    ("Easter Sundayyear (latent)", -5.336335433735558),+                                    ("Thursday<time-of-day> am|pm", -6.029482614295503),+                                    ("weekyear", -5.6240175061873385),+                                    ("hh:mmin|during the <part-of-day>", -5.336335433735558),+                                    ("<cycle> after|before <time><time-of-day> am|pm",+                                     -5.6240175061873385),+                                    ("Hanukkahyear (latent)", -6.029482614295503),+                                    ("February<time> <part-of-day>", -6.029482614295503),+                                    ("Tuesdayin <named-month>|year", -6.029482614295503),+                                    ("Great Lentyear (latent)", -6.029482614295503),+                                    ("tomorrowat <time-of-day>", -5.336335433735558),+                                    ("between <time> and <time>on <date>", -4.420044701861403),+                                    ("Thursdayfrom|since|after <time-of-day>", -5.336335433735558),+                                    ("last <cycle> of <time>year (latent)", -5.336335433735558),+                                    ("at <time-of-day>tomorrow", -5.6240175061873385),+                                    ("tomorrow<time-of-day> am|pm", -6.029482614295503),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -6.029482614295503),+                                    ("Diwaliyear (latent)", -6.029482614295503),+                                    ("Black Fridayyear (latent)", -5.6240175061873385),+                                    ("in|during the <part-of-day>at <time-of-day>",+                                     -6.029482614295503),+                                    ("Chhathyear (latent)", -5.6240175061873385),+                                    ("Vasant Panchamiyear (latent)", -6.029482614295503),+                                    ("Palm Sundayintersect", -6.029482614295503),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -6.029482614295503),+                                    ("August Bank Holidayyear (latent)", -5.336335433735558),+                                    ("Februaryintersect", -6.029482614295503),+                                    ("Simchat Torahyear (latent)", -6.029482614295503)],+                               n = 311},+                   koData =+                     ClassData{prior = -0.9999816852264825, unseen = -6.349138991379798,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.654242029096065),+                                    ("hourday", -5.654242029096065),+                                    ("<named-month> <day-of-month> (non ordinal)July",+                                     -5.654242029096065),+                                    ("dayhour", -3.2118949937268604),+                                    ("daymonth", -3.574800487416229),+                                    ("monthday", -5.2487769209879005),+                                    ("monthyear", -4.401479060600697),+                                    ("<time-of-day> am|pmyear (latent)", -5.2487769209879005),+                                    ("Thai Pongalyear (latent)", -4.96109484853612),+                                    ("intersecthh:mm", -5.654242029096065),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -5.654242029096065),+                                    ("houryear", -4.73795129722191),+                                    ("from <time-of-day> - <time-of-day> (interval)July",+                                     -5.654242029096065),+                                    ("until <time-of-day><time-of-day> am|pm", -5.654242029096065),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.96109484853612),+                                    ("<time-of-day> am|pmintersect", -4.401479060600697),+                                    ("Octoberyear (latent)", -5.654242029096065),+                                    ("from|since|after <time-of-day>year (latent)",+                                     -4.401479060600697),+                                    ("from|since|after <time-of-day>on <date>", -4.73795129722191),+                                    ("July<day-of-month> (ordinal or number) <named-month>",+                                     -5.654242029096065),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -4.401479060600697),+                                    ("about|exactly <time-of-day>year (latent)",+                                     -5.654242029096065),+                                    ("absorption of , after named dayJuly", -5.2487769209879005),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.73795129722191),+                                    ("Clean Mondayyear (latent)", -5.654242029096065),+                                    ("monthhour", -5.654242029096065),+                                    ("hourmonth", -4.96109484853612),+                                    ("todayat <time-of-day>", -5.654242029096065),+                                    ("Bank Holidayyear (latent)", -4.96109484853612),+                                    ("from|since|after <time-of-day>July", -5.654242029096065),+                                    ("Mondayyear (latent)", -4.96109484853612),+                                    ("dayday", -5.2487769209879005),+                                    ("dd/mmat <time-of-day>", -5.2487769209879005),+                                    ("<time-of-day> am|pmon <date>", -4.401479060600697),+                                    ("Thursdaydd/mm", -5.654242029096065),+                                    ("dayyear", -2.609719591372642),+                                    ("New Year's Dayyear (latent)", -5.2487769209879005),+                                    ("Thursdayat <time-of-day>", -4.401479060600697),+                                    ("<integer> to|till|before <hour-of-day>September",+                                     -5.654242029096065),+                                    ("Aprilyear (latent)", -5.654242029096065),+                                    ("monthminute", -5.654242029096065),+                                    ("<time-of-day> am|pmtomorrow", -5.654242029096065),+                                    ("Thursdayhh:mm", -4.73795129722191),+                                    ("August<day-of-month> (ordinal or number) <named-month>",+                                     -5.654242029096065),+                                    ("minutemonth", -3.8624825598680097),+                                    ("Sundayfrom|since|after <time-of-day>", -5.654242029096065),+                                    ("week-endin <named-month>|year", -5.654242029096065),+                                    ("Augustyear (latent)", -5.2487769209879005),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.2487769209879005),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.2487769209879005),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.654242029096065),+                                    ("dd/mm<time-of-day> - <time-of-day> (interval)",+                                     -5.2487769209879005),+                                    ("Sundayyear (latent)", -4.96109484853612),+                                    ("Christmasat <time-of-day>", -5.654242029096065),+                                    ("dd/mmyear (latent)", -5.654242029096065),+                                    ("<duration> after|before|from <time>December",+                                     -5.654242029096065),+                                    ("yesterday<time-of-day> am|pm", -5.654242029096065),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -4.73795129722191),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -5.2487769209879005),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -5.654242029096065),+                                    ("until <time-of-day>on <date>", -4.96109484853612),+                                    ("at <time-of-day>intersect", -5.2487769209879005),+                                    ("hh:mmyear (latent)", -4.555629740427955),+                                    ("Holiyear (latent)", -5.654242029096065),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.654242029096065),+                                    ("dayminute", -3.1693353793080647),+                                    ("intersectSeptember", -4.1501646323197905),+                                    ("minuteday", -2.5861890939624477),+                                    ("absorption of , after named dayintersect",+                                     -5.654242029096065),+                                    ("Februaryin|during the <part-of-day>", -5.654242029096065),+                                    ("hh:mmon <date>", -3.6393390085538),+                                    ("Saturdayyear (latent)", -5.654242029096065),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -5.654242029096065),+                                    ("absorption of , after named daySeptember", -4.73795129722191),+                                    ("Naraka Chaturdashiyear (latent)", -5.654242029096065),+                                    ("on <date>September", -5.2487769209879005),+                                    ("at <time-of-day>on <date>", -5.2487769209879005),+                                    ("in <named-month>|yearyear (latent)", -5.654242029096065),+                                    ("dayweek", -5.654242029096065),+                                    ("Easter Sundayyear (latent)", -5.2487769209879005),+                                    ("Thursday<time-of-day> am|pm", -5.2487769209879005),+                                    ("absorption of , after named dayFebruary", -4.73795129722191),+                                    ("July<integer> to|till|before <hour-of-day>",+                                     -5.654242029096065),+                                    ("tomorrowat <time-of-day>", -5.654242029096065),+                                    ("<integer> to|till|before <hour-of-day>July",+                                     -5.654242029096065),+                                    ("Thursdayfrom|since|after <time-of-day>", -4.044804116661965),+                                    ("tomorrow<time-of-day> am|pm", -5.654242029096065),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -4.96109484853612),+                                    ("Diwaliyear (latent)", -5.2487769209879005),+                                    ("Tuesdayfrom|since|after <time-of-day>", -5.654242029096065),+                                    ("Fridayyear (latent)", -5.2487769209879005),+                                    ("minuteyear", -4.401479060600697)],+                               n = 181}}),+       ("one eleven",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("after lunch/work/school",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("early morning",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <number> (implicit minutes)",+        Classifier{okData =+                     ClassData{prior = -1.2039728043259361,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.3184537311185346),+                                    ("integer (0..19)", -1.2992829841302609)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.35667494393873245,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.19105523676270922),+                                    ("integer (0..19)", -1.749199854809259)],+                               n = 21}}),+       ("<ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.791759469228055),+                                    ("ordinal (digits)quarter (grain)year (latent)",+                                     -2.1972245773362196),+                                    ("quarteryear", -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",+                                     -2.1972245773362196),+                                    ("ordinal (digits)day (grain)this|last|next <cycle>",+                                     -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",+                                     -2.1972245773362196),+                                    ("weekmonth", -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",+                                     -2.1972245773362196)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.295836866004329,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 25},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -1.0116009116784799,+                               unseen = -3.6375861597263857,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -2.001480000210124),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("hh:mmhh:mm", -2.001480000210124),+                                    ("dayday", -2.512305623976115),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),+                                    ("hourhour", -2.512305623976115),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],+                               n = 8},+                   koData =+                     ClassData{prior = -0.45198512374305727,+                               unseen = -3.912023005428146,+                               likelihoods =+                                 HashMap.fromList+                                   [("hourday", -3.1986731175506815),+                                    ("dayhour", -2.793208009442517),+                                    ("<day-of-month> (ordinal)time-of-day (latent)",+                                     -3.1986731175506815),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -3.1986731175506815),+                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),+                                    ("minuteminute", -2.793208009442517),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.793208009442517),+                                    ("dayday", -3.1986731175506815),+                                    ("hourhour", -2.505525936990736),+                                    ("dayyear", -3.1986731175506815),+                                    ("minutehour", -2.2823823856765264),+                                    ("hh:mmintersect", -2.793208009442517),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<time-of-day> am|pm",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",+                                     -3.1986731175506815)],+                               n = 14}}),+       ("Saturday",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("the <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -1.7346010553881064),+                                    ("weekmonth", -1.7346010553881064),+                                    ("week (grain)October", -1.7346010553881064),+                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",+                                     -1.7346010553881064),+                                    ("weekday", -1.2237754316221157)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("number.number hours",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.6094379124341003),+                                    ("hh:mmhh:mm", -1.6094379124341003),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),+                                    ("hourhour", -2.3025850929940455),+                                    ("hourminute", -2.3025850929940455),+                                    ("time-of-day (latent)<time-of-day> sharp|exactly",+                                     -2.70805020110221),+                                    ("time-of-day (latent)hh:mm", -2.70805020110221),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.0149030205422647),+                                    ("hourhour", -1.791759469228055),+                                    ("minutehour", -1.6094379124341003),+                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],+                               n = 9}}),+       ("integer 21..99",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),+                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],+                               n = 4}}),+       ("Tisha B'Av",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Mothering Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("yyyy-mm-dd",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (latent)",+        Classifier{okData =+                     ClassData{prior = -0.15746743245325218,+                               unseen = -4.897839799950911,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -4.616204176316249e-2),+                                    ("intersect 2 numbers", -3.5040547671018634)],+                               n = 129},+                   koData =+                     ClassData{prior = -1.9262373834566084, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.3121863889661687),+                                    ("negative numbers", -0.6190392084062235),+                                    ("compose by multiplication", -1.8718021769015913)],+                               n = 22}}),+       ("Bank Holiday",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Monday",+        Classifier{okData =+                     ClassData{prior = -0.3483066942682157, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.2237754316221157,+                               unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5}}),+       ("dd/mm/yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("yesterday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm:ss",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Hanukkah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<hour-of-day> <integer>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),+                                    ("hour", -0.9808292530117262),+                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>integer (numeric)",+                                     -1.0986122886681098),+                                    ("hour", -1.0986122886681098)],+                               n = 1}}),+       ("nth <time> of <time>",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.9808292530117262),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -2.0794415416798357),+                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",+                                     -1.6739764335716716),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",+                                     -1.6739764335716716)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.0986122886681098),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",+                                     -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",+                                     -1.3862943611198906)],+                               n = 3}}),+       ("Valentine's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("April",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maha Saptami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week (grain)",+        Classifier{okData =+                     ClassData{prior = -4.0821994520255166e-2,+                               unseen = -4.304065093204169,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 72},+                   koData =+                     ClassData{prior = -3.2188758248682006,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("<part-of-day> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.3513752571634776),+                                    ("part of daysintersect", -2.3513752571634776),+                                    ("hourday", -0.9650808960435872),+                                    ("part of daysthe <day-of-month> (ordinal)",+                                     -2.3513752571634776),+                                    ("part of daysthe <day-of-month> (number)",+                                     -2.3513752571634776),+                                    ("part of daysthis <time>", -2.3513752571634776),+                                    ("part of daysChristmas", -1.9459101490553135)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("six thirty six a.m.",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.252762968495368),+                                    ("one twenty two", -0.8472978603872037),+                                    ("one eleven", -1.252762968495368)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Shrove Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("now",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("<day-of-month> (ordinal or number) of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.3513752571634776),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.3513752571634776),+                                    ("ordinal (digits)February", -2.3513752571634776),+                                    ("integer (numeric)February", -1.9459101490553135),+                                    ("month", -0.9650808960435872),+                                    ("ordinal (digits)March", -2.3513752571634776),+                                    ("integer (numeric)July", -2.3513752571634776)],+                               n = 7},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.5040773967762742),+                                    ("month", -1.5040773967762742)],+                               n = 1}}),+       ("this <part-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.6931471805599453),+                                    ("part of days", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Kaanum Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom Kippur",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("powers of tens",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Friday",+        Classifier{okData =+                     ClassData{prior = -0.3677247801253174,+                               unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},+                   koData =+                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("in|during the <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.701137698962981e-2,+                               unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("early morning", -2.5257286443082556),+                                    ("hour", -0.7339691750802004),+                                    ("part of days", -0.8209805520698302)],+                               n = 11},+                   koData =+                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.916290731874155),+                                    ("part of days", -0.916290731874155)],+                               n = 1}}),+       ("tomorrow",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh(:mm) - <time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|last|next <cycle>",+        Classifier{okData =+                     ClassData{prior = -7.598590697792199e-2,+                               unseen = -5.093750200806762,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.1173044216802621),+                                    ("month (grain)", -2.7850112422383386),+                                    ("year (grain)", -2.6026896854443837),+                                    ("week (grain)", -1.1173044216802621),+                                    ("quarter", -3.4781584227982836), ("year", -2.6026896854443837),+                                    ("month", -2.7850112422383386),+                                    ("quarter (grain)", -3.4781584227982836)],+                               n = 76},+                   koData =+                     ClassData{prior = -2.6149597780361984,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.4816045409242156),+                                    ("week (grain)", -1.4816045409242156),+                                    ("day", -1.9924301646902063),+                                    ("day (grain)", -1.9924301646902063)],+                               n = 6}}),+       ("Simchat Torah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("August Bank Holiday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Eve",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Raksha Bandhan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ashura",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Palm Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Adha",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -1.9459101490553135),+                                    ("time-of-day (latent)", -1.9459101490553135),+                                    ("<time-of-day> am|pm", -1.9459101490553135),+                                    ("hh:mm", -1.9459101490553135), ("hour", -1.540445040947149),+                                    ("minute", -1.540445040947149)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2006706954621511,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinals (first..twentieth,thirtieth,...)",+                                     -1.7047480922384253),+                                    ("ordinal (digits)", -0.2006706954621511)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.7047480922384253,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],+                               n = 2}}),+       ("last weekend of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),+                                    ("month", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (number)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lag BaOmer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("fractional number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -3.044522437723423,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 19}}),+       ("Sunday",+        Classifier{okData =+                     ClassData{prior = -0.3364722366212129,+                               unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -1.252762968495368, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("Chinese New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("February",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("minute (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|this|next <season>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1}}),+       ("time-of-day (latent)",+        Classifier{okData =+                     ClassData{prior = -0.5699145401359973, unseen = -4.290459441148391,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.11778303565638351),+                                    ("integer (0..19)", -2.330755969960742)],+                               n = 69},+                   koData =+                     ClassData{prior = -0.8337291311811348, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -9.352605801082348e-2),+                                    ("integer (0..19)", -2.9267394020670396),+                                    ("integer 21..99", -3.332204510175204)],+                               n = 53}}),+       ("beginning of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last <day-of-week> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.916290731874155),+                                    ("SundayMarch", -1.6094379124341003),+                                    ("MondayMarch", -1.6094379124341003),+                                    ("Sundayintersect", -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.13858616328614667,+                               unseen = -5.147494476813453,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.5026062268874014),+                                    ("integer (0..19)year (grain)", -3.062222014822824),+                                    ("integer (numeric)day (grain)", -2.743768283704289),+                                    ("integer (0..19)second (grain) ", -3.7553691953827695),+                                    ("integer (0..19)hour (grain)", -3.062222014822824),+                                    ("second", -3.349904087274605),+                                    ("integer (numeric)second (grain) ", -4.04305126783455),+                                    ("integer (numeric)year (grain)", -3.349904087274605),+                                    ("day", -2.4336133554004498), ("year", -2.576714199041123),+                                    ("integer (numeric)week (grain)", -3.062222014822824),+                                    ("integer (0..19)month (grain)", -3.5322256440685593),+                                    ("hour", -2.6567569067146595), ("month", -3.1957534074473464),+                                    ("integer (numeric)minute (grain)", -3.1957534074473464),+                                    ("integer (0..19)minute (grain)", -3.062222014822824),+                                    ("integer (numeric)month (grain)", -4.04305126783455),+                                    ("minute", -2.5026062268874014),+                                    ("integer (numeric)hour (grain)", -3.5322256440685593),+                                    ("integer (0..19)day (grain)", -3.5322256440685593),+                                    ("integer (0..19)week (grain)", -3.1957534074473464)],+                               n = 74},+                   koData =+                     ClassData{prior = -2.044755983691946, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),+                                    ("integer (numeric)hour (grain)", -1.4087672169719492),+                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],+                               n = 11}}),+       ("hhmm (latent)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -5.342334251964811,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer after|past <hour-of-day>", -3.951243718581427),+                                    ("at <time-of-day>", -2.202043863772168),+                                    ("from|since|after <time-of-day>", -3.7281001672672174),+                                    ("<time-of-day> o'clock", -4.238925791033208),+                                    ("half after|past <hour-of-day>", -4.238925791033208),+                                    ("time-of-day (latent)", -1.7266201670570935),+                                    ("hhmm (latent)", -4.6443908991413725),+                                    ("hh:mm", -2.293015641977895),+                                    ("quarter after|past <hour-of-day>", -4.6443908991413725),+                                    ("about|exactly <time-of-day>", -4.6443908991413725),+                                    ("until <time-of-day>", -3.951243718581427),+                                    ("hour", -1.2104036946562264),+                                    ("<time-of-day> sharp|exactly", -4.6443908991413725),+                                    ("minute", -1.754019141245208)],+                               n = 96},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -4.394449154672439,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),+                                    ("from|since|after <time-of-day>", -3.283414346005772),+                                    ("<hour-of-day> <integer>", -3.6888794541139363),+                                    ("time-of-day (latent)", -1.0498221244986778),+                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],+                               n = 32}}),+       ("Yom Ha'atzmaut",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),+                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),+                                    ("month", -0.8472978603872037)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thiru Onam",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thai Pongal",+        Classifier{okData =+                     ClassData{prior = -0.5596157879354228, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -0.8472978603872037,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Vijayadashami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thanksgiving Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Guy Fawkes Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("a <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.5306282510621704,+                               unseen = -3.5553480614894135,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.1400661634962708),+                                    ("year (grain)", -2.4277482359480516),+                                    ("second", -2.833213344056216),+                                    ("week (grain)", -2.1400661634962708),+                                    ("day", -2.1400661634962708),+                                    ("minute (grain)", -2.833213344056216),+                                    ("year", -2.4277482359480516),+                                    ("second (grain) ", -2.833213344056216),+                                    ("minute", -2.833213344056216),+                                    ("day (grain)", -2.1400661634962708)],+                               n = 10},+                   koData =+                     ClassData{prior = -0.8873031950009028, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour (grain)", -1.7227665977411035),+                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),+                                    ("quarter (grain)", -1.9459101490553135)],+                               n = 7}}),+       ("at the beginning|end of <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("year (latent)", -0.6931471805599453),+                                    ("year", -0.6931471805599453)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Dhanteras",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Tu BiShvat",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Whit Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm",+        Classifier{okData =+                     ClassData{prior = -4.255961441879589e-2,+                               unseen = -4.2626798770413155,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 69},+                   koData =+                     ClassData{prior = -3.1780538303479458,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Holi",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Rosh Hashanah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Holika Dahan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("second (grain) ",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinals (first..twentieth,thirtieth,...)",+        Classifier{okData =+                     ClassData{prior = -6.899287148695143e-2,+                               unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},+                   koData =+                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Mawlid",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Jumu'atul-Wida",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.252762968495368),+                                    ("dayday", -0.8472978603872037),+                                    ("day (grain)yesterday", -1.252762968495368)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("about|exactly <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -3.6109179126442243,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.791759469228055),+                                    ("hh(:mm) - <time-of-day> am|pm", -2.890371757896165),+                                    ("this|last|next <cycle>", -1.791759469228055),+                                    ("day", -2.4849066497880004),+                                    ("time-of-day (latent)", -2.890371757896165),+                                    ("hhmm (latent)", -2.4849066497880004),+                                    ("<time-of-day> am|pm", -2.890371757896165),+                                    ("hour", -2.1972245773362196),+                                    ("next <time>", -2.890371757896165),+                                    ("this|next <day-of-week>", -2.890371757896165),+                                    ("minute", -2.4849066497880004)],+                               n = 12},+                   koData =+                     ClassData{prior = -1.9459101490553135, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("dd/mm", -2.0794415416798357), ("day", -2.0794415416798357),+                                    ("time-of-day (latent)", -2.0794415416798357),+                                    ("hour", -2.0794415416798357)],+                               n = 2}}),+       ("Sukkot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> in <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("monthyear", -1.2992829841302609),+                                    ("Marcha <unit-of-duration>", -1.7047480922384253),+                                    ("March<integer> <unit-of-duration>", -1.7047480922384253),+                                    ("Vijayadashami<integer> <unit-of-duration>",+                                     -1.7047480922384253),+                                    ("dayyear", -1.7047480922384253)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("World Vegan Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect by \",\", \"of\", \"from\", \"'s\"",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -5.081404364984463,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",+                                     -4.382026634673881),+                                    ("dayhour", -3.1292636661785136),+                                    ("daymonth", -3.1292636661785136),+                                    ("<named-month> <day-of-month> (non ordinal)Friday",+                                     -4.382026634673881),+                                    ("Friday<named-month> <day-of-month> (non ordinal)",+                                     -3.6888794541139363),+                                    ("Wednesdayintersect", -4.382026634673881),+                                    ("Black Fridaythis|last|next <cycle>", -4.382026634673881),+                                    ("<part-of-day> of <time>February", -4.382026634673881),+                                    ("Saturday<time-of-day> am|pm", -4.382026634673881),+                                    ("Martin Luther King's Daythis|last|next <cycle>",+                                     -3.9765615265657175),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.382026634673881),+                                    ("on <date><time-of-day> am|pm", -4.382026634673881),+                                    ("hourmonth", -4.382026634673881),+                                    ("dayday", -2.5102244577722903),+                                    ("the <day-of-month> (ordinal)February", -3.9765615265657175),+                                    ("WednesdayOctober", -4.382026634673881),+                                    ("Wednesdaythis|last|next <cycle>", -3.9765615265657175),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -3.4657359027997265),+                                    ("dayyear", -2.8779492378976075),+                                    ("Saturday<named-month> <day-of-month> (non ordinal)",+                                     -4.382026634673881),+                                    ("Thursdayhh:mm", -3.9765615265657175),+                                    ("Thanksgiving Daythis|last|next <cycle>", -4.382026634673881),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -3.9765615265657175),+                                    ("TuesdayOctober", -4.382026634673881),+                                    ("the <day-of-month> (ordinal)March", -4.382026634673881),+                                    ("Mondaythis|last|next <cycle>", -4.382026634673881),+                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.382026634673881),+                                    ("Fridayintersect", -4.382026634673881),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -3.6888794541139363),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.4657359027997265),+                                    ("Tuesdaythis|last|next <cycle>", -4.382026634673881),+                                    ("Sunday<named-month> <day-of-month> (non ordinal)",+                                     -4.382026634673881),+                                    ("dayminute", -2.995732273553991),+                                    ("minuteday", -3.4657359027997265),+                                    ("this|last|next <cycle>Sunday", -4.382026634673881),+                                    ("intersectyear (latent)", -4.382026634673881),+                                    ("Sundaythis|last|next <cycle>", -4.382026634673881),+                                    ("weekday", -4.382026634673881),+                                    ("dayweek", -3.283414346005772),+                                    ("Thursday<time-of-day> am|pm", -4.382026634673881),+                                    ("Monday<named-month> <day-of-month> (non ordinal)",+                                     -3.9765615265657175),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -3.9765615265657175)],+                               n = 50},+                   koData =+                     ClassData{prior = -0.9808292530117262, unseen = -4.795790545596741,+                               likelihoods =+                                 HashMap.fromList+                                   [("week-endJuly", -4.0943445622221),+                                    ("week-endOctober", -3.4011973816621555),+                                    ("daymonth", -1.8971199848858813),+                                    ("TuesdaySeptember", -4.0943445622221),+                                    ("Wednesdayintersect", -4.0943445622221),+                                    ("hourmonth", -2.995732273553991),+                                    ("Fridaythis|last|next <cycle>", -4.0943445622221),+                                    ("SundayFebruary", -4.0943445622221),+                                    ("WednesdayOctober", -4.0943445622221),+                                    ("week-endintersect", -4.0943445622221),+                                    ("dayyear", -4.0943445622221),+                                    ("FridayJuly", -3.6888794541139363),+                                    ("FridaySeptember", -4.0943445622221),+                                    ("WednesdayFebruary", -4.0943445622221),+                                    ("minutemonth", -3.1780538303479458),+                                    ("SundayMarch", -4.0943445622221),+                                    ("MondayFebruary", -3.6888794541139363),+                                    ("Fridayintersect", -4.0943445622221),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.6888794541139363),+                                    ("dayminute", -3.4011973816621555),+                                    ("SaturdaySeptember", -4.0943445622221),+                                    ("intersectSeptember", -3.1780538303479458),+                                    ("MondayMarch", -4.0943445622221),+                                    ("on <date>September", -3.6888794541139363),+                                    ("Tuesdayintersect", -4.0943445622221),+                                    ("Sundayintersect", -4.0943445622221)],+                               n = 30}}),+       ("last <time>",+        Classifier{okData =+                     ClassData{prior = -0.5306282510621704,+                               unseen = -3.4965075614664802,+                               likelihoods =+                                 HashMap.fromList+                                   [("Father's Day", -2.772588722239781),+                                    ("Martin Luther King's Day", -2.772588722239781),+                                    ("Mothering Sunday", -2.772588722239781),+                                    ("day", -1.1631508098056809), ("Sunday", -2.772588722239781),+                                    ("Chinese New Year", -2.367123614131617),+                                    ("Thanksgiving Day", -2.772588722239781),+                                    ("Easter Sunday", -2.772588722239781),+                                    ("hour", -2.772588722239781), ("Tuesday", -2.772588722239781),+                                    ("week-end", -2.772588722239781)],+                               n = 10},+                   koData =+                     ClassData{prior = -0.8873031950009028, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("Monday", -2.5649493574615367), ("day", -2.159484249353372),+                                    ("Sunday", -2.5649493574615367), ("hour", -1.466337068793427),+                                    ("week-end", -1.466337068793427)],+                               n = 7}}),+       ("March",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.044522437723423,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 19},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<named-month>|<named-day> <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("Octoberordinal (digits)", -2.120263536200091),+                                    ("Thursdayordinal (digits)", -2.5257286443082556),+                                    ("day", -2.120263536200091),+                                    ("Augustordinal (digits)", -2.5257286443082556),+                                    ("Marchordinals (first..twentieth,thirtieth,...)",+                                     -2.120263536200091),+                                    ("Tuesdayordinal (digits)", -2.5257286443082556),+                                    ("month", -1.2729656758128873),+                                    ("Marchordinal (digits)", -2.5257286443082556)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("from|since|after <time-of-day>ordinal (digits)",+                                     -1.8718021769015913),+                                    ("Augustordinal (digits)", -1.8718021769015913),+                                    ("month", -1.466337068793427)],+                               n = 2}}),+       ("Clean Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Easter Sunday",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),+       ("Christmas",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("until <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -2.3025850929940455),+                                    ("<time-of-day> am|pm", -1.6094379124341003),+                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),+                                    ("minute", -1.3862943611198906)],+                               n = 6},+                   koData =+                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.7227665977411035),+                                    ("yesterday", -2.2335922215070942),+                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),+                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],+                               n = 10}}),+       ("dd.mm.yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Isra and Mi'raj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<duration> after|before|from <time>",+        Classifier{okData =+                     ClassData{prior = -0.3184537311185346,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("a <unit-of-duration>now", -2.803360380906535),+                                    ("a <unit-of-duration>Christmas", -2.803360380906535),+                                    ("dayday", -2.803360380906535),+                                    ("<integer> <unit-of-duration>today", -2.803360380906535),+                                    ("daysecond", -2.803360380906535),+                                    ("a <unit-of-duration>right now", -2.803360380906535),+                                    ("minutenograin", -2.803360380906535),+                                    ("<integer> <unit-of-duration>Christmas", -2.803360380906535),+                                    ("<integer> <unit-of-duration>Easter Sunday",+                                     -2.803360380906535),+                                    ("secondnograin", -2.803360380906535),+                                    ("yearday", -2.1102132003465894),+                                    ("daynograin", -2.803360380906535),+                                    ("<integer> <unit-of-duration>now", -2.3978952727983707)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.2992829841302609,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -2.4423470353692043),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -2.4423470353692043),+                                    ("dayday", -2.03688192726104),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -2.4423470353692043),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -2.4423470353692043)],+                               n = 3}}),+       ("<day-of-month> (ordinal or number) of <month>",+        Classifier{okData =+                     ClassData{prior = -8.004270767353637e-2,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.803360380906535),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.803360380906535),+                                    ("ordinal (digits)this|last|next <cycle>", -2.1102132003465894),+                                    ("integer (numeric)this|last|next <cycle>",+                                     -2.3978952727983707),+                                    ("ordinal (digits)February", -2.803360380906535),+                                    ("integer (numeric)February", -2.3978952727983707),+                                    ("month", -0.9315582040049435),+                                    ("ordinal (digits)March", -2.803360380906535),+                                    ("integer (numeric)July", -2.803360380906535)],+                               n = 12},+                   koData =+                     ClassData{prior = -2.5649493574615367,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.7047480922384253),+                                    ("month", -1.7047480922384253)],+                               n = 1}}),+       ("decimal number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Naraka Chaturdashi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("beginning of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("next <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("Martin Luther King's Day", -2.803360380906535),+                                    ("Halloween", -2.803360380906535),+                                    ("Wednesday", -2.803360380906535),+                                    ("Boss's Day", -2.803360380906535),+                                    ("Mothering Sunday", -2.803360380906535),+                                    ("Monday", -2.803360380906535), ("day", -1.0986122886681098),+                                    ("Thanksgiving Day", -2.803360380906535),+                                    ("March", -2.803360380906535), ("month", -2.803360380906535),+                                    ("Tuesday", -2.1102132003465894)],+                               n = 11},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> sharp|exactly",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -2.1400661634962708),+                                    ("time-of-day (latent)", -2.1400661634962708),+                                    ("hhmm (latent)", -2.1400661634962708),+                                    ("<time-of-day> am|pm", -2.1400661634962708),+                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),+                                    ("minute", -1.4469189829363254)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <named-month>|year",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -2.4423470353692043),+                                    ("year (latent)", -1.0560526742493137),+                                    ("year", -1.0560526742493137), ("March", -2.4423470353692043),+                                    ("month", -2.03688192726104)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.2992829841302609),+                                    ("year (latent)", -1.7047480922384253),+                                    ("year", -1.7047480922384253), ("month", -1.2992829841302609)],+                               n = 3}}),+       ("Islamic New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("negative numbers",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -7.696104113612832e-2),+                                    ("integer (0..19)", -2.6026896854443837)],+                               n = 25}}),+       ("about|exactly <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("half an hour", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time> before last|after next",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday", -1.8718021769015913),+                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),+                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by the end of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("this|last|next <cycle>", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hhmm (military) am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersecthh:mm", -3.1918471524802814),+                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),+                                    ("minuteminute", -1.457246097092175),+                                    ("hh:mmhh:mm", -2.093234863812172),+                                    ("dayday", -3.1918471524802814),+                                    ("hourhour", -2.093234863812172),+                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),+                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],+                               n = 26},+                   koData =+                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("<named-month> <day-of-month> (non ordinal)July",+                                     -3.1135153092103742),+                                    ("daymonth", -2.70805020110221),+                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),+                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),+                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),+                                    ("minuteminute", -1.8607523407150064),+                                    ("hourhour", -2.70805020110221),+                                    ("minutehour", -2.70805020110221),+                                    ("hh:mmintersect", -2.1972245773362196),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -3.1135153092103742),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.1135153092103742)],+                               n = 12}}),+       ("Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Day",+        Classifier{okData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8}}),+       ("fortnight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> and an half hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Laylat al-Qadr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Boghi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("at the beginning|end of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("January", -1.3862943611198906),+                                    ("April", -1.3862943611198906), ("month", -0.8754687373538999)],+                               n = 4},+                   koData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.0986122886681098),+                                    ("month", -1.0986122886681098)],+                               n = 1}}),+       ("<time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.529395204760564),+                                    ("hh:mmhh:mm", -1.8971199848858813),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -2.4849066497880004),+                                    ("hourhour", -1.6964492894237302),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -3.4011973816621555),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.4011973816621555),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),+                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],+                               n = 22},+                   koData =+                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>time-of-day (latent)",+                                     -3.4657359027997265),+                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),+                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -3.4657359027997265),+                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),+                                    ("hourhour", -2.2129729343043585),+                                    ("minutehour", -1.2144441041932315),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.4657359027997265),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -2.5494451709255714),+                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),+                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",+                                     -3.0602707946915624)],+                               n = 24}}),+       ("military spelled out numbers am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("winter",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("nth <time> after <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",+                                     -0.916290731874155)],+                               n = 1}}),+       ("<named-month> <day-of-month> (non ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.42121346507630353,+                               unseen = -3.951243718581427,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.5455312716044354),+                                    ("Marchinteger (numeric)", -2.833213344056216),+                                    ("Aprilinteger (numeric)", -3.2386784521643803),+                                    ("month", -0.8407831793660099),+                                    ("Februaryinteger (numeric)", -1.9859154836690123),+                                    ("Septemberinteger (numeric)", -2.833213344056216),+                                    ("Octoberinteger (numeric)", -2.833213344056216),+                                    ("Julyinteger (numeric)", -2.1400661634962708)],+                               n = 21},+                   koData =+                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.3353749158170367),+                                    ("Marchinteger (numeric)", -2.740840023925201),+                                    ("Aprilinteger (numeric)", -2.740840023925201),+                                    ("month", -0.9490805546971459),+                                    ("from|since|after <time-of-day>integer (numeric)",+                                     -2.3353749158170367),+                                    ("Julyinteger (numeric)", -1.6422277352570913)],+                               n = 11}}),+       ("Diwali",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("last night",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|next <day-of-week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.2512917986064953),+                                    ("Wednesday", -2.2512917986064953),+                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),+                                    ("Tuesday", -1.55814461804655)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinal (digits)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.6635616461296463,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 37},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter (grain)",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("last <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)October", -1.791759469228055),+                                    ("daymonth", -1.2809338454620642),+                                    ("day (grain)intersect", -1.791759469228055),+                                    ("weekmonth", -1.791759469228055),+                                    ("week (grain)intersect", -2.1972245773362196),+                                    ("week (grain)September", -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Chhath",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Vasant Panchami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month>(ordinal) <named-month> year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)April", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Black Friday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week-end",+        Classifier{okData =+                     ClassData{prior = -1.252762968495368, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.3364722366212129,+                               unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5}}),+       ("Great Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maundy Thursday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("day (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.295836866004329,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 25},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("right now",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("for <duration> from <time>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -1.5040773967762742),+                                    ("dayday", -1.0986122886681098),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -1.5040773967762742)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.252762968495368),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -1.252762968495368)],+                               n = 1}}),+       ("compose by multiplication",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)powers of tens", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("between <time> and <time>",+        Classifier{okData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.832909122935104),+                                    ("hh:mmhh:mm", -0.832909122935104)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -3.7376696182833684,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.410986973710262),+                                    ("minuteminute", -1.410986973710262),+                                    ("minutehour", -1.410986973710262),+                                    ("hh:mmintersect", -1.410986973710262)],+                               n = 18}}),+       ("<month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),+                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",+                                     -2.740840023925201),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -2.3353749158170367),+                                    ("month", -0.8690378470236094),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -2.3353749158170367)],+                               n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of days",+        Classifier{okData =+                     ClassData{prior = -3.509131981127006e-2,+                               unseen = -3.4011973816621555,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 28},+                   koData =+                     ClassData{prior = -3.367295829986474, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("at the beginning|end of <week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.330733340286331,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -0.706570200892086),+                                    ("this|last|next <cycle>", -0.8209805520698302),+                                    ("about|exactly <time-of-day>", -2.70805020110221)],+                               n = 36},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Fitr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("summer",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),+       ("Trinity Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("dd-dd <month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)September",+                                     -1.791759469228055),+                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),+                                    ("ordinal (digits)ordinal (digits)October",+                                     -2.1972245773362196),+                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),+                                    ("month", -0.9444616088408514),+                                    ("ordinal (digits)ordinal (digits)August",+                                     -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Pentecost",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.639057329615259),+                                    ("Martin Luther King's Day", -2.639057329615259),+                                    ("Monday", -2.639057329615259), ("day", -1.1349799328389845),+                                    ("Thanksgiving Day", -2.639057329615259),+                                    ("Christmas", -2.639057329615259), ("hour", -2.639057329615259),+                                    ("winter", -2.639057329615259),+                                    ("week-end", -2.639057329615259),+                                    ("summer", -2.2335922215070942)],+                               n = 9},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("August",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}})]
Duckling/Ranking/Classifiers/EN_US.hs view
@@ -21,2389 +21,3114 @@ classifiers :: Classifiers classifiers   = HashMap.fromList-      [("<integer> to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)noon|midnight|EOD|end of day",-                                     -0.916290731874155),-                                    ("hour", -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.7537718023763802),-                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],-                               n = 7}}),-       ("<time> timezone",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -1.824549292051046),-                                    ("<time-of-day> am|pm", -1.6422277352570913),-                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),-                                    ("minute", -1.824549292051046)],-                               n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thursday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (numeric)",-        Classifier{okData =-                     ClassData{prior = -0.7765287894989963, unseen = -5.225746673713201,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 184},-                   koData =-                     ClassData{prior = -0.616186139423817, unseen = -5.384495062789089,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 216}}),-       ("<duration> hence|ago",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.784189633918261,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),-                                    ("year", -2.662587827025453),-                                    ("<integer> <unit-of-duration>", -1.0531499145913523),-                                    ("a <unit-of-duration>", -2.662587827025453),-                                    ("month", -2.662587827025453),-                                    ("fortnight", -2.662587827025453)],-                               n = 18},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("noon|midnight|EOD|end of day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Father's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = -0.5596157879354228, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.6094379124341003),-                                    ("dayday", -1.0986122886681098),-                                    ("day (grain)yesterday", -1.6094379124341003)],-                               n = 4},-                   koData =-                     ClassData{prior = -0.8472978603872037, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.466337068793427),-                                    ("year (grain)Christmas", -1.8718021769015913),-                                    ("day (grain)intersect", -1.466337068793427),-                                    ("yearday", -1.8718021769015913)],-                               n = 3}}),-       ("Martin Luther King's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (20..90)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("mm/yyyy",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("integer after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.8109302162163288),-                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),-                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal or number) <named-month>",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)December", -2.1400661634962708),-                                    ("ordinal (digits)February", -2.1400661634962708),-                                    ("integer (numeric)April", -2.1400661634962708),-                                    ("month", -1.4469189829363254)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -3.4011973816621555,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)October", -2.6741486494265287),-                                    ("ordinal (digits)July", -2.6741486494265287),-                                    ("integer (numeric)September", -2.268683541318364),-                                    ("ordinal (digits)August", -2.6741486494265287),-                                    ("integer (numeric)August", -2.6741486494265287),-                                    ("ordinal (digits)April", -2.6741486494265287),-                                    ("month", -1.0647107369924282),-                                    ("integer (numeric)July", -2.268683541318364)],-                               n = 9}}),-       ("<time> <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.844007281325252e-2,-                               unseen = -4.430816798843313,-                               likelihoods =-                                 HashMap.fromList-                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("dayhour", -1.5284688499004333),-                                    ("Mondayearly morning", -3.3202283191284883),-                                    ("time-of-day (latent)tonight", -3.3202283191284883),-                                    ("hourhour", -2.339399066116762),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("todaypart of days", -3.7256934272366524),-                                    ("minutehour", -2.627081138568543),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -3.3202283191284883),-                                    ("time-of-day (latent)this <part-of-day>", -3.7256934272366524),-                                    ("Mondayin|during the <part-of-day>", -3.7256934272366524),-                                    ("intersectpart of days", -3.7256934272366524),-                                    ("intersectin|during the <part-of-day>", -3.7256934272366524),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("tomorrowpart of days", -2.339399066116762),-                                    ("hh:mmin|during the <part-of-day>", -3.0325462466767075),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("hhmm (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("yesterdaypart of days", -3.7256934272366524),-                                    ("Mondaypart of days", -3.7256934272366524)],-                               n = 29},-                   koData =-                     ClassData{prior = -2.367123614131617, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("yearhour", -2.740840023925201),-                                    ("monthhour", -2.740840023925201),-                                    ("hourhour", -2.740840023925201),-                                    ("past year (latent)in|during the <part-of-day>",-                                     -2.740840023925201),-                                    ("Februaryin|during the <part-of-day>", -2.740840023925201),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -2.740840023925201)],-                               n = 3}}),-       ("today",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("mm/dd",-        Classifier{okData =-                     ClassData{prior = -1.4271163556401458,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -0.2744368457017603, unseen = -3.044522437723423,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 19}}),-       ("at <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.381875521765486e-2,-                               unseen = -4.90527477843843,-                               likelihoods =-                                 HashMap.fromList-                                   [("<time> timezone", -3.7992275112828016),-                                    ("noon|midnight|EOD|end of day", -3.7992275112828016),-                                    ("integer after|past <hour-of-day>", -3.7992275112828016),-                                    ("half after|past <hour-of-day>", -4.204692619390966),-                                    ("time-of-day (latent)", -1.7197859696029658),-                                    ("hhmm (latent)", -3.5115454388310208),-                                    ("<time-of-day> am|pm", -1.8067973465925955),-                                    ("hh:mm", -3.288401887516811),-                                    ("about|exactly <time-of-day>", -3.7992275112828016),-                                    ("hour", -1.0911773101805915),-                                    ("<time-of-day> sharp|exactly", -4.204692619390966),-                                    ("minute", -2.0074680420547466)],-                               n = 61},-                   koData =-                     ClassData{prior = -2.412933150162911, unseen = -3.2188758248682006,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -1.2321436812926323),-                                    ("hour", -1.2321436812926323)],-                               n = 6}}),-       ("December",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("absorption of , after named day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("on <date>", -2.1972245773362196),-                                    ("Wednesday", -2.6026896854443837),-                                    ("Saturday", -2.6026896854443837),-                                    ("Monday", -2.1972245773362196),-                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),-                                    ("Sunday", -2.6026896854443837)],-                               n = 10},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("September",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("tonight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("last|past|next <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.456735772821304), ("second", -2.639057329615259),-                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),-                                    ("<integer> <unit-of-duration>", -0.7827593392496325),-                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),-                                    ("minute", -2.639057329615259)],-                               n = 31},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the ides of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("on <date>",-        Classifier{okData =-                     ClassData{prior = -0.1670540846631662, unseen = -4.007333185232471,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -1.791759469228055), ("mm/dd", -3.295836866004329),-                                    ("absorption of , after named day", -2.890371757896165),-                                    ("intersect", -2.890371757896165),-                                    ("Saturday", -2.6026896854443837),-                                    ("Friday", -3.295836866004329), ("day", -0.8979415932059586),-                                    ("the <day-of-month> (ordinal)", -2.890371757896165),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -2.6026896854443837),-                                    ("hour", -3.295836866004329)],-                               n = 22},-                   koData =-                     ClassData{prior = -1.8718021769015913,-                               unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.791759469228055)],-                               n = 4}}),-       ("integer (0..19)",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.784189633918261,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 42},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),-       ("between <time-of-day> and <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -0.916290731874155),-                                    ("hh:mmhh:mm", -0.916290731874155)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -0.916290731874155),-                                    ("minutehour", -0.916290731874155)],-                               n = 3}}),-       ("Halloween",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -1.6094379124341003),-                                    ("month", -0.916290731874155),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("October",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from|since|after <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742, unseen = -4.02535169073515,-                               likelihoods =-                                 HashMap.fromList-                                   [("July", -3.3141860046725258),-                                    ("time-of-day (latent)", -2.3978952727983707),-                                    ("<time-of-day> am|pm", -2.3978952727983707),-                                    ("hh:mm", -2.3978952727983707), ("hour", -1.8101086078962516),-                                    ("month", -2.908720896564361), ("minute", -2.3978952727983707),-                                    ("August", -3.3141860046725258)],-                               n = 14},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -4.836281906951478,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.7297014486341915),-                                    ("week", -4.135166556742356),-                                    ("<day-of-month> (ordinal or number) <named-month>",-                                     -4.135166556742356),-                                    ("today", -4.135166556742356),-                                    ("intersect", -2.7488721956224653),-                                    ("second", -4.135166556742356), ("now", -3.4420193761824103),-                                    ("tomorrow", -3.7297014486341915),-                                    ("this|last|next <cycle>", -4.135166556742356),-                                    ("day", -1.995100393246085),-                                    ("time-of-day (latent)", -4.135166556742356),-                                    ("<time-of-day> am|pm", -3.7297014486341915),-                                    ("nograin", -3.4420193761824103),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -4.135166556742356),-                                    ("Christmas", -3.4420193761824103),-                                    ("hour", -2.8824035882469876),-                                    ("<datetime> - <datetime> (interval)", -2.7488721956224653),-                                    ("<time-of-day> - <time-of-day> (interval)",-                                     -2.430418464503931),-                                    ("<named-month> <day-of-month> (non ordinal)",-                                     -3.7297014486341915),-                                    ("minute", -1.6928195213731514),-                                    ("right now", -4.135166556742356),-                                    ("<month> dd-dd (interval)", -3.4420193761824103),-                                    ("dd-dd <month> (interval)", -3.7297014486341915)],-                               n = 49}}),-       ("month (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> more <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)minute (grain)", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> o'clock",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in|within|after <duration>",-        Classifier{okData =-                     ClassData{prior = -4.652001563489282e-2,-                               unseen = -4.61512051684126,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -3.2188758248682006),-                                    ("<integer> more <unit-of-duration>", -3.912023005428146),-                                    ("three-quarters of an hour", -2.995732273553991),-                                    ("<integer> + '\"", -3.2188758248682006),-                                    ("number.number hours", -3.912023005428146),-                                    ("second", -3.506557897319982), ("day", -3.2188758248682006),-                                    ("half an hour", -2.995732273553991),-                                    ("<integer> <unit-of-duration>", -1.6094379124341003),-                                    ("a <unit-of-duration>", -2.995732273553991),-                                    ("quarter of an hour", -2.995732273553991),-                                    ("hour", -2.5257286443082556),-                                    ("about|exactly <duration>", -3.912023005428146),-                                    ("<integer> and an half hour", -3.912023005428146),-                                    ("minute", -1.2729656758128873)],-                               n = 42},-                   koData =-                     ClassData{prior = -3.0910424533583156, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -1.8971199848858813),-                                    ("<integer> <unit-of-duration>", -2.3025850929940455),-                                    ("a <unit-of-duration>", -2.3025850929940455)],-                               n = 2}}),-       ("three-quarters of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Wednesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> + '\"",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half <integer> (UK style hour-of-day)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("July",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hour (grain)",-        Classifier{okData =-                     ClassData{prior = -0.8209805520698302,-                               unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),-       ("<ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),-                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",-                                     -1.466337068793427),-                                    ("quarter", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),-                                    ("quarter", -0.8109302162163288)],-                               n = 3}}),-       ("one twenty two",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("intersect",-        Classifier{okData =-                     ClassData{prior = -0.4957877464014501, unseen = -6.293419278846481,-                               likelihoods =-                                 HashMap.fromList-                                   [("<datetime> - <datetime> (interval)on <date>",-                                     -4.345658990503007),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.345658990503007),-                                    ("hourday", -3.8936738667599493),-                                    ("dayhour", -2.765208614942159),-                                    ("daymonth", -4.90527477843843),-                                    ("monthday", -5.19295685089021),-                                    ("monthyear", -3.9889840465642745),-                                    ("Tuesdaythe <day-of-month> (ordinal)", -5.598421958998375),-                                    ("Christmasyear", -5.598421958998375),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.598421958998375),-                                    ("houryear", -5.598421958998375),-                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.90527477843843),-                                    ("<time-of-day> am|pmintersect", -4.345658990503007),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -5.598421958998375),-                                    ("Marchyear", -5.598421958998375),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year",-                                     -5.19295685089021),-                                    ("intersect<time-of-day> am|pm", -5.598421958998375),-                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -5.598421958998375),-                                    ("monthhour", -5.19295685089021),-                                    ("last <day-of-week> of <time>year", -5.598421958998375),-                                    ("todayat <time-of-day>", -5.598421958998375),-                                    ("Thursday<time> timezone", -3.8936738667599493),-                                    ("this <time>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("dayday", -3.58351893845611),-                                    ("Thanksgiving Dayyear", -4.499809670330265),-                                    ("<time> <part-of-day>at <time-of-day>", -5.598421958998375),-                                    ("Tuesdayin <named-month>", -5.598421958998375),-                                    ("mm/ddat <time-of-day>", -5.598421958998375),-                                    ("tonightat <time-of-day>", -5.598421958998375),-                                    ("<time-of-day> am|pmabsorption of , after named day",-                                     -4.90527477843843),-                                    ("today<time-of-day> am|pm", -5.598421958998375),-                                    ("Februarythe <day-of-month> (ordinal)", -5.19295685089021),-                                    ("at <time-of-day><time> <part-of-day>", -5.598421958998375),-                                    ("mm/dd<time-of-day> am|pm", -5.598421958998375),-                                    ("hourhour", -4.345658990503007),-                                    ("<time-of-day> am|pmon <date>", -3.58351893845611),-                                    ("Wednesdaythis|last|next <cycle>", -5.598421958998375),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -4.0943445622221),-                                    ("dayyear", -3.1560749236291703),-                                    ("last weekend of <named-month>year", -5.598421958998375),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursdayat <time-of-day>", -5.19295685089021),-                                    ("<time-of-day> am|pmtomorrow", -4.90527477843843),-                                    ("minutehour", -4.68213122712422),-                                    ("Mother's Dayyear", -5.598421958998375),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -5.19295685089021),-                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",-                                     -3.8936738667599493),-                                    ("for <duration> from <time>December", -5.598421958998375),-                                    ("tomorrow<time-of-day> sharp|exactly", -5.598421958998375),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -5.19295685089021),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.68213122712422),-                                    ("Mondayin|during the <part-of-day>", -5.598421958998375),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.19295685089021),-                                    ("intersectin|during the <part-of-day>", -5.598421958998375),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.345658990503007),-                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -4.68213122712422),-                                    ("at <time-of-day>intersect", -5.19295685089021),-                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.598421958998375),-                                    ("dayminute", -2.924273309571846),-                                    ("from <datetime> - <datetime> (interval)on <date>",-                                     -5.19295685089021),-                                    ("<datetime> - <datetime> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.19295685089021),-                                    ("<ordinal> <cycle> of <time>year", -5.598421958998375),-                                    ("minuteday", -2.132686056198648),-                                    ("absorption of , after named dayintersect",-                                     -5.598421958998375),-                                    ("Octoberyear", -4.345658990503007),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("at <time-of-day>absorption of , after named day",-                                     -5.598421958998375),-                                    ("<day-of-month> (ordinal or number) <named-month>year",-                                     -5.598421958998375),-                                    ("year<time-of-day> am|pm", -5.598421958998375),-                                    ("Septemberyear", -5.19295685089021),-                                    ("at <time-of-day>on <date>", -4.499809670330265),-                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("Halloweenyear", -5.598421958998375),-                                    ("dayweek", -5.598421958998375),-                                    ("Thursday<time-of-day> am|pm", -5.598421958998375),-                                    ("weekyear", -5.19295685089021),-                                    ("hh:mmin|during the <part-of-day>", -4.90527477843843),-                                    ("Father's Dayyear", -5.598421958998375),-                                    ("<cycle> after|before <time><time-of-day> am|pm",-                                     -5.19295685089021),-                                    ("February<time> <part-of-day>", -5.598421958998375),-                                    ("Martin Luther King's Dayyear", -5.19295685089021),-                                    ("tomorrowat <time-of-day>", -4.90527477843843),-                                    ("between <time> and <time>on <date>", -4.90527477843843),-                                    ("Thursdayfrom|since|after <time-of-day>", -4.90527477843843),-                                    ("at <time-of-day>tomorrow", -5.19295685089021),-                                    ("tomorrow<time-of-day> am|pm", -5.598421958998375),-                                    ("in|during the <part-of-day>at <time-of-day>",-                                     -5.598421958998375),-                                    ("Labor Dayyear", -5.598421958998375),-                                    ("Februaryintersect", -5.598421958998375),-                                    ("last <cycle> of <time>year", -4.90527477843843),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -5.598421958998375),-                                    ("yearminute", -5.598421958998375),-                                    ("Black Fridayyear", -5.19295685089021)],-                               n = 201},-                   koData =-                     ClassData{prior = -0.9392802500988537, unseen = -5.983936280687191,-                               likelihoods =-                                 HashMap.fromList-                                   [("in <named-month>year", -5.288267030694535),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -5.288267030694535),-                                    ("hourday", -5.288267030694535),-                                    ("<named-month> <day-of-month> (non ordinal)July",-                                     -5.288267030694535),-                                    ("dayhour", -2.890371757896165),-                                    ("daymonth", -3.2088254890146994),-                                    ("monthday", -4.882801922586371),-                                    ("monthyear", -4.59511985013459),-                                    ("intersecthh:mm", -5.288267030694535),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.288267030694535),-                                    ("houryear", -5.288267030694535),-                                    ("from <time-of-day> - <time-of-day> (interval)July",-                                     -5.288267030694535),-                                    ("until <time-of-day><time-of-day> am|pm", -5.288267030694535),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.59511985013459),-                                    ("<time-of-day> am|pmintersect", -4.035504062199167),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.37197629882038),-                                    ("from|since|after <time-of-day>on <date>", -4.37197629882038),-                                    ("July<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("absorption of , after named dayJuly", -4.882801922586371),-                                    ("monthhour", -5.288267030694535),-                                    ("hourmonth", -4.59511985013459),-                                    ("todayat <time-of-day>", -5.288267030694535),-                                    ("from|since|after <time-of-day>July", -5.288267030694535),-                                    ("dayday", -4.882801922586371),-                                    ("mm/ddat <time-of-day>", -4.882801922586371),-                                    ("<time-of-day> am|pmon <date>", -4.035504062199167),-                                    ("dayyear", -4.035504062199167),-                                    ("Thursdaymm/dd", -5.288267030694535),-                                    ("Thursdayat <time-of-day>", -4.035504062199167),-                                    ("<integer> to|till|before <hour-of-day>September",-                                     -5.288267030694535),-                                    ("monthminute", -5.288267030694535),-                                    ("<time-of-day> am|pmtomorrow", -5.288267030694535),-                                    ("Thursdayhh:mm", -4.37197629882038),-                                    ("August<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("Fridayyear", -4.882801922586371),-                                    ("minutemonth", -3.4965075614664802),-                                    ("Sundayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.882801922586371),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("Aprilyear", -5.288267030694535),-                                    ("mm/dd<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.288267030694535),-                                    ("<duration> after|before|from <time>December",-                                     -5.288267030694535),-                                    ("yesterday<time-of-day> am|pm", -5.288267030694535),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -4.37197629882038),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -5.288267030694535),-                                    ("until <time-of-day>on <date>", -4.59511985013459),-                                    ("at <time-of-day>intersect", -4.882801922586371),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("dayminute", -2.7625383863862796),-                                    ("intersectSeptember", -3.784189633918261),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("minuteday", -2.3704962986102562),-                                    ("absorption of , after named dayintersect",-                                     -5.288267030694535),-                                    ("Februaryin|during the <part-of-day>", -5.288267030694535),-                                    ("week-endin <named-month>", -5.288267030694535),-                                    ("Octoberyear", -5.288267030694535),-                                    ("from|since|after <time-of-day>year", -5.288267030694535),-                                    ("yearhh:mm", -5.288267030694535),-                                    ("hh:mmon <date>", -3.784189633918261),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -5.288267030694535),-                                    ("absorption of , after named daySeptember", -4.37197629882038),-                                    ("on <date>September", -4.882801922586371),-                                    ("at <time-of-day>on <date>", -4.882801922586371),-                                    ("dayweek", -5.288267030694535),-                                    ("Thursday<time-of-day> am|pm", -4.882801922586371),-                                    ("absorption of , after named dayFebruary", -4.37197629882038),-                                    ("July<integer> to|till|before <hour-of-day>",-                                     -5.288267030694535),-                                    ("tomorrowat <time-of-day>", -5.288267030694535),-                                    ("<integer> to|till|before <hour-of-day>July",-                                     -5.288267030694535),-                                    ("Thursdayfrom|since|after <time-of-day>", -3.6788291182604347),-                                    ("tomorrow<time-of-day> am|pm", -5.288267030694535),-                                    ("Tuesdayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("yearminute", -5.288267030694535)],-                               n = 129}}),-       ("one eleven",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("after lunch/work/school",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("early morning",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <number> (implicit minutes)",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.3184537311185346),-                                    ("integer (0..19)", -1.2992829841302609)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.16251892949777494),-                                    ("integer (0..19)", -1.8971199848858813)],-                               n = 18}}),-       ("<ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -2.0149030205422647),-                                    ("quarteryear", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",-                                     -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",-                                     -2.0149030205422647),-                                    ("weekmonth", -1.6094379124341003),-                                    ("ordinal (digits)quarter (grain)year", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",-                                     -2.0149030205422647)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("year (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.1354942159291497,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 21},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -1.0116009116784799,-                               unseen = -3.6375861597263857,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -2.001480000210124),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("hh:mmhh:mm", -2.001480000210124),-                                    ("dayday", -2.512305623976115),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),-                                    ("hourhour", -2.512305623976115),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.45198512374305727,-                               unseen = -3.912023005428146,-                               likelihoods =-                                 HashMap.fromList-                                   [("hourday", -3.1986731175506815),-                                    ("dayhour", -2.793208009442517),-                                    ("<day-of-month> (ordinal)time-of-day (latent)",-                                     -3.1986731175506815),-                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),-                                    ("minuteminute", -2.793208009442517),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.793208009442517),-                                    ("dayday", -3.1986731175506815),-                                    ("hourhour", -2.505525936990736),-                                    ("dayyear", -3.1986731175506815),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)past year (latent)",-                                     -3.1986731175506815),-                                    ("minutehour", -2.2823823856765264),-                                    ("hh:mmintersect", -2.793208009442517),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<time-of-day> am|pm",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",-                                     -3.1986731175506815)],-                               n = 14}}),-       ("Saturday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -1.7346010553881064),-                                    ("weekmonth", -1.7346010553881064),-                                    ("week (grain)October", -1.7346010553881064),-                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",-                                     -1.7346010553881064),-                                    ("weekday", -1.2237754316221157)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("number.number hours",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.6094379124341003),-                                    ("hh:mmhh:mm", -1.6094379124341003),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),-                                    ("hourhour", -2.3025850929940455),-                                    ("hourminute", -2.3025850929940455),-                                    ("time-of-day (latent)<time-of-day> sharp|exactly",-                                     -2.70805020110221),-                                    ("time-of-day (latent)hh:mm", -2.70805020110221),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.0149030205422647),-                                    ("hourhour", -1.791759469228055),-                                    ("minutehour", -1.6094379124341003),-                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],-                               n = 9}}),-       ("integer 21..99",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),-                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],-                               n = 4}}),-       ("yyyy-mm-dd",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("mm/dd/yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -1.6094379124341003,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("Monday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("yesterday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<ordinal> quarter <year>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh:mm:ss",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<hour-of-day> <integer>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),-                                    ("hour", -0.9808292530117262),-                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>integer (numeric)",-                                     -1.0986122886681098),-                                    ("hour", -1.0986122886681098)],-                               n = 1}}),-       ("nth <time> of <time>",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.9808292530117262),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -2.0794415416798357),-                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",-                                     -1.6739764335716716),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",-                                     -1.6739764335716716)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.5649493574615367,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -1.0986122886681098),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",-                                     -1.791759469228055),-                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",-                                     -1.3862943611198906)],-                               n = 3}}),-       ("Valentine's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("April",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("end of month",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("week (grain)",-        Classifier{okData =-                     ClassData{prior = -8.004270767353637e-2,-                               unseen = -3.6375861597263857,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 36},-                   koData =-                     ClassData{prior = -2.5649493574615367,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("<part-of-day> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.6094379124341003),-                                    ("hourday", -0.916290731874155),-                                    ("part of daysthe <day-of-month> (ordinal)",-                                     -1.6094379124341003),-                                    ("part of daysthe <day-of-month> (number)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("past year (latent)",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 2}}),-       ("six thirty six a.m.",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -1.252762968495368),-                                    ("one twenty two", -0.8472978603872037),-                                    ("one eleven", -1.252762968495368)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("now",-        Classifier{okData =-                     ClassData{prior = -0.15415067982725836,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -1.9459101490553135,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("<day-of-month> (ordinal or number) of <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.0910424533583156,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)July", -2.3513752571634776),-                                    ("ordinals (first..twentieth,thirtieth,...)March",-                                     -2.3513752571634776),-                                    ("ordinal (digits)February", -2.3513752571634776),-                                    ("integer (numeric)February", -1.9459101490553135),-                                    ("month", -0.9650808960435872),-                                    ("ordinal (digits)March", -2.3513752571634776),-                                    ("integer (numeric)July", -2.3513752571634776)],-                               n = 7},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)February", -1.5040773967762742),-                                    ("month", -1.5040773967762742)],-                               n = 1}}),-       ("this <part-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.6931471805599453),-                                    ("part of days", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Friday",-        Classifier{okData =-                     ClassData{prior = -0.3677247801253174,-                               unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("in|during the <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -8.701137698962981e-2,-                               unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("early morning", -2.5257286443082556),-                                    ("hour", -0.7339691750802004),-                                    ("part of days", -0.8209805520698302)],-                               n = 11},-                   koData =-                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.916290731874155),-                                    ("part of days", -0.916290731874155)],-                               n = 1}}),-       ("tomorrow",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh(:mm) - <time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this|last|next <cycle>",-        Classifier{okData =-                     ClassData{prior = -0.15822400521489416,-                               unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.5488132906176655),-                                    ("month (grain)", -2.995732273553991),-                                    ("year (grain)", -1.817077277212345),-                                    ("week (grain)", -1.5488132906176655),-                                    ("quarter", -2.772588722239781), ("year", -1.817077277212345),-                                    ("month", -2.995732273553991),-                                    ("quarter (grain)", -2.772588722239781)],-                               n = 35},-                   koData =-                     ClassData{prior = -1.9218125974762528,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.4816045409242156),-                                    ("week (grain)", -1.4816045409242156),-                                    ("day", -1.9924301646902063),-                                    ("day (grain)", -1.9924301646902063)],-                               n = 6}}),-       ("Mother's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Eve",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -2.1972245773362196),-                                    ("end of month", -2.1972245773362196),-                                    ("time-of-day (latent)", -2.1972245773362196),-                                    ("<time-of-day> am|pm", -2.1972245773362196),-                                    ("hh:mm", -2.1972245773362196), ("hour", -1.791759469228055),-                                    ("month", -2.1972245773362196), ("minute", -1.791759469228055)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2006706954621511,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinals (first..twentieth,thirtieth,...)",-                                     -1.7047480922384253),-                                    ("ordinal (digits)", -0.2006706954621511)],-                               n = 9},-                   koData =-                     ClassData{prior = -1.7047480922384253,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],-                               n = 2}}),-       ("last weekend of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),-                                    ("month", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (number)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("fractional number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17}}),-       ("Sunday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("February",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("minute (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1}}),-       ("time-of-day (latent)",-        Classifier{okData =-                     ClassData{prior = -0.5315058290035293,-                               unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.12136085700426748),-                                    ("integer (0..19)", -2.3025850929940455)],-                               n = 67},-                   koData =-                     ClassData{prior = -0.8860508466844369,-                               unseen = -3.9318256327243257,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.10536051565782628),-                                    ("integer (0..19)", -2.8134107167600364),-                                    ("integer 21..99", -3.2188758248682006)],-                               n = 47}}),-       ("year",-        Classifier{okData =-                     ClassData{prior = -0.23483959107740107, unseen = -3.58351893845611,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 34},-                   koData =-                     ClassData{prior = -1.563975538357343, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 9}}),-       ("last <day-of-week> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.916290731874155),-                                    ("SundayMarch", -1.6094379124341003),-                                    ("MondayMarch", -1.6094379124341003),-                                    ("Sundayintersect", -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.1479201300766222,-                               unseen = -5.0875963352323845,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.4423470353692043),-                                    ("integer (0..19)year (grain)", -3.289644895756408),-                                    ("integer (numeric)day (grain)", -2.6835090921860925),-                                    ("integer (0..19)second (grain) ", -3.6951100038645723),-                                    ("integer (0..19)hour (grain)", -3.001962823304627),-                                    ("second", -3.289644895756408),-                                    ("integer (numeric)second (grain) ", -3.982792076316353),-                                    ("integer (numeric)year (grain)", -3.6951100038645723),-                                    ("day", -2.4423470353692043), ("year", -2.8841797876482436),-                                    ("integer (numeric)week (grain)", -3.001962823304627),-                                    ("integer (0..19)month (grain)", -3.4719664525503626),-                                    ("hour", -2.5964977151964628), ("month", -3.1354942159291497),-                                    ("integer (numeric)minute (grain)", -3.1354942159291497),-                                    ("integer (0..19)minute (grain)", -3.001962823304627),-                                    ("integer (numeric)month (grain)", -3.982792076316353),-                                    ("minute", -2.4423470353692043),-                                    ("integer (numeric)hour (grain)", -3.4719664525503626),-                                    ("integer (0..19)day (grain)", -3.6951100038645723),-                                    ("integer (0..19)week (grain)", -3.1354942159291497)],-                               n = 69},-                   koData =-                     ClassData{prior = -1.984131361875511, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),-                                    ("integer (numeric)hour (grain)", -1.4087672169719492),-                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],-                               n = 11}}),-       ("hhmm (latent)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = -0.2929871246814741,-                               unseen = -5.3230099791384085,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer after|past <hour-of-day>", -3.9318256327243257),-                                    ("at <time-of-day>", -2.2270775404859005),-                                    ("from|since|after <time-of-day>", -3.708682081410116),-                                    ("<time-of-day> o'clock", -4.219507705176107),-                                    ("half after|past <hour-of-day>", -4.219507705176107),-                                    ("time-of-day (latent)", -1.7346010553881064),-                                    ("hhmm (latent)", -4.624972813284271),-                                    ("hh:mm", -2.2735975561207935),-                                    ("quarter after|past <hour-of-day>", -4.624972813284271),-                                    ("about|exactly <time-of-day>", -4.624972813284271),-                                    ("until <time-of-day>", -3.9318256327243257),-                                    ("hour", -1.2237754316221157),-                                    ("<time-of-day> sharp|exactly", -4.624972813284271),-                                    ("minute", -1.7346010553881064)],-                               n = 94},-                   koData =-                     ClassData{prior = -1.3705460041517514, unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),-                                    ("from|since|after <time-of-day>", -3.283414346005772),-                                    ("<hour-of-day> <integer>", -3.6888794541139363),-                                    ("time-of-day (latent)", -1.0498221244986778),-                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],-                               n = 32}}),-       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),-                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thanksgiving Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("a <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.5753641449035618,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.0794415416798357),-                                    ("year (grain)", -2.772588722239781),-                                    ("second", -2.772588722239781),-                                    ("week (grain)", -2.0794415416798357),-                                    ("day", -2.0794415416798357),-                                    ("minute (grain)", -2.772588722239781),-                                    ("year", -2.772588722239781),-                                    ("second (grain) ", -2.772588722239781),-                                    ("minute", -2.772588722239781),-                                    ("day (grain)", -2.0794415416798357)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.8266785731844679, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour (grain)", -1.7227665977411035),-                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),-                                    ("quarter (grain)", -1.9459101490553135)],-                               n = 7}}),-       ("hh:mm",-        Classifier{okData =-                     ClassData{prior = -6.782259633876106e-2,-                               unseen = -4.07753744390572,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 57},-                   koData =-                     ClassData{prior = -2.7245795030534206, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("quarter of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("second (grain) ",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinals (first..twentieth,thirtieth,...)",-        Classifier{okData =-                     ClassData{prior = -6.899287148695143e-2,-                               unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},-                   koData =-                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("quarter after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.252762968495368),-                                    ("dayday", -0.8472978603872037),-                                    ("day (grain)yesterday", -1.252762968495368)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("about|exactly <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.639057329615259),-                                    ("hh(:mm) - <time-of-day> am|pm", -2.639057329615259),-                                    ("this|last|next <cycle>", -2.639057329615259),-                                    ("day", -2.2335922215070942),-                                    ("time-of-day (latent)", -2.639057329615259),-                                    ("hhmm (latent)", -2.2335922215070942),-                                    ("<time-of-day> am|pm", -2.639057329615259),-                                    ("hour", -1.9459101490553135),-                                    ("next <time>", -2.639057329615259),-                                    ("this|next <day-of-week>", -2.639057329615259),-                                    ("minute", -2.2335922215070942)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("mm/dd", -2.0794415416798357), ("day", -2.0794415416798357),-                                    ("time-of-day (latent)", -2.0794415416798357),-                                    ("hour", -2.0794415416798357)],-                               n = 2}}),-       ("intersect by \",\", \"of\", \"from\", \"'s\"",-        Classifier{okData =-                     ClassData{prior = -0.48130318449966897,-                               unseen = -5.170483995038151,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayhour", -3.2188758248682006),-                                    ("daymonth", -3.2188758248682006),-                                    ("<named-month> <day-of-month> (non ordinal)Friday",-                                     -4.471638793363569),-                                    ("Friday<named-month> <day-of-month> (non ordinal)",-                                     -3.7784916128036232),-                                    ("Wednesdayintersect", -4.471638793363569),-                                    ("Labor Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Black Fridaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.471638793363569),-                                    ("<part-of-day> of <time>February", -4.471638793363569),-                                    ("Saturday<time-of-day> am|pm", -4.471638793363569),-                                    ("Martin Luther King's Daythis|last|next <cycle>",-                                     -4.471638793363569),-                                    ("on <date><time-of-day> am|pm", -4.471638793363569),-                                    ("hourmonth", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.471638793363569),-                                    ("dayday", -2.5998366164619773),-                                    ("the <day-of-month> (ordinal)February", -4.0661736852554045),-                                    ("WednesdayOctober", -4.471638793363569),-                                    ("Wednesdaythis|last|next <cycle>", -4.0661736852554045),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -3.5553480614894135),-                                    ("dayyear", -2.8622008809294686),-                                    ("Saturday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.471638793363569),-                                    ("Thursdayhh:mm", -4.0661736852554045),-                                    ("Thanksgiving Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Memorial Daythis|last|next <cycle>", -4.471638793363569),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("TuesdayOctober", -4.471638793363569),-                                    ("the <day-of-month> (ordinal)March", -4.471638793363569),-                                    ("Mondaythis|last|next <cycle>", -4.471638793363569),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.0661736852554045),-                                    ("Fridayintersect", -4.471638793363569),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -3.7784916128036232),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.5553480614894135),-                                    ("Tuesdaythis|last|next <cycle>", -4.471638793363569),-                                    ("Sunday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayminute", -2.6798793241355137),-                                    ("intersectyear", -4.471638793363569),-                                    ("minuteday", -3.5553480614894135),-                                    ("this|last|next <cycle>Sunday", -4.471638793363569),-                                    ("Sundaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersectintersect", -4.471638793363569),-                                    ("weekday", -4.471638793363569),-                                    ("dayweek", -3.373026504695459),-                                    ("Thursday<time-of-day> am|pm", -4.471638793363569),-                                    ("Monday<named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -4.0661736852554045)],-                               n = 55},-                   koData =-                     ClassData{prior = -0.9622758451159785, unseen = -4.897839799950911,-                               likelihoods =-                                 HashMap.fromList-                                   [("week-endJuly", -4.197201947661808),-                                    ("week-endOctober", -3.5040547671018634),-                                    ("daymonth", -1.9999773703255892),-                                    ("TuesdaySeptember", -4.197201947661808),-                                    ("Wednesdayintersect", -4.197201947661808),-                                    ("hourmonth", -3.0985896589936988),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.197201947661808),-                                    ("Fridaythis|last|next <cycle>", -4.197201947661808),-                                    ("SundayFebruary", -4.197201947661808),-                                    ("WednesdayOctober", -4.197201947661808),-                                    ("week-endintersect", -4.197201947661808),-                                    ("dayyear", -4.197201947661808),-                                    ("FridayJuly", -3.791736839553644),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.197201947661808),-                                    ("FridaySeptember", -4.197201947661808),-                                    ("WednesdayFebruary", -4.197201947661808),-                                    ("minutemonth", -3.2809112157876537),-                                    ("SundayMarch", -4.197201947661808),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.197201947661808),-                                    ("MondayFebruary", -3.791736839553644),-                                    ("Fridayintersect", -4.197201947661808),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.791736839553644),-                                    ("dayminute", -2.810907586541918),-                                    ("SaturdaySeptember", -4.197201947661808),-                                    ("intersectSeptember", -3.2809112157876537),-                                    ("MondayMarch", -4.197201947661808),-                                    ("on <date>September", -3.791736839553644),-                                    ("intersectintersect", -4.197201947661808),-                                    ("Tuesdayintersect", -4.197201947661808),-                                    ("Sundayintersect", -4.197201947661808)],-                               n = 34}}),-       ("last <time>",-        Classifier{okData =-                     ClassData{prior = -0.6286086594223742, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("Father's Day", -2.6026896854443837),-                                    ("Martin Luther King's Day", -2.6026896854443837),-                                    ("Memorial Day", -2.6026896854443837),-                                    ("Mother's Day", -2.6026896854443837),-                                    ("day", -1.2163953243244932), ("Sunday", -2.6026896854443837),-                                    ("Thanksgiving Day", -2.6026896854443837),-                                    ("hour", -2.6026896854443837), ("Tuesday", -2.6026896854443837),-                                    ("week-end", -2.6026896854443837)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.7621400520468967, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Monday", -2.5257286443082556), ("day", -2.120263536200091),-                                    ("Sunday", -2.5257286443082556), ("hour", -1.4271163556401458),-                                    ("week-end", -1.4271163556401458)],-                               n = 7}}),-       ("March",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<named-month>|<named-day> <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Octoberordinal (digits)", -2.120263536200091),-                                    ("Thursdayordinal (digits)", -2.5257286443082556),-                                    ("day", -2.120263536200091),-                                    ("Augustordinal (digits)", -2.5257286443082556),-                                    ("Marchordinals (first..twentieth,thirtieth,...)",-                                     -2.120263536200091),-                                    ("Tuesdayordinal (digits)", -2.5257286443082556),-                                    ("month", -1.2729656758128873),-                                    ("Marchordinal (digits)", -2.5257286443082556)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("from|since|after <time-of-day>ordinal (digits)",-                                     -1.8718021769015913),-                                    ("Augustordinal (digits)", -1.8718021769015913),-                                    ("month", -1.466337068793427)],-                               n = 2}}),-       ("Labor Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Christmas",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("until <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -2.3025850929940455),-                                    ("<time-of-day> am|pm", -1.6094379124341003),-                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),-                                    ("minute", -1.3862943611198906)],-                               n = 6},-                   koData =-                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.7227665977411035),-                                    ("yesterday", -2.2335922215070942),-                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),-                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],-                               n = 10}}),-       ("mm.dd.yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<duration> after|before|from <time>",-        Classifier{okData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("a <unit-of-duration>now", -2.70805020110221),-                                    ("a <unit-of-duration>Christmas", -2.70805020110221),-                                    ("<integer> <unit-of-duration>today", -2.70805020110221),-                                    ("daysecond", -2.70805020110221),-                                    ("a <unit-of-duration>right now", -2.70805020110221),-                                    ("minutenograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>Christmas", -2.70805020110221),-                                    ("secondnograin", -2.70805020110221),-                                    ("yearday", -2.0149030205422647),-                                    ("daynograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>now", -2.3025850929940455)],-                               n = 7},-                   koData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -2.3978952727983707),-                                    ("dayday", -1.9924301646902063),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -2.3978952727983707)],-                               n = 3}}),-       ("Independence Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("decimal number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("next <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5263605246161616,-                               likelihoods =-                                 HashMap.fromList-                                   [("Martin Luther King's Day", -2.803360380906535),-                                    ("Halloween", -2.803360380906535),-                                    ("Wednesday", -2.803360380906535),-                                    ("Memorial Day", -2.803360380906535),-                                    ("Monday", -2.803360380906535),-                                    ("Mother's Day", -2.803360380906535),-                                    ("day", -1.0986122886681098),-                                    ("Thanksgiving Day", -2.803360380906535),-                                    ("March", -2.803360380906535), ("month", -2.803360380906535),-                                    ("Tuesday", -2.1102132003465894)],-                               n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.4849066497880004,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> sharp|exactly",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -2.1400661634962708),-                                    ("time-of-day (latent)", -2.1400661634962708),-                                    ("hhmm (latent)", -2.1400661634962708),-                                    ("<time-of-day> am|pm", -2.1400661634962708),-                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),-                                    ("minute", -1.4469189829363254)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("negative numbers",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -7.696104113612832e-2),-                                    ("integer (0..19)", -2.6026896854443837)],-                               n = 25}}),-       ("about|exactly <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("half an hour", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time> before last|after next",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday", -1.8718021769015913),-                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),-                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by the end of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("this|last|next <cycle>", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hhmm (military) am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersecthh:mm", -3.1918471524802814),-                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),-                                    ("minuteminute", -1.457246097092175),-                                    ("hh:mmhh:mm", -2.093234863812172),-                                    ("dayday", -3.1918471524802814),-                                    ("hourhour", -2.093234863812172),-                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),-                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],-                               n = 26},-                   koData =-                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("<named-month> <day-of-month> (non ordinal)July",-                                     -3.1135153092103742),-                                    ("daymonth", -2.70805020110221),-                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),-                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),-                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),-                                    ("minuteminute", -1.8607523407150064),-                                    ("hourhour", -2.70805020110221),-                                    ("minutehour", -2.70805020110221),-                                    ("hh:mmintersect", -2.1972245773362196),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -3.1135153092103742),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.1135153092103742)],-                               n = 12}}),-       ("Tuesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Day",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),-       ("fortnight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> and an half hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -1.252762968495368), ("March", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.8472978603872037),-                                    ("month", -0.8472978603872037)],-                               n = 2}}),-       ("<time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.529395204760564),-                                    ("hh:mmhh:mm", -1.8971199848858813),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -2.4849066497880004),-                                    ("hourhour", -1.6964492894237302),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -3.4011973816621555),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.4011973816621555),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),-                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],-                               n = 22},-                   koData =-                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>time-of-day (latent)",-                                     -3.4657359027997265),-                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),-                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -3.4657359027997265),-                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),-                                    ("hourhour", -2.2129729343043585),-                                    ("minutehour", -1.2144441041932315),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.4657359027997265),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -2.5494451709255714),-                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),-                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",-                                     -3.0602707946915624)],-                               n = 24}}),-       ("military spelled out numbers am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods =-                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("winter",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("nth <time> after <time>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",-                                     -0.916290731874155)],-                               n = 1}}),-       ("<named-month> <day-of-month> (non ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.42121346507630353,-                               unseen = -3.951243718581427,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.5455312716044354),-                                    ("Marchinteger (numeric)", -2.833213344056216),-                                    ("Aprilinteger (numeric)", -3.2386784521643803),-                                    ("month", -0.8407831793660099),-                                    ("Februaryinteger (numeric)", -1.9859154836690123),-                                    ("Septemberinteger (numeric)", -2.833213344056216),-                                    ("Octoberinteger (numeric)", -2.833213344056216),-                                    ("Julyinteger (numeric)", -2.1400661634962708)],-                               n = 21},-                   koData =-                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.3353749158170367),-                                    ("Marchinteger (numeric)", -2.740840023925201),-                                    ("Aprilinteger (numeric)", -2.740840023925201),-                                    ("month", -0.9490805546971459),-                                    ("from|since|after <time-of-day>integer (numeric)",-                                     -2.3353749158170367),-                                    ("Julyinteger (numeric)", -1.6422277352570913)],-                               n = 11}}),-       ("this|next <day-of-week>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.2512917986064953),-                                    ("Wednesday", -2.2512917986064953),-                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),-                                    ("Tuesday", -1.55814461804655)],-                               n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinal (digits)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5553480614894135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 33},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter (grain)",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("last <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)October", -1.791759469228055),-                                    ("daymonth", -1.2809338454620642),-                                    ("day (grain)intersect", -1.791759469228055),-                                    ("weekmonth", -1.791759469228055),-                                    ("week (grain)intersect", -2.1972245773362196),-                                    ("week (grain)September", -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month>(ordinal) <named-month> year",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)April", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Black Friday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Labor Day",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("week-end",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7}}),-       ("day (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.2188758248682006,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("right now",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("for <duration> from <time>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -1.5040773967762742),-                                    ("dayday", -1.0986122886681098),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -1.5040773967762742)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.252762968495368),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -1.252762968495368)],-                               n = 1}}),-       ("between <time> and <time>",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.0116009116784799),-                                    ("hh:mmhh:mm", -1.0116009116784799)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.4469189829363254),-                                    ("minuteminute", -1.4469189829363254),-                                    ("minutehour", -1.4469189829363254),-                                    ("hh:mmintersect", -1.4469189829363254)],-                               n = 6}}),-       ("<month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),-                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",-                                     -2.740840023925201),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -2.3353749158170367),-                                    ("month", -0.8690378470236094),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -2.3353749158170367)],-                               n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of days",-        Classifier{okData =-                     ClassData{prior = -4.0821994520255166e-2,-                               unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -3.2188758248682006,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("summer",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("dd-dd <month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)September",-                                     -1.791759469228055),-                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),-                                    ("ordinal (digits)ordinal (digits)October",-                                     -2.1972245773362196),-                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),-                                    ("month", -0.9444616088408514),-                                    ("ordinal (digits)ordinal (digits)August",-                                     -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.5257286443082556),-                                    ("Martin Luther King's Day", -2.5257286443082556),-                                    ("Monday", -2.5257286443082556), ("day", -1.1394342831883648),-                                    ("Thanksgiving Day", -2.5257286443082556),-                                    ("hour", -2.5257286443082556), ("winter", -2.5257286443082556),-                                    ("week-end", -2.5257286443082556),-                                    ("summer", -2.120263536200091)],-                               n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.3025850929940455,+      [("Military Spouse Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Bhai Dooj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)noon|midnight|EOD|end of day",+                                     -0.916290731874155),+                                    ("hour", -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.7537718023763802),+                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],+                               n = 7}}),+       ("<time> timezone",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -1.824549292051046),+                                    ("<time-of-day> am|pm", -1.6422277352570913),+                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),+                                    ("minute", -1.824549292051046)],+                               n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thursday",+        Classifier{okData =+                     ClassData{prior = -9.53101798043249e-2,+                               unseen = -3.4657359027997265,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 30},+                   koData =+                     ClassData{prior = -2.3978952727983707,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("integer (numeric)",+        Classifier{okData =+                     ClassData{prior = -0.6239027683849615, unseen = -5.655991810819852,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 284},+                   koData =+                     ClassData{prior = -0.7675454706138047,+                               unseen = -5.5134287461649825,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 246}}),+       ("<duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = -5.406722127027582e-2,+                               unseen = -3.784189633918261,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),+                                    ("year", -2.662587827025453),+                                    ("<integer> <unit-of-duration>", -1.0531499145913523),+                                    ("a <unit-of-duration>", -2.662587827025453),+                                    ("month", -2.662587827025453),+                                    ("fortnight", -2.662587827025453)],+                               n = 18},+                   koData =+                     ClassData{prior = -2.9444389791664407,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("year", -1.5040773967762742),+                                    ("<integer> <unit-of-duration>", -1.5040773967762742)],+                               n = 1}}),+       ("noon|midnight|EOD|end of day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Father's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.6739764335716716),+                                    ("dayday", -1.1631508098056809),+                                    ("day (grain)yesterday", -1.6739764335716716)],+                               n = 4},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.6739764335716716),+                                    ("year (grain)Christmas", -2.0794415416798357),+                                    ("dayday", -2.0794415416798357),+                                    ("day (grain)intersect", -1.6739764335716716),+                                    ("day (grain)Easter Sunday", -2.0794415416798357),+                                    ("yearday", -2.0794415416798357)],+                               n = 4}}),+       ("Easter Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Navaratri",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Martin Luther King's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("integer (20..90)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Shemini Atzeret",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ramadan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lazarus Saturday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect 2 numbers",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("compose by multiplicationinteger (0..19)",+                                     -0.2231435513142097)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("powers of tensinteger (0..19)", -0.2231435513142097)],+                               n = 3}}),+       ("mm/yyyy",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("integer after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.8109302162163288),+                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),+                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom HaShoah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal or number) <named-month>",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)December", -2.1400661634962708),+                                    ("ordinal (digits)February", -2.1400661634962708),+                                    ("integer (numeric)April", -2.1400661634962708),+                                    ("month", -1.4469189829363254)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.4011973816621555,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)October", -2.6741486494265287),+                                    ("ordinal (digits)July", -2.6741486494265287),+                                    ("integer (numeric)September", -2.268683541318364),+                                    ("ordinal (digits)August", -2.6741486494265287),+                                    ("integer (numeric)August", -2.6741486494265287),+                                    ("ordinal (digits)April", -2.6741486494265287),+                                    ("month", -1.0647107369924282),+                                    ("integer (numeric)July", -2.268683541318364)],+                               n = 9}}),+       ("<time> <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -9.237332013101517e-2,+                               unseen = -4.48863636973214,+                               likelihoods =+                                 HashMap.fromList+                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("dayhour", -1.4816045409242156),+                                    ("Mondayearly morning", -3.378724525810097),+                                    ("time-of-day (latent)tonight", -3.378724525810097),+                                    ("hourhour", -2.3978952727983707),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("todaypart of days", -3.784189633918261),+                                    ("minutehour", -2.6855773452501515),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -3.378724525810097),+                                    ("time-of-day (latent)this <part-of-day>", -3.784189633918261),+                                    ("Mondayin|during the <part-of-day>", -3.784189633918261),+                                    ("intersectpart of days", -3.784189633918261),+                                    ("intersectin|during the <part-of-day>", -3.784189633918261),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("tomorrowpart of days", -2.3978952727983707),+                                    ("hh:mmin|during the <part-of-day>", -3.0910424533583156),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("hhmm (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("yesterdaypart of days", -3.378724525810097),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("Mondaypart of days", -3.784189633918261)],+                               n = 31},+                   koData =+                     ClassData{prior = -2.4277482359480516,+                               unseen = -3.4965075614664802,+                               likelihoods =+                                 HashMap.fromList+                                   [("yearhour", -2.772588722239781),+                                    ("monthhour", -2.772588722239781),+                                    ("hourhour", -2.772588722239781),+                                    ("year (latent)in|during the <part-of-day>",+                                     -2.772588722239781),+                                    ("Februaryin|during the <part-of-day>", -2.772588722239781),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -2.772588722239781)],+                               n = 3}}),+       ("Cyber Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("today",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("mm/dd",+        Classifier{okData =+                     ClassData{prior = -1.2729656758128873,+                               unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},+                   koData =+                     ClassData{prior = -0.3285040669720361, unseen = -2.995732273553991,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 18}}),+       ("at <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.961215868968717e-2,+                               unseen = -4.948759890378168,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time> timezone", -3.8430301339411947),+                                    ("noon|midnight|EOD|end of day", -3.8430301339411947),+                                    ("integer after|past <hour-of-day>", -3.8430301339411947),+                                    ("half after|past <hour-of-day>", -4.248495242049359),+                                    ("time-of-day (latent)", -1.6835458845878222),+                                    ("hhmm (latent)", -3.5553480614894135),+                                    ("<time-of-day> am|pm", -1.8061482066801546),+                                    ("hh:mm", -3.332204510175204),+                                    ("about|exactly <time-of-day>", -3.8430301339411947),+                                    ("hour", -1.0704414117014134),+                                    ("<time-of-day> sharp|exactly", -4.248495242049359),+                                    ("minute", -2.05127066471314)],+                               n = 64},+                   koData =+                     ClassData{prior = -2.456735772821304, unseen = -3.2188758248682006,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -1.2321436812926323),+                                    ("hour", -1.2321436812926323)],+                               n = 6}}),+       ("December",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("absorption of , after named day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("on <date>", -2.1972245773362196),+                                    ("Wednesday", -2.6026896854443837),+                                    ("Saturday", -2.6026896854443837),+                                    ("Monday", -2.1972245773362196),+                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),+                                    ("Sunday", -2.6026896854443837)],+                               n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("September",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("tonight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|past|next <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.2626798770413155,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.456735772821304), ("second", -2.639057329615259),+                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),+                                    ("<integer> <unit-of-duration>", -0.7827593392496325),+                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),+                                    ("minute", -2.639057329615259)],+                               n = 31},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the ides of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("on <date>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -4.204692619390966,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -1.4816045409242156),+                                    ("mm/dd", -3.4965075614664802),+                                    ("absorption of , after named day", -3.0910424533583156),+                                    ("intersect", -3.0910424533583156),+                                    ("Saturday", -2.803360380906535),+                                    ("Friday", -3.4965075614664802), ("day", -0.8574502318512216),+                                    ("the <day-of-month> (ordinal)", -3.0910424533583156),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.803360380906535),+                                    ("hour", -3.4965075614664802)],+                               n = 28},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -1.791759469228055)],+                               n = 4}}),+       ("integer (0..19)",+        Classifier{okData =+                     ClassData{prior = -0.11122563511022437,+                               unseen = -3.970291913552122,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 51},+                   koData =+                     ClassData{prior = -2.2512917986064953,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),+       ("between <time-of-day> and <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.7884573603642702),+                                    ("hh:mmhh:mm", -0.7884573603642702)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -0.7884573603642702),+                                    ("minutehour", -0.7884573603642702)],+                               n = 9}}),+       ("Halloween",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Passover",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -1.6094379124341003),+                                    ("month", -0.916290731874155),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("October",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from|since|after <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -1.5950491749820006, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("July", -3.332204510175204),+                                    ("time-of-day (latent)", -2.4159137783010487),+                                    ("<time-of-day> am|pm", -2.4159137783010487),+                                    ("hh:mm", -2.4159137783010487), ("hour", -1.8281271133989299),+                                    ("month", -2.9267394020670396), ("minute", -2.4159137783010487),+                                    ("August", -3.332204510175204)],+                               n = 14},+                   koData =+                     ClassData{prior = -0.22677331936478848,+                               unseen = -4.9344739331306915,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.828641396489095),+                                    ("week", -4.23410650459726),+                                    ("<day-of-month> (ordinal or number) <named-month>",+                                     -4.23410650459726),+                                    ("today", -4.23410650459726), ("intersect", -2.362304327695668),+                                    ("second", -4.23410650459726), ("now", -3.5409593240373143),+                                    ("tomorrow", -3.828641396489095),+                                    ("this|last|next <cycle>", -4.23410650459726),+                                    ("day", -1.8827312474337816),+                                    ("time-of-day (latent)", -4.23410650459726),+                                    ("<time-of-day> am|pm", -3.828641396489095),+                                    ("nograin", -3.5409593240373143),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -4.23410650459726),+                                    ("Easter Sunday", -4.23410650459726),+                                    ("Christmas", -3.5409593240373143),+                                    ("hour", -2.981343536101891), ("month", -4.23410650459726),+                                    ("<datetime> - <datetime> (interval)", -2.847812143477369),+                                    ("<time-of-day> - <time-of-day> (interval)",+                                     -2.5293584123588344),+                                    ("<named-month> <day-of-month> (non ordinal)",+                                     -3.828641396489095),+                                    ("minute", -1.749199854809259),+                                    ("right now", -4.23410650459726),+                                    ("<month> dd-dd (interval)", -3.5409593240373143),+                                    ("dd-dd <month> (interval)", -3.828641396489095)],+                               n = 55}}),+       ("month (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> more <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)minute (grain)", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> o'clock",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in|within|after <duration>",+        Classifier{okData =+                     ClassData{prior = -0.11000089521432846,+                               unseen = -4.6443908991413725,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -3.248434627109745),+                                    ("<integer> more <unit-of-duration>", -3.9415818076696905),+                                    ("three-quarters of an hour", -3.0252910757955354),+                                    ("<integer> + '\"", -3.248434627109745),+                                    ("number.number hours", -3.9415818076696905),+                                    ("second", -3.536116699561526), ("day", -3.248434627109745),+                                    ("half an hour", -3.0252910757955354),+                                    ("year", -3.9415818076696905),+                                    ("<integer> <unit-of-duration>", -1.5902065505062128),+                                    ("a <unit-of-duration>", -3.0252910757955354),+                                    ("quarter of an hour", -3.0252910757955354),+                                    ("hour", -2.5552874465498),+                                    ("about|exactly <duration>", -3.9415818076696905),+                                    ("<integer> and an half hour", -3.9415818076696905),+                                    ("minute", -1.3025244780544318)],+                               n = 43},+                   koData =+                     ClassData{prior = -2.2617630984737906, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -2.1972245773362196), ("year", -1.9095425048844386),+                                    ("<integer> <unit-of-duration>", -1.9095425048844386),+                                    ("a <unit-of-duration>", -2.1972245773362196)],+                               n = 5}}),+       ("January",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("three-quarters of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Mattu Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Wednesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> + '\"",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half <integer> (UK style hour-of-day)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("July",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hour (grain)",+        Classifier{okData =+                     ClassData{prior = -0.8209805520698302,+                               unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),+       ("Shavuot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> <duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayyear", -0.6931471805599453),+                                    ("Diwali<integer> <unit-of-duration>", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),+                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",+                                     -1.466337068793427),+                                    ("quarter", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),+                                    ("quarter", -0.8109302162163288)],+                               n = 3}}),+       ("Boss's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Orthodox Easter Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("one twenty two",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect",+        Classifier{okData =+                     ClassData{prior = -0.454305983502537, unseen = -6.732210706467206,+                               likelihoods =+                                 HashMap.fromList+                                   [("Navaratriyear (latent)", -6.037870919922137),+                                    ("Father's Dayyear (latent)", -6.037870919922137),+                                    ("Ramadanyear (latent)", -6.037870919922137),+                                    ("<datetime> - <datetime> (interval)on <date>",+                                     -4.785107951426769),+                                    ("Military Spouse Dayyear (latent)", -6.037870919922137),+                                    ("Bhai Doojyear (latent)", -6.037870919922137),+                                    ("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -4.785107951426769),+                                    ("hourday", -4.333122827683712),+                                    ("dayhour", -3.1201001878378585),+                                    ("Martin Luther King's Dayyear (latent)", -5.632405811813974),+                                    ("Shemini Atzeretyear (latent)", -6.037870919922137),+                                    ("daymonth", -5.344723739362192),+                                    ("monthday", -5.632405811813974),+                                    ("monthyear", -4.428433007488038),+                                    ("Yom Ha'atzmautyear (latent)", -6.037870919922137),+                                    ("Vijayadashamiyear (latent)", -6.037870919922137),+                                    ("Thanksgiving Dayyear (latent)", -4.939258631254028),+                                    ("Thai Pongalyear (latent)", -5.344723739362192),+                                    ("Thiru Onamyear (latent)", -5.344723739362192),+                                    ("Tuesdaythe <day-of-month> (ordinal)", -6.037870919922137),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -6.037870919922137),+                                    ("houryear", -5.344723739362192),+                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",+                                     -6.037870919922137),+                                    ("Christmas<time-of-day> am|pm", -6.037870919922137),+                                    ("last <day-of-week> of <time>year (latent)",+                                     -6.037870919922137),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.344723739362192),+                                    ("<time-of-day> am|pmintersect", -4.785107951426769),+                                    ("Octoberyear (latent)", -4.785107951426769),+                                    ("intersect<time-of-day> am|pm", -6.037870919922137),+                                    ("Mattu Pongalyear (latent)", -6.037870919922137),+                                    ("Shavuotyear (latent)", -6.037870919922137),+                                    ("Dhanterasin <named-month>|year", -6.037870919922137),+                                    ("at <time-of-day>in|within|after <duration>",+                                     -6.037870919922137),+                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -6.037870919922137),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -5.632405811813974),+                                    ("Marchyear (latent)", -6.037870919922137),+                                    ("Sukkotyear (latent)", -5.632405811813974),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -6.037870919922137),+                                    ("Clean Mondayyear (latent)", -5.632405811813974),+                                    ("monthhour", -5.632405811813974),+                                    ("todayat <time-of-day>", -6.037870919922137),+                                    ("Thursday<time> timezone", -4.333122827683712),+                                    ("this <time>hh(:mm) - <time-of-day> am|pm",+                                     -6.037870919922137),+                                    ("Palm SundaySunday", -5.632405811813974),+                                    ("dayday", -3.8406463425859183),+                                    ("<time> <part-of-day>at <time-of-day>", -6.037870919922137),+                                    ("mm/ddat <time-of-day>", -6.037870919922137),+                                    ("tonightat <time-of-day>", -6.037870919922137),+                                    ("<time-of-day> am|pmabsorption of , after named day",+                                     -5.344723739362192),+                                    ("today<time-of-day> am|pm", -6.037870919922137),+                                    ("Februarythe <day-of-month> (ordinal)", -5.632405811813974),+                                    ("at <time-of-day><time> <part-of-day>", -6.037870919922137),+                                    ("mm/dd<time-of-day> am|pm", -6.037870919922137),+                                    ("hourhour", -4.785107951426769),+                                    ("<time-of-day> am|pmon <date>", -4.022967899379873),+                                    ("Wednesdaythis|last|next <cycle>", -6.037870919922137),+                                    ("Lentyear (latent)", -6.037870919922137),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -4.533793523145864),+                                    ("Boghiyear (latent)", -6.037870919922137),+                                    ("dayyear", -1.9688441656843267),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -6.037870919922137),+                                    ("Thursdayat <time-of-day>", -5.632405811813974),+                                    ("Islamic New Yearyear (latent)", -5.632405811813974),+                                    ("Laylat al-Qadryear (latent)", -5.121580188047982),+                                    ("Chhathin <named-month>|year", -6.037870919922137),+                                    ("Vasant Panchamiin <named-month>|year", -6.037870919922137),+                                    ("Diwaliin <named-month>|year", -6.037870919922137),+                                    ("Shrove Tuesdayyear (latent)", -6.037870919922137),+                                    ("<time-of-day> am|pmtomorrow", -5.344723739362192),+                                    ("Yom Kippuryear (latent)", -6.037870919922137),+                                    ("<part-of-day> of <time>year (latent)", -6.037870919922137),+                                    ("minutehour", -5.121580188047982),+                                    ("Kaanum Pongalyear (latent)", -5.632405811813974),+                                    ("Maha Saptamiyear (latent)", -6.037870919922137),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -5.632405811813974),+                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",+                                     -4.333122827683712),+                                    ("for <duration> from <time>December", -6.037870919922137),+                                    ("tomorrow<time-of-day> sharp|exactly", -6.037870919922137),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.121580188047982),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -5.632405811813974),+                                    ("Pentecostyear (latent)", -6.037870919922137),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.121580188047982),+                                    ("Eid al-Fitryear (latent)", -6.037870919922137),+                                    ("Mondayin|during the <part-of-day>", -6.037870919922137),+                                    ("Raksha Bandhanyear (latent)", -6.037870919922137),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.632405811813974),+                                    ("Navaratriin <named-month>|year", -6.037870919922137),+                                    ("Ashurayear (latent)", -6.037870919922137),+                                    ("Chinese New Yearyear (latent)", -6.037870919922137),+                                    ("Sundayyear (latent)", -6.037870919922137),+                                    ("Lag BaOmeryear (latent)", -6.037870919922137),+                                    ("last weekend of <named-month>year (latent)",+                                     -6.037870919922137),+                                    ("Eid al-Adhayear (latent)", -5.121580188047982),+                                    ("intersectin|during the <part-of-day>", -6.037870919922137),+                                    ("Christmasat <time-of-day>", -6.037870919922137),+                                    ("Passoveryear (latent)", -6.037870919922137),+                                    ("Lazarus Saturdayyear (latent)", -6.037870919922137),+                                    ("<day-of-month> (ordinal or number) <named-month>year (latent)",+                                     -6.037870919922137),+                                    ("Cyber Mondayyear (latent)", -5.632405811813974),+                                    ("Yom HaShoahyear (latent)", -5.632405811813974),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -5.121580188047982),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -6.037870919922137),+                                    ("Thai Pongalin <named-month>|year", -6.037870919922137),+                                    ("Septemberyear (latent)", -5.632405811813974),+                                    ("mm/ddyear (latent)", -6.037870919922137),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -4.785107951426769),+                                    ("Halloweenyear (latent)", -6.037870919922137),+                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.344723739362192),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -5.121580188047982),+                                    ("at <time-of-day>intersect", -5.632405811813974),+                                    ("Rosh Hashanahyear (latent)", -6.037870919922137),+                                    ("Dhanterasyear (latent)", -6.037870919922137),+                                    ("Tu BiShvatyear (latent)", -6.037870919922137),+                                    ("Holiyear (latent)", -5.344723739362192),+                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",+                                     -6.037870919922137),+                                    ("Holika Dahanyear (latent)", -5.344723739362192),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.037870919922137),+                                    ("dayminute", -3.398813590306879),+                                    ("Mawlidyear (latent)", -6.037870919922137),+                                    ("from <datetime> - <datetime> (interval)on <date>",+                                     -5.632405811813974),+                                    ("<datetime> - <datetime> (interval)tomorrow",+                                     -6.037870919922137),+                                    ("Jumu'atul-Widayear (latent)", -5.121580188047982),+                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.037870919922137),+                                    ("minuteday", -2.400284760195752),+                                    ("absorption of , after named dayintersect",+                                     -6.037870919922137),+                                    ("intersectyear (latent)", -6.037870919922137),+                                    ("Orthodox Easter Sundayyear (latent)", -6.037870919922137),+                                    ("<ordinal> <cycle> of <time>year (latent)",+                                     -6.037870919922137),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -6.037870919922137),+                                    ("Boss's Dayyear (latent)", -5.632405811813974),+                                    ("Tisha B'Avyear (latent)", -6.037870919922137),+                                    ("Isra and Mi'rajyear (latent)", -5.121580188047982),+                                    ("at <time-of-day>absorption of , after named day",+                                     -6.037870919922137),+                                    ("Christmasyear (latent)", -5.632405811813974),+                                    ("Naraka Chaturdashiyear (latent)", -5.632405811813974),+                                    ("at <time-of-day>on <date>", -4.939258631254028),+                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",+                                     -4.428433007488038),+                                    ("dayweek", -6.037870919922137),+                                    ("Easter Sundayyear (latent)", -5.344723739362192),+                                    ("Thursday<time-of-day> am|pm", -6.037870919922137),+                                    ("weekyear", -5.632405811813974),+                                    ("hh:mmin|during the <part-of-day>", -5.344723739362192),+                                    ("<cycle> after|before <time><time-of-day> am|pm",+                                     -5.632405811813974),+                                    ("Hanukkahyear (latent)", -6.037870919922137),+                                    ("February<time> <part-of-day>", -6.037870919922137),+                                    ("National Grandparents Dayyear (latent)", -6.037870919922137),+                                    ("Tuesdayin <named-month>|year", -6.037870919922137),+                                    ("Great Lentyear (latent)", -6.037870919922137),+                                    ("tomorrowat <time-of-day>", -5.344723739362192),+                                    ("Labor Dayyear (latent)", -6.037870919922137),+                                    ("between <time> and <time>on <date>", -4.428433007488038),+                                    ("Thursdayfrom|since|after <time-of-day>", -5.344723739362192),+                                    ("last <cycle> of <time>year (latent)", -5.344723739362192),+                                    ("at <time-of-day>tomorrow", -5.632405811813974),+                                    ("tomorrow<time-of-day> am|pm", -6.037870919922137),+                                    ("President's Dayyear (latent)", -6.037870919922137),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -6.037870919922137),+                                    ("Diwaliyear (latent)", -6.037870919922137),+                                    ("Black Fridayyear (latent)", -5.632405811813974),+                                    ("in|during the <part-of-day>at <time-of-day>",+                                     -6.037870919922137),+                                    ("Chhathyear (latent)", -5.632405811813974),+                                    ("Vasant Panchamiyear (latent)", -6.037870919922137),+                                    ("Palm Sundayintersect", -6.037870919922137),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -6.037870919922137),+                                    ("Februaryintersect", -6.037870919922137),+                                    ("Mother's Dayyear (latent)", -6.037870919922137),+                                    ("Simchat Torahyear (latent)", -6.037870919922137)],+                               n = 313},+                   koData =+                     ClassData{prior = -1.0075523231524797, unseen = -6.35088571671474,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.655991810819852),+                                    ("hourday", -5.655991810819852),+                                    ("<named-month> <day-of-month> (non ordinal)July",+                                     -5.655991810819852),+                                    ("dayhour", -3.213644775450648),+                                    ("daymonth", -3.5765502691400166),+                                    ("monthday", -5.250526702711688),+                                    ("monthyear", -4.403228842324484),+                                    ("<time-of-day> am|pmyear (latent)", -5.250526702711688),+                                    ("Thai Pongalyear (latent)", -4.962844630259907),+                                    ("intersecthh:mm", -5.655991810819852),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -5.655991810819852),+                                    ("houryear", -4.739701078945697),+                                    ("from <time-of-day> - <time-of-day> (interval)July",+                                     -5.655991810819852),+                                    ("until <time-of-day><time-of-day> am|pm", -5.655991810819852),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.962844630259907),+                                    ("<time-of-day> am|pmintersect", -4.403228842324484),+                                    ("Octoberyear (latent)", -5.655991810819852),+                                    ("from|since|after <time-of-day>year (latent)",+                                     -4.403228842324484),+                                    ("from|since|after <time-of-day>on <date>", -4.739701078945697),+                                    ("July<day-of-month> (ordinal or number) <named-month>",+                                     -5.655991810819852),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -4.403228842324484),+                                    ("about|exactly <time-of-day>year (latent)",+                                     -5.655991810819852),+                                    ("absorption of , after named dayJuly", -5.250526702711688),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.739701078945697),+                                    ("Clean Mondayyear (latent)", -5.655991810819852),+                                    ("monthhour", -5.655991810819852),+                                    ("hourmonth", -4.962844630259907),+                                    ("todayat <time-of-day>", -5.655991810819852),+                                    ("from|since|after <time-of-day>July", -5.655991810819852),+                                    ("Mondayyear (latent)", -4.557379522151743),+                                    ("dayday", -5.250526702711688),+                                    ("mm/ddat <time-of-day>", -5.250526702711688),+                                    ("<time-of-day> am|pmon <date>", -4.403228842324484),+                                    ("dayyear", -2.6355669246754903),+                                    ("Thursdaymm/dd", -5.655991810819852),+                                    ("New Year's Dayyear (latent)", -5.250526702711688),+                                    ("Thursdayat <time-of-day>", -4.403228842324484),+                                    ("<integer> to|till|before <hour-of-day>September",+                                     -5.655991810819852),+                                    ("Aprilyear (latent)", -5.655991810819852),+                                    ("monthminute", -5.655991810819852),+                                    ("<time-of-day> am|pmtomorrow", -5.655991810819852),+                                    ("Thursdayhh:mm", -4.739701078945697),+                                    ("August<day-of-month> (ordinal or number) <named-month>",+                                     -5.655991810819852),+                                    ("minutemonth", -3.8642323415917974),+                                    ("Sundayfrom|since|after <time-of-day>", -5.655991810819852),+                                    ("week-endin <named-month>|year", -5.655991810819852),+                                    ("Augustyear (latent)", -5.250526702711688),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.250526702711688),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.250526702711688),+                                    ("mm/dd<time-of-day> - <time-of-day> (interval)",+                                     -5.250526702711688),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.655991810819852),+                                    ("Sundayyear (latent)", -4.962844630259907),+                                    ("Christmasat <time-of-day>", -5.655991810819852),+                                    ("<duration> after|before|from <time>December",+                                     -5.655991810819852),+                                    ("yesterday<time-of-day> am|pm", -5.655991810819852),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -4.739701078945697),+                                    ("mm/ddyear (latent)", -5.655991810819852),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -5.250526702711688),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -5.655991810819852),+                                    ("until <time-of-day>on <date>", -4.962844630259907),+                                    ("at <time-of-day>intersect", -5.250526702711688),+                                    ("hh:mmyear (latent)", -4.557379522151743),+                                    ("Holiyear (latent)", -5.655991810819852),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.655991810819852),+                                    ("dayminute", -3.1710851610318525),+                                    ("intersectSeptember", -4.151914414043579),+                                    ("minuteday", -2.5879388756862354),+                                    ("absorption of , after named dayintersect",+                                     -5.655991810819852),+                                    ("Februaryin|during the <part-of-day>", -5.655991810819852),+                                    ("hh:mmon <date>", -3.6410887902775877),+                                    ("Saturdayyear (latent)", -5.655991810819852),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -5.655991810819852),+                                    ("absorption of , after named daySeptember",+                                     -4.739701078945697),+                                    ("Naraka Chaturdashiyear (latent)", -5.655991810819852),+                                    ("on <date>September", -5.250526702711688),+                                    ("at <time-of-day>on <date>", -5.250526702711688),+                                    ("in <named-month>|yearyear (latent)", -5.655991810819852),+                                    ("dayweek", -5.655991810819852),+                                    ("Easter Sundayyear (latent)", -5.250526702711688),+                                    ("Thursday<time-of-day> am|pm", -5.250526702711688),+                                    ("absorption of , after named dayFebruary", -4.739701078945697),+                                    ("July<integer> to|till|before <hour-of-day>",+                                     -5.655991810819852),+                                    ("tomorrowat <time-of-day>", -5.655991810819852),+                                    ("<integer> to|till|before <hour-of-day>July",+                                     -5.655991810819852),+                                    ("Thursdayfrom|since|after <time-of-day>", -4.046553898385752),+                                    ("tomorrow<time-of-day> am|pm", -5.655991810819852),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -4.962844630259907),+                                    ("Diwaliyear (latent)", -5.250526702711688),+                                    ("Tuesdayfrom|since|after <time-of-day>", -5.655991810819852),+                                    ("Fridayyear (latent)", -5.250526702711688),+                                    ("minuteyear", -4.403228842324484)],+                               n = 180}}),+       ("one eleven",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("after lunch/work/school",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("early morning",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <number> (implicit minutes)",+        Classifier{okData =+                     ClassData{prior = -1.2039728043259361,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.3184537311185346),+                                    ("integer (0..19)", -1.2992829841302609)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.35667494393873245,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.19105523676270922),+                                    ("integer (0..19)", -1.749199854809259)],+                               n = 21}}),+       ("<ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.791759469228055),+                                    ("ordinal (digits)quarter (grain)year (latent)",+                                     -2.1972245773362196),+                                    ("quarteryear", -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",+                                     -2.1972245773362196),+                                    ("ordinal (digits)day (grain)this|last|next <cycle>",+                                     -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",+                                     -2.1972245773362196),+                                    ("weekmonth", -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",+                                     -2.1972245773362196)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 27},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -1.0116009116784799,+                               unseen = -3.6375861597263857,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -2.001480000210124),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("hh:mmhh:mm", -2.001480000210124),+                                    ("dayday", -2.512305623976115),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),+                                    ("hourhour", -2.512305623976115),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],+                               n = 8},+                   koData =+                     ClassData{prior = -0.45198512374305727,+                               unseen = -3.912023005428146,+                               likelihoods =+                                 HashMap.fromList+                                   [("hourday", -3.1986731175506815),+                                    ("dayhour", -2.793208009442517),+                                    ("<day-of-month> (ordinal)time-of-day (latent)",+                                     -3.1986731175506815),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -3.1986731175506815),+                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),+                                    ("minuteminute", -2.793208009442517),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.793208009442517),+                                    ("dayday", -3.1986731175506815),+                                    ("hourhour", -2.505525936990736),+                                    ("dayyear", -3.1986731175506815),+                                    ("minutehour", -2.2823823856765264),+                                    ("hh:mmintersect", -2.793208009442517),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<time-of-day> am|pm",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",+                                     -3.1986731175506815)],+                               n = 14}}),+       ("Saturday",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("the <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -1.7346010553881064),+                                    ("weekmonth", -1.7346010553881064),+                                    ("week (grain)October", -1.7346010553881064),+                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",+                                     -1.7346010553881064),+                                    ("weekday", -1.2237754316221157)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("number.number hours",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.6094379124341003),+                                    ("hh:mmhh:mm", -1.6094379124341003),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),+                                    ("hourhour", -2.3025850929940455),+                                    ("hourminute", -2.3025850929940455),+                                    ("time-of-day (latent)<time-of-day> sharp|exactly",+                                     -2.70805020110221),+                                    ("time-of-day (latent)hh:mm", -2.70805020110221),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.0149030205422647),+                                    ("hourhour", -1.791759469228055),+                                    ("minutehour", -1.6094379124341003),+                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],+                               n = 9}}),+       ("integer 21..99",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),+                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],+                               n = 4}}),+       ("Tisha B'Av",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("yyyy-mm-dd",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (latent)",+        Classifier{okData =+                     ClassData{prior = -0.15524059819128397,+                               unseen = -4.912654885736052,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -4.546237407675729e-2),+                                    ("intersect 2 numbers", -3.518980417318539)],+                               n = 131},+                   koData =+                     ClassData{prior = -1.9393954680341197, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.3121863889661687),+                                    ("negative numbers", -0.6190392084062235),+                                    ("compose by multiplication", -1.8718021769015913)],+                               n = 22}}),+       ("mm/dd/yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Memorial Day",+        Classifier{okData =+                     ClassData{prior = -0.1823215567939546,+                               unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -1.791759469228055, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Monday",+        Classifier{okData =+                     ClassData{prior = -0.5108256237659907, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -0.916290731874155, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8}}),+       ("yesterday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lincoln's Birthday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm:ss",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Hanukkah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<hour-of-day> <integer>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),+                                    ("hour", -0.9808292530117262),+                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>integer (numeric)",+                                     -1.0986122886681098),+                                    ("hour", -1.0986122886681098)],+                               n = 1}}),+       ("nth <time> of <time>",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.9808292530117262),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -2.0794415416798357),+                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",+                                     -1.6739764335716716),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",+                                     -1.6739764335716716)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.0986122886681098),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",+                                     -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",+                                     -1.3862943611198906)],+                               n = 3}}),+       ("National Grandparents Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Valentine's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("April",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maha Saptami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week (grain)",+        Classifier{okData =+                     ClassData{prior = -4.0821994520255166e-2,+                               unseen = -4.304065093204169,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 72},+                   koData =+                     ClassData{prior = -3.2188758248682006,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("<part-of-day> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.3513752571634776),+                                    ("part of daysintersect", -2.3513752571634776),+                                    ("hourday", -0.9650808960435872),+                                    ("part of daysthe <day-of-month> (ordinal)",+                                     -2.3513752571634776),+                                    ("part of daysthe <day-of-month> (number)",+                                     -2.3513752571634776),+                                    ("part of daysthis <time>", -2.3513752571634776),+                                    ("part of daysChristmas", -1.9459101490553135)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("six thirty six a.m.",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.252762968495368),+                                    ("one twenty two", -0.8472978603872037),+                                    ("one eleven", -1.252762968495368)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Loyalty Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Shrove Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("now",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("<day-of-month> (ordinal or number) of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.3513752571634776),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.3513752571634776),+                                    ("ordinal (digits)February", -2.3513752571634776),+                                    ("integer (numeric)February", -1.9459101490553135),+                                    ("month", -0.9650808960435872),+                                    ("ordinal (digits)March", -2.3513752571634776),+                                    ("integer (numeric)July", -2.3513752571634776)],+                               n = 7},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.5040773967762742),+                                    ("month", -1.5040773967762742)],+                               n = 1}}),+       ("this <part-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.6931471805599453),+                                    ("part of days", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Kaanum Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom Kippur",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("powers of tens",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Friday",+        Classifier{okData =+                     ClassData{prior = -0.3677247801253174,+                               unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},+                   koData =+                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("in|during the <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.701137698962981e-2,+                               unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("early morning", -2.5257286443082556),+                                    ("hour", -0.7339691750802004),+                                    ("part of days", -0.8209805520698302)],+                               n = 11},+                   koData =+                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.916290731874155),+                                    ("part of days", -0.916290731874155)],+                               n = 1}}),+       ("tomorrow",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh(:mm) - <time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Groundhog Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|last|next <cycle>",+        Classifier{okData =+                     ClassData{prior = -7.410797215372185e-2,+                               unseen = -5.117993812416755,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.1416958748044215),+                                    ("month (grain)", -2.8094026953624978),+                                    ("year (grain)", -2.472930458741285),+                                    ("week (grain)", -1.1416958748044215),+                                    ("quarter", -3.5025498759224427), ("year", -2.472930458741285),+                                    ("month", -2.8094026953624978),+                                    ("quarter (grain)", -3.5025498759224427)],+                               n = 78},+                   koData =+                     ClassData{prior = -2.639057329615259, unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.4816045409242156),+                                    ("week (grain)", -1.4816045409242156),+                                    ("day", -1.9924301646902063),+                                    ("day (grain)", -1.9924301646902063)],+                               n = 6}}),+       ("Mother's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Simchat Torah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Eve",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Raksha Bandhan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ashura",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Palm Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Adha",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -1.9459101490553135),+                                    ("time-of-day (latent)", -1.9459101490553135),+                                    ("<time-of-day> am|pm", -1.9459101490553135),+                                    ("hh:mm", -1.9459101490553135), ("hour", -1.540445040947149),+                                    ("minute", -1.540445040947149)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2006706954621511,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinals (first..twentieth,thirtieth,...)",+                                     -1.7047480922384253),+                                    ("ordinal (digits)", -0.2006706954621511)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.7047480922384253,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],+                               n = 2}}),+       ("last weekend of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),+                                    ("month", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (number)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lag BaOmer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("fractional number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17}}),+       ("Sunday",+        Classifier{okData =+                     ClassData{prior = -0.262364264467491, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -1.466337068793427, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Chinese New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("February",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("minute (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|this|next <season>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1}}),+       ("time-of-day (latent)",+        Classifier{okData =+                     ClassData{prior = -0.5699145401359973, unseen = -4.290459441148391,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.11778303565638351),+                                    ("integer (0..19)", -2.330755969960742)],+                               n = 69},+                   koData =+                     ClassData{prior = -0.8337291311811348, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -9.352605801082348e-2),+                                    ("integer (0..19)", -2.9267394020670396),+                                    ("integer 21..99", -3.332204510175204)],+                               n = 53}}),+       ("beginning of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last <day-of-week> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.916290731874155),+                                    ("SundayMarch", -1.6094379124341003),+                                    ("MondayMarch", -1.6094379124341003),+                                    ("Sundayintersect", -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.13858616328614667,+                               unseen = -5.147494476813453,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.5026062268874014),+                                    ("integer (0..19)year (grain)", -3.062222014822824),+                                    ("integer (numeric)day (grain)", -2.743768283704289),+                                    ("integer (0..19)second (grain) ", -3.7553691953827695),+                                    ("integer (0..19)hour (grain)", -3.062222014822824),+                                    ("second", -3.349904087274605),+                                    ("integer (numeric)second (grain) ", -4.04305126783455),+                                    ("integer (numeric)year (grain)", -3.349904087274605),+                                    ("day", -2.4336133554004498), ("year", -2.576714199041123),+                                    ("integer (numeric)week (grain)", -3.062222014822824),+                                    ("integer (0..19)month (grain)", -3.5322256440685593),+                                    ("hour", -2.6567569067146595), ("month", -3.1957534074473464),+                                    ("integer (numeric)minute (grain)", -3.1957534074473464),+                                    ("integer (0..19)minute (grain)", -3.062222014822824),+                                    ("integer (numeric)month (grain)", -4.04305126783455),+                                    ("minute", -2.5026062268874014),+                                    ("integer (numeric)hour (grain)", -3.5322256440685593),+                                    ("integer (0..19)day (grain)", -3.5322256440685593),+                                    ("integer (0..19)week (grain)", -3.1957534074473464)],+                               n = 74},+                   koData =+                     ClassData{prior = -2.044755983691946, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),+                                    ("integer (numeric)hour (grain)", -1.4087672169719492),+                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],+                               n = 11}}),+       ("hhmm (latent)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -5.342334251964811,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer after|past <hour-of-day>", -3.951243718581427),+                                    ("at <time-of-day>", -2.202043863772168),+                                    ("from|since|after <time-of-day>", -3.7281001672672174),+                                    ("<time-of-day> o'clock", -4.238925791033208),+                                    ("half after|past <hour-of-day>", -4.238925791033208),+                                    ("time-of-day (latent)", -1.7266201670570935),+                                    ("hhmm (latent)", -4.6443908991413725),+                                    ("hh:mm", -2.293015641977895),+                                    ("quarter after|past <hour-of-day>", -4.6443908991413725),+                                    ("about|exactly <time-of-day>", -4.6443908991413725),+                                    ("until <time-of-day>", -3.951243718581427),+                                    ("hour", -1.2104036946562264),+                                    ("<time-of-day> sharp|exactly", -4.6443908991413725),+                                    ("minute", -1.754019141245208)],+                               n = 96},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -4.394449154672439,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),+                                    ("from|since|after <time-of-day>", -3.283414346005772),+                                    ("<hour-of-day> <integer>", -3.6888794541139363),+                                    ("time-of-day (latent)", -1.0498221244986778),+                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],+                               n = 32}}),+       ("Yom Ha'atzmaut",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),+                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),+                                    ("month", -0.8472978603872037)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thiru Onam",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thai Pongal",+        Classifier{okData =+                     ClassData{prior = -0.5596157879354228, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -0.8472978603872037,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Vijayadashami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thanksgiving Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("a <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.5306282510621704,+                               unseen = -3.5553480614894135,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.1400661634962708),+                                    ("year (grain)", -2.4277482359480516),+                                    ("second", -2.833213344056216),+                                    ("week (grain)", -2.1400661634962708),+                                    ("day", -2.1400661634962708),+                                    ("minute (grain)", -2.833213344056216),+                                    ("year", -2.4277482359480516),+                                    ("second (grain) ", -2.833213344056216),+                                    ("minute", -2.833213344056216),+                                    ("day (grain)", -2.1400661634962708)],+                               n = 10},+                   koData =+                     ClassData{prior = -0.8873031950009028, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour (grain)", -1.7227665977411035),+                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),+                                    ("quarter (grain)", -1.9459101490553135)],+                               n = 7}}),+       ("at the beginning|end of <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("year (latent)", -0.6931471805599453),+                                    ("year", -0.6931471805599453)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Dhanteras",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Tu BiShvat",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Whit Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm",+        Classifier{okData =+                     ClassData{prior = -5.6352936551131744e-2,+                               unseen = -4.2626798770413155,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 69},+                   koData =+                     ClassData{prior = -2.9041650800285006, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("Holi",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Rosh Hashanah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Holika Dahan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("second (grain) ",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinals (first..twentieth,thirtieth,...)",+        Classifier{okData =+                     ClassData{prior = -6.899287148695143e-2,+                               unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},+                   koData =+                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Mawlid",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Jumu'atul-Wida",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.252762968495368),+                                    ("dayday", -0.8472978603872037),+                                    ("day (grain)yesterday", -1.252762968495368)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("about|exactly <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -3.6109179126442243,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.791759469228055),+                                    ("hh(:mm) - <time-of-day> am|pm", -2.890371757896165),+                                    ("this|last|next <cycle>", -1.791759469228055),+                                    ("day", -2.4849066497880004),+                                    ("time-of-day (latent)", -2.890371757896165),+                                    ("hhmm (latent)", -2.4849066497880004),+                                    ("<time-of-day> am|pm", -2.890371757896165),+                                    ("hour", -2.1972245773362196),+                                    ("next <time>", -2.890371757896165),+                                    ("this|next <day-of-week>", -2.890371757896165),+                                    ("minute", -2.4849066497880004)],+                               n = 12},+                   koData =+                     ClassData{prior = -1.9459101490553135, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("mm/dd", -2.0794415416798357), ("day", -2.0794415416798357),+                                    ("time-of-day (latent)", -2.0794415416798357),+                                    ("hour", -2.0794415416798357)],+                               n = 2}}),+       ("Sukkot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> in <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("monthyear", -1.2992829841302609),+                                    ("Marcha <unit-of-duration>", -1.7047480922384253),+                                    ("March<integer> <unit-of-duration>", -1.7047480922384253),+                                    ("Vijayadashami<integer> <unit-of-duration>",+                                     -1.7047480922384253),+                                    ("dayyear", -1.7047480922384253)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("World Vegan Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect by \",\", \"of\", \"from\", \"'s\"",+        Classifier{okData =+                     ClassData{prior = -0.45547552868282576,+                               unseen = -5.117993812416755,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",+                                     -4.418840607796598),+                                    ("dayhour", -3.16607763930123), ("daymonth", -3.16607763930123),+                                    ("<named-month> <day-of-month> (non ordinal)Friday",+                                     -4.418840607796598),+                                    ("Friday<named-month> <day-of-month> (non ordinal)",+                                     -3.7256934272366524),+                                    ("Wednesdayintersect", -4.418840607796598),+                                    ("Labor Daythis|last|next <cycle>", -4.418840607796598),+                                    ("Black Fridaythis|last|next <cycle>", -4.418840607796598),+                                    ("<part-of-day> of <time>February", -4.418840607796598),+                                    ("Saturday<time-of-day> am|pm", -4.418840607796598),+                                    ("Martin Luther King's Daythis|last|next <cycle>",+                                     -4.013375499688434),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.418840607796598),+                                    ("on <date><time-of-day> am|pm", -4.418840607796598),+                                    ("hourmonth", -4.418840607796598),+                                    ("dayday", -2.5470384308950065),+                                    ("the <day-of-month> (ordinal)February", -4.013375499688434),+                                    ("WednesdayOctober", -4.418840607796598),+                                    ("Wednesdaythis|last|next <cycle>", -4.013375499688434),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -3.5025498759224427),+                                    ("dayyear", -2.7140925155581725),+                                    ("Saturday<named-month> <day-of-month> (non ordinal)",+                                     -4.418840607796598),+                                    ("Thursdayhh:mm", -4.013375499688434),+                                    ("Thanksgiving Daythis|last|next <cycle>", -4.418840607796598),+                                    ("Memorial Daythis|last|next <cycle>", -4.418840607796598),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -4.013375499688434),+                                    ("TuesdayOctober", -4.418840607796598),+                                    ("the <day-of-month> (ordinal)March", -4.418840607796598),+                                    ("Mondaythis|last|next <cycle>", -4.418840607796598),+                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.418840607796598),+                                    ("Fridayintersect", -4.418840607796598),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -3.7256934272366524),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.5025498759224427),+                                    ("Tuesdaythis|last|next <cycle>", -4.418840607796598),+                                    ("Sunday<named-month> <day-of-month> (non ordinal)",+                                     -4.418840607796598),+                                    ("dayminute", -3.0325462466767075),+                                    ("minuteday", -3.5025498759224427),+                                    ("this|last|next <cycle>Sunday", -4.418840607796598),+                                    ("intersectyear (latent)", -4.418840607796598),+                                    ("Sundaythis|last|next <cycle>", -4.418840607796598),+                                    ("weekday", -4.418840607796598),+                                    ("dayweek", -3.3202283191284883),+                                    ("Thursday<time-of-day> am|pm", -4.418840607796598),+                                    ("Monday<named-month> <day-of-month> (non ordinal)",+                                     -4.013375499688434),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -4.013375499688434)],+                               n = 52},+                   koData =+                     ClassData{prior = -1.0055218656020977, unseen = -4.812184355372417,+                               likelihoods =+                                 HashMap.fromList+                                   [("week-endJuly", -4.110873864173311),+                                    ("week-endOctober", -3.417726683613366),+                                    ("daymonth", -1.9136492868370918),+                                    ("TuesdaySeptember", -4.110873864173311),+                                    ("Wednesdayintersect", -4.110873864173311),+                                    ("hourmonth", -3.012261575505202),+                                    ("Fridaythis|last|next <cycle>", -4.110873864173311),+                                    ("SundayFebruary", -4.110873864173311),+                                    ("WednesdayOctober", -4.110873864173311),+                                    ("week-endintersect", -4.110873864173311),+                                    ("dayyear", -4.110873864173311),+                                    ("FridayJuly", -3.7054087560651467),+                                    ("FridaySeptember", -4.110873864173311),+                                    ("WednesdayFebruary", -4.110873864173311),+                                    ("minutemonth", -3.1945831322991562),+                                    ("SundayMarch", -4.110873864173311),+                                    ("MondayFebruary", -3.7054087560651467),+                                    ("Fridayintersect", -4.110873864173311),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.7054087560651467),+                                    ("dayminute", -3.417726683613366),+                                    ("SaturdaySeptember", -4.110873864173311),+                                    ("intersectSeptember", -3.1945831322991562),+                                    ("MondayMarch", -4.110873864173311),+                                    ("on <date>September", -3.7054087560651467),+                                    ("Tuesdayintersect", -4.110873864173311),+                                    ("Sundayintersect", -4.110873864173311)],+                               n = 30}}),+       ("last <time>",+        Classifier{okData =+                     ClassData{prior = -0.4595323293784402,+                               unseen = -3.6635616461296463,+                               likelihoods =+                                 HashMap.fromList+                                   [("Father's Day", -2.9444389791664407),+                                    ("Martin Luther King's Day", -2.9444389791664407),+                                    ("Cyber Monday", -2.9444389791664407),+                                    ("Memorial Day", -2.9444389791664407),+                                    ("Mother's Day", -2.9444389791664407),+                                    ("day", -1.1526795099383855), ("Sunday", -2.9444389791664407),+                                    ("Chinese New Year", -2.538973871058276),+                                    ("Thanksgiving Day", -2.9444389791664407),+                                    ("Easter Sunday", -2.9444389791664407),+                                    ("hour", -2.9444389791664407), ("Tuesday", -2.9444389791664407),+                                    ("week-end", -2.9444389791664407)],+                               n = 12},+                   koData =+                     ClassData{prior = -0.9985288301111273, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("Monday", -2.639057329615259), ("day", -2.2335922215070942),+                                    ("Sunday", -2.639057329615259), ("hour", -1.540445040947149),+                                    ("week-end", -1.540445040947149)],+                               n = 7}}),+       ("March",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.044522437723423,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 19},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<named-month>|<named-day> <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("Octoberordinal (digits)", -2.120263536200091),+                                    ("Thursdayordinal (digits)", -2.5257286443082556),+                                    ("day", -2.120263536200091),+                                    ("Augustordinal (digits)", -2.5257286443082556),+                                    ("Marchordinals (first..twentieth,thirtieth,...)",+                                     -2.120263536200091),+                                    ("Tuesdayordinal (digits)", -2.5257286443082556),+                                    ("month", -1.2729656758128873),+                                    ("Marchordinal (digits)", -2.5257286443082556)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("from|since|after <time-of-day>ordinal (digits)",+                                     -1.8718021769015913),+                                    ("Augustordinal (digits)", -1.8718021769015913),+                                    ("month", -1.466337068793427)],+                               n = 2}}),+       ("Labor Day weekend",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Clean Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Veterans Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Easter Sunday",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),+       ("Christmas",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("until <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -2.3025850929940455),+                                    ("<time-of-day> am|pm", -1.6094379124341003),+                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),+                                    ("minute", -1.3862943611198906)],+                               n = 6},+                   koData =+                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.7227665977411035),+                                    ("yesterday", -2.2335922215070942),+                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),+                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],+                               n = 10}}),+       ("mm.dd.yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Isra and Mi'raj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<duration> after|before|from <time>",+        Classifier{okData =+                     ClassData{prior = -0.3184537311185346,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("a <unit-of-duration>now", -2.803360380906535),+                                    ("a <unit-of-duration>Christmas", -2.803360380906535),+                                    ("dayday", -2.803360380906535),+                                    ("<integer> <unit-of-duration>today", -2.803360380906535),+                                    ("daysecond", -2.803360380906535),+                                    ("a <unit-of-duration>right now", -2.803360380906535),+                                    ("minutenograin", -2.803360380906535),+                                    ("<integer> <unit-of-duration>Christmas", -2.803360380906535),+                                    ("<integer> <unit-of-duration>Easter Sunday",+                                     -2.803360380906535),+                                    ("secondnograin", -2.803360380906535),+                                    ("yearday", -2.1102132003465894),+                                    ("daynograin", -2.803360380906535),+                                    ("<integer> <unit-of-duration>now", -2.3978952727983707)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.2992829841302609,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -2.4423470353692043),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -2.4423470353692043),+                                    ("dayday", -2.03688192726104),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -2.4423470353692043),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -2.4423470353692043)],+                               n = 3}}),+       ("<day-of-month> (ordinal or number) of <month>",+        Classifier{okData =+                     ClassData{prior = -8.004270767353637e-2,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.803360380906535),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.803360380906535),+                                    ("ordinal (digits)this|last|next <cycle>", -2.1102132003465894),+                                    ("integer (numeric)this|last|next <cycle>",+                                     -2.3978952727983707),+                                    ("ordinal (digits)February", -2.803360380906535),+                                    ("integer (numeric)February", -2.3978952727983707),+                                    ("month", -0.9315582040049435),+                                    ("ordinal (digits)March", -2.803360380906535),+                                    ("integer (numeric)July", -2.803360380906535)],+                               n = 12},+                   koData =+                     ClassData{prior = -2.5649493574615367,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.7047480922384253),+                                    ("month", -1.7047480922384253)],+                               n = 1}}),+       ("Independence Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("decimal number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Naraka Chaturdashi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("beginning of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("next <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.6109179126442243,+                               likelihoods =+                                 HashMap.fromList+                                   [("Martin Luther King's Day", -2.890371757896165),+                                    ("Halloween", -2.890371757896165),+                                    ("Wednesday", -2.890371757896165),+                                    ("Boss's Day", -2.890371757896165),+                                    ("Memorial Day", -2.890371757896165),+                                    ("Monday", -2.890371757896165),+                                    ("Mother's Day", -2.890371757896165),+                                    ("day", -1.0986122886681098),+                                    ("Thanksgiving Day", -2.890371757896165),+                                    ("March", -2.890371757896165), ("month", -2.890371757896165),+                                    ("Tuesday", -2.1972245773362196)],+                               n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> sharp|exactly",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -2.1400661634962708),+                                    ("time-of-day (latent)", -2.1400661634962708),+                                    ("hhmm (latent)", -2.1400661634962708),+                                    ("<time-of-day> am|pm", -2.1400661634962708),+                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),+                                    ("minute", -1.4469189829363254)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <named-month>|year",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -2.4423470353692043),+                                    ("year (latent)", -1.0560526742493137),+                                    ("year", -1.0560526742493137), ("March", -2.4423470353692043),+                                    ("month", -2.03688192726104)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.2992829841302609),+                                    ("year (latent)", -1.7047480922384253),+                                    ("year", -1.7047480922384253), ("month", -1.2992829841302609)],+                               n = 3}}),+       ("Islamic New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("negative numbers",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -7.696104113612832e-2),+                                    ("integer (0..19)", -2.6026896854443837)],+                               n = 25}}),+       ("about|exactly <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("half an hour", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time> before last|after next",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday", -1.8718021769015913),+                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),+                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by the end of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("this|last|next <cycle>", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hhmm (military) am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersecthh:mm", -3.1918471524802814),+                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),+                                    ("minuteminute", -1.457246097092175),+                                    ("hh:mmhh:mm", -2.093234863812172),+                                    ("dayday", -3.1918471524802814),+                                    ("hourhour", -2.093234863812172),+                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),+                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],+                               n = 26},+                   koData =+                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("<named-month> <day-of-month> (non ordinal)July",+                                     -3.1135153092103742),+                                    ("daymonth", -2.70805020110221),+                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),+                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),+                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),+                                    ("minuteminute", -1.8607523407150064),+                                    ("hourhour", -2.70805020110221),+                                    ("minutehour", -2.70805020110221),+                                    ("hh:mmintersect", -2.1972245773362196),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -3.1135153092103742),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.1135153092103742)],+                               n = 12}}),+       ("Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Day",+        Classifier{okData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8}}),+       ("fortnight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Memorial Day weekend",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> and an half hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Laylat al-Qadr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Boghi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("at the beginning|end of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("January", -1.3862943611198906),+                                    ("April", -1.3862943611198906), ("month", -0.8754687373538999)],+                               n = 4},+                   koData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.0986122886681098),+                                    ("month", -1.0986122886681098)],+                               n = 1}}),+       ("<time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.529395204760564),+                                    ("hh:mmhh:mm", -1.8971199848858813),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -2.4849066497880004),+                                    ("hourhour", -1.6964492894237302),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -3.4011973816621555),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.4011973816621555),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),+                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],+                               n = 22},+                   koData =+                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>time-of-day (latent)",+                                     -3.4657359027997265),+                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),+                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -3.4657359027997265),+                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),+                                    ("hourhour", -2.2129729343043585),+                                    ("minutehour", -1.2144441041932315),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.4657359027997265),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -2.5494451709255714),+                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),+                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",+                                     -3.0602707946915624)],+                               n = 24}}),+       ("military spelled out numbers am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("winter",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("nth <time> after <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",+                                     -0.916290731874155)],+                               n = 1}}),+       ("<named-month> <day-of-month> (non ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.42121346507630353,+                               unseen = -3.951243718581427,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.5455312716044354),+                                    ("Marchinteger (numeric)", -2.833213344056216),+                                    ("Aprilinteger (numeric)", -3.2386784521643803),+                                    ("month", -0.8407831793660099),+                                    ("Februaryinteger (numeric)", -1.9859154836690123),+                                    ("Septemberinteger (numeric)", -2.833213344056216),+                                    ("Octoberinteger (numeric)", -2.833213344056216),+                                    ("Julyinteger (numeric)", -2.1400661634962708)],+                               n = 21},+                   koData =+                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.3353749158170367),+                                    ("Marchinteger (numeric)", -2.740840023925201),+                                    ("Aprilinteger (numeric)", -2.740840023925201),+                                    ("month", -0.9490805546971459),+                                    ("from|since|after <time-of-day>integer (numeric)",+                                     -2.3353749158170367),+                                    ("Julyinteger (numeric)", -1.6422277352570913)],+                               n = 11}}),+       ("President's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Diwali",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("last night",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|next <day-of-week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.2512917986064953),+                                    ("Wednesday", -2.2512917986064953),+                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),+                                    ("Tuesday", -1.55814461804655)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinal (digits)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.6635616461296463,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 37},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter (grain)",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("last <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)October", -1.791759469228055),+                                    ("daymonth", -1.2809338454620642),+                                    ("day (grain)intersect", -1.791759469228055),+                                    ("weekmonth", -1.791759469228055),+                                    ("week (grain)intersect", -2.1972245773362196),+                                    ("week (grain)September", -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Chhath",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Vasant Panchami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month>(ordinal) <named-month> year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)April", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Black Friday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Labor Day",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("week-end",+        Classifier{okData =+                     ClassData{prior = -1.5040773967762742,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.25131442828090605,+                               unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7}}),+       ("Great Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maundy Thursday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("day (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.295836866004329,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 25},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("right now",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("for <duration> from <time>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -1.5040773967762742),+                                    ("dayday", -1.0986122886681098),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -1.5040773967762742)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.252762968495368),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -1.252762968495368)],+                               n = 1}}),+       ("compose by multiplication",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)powers of tens", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("between <time> and <time>",+        Classifier{okData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.832909122935104),+                                    ("hh:mmhh:mm", -0.832909122935104)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -3.7376696182833684,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.410986973710262),+                                    ("minuteminute", -1.410986973710262),+                                    ("minutehour", -1.410986973710262),+                                    ("hh:mmintersect", -1.410986973710262)],+                               n = 18}}),+       ("<month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),+                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",+                                     -2.740840023925201),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -2.3353749158170367),+                                    ("month", -0.8690378470236094),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -2.3353749158170367)],+                               n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of days",+        Classifier{okData =+                     ClassData{prior = -3.509131981127006e-2,+                               unseen = -3.4011973816621555,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 28},+                   koData =+                     ClassData{prior = -3.367295829986474, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("at the beginning|end of <week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.330733340286331,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -0.706570200892086),+                                    ("this|last|next <cycle>", -0.8209805520698302),+                                    ("about|exactly <time-of-day>", -2.70805020110221)],+                               n = 36},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Fitr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("summer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Trinity Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("dd-dd <month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)September",+                                     -1.791759469228055),+                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),+                                    ("ordinal (digits)ordinal (digits)October",+                                     -2.1972245773362196),+                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),+                                    ("month", -0.9444616088408514),+                                    ("ordinal (digits)ordinal (digits)August",+                                     -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Pentecost",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.639057329615259),+                                    ("Martin Luther King's Day", -2.639057329615259),+                                    ("Monday", -2.639057329615259), ("day", -1.1349799328389845),+                                    ("Thanksgiving Day", -2.639057329615259),+                                    ("Christmas", -2.639057329615259), ("hour", -2.639057329615259),+                                    ("winter", -2.639057329615259),+                                    ("week-end", -2.639057329615259),+                                    ("summer", -2.2335922215070942)],+                               n = 9},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("August",         Classifier{okData =
Duckling/Ranking/Classifiers/EN_XX.hs view
@@ -21,2389 +21,3001 @@ classifiers :: Classifiers classifiers   = HashMap.fromList-      [("<integer> to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)noon|midnight|EOD|end of day",-                                     -0.916290731874155),-                                    ("hour", -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.7537718023763802),-                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],-                               n = 7}}),-       ("<time> timezone",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -1.824549292051046),-                                    ("<time-of-day> am|pm", -1.6422277352570913),-                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),-                                    ("minute", -1.824549292051046)],-                               n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thursday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (numeric)",-        Classifier{okData =-                     ClassData{prior = -0.7765287894989963, unseen = -5.225746673713201,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 184},-                   koData =-                     ClassData{prior = -0.616186139423817, unseen = -5.384495062789089,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 216}}),-       ("<duration> hence|ago",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.784189633918261,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),-                                    ("year", -2.662587827025453),-                                    ("<integer> <unit-of-duration>", -1.0531499145913523),-                                    ("a <unit-of-duration>", -2.662587827025453),-                                    ("month", -2.662587827025453),-                                    ("fortnight", -2.662587827025453)],-                               n = 18},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("noon|midnight|EOD|end of day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter to|till|before <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Father's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = -0.5596157879354228, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.6094379124341003),-                                    ("dayday", -1.0986122886681098),-                                    ("day (grain)yesterday", -1.6094379124341003)],-                               n = 4},-                   koData =-                     ClassData{prior = -0.8472978603872037, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.466337068793427),-                                    ("year (grain)Christmas", -1.8718021769015913),-                                    ("day (grain)intersect", -1.466337068793427),-                                    ("yearday", -1.8718021769015913)],-                               n = 3}}),-       ("Martin Luther King's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("integer (20..90)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("mm/yyyy",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("integer after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.8109302162163288),-                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),-                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal or number) <named-month>",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)December", -2.1400661634962708),-                                    ("ordinal (digits)February", -2.1400661634962708),-                                    ("integer (numeric)April", -2.1400661634962708),-                                    ("month", -1.4469189829363254)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -3.4011973816621555,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)October", -2.6741486494265287),-                                    ("ordinal (digits)July", -2.6741486494265287),-                                    ("integer (numeric)September", -2.268683541318364),-                                    ("ordinal (digits)August", -2.6741486494265287),-                                    ("integer (numeric)August", -2.6741486494265287),-                                    ("ordinal (digits)April", -2.6741486494265287),-                                    ("month", -1.0647107369924282),-                                    ("integer (numeric)July", -2.268683541318364)],-                               n = 9}}),-       ("<time> <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.844007281325252e-2,-                               unseen = -4.430816798843313,-                               likelihoods =-                                 HashMap.fromList-                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("dayhour", -1.5284688499004333),-                                    ("Mondayearly morning", -3.3202283191284883),-                                    ("time-of-day (latent)tonight", -3.3202283191284883),-                                    ("hourhour", -2.339399066116762),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("todaypart of days", -3.7256934272366524),-                                    ("minutehour", -2.627081138568543),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -3.3202283191284883),-                                    ("time-of-day (latent)this <part-of-day>", -3.7256934272366524),-                                    ("Mondayin|during the <part-of-day>", -3.7256934272366524),-                                    ("intersectpart of days", -3.7256934272366524),-                                    ("intersectin|during the <part-of-day>", -3.7256934272366524),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("tomorrowpart of days", -2.339399066116762),-                                    ("hh:mmin|during the <part-of-day>", -3.0325462466767075),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("hhmm (latent)in|during the <part-of-day>",-                                     -3.7256934272366524),-                                    ("yesterdaypart of days", -3.7256934272366524),-                                    ("Mondaypart of days", -3.7256934272366524)],-                               n = 29},-                   koData =-                     ClassData{prior = -2.367123614131617, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("yearhour", -2.740840023925201),-                                    ("monthhour", -2.740840023925201),-                                    ("hourhour", -2.740840023925201),-                                    ("past year (latent)in|during the <part-of-day>",-                                     -2.740840023925201),-                                    ("Februaryin|during the <part-of-day>", -2.740840023925201),-                                    ("time-of-day (latent)in|during the <part-of-day>",-                                     -2.740840023925201)],-                               n = 3}}),-       ("today",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("mm/dd",-        Classifier{okData =-                     ClassData{prior = -1.4271163556401458,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -0.2744368457017603, unseen = -3.044522437723423,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 19}}),-       ("at <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -9.381875521765486e-2,-                               unseen = -4.90527477843843,-                               likelihoods =-                                 HashMap.fromList-                                   [("<time> timezone", -3.7992275112828016),-                                    ("noon|midnight|EOD|end of day", -3.7992275112828016),-                                    ("integer after|past <hour-of-day>", -3.7992275112828016),-                                    ("half after|past <hour-of-day>", -4.204692619390966),-                                    ("time-of-day (latent)", -1.7197859696029658),-                                    ("hhmm (latent)", -3.5115454388310208),-                                    ("<time-of-day> am|pm", -1.8067973465925955),-                                    ("hh:mm", -3.288401887516811),-                                    ("about|exactly <time-of-day>", -3.7992275112828016),-                                    ("hour", -1.0911773101805915),-                                    ("<time-of-day> sharp|exactly", -4.204692619390966),-                                    ("minute", -2.0074680420547466)],-                               n = 61},-                   koData =-                     ClassData{prior = -2.412933150162911, unseen = -3.2188758248682006,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -1.2321436812926323),-                                    ("hour", -1.2321436812926323)],-                               n = 6}}),-       ("December",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("absorption of , after named day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("on <date>", -2.1972245773362196),-                                    ("Wednesday", -2.6026896854443837),-                                    ("Saturday", -2.6026896854443837),-                                    ("Monday", -2.1972245773362196),-                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),-                                    ("Sunday", -2.6026896854443837)],-                               n = 10},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("September",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("tonight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("last|past|next <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.456735772821304), ("second", -2.639057329615259),-                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),-                                    ("<integer> <unit-of-duration>", -0.7827593392496325),-                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),-                                    ("minute", -2.639057329615259)],-                               n = 31},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the ides of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("on <date>",-        Classifier{okData =-                     ClassData{prior = -0.1670540846631662, unseen = -4.007333185232471,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -1.791759469228055), ("mm/dd", -3.295836866004329),-                                    ("absorption of , after named day", -2.890371757896165),-                                    ("intersect", -2.890371757896165),-                                    ("Saturday", -2.6026896854443837),-                                    ("Friday", -3.295836866004329), ("day", -0.8979415932059586),-                                    ("the <day-of-month> (ordinal)", -2.890371757896165),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -2.6026896854443837),-                                    ("hour", -3.295836866004329)],-                               n = 22},-                   koData =-                     ClassData{prior = -1.8718021769015913,-                               unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.791759469228055)],-                               n = 4}}),-       ("integer (0..19)",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.784189633918261,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 42},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),-       ("between <time-of-day> and <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -0.916290731874155),-                                    ("hh:mmhh:mm", -0.916290731874155)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -0.916290731874155),-                                    ("minutehour", -0.916290731874155)],-                               n = 3}}),-       ("Halloween",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -1.6094379124341003),-                                    ("month", -0.916290731874155),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("October",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from|since|after <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742, unseen = -4.02535169073515,-                               likelihoods =-                                 HashMap.fromList-                                   [("July", -3.3141860046725258),-                                    ("time-of-day (latent)", -2.3978952727983707),-                                    ("<time-of-day> am|pm", -2.3978952727983707),-                                    ("hh:mm", -2.3978952727983707), ("hour", -1.8101086078962516),-                                    ("month", -2.908720896564361), ("minute", -2.3978952727983707),-                                    ("August", -3.3141860046725258)],-                               n = 14},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -4.836281906951478,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.7297014486341915),-                                    ("week", -4.135166556742356),-                                    ("<day-of-month> (ordinal or number) <named-month>",-                                     -4.135166556742356),-                                    ("today", -4.135166556742356),-                                    ("intersect", -2.7488721956224653),-                                    ("second", -4.135166556742356), ("now", -3.4420193761824103),-                                    ("tomorrow", -3.7297014486341915),-                                    ("this|last|next <cycle>", -4.135166556742356),-                                    ("day", -1.995100393246085),-                                    ("time-of-day (latent)", -4.135166556742356),-                                    ("<time-of-day> am|pm", -3.7297014486341915),-                                    ("nograin", -3.4420193761824103),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -4.135166556742356),-                                    ("Christmas", -3.4420193761824103),-                                    ("hour", -2.8824035882469876),-                                    ("<datetime> - <datetime> (interval)", -2.7488721956224653),-                                    ("<time-of-day> - <time-of-day> (interval)",-                                     -2.430418464503931),-                                    ("<named-month> <day-of-month> (non ordinal)",-                                     -3.7297014486341915),-                                    ("minute", -1.6928195213731514),-                                    ("right now", -4.135166556742356),-                                    ("<month> dd-dd (interval)", -3.4420193761824103),-                                    ("dd-dd <month> (interval)", -3.7297014486341915)],-                               n = 49}}),-       ("month (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> more <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)minute (grain)", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> o'clock",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in|within|after <duration>",-        Classifier{okData =-                     ClassData{prior = -4.652001563489282e-2,-                               unseen = -4.61512051684126,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -3.2188758248682006),-                                    ("<integer> more <unit-of-duration>", -3.912023005428146),-                                    ("three-quarters of an hour", -2.995732273553991),-                                    ("<integer> + '\"", -3.2188758248682006),-                                    ("number.number hours", -3.912023005428146),-                                    ("second", -3.506557897319982), ("day", -3.2188758248682006),-                                    ("half an hour", -2.995732273553991),-                                    ("<integer> <unit-of-duration>", -1.6094379124341003),-                                    ("a <unit-of-duration>", -2.995732273553991),-                                    ("quarter of an hour", -2.995732273553991),-                                    ("hour", -2.5257286443082556),-                                    ("about|exactly <duration>", -3.912023005428146),-                                    ("<integer> and an half hour", -3.912023005428146),-                                    ("minute", -1.2729656758128873)],-                               n = 42},-                   koData =-                     ClassData{prior = -3.0910424533583156, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -1.8971199848858813),-                                    ("<integer> <unit-of-duration>", -2.3025850929940455),-                                    ("a <unit-of-duration>", -2.3025850929940455)],-                               n = 2}}),-       ("three-quarters of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Wednesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> + '\"",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half <integer> (UK style hour-of-day)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("July",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hour (grain)",-        Classifier{okData =-                     ClassData{prior = -0.8209805520698302,-                               unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),-       ("<ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),-                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",-                                     -1.466337068793427),-                                    ("quarter", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),-                                    ("quarter", -0.8109302162163288)],-                               n = 3}}),-       ("one twenty two",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("intersect",-        Classifier{okData =-                     ClassData{prior = -0.4957877464014501, unseen = -6.293419278846481,-                               likelihoods =-                                 HashMap.fromList-                                   [("<datetime> - <datetime> (interval)on <date>",-                                     -4.345658990503007),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.345658990503007),-                                    ("hourday", -3.8936738667599493),-                                    ("dayhour", -2.765208614942159),-                                    ("daymonth", -4.90527477843843),-                                    ("monthday", -5.19295685089021),-                                    ("monthyear", -3.9889840465642745),-                                    ("Tuesdaythe <day-of-month> (ordinal)", -5.598421958998375),-                                    ("Christmasyear", -5.598421958998375),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.598421958998375),-                                    ("houryear", -5.598421958998375),-                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.90527477843843),-                                    ("<time-of-day> am|pmintersect", -4.345658990503007),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -5.598421958998375),-                                    ("Marchyear", -5.598421958998375),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year",-                                     -5.19295685089021),-                                    ("intersect<time-of-day> am|pm", -5.598421958998375),-                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -5.598421958998375),-                                    ("monthhour", -5.19295685089021),-                                    ("last <day-of-week> of <time>year", -5.598421958998375),-                                    ("todayat <time-of-day>", -5.598421958998375),-                                    ("Thursday<time> timezone", -3.8936738667599493),-                                    ("this <time>hh(:mm) - <time-of-day> am|pm",-                                     -5.598421958998375),-                                    ("dayday", -3.58351893845611),-                                    ("Thanksgiving Dayyear", -4.499809670330265),-                                    ("<time> <part-of-day>at <time-of-day>", -5.598421958998375),-                                    ("Tuesdayin <named-month>", -5.598421958998375),-                                    ("mm/ddat <time-of-day>", -5.598421958998375),-                                    ("tonightat <time-of-day>", -5.598421958998375),-                                    ("<time-of-day> am|pmabsorption of , after named day",-                                     -4.90527477843843),-                                    ("today<time-of-day> am|pm", -5.598421958998375),-                                    ("Februarythe <day-of-month> (ordinal)", -5.19295685089021),-                                    ("at <time-of-day><time> <part-of-day>", -5.598421958998375),-                                    ("mm/dd<time-of-day> am|pm", -5.598421958998375),-                                    ("hourhour", -4.345658990503007),-                                    ("<time-of-day> am|pmon <date>", -3.58351893845611),-                                    ("Wednesdaythis|last|next <cycle>", -5.598421958998375),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -4.0943445622221),-                                    ("dayyear", -3.1560749236291703),-                                    ("last weekend of <named-month>year", -5.598421958998375),-                                    ("<time-of-day> o'clockin|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursdayat <time-of-day>", -5.19295685089021),-                                    ("<time-of-day> am|pmtomorrow", -4.90527477843843),-                                    ("minutehour", -4.68213122712422),-                                    ("Mother's Dayyear", -5.598421958998375),-                                    ("at <time-of-day>in|during the <part-of-day>",-                                     -5.19295685089021),-                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",-                                     -3.8936738667599493),-                                    ("for <duration> from <time>December", -5.598421958998375),-                                    ("tomorrow<time-of-day> sharp|exactly", -5.598421958998375),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -5.19295685089021),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.68213122712422),-                                    ("Mondayin|during the <part-of-day>", -5.598421958998375),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.19295685089021),-                                    ("intersectin|during the <part-of-day>", -5.598421958998375),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -4.68213122712422),-                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.345658990503007),-                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -4.68213122712422),-                                    ("at <time-of-day>intersect", -5.19295685089021),-                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.598421958998375),-                                    ("dayminute", -2.924273309571846),-                                    ("from <datetime> - <datetime> (interval)on <date>",-                                     -5.19295685089021),-                                    ("<datetime> - <datetime> (interval)tomorrow",-                                     -5.598421958998375),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.19295685089021),-                                    ("<ordinal> <cycle> of <time>year", -5.598421958998375),-                                    ("minuteday", -2.132686056198648),-                                    ("absorption of , after named dayintersect",-                                     -5.598421958998375),-                                    ("Octoberyear", -4.345658990503007),-                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",-                                     -5.598421958998375),-                                    ("at <time-of-day>absorption of , after named day",-                                     -5.598421958998375),-                                    ("<day-of-month> (ordinal or number) <named-month>year",-                                     -5.598421958998375),-                                    ("year<time-of-day> am|pm", -5.598421958998375),-                                    ("Septemberyear", -5.19295685089021),-                                    ("at <time-of-day>on <date>", -4.499809670330265),-                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",-                                     -4.90527477843843),-                                    ("Halloweenyear", -5.598421958998375),-                                    ("dayweek", -5.598421958998375),-                                    ("Thursday<time-of-day> am|pm", -5.598421958998375),-                                    ("weekyear", -5.19295685089021),-                                    ("hh:mmin|during the <part-of-day>", -4.90527477843843),-                                    ("Father's Dayyear", -5.598421958998375),-                                    ("<cycle> after|before <time><time-of-day> am|pm",-                                     -5.19295685089021),-                                    ("February<time> <part-of-day>", -5.598421958998375),-                                    ("Martin Luther King's Dayyear", -5.19295685089021),-                                    ("tomorrowat <time-of-day>", -4.90527477843843),-                                    ("between <time> and <time>on <date>", -4.90527477843843),-                                    ("Thursdayfrom|since|after <time-of-day>", -4.90527477843843),-                                    ("at <time-of-day>tomorrow", -5.19295685089021),-                                    ("tomorrow<time-of-day> am|pm", -5.598421958998375),-                                    ("in|during the <part-of-day>at <time-of-day>",-                                     -5.598421958998375),-                                    ("Labor Dayyear", -5.598421958998375),-                                    ("Februaryintersect", -5.598421958998375),-                                    ("last <cycle> of <time>year", -4.90527477843843),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -5.598421958998375),-                                    ("yearminute", -5.598421958998375),-                                    ("Black Fridayyear", -5.19295685089021)],-                               n = 201},-                   koData =-                     ClassData{prior = -0.9392802500988537, unseen = -5.983936280687191,-                               likelihoods =-                                 HashMap.fromList-                                   [("in <named-month>year", -5.288267030694535),-                                    ("<time-of-day> - <time-of-day> (interval)on <date>",-                                     -5.288267030694535),-                                    ("hourday", -5.288267030694535),-                                    ("<named-month> <day-of-month> (non ordinal)July",-                                     -5.288267030694535),-                                    ("dayhour", -2.890371757896165),-                                    ("daymonth", -3.2088254890146994),-                                    ("monthday", -4.882801922586371),-                                    ("monthyear", -4.59511985013459),-                                    ("intersecthh:mm", -5.288267030694535),-                                    ("from <datetime> - <datetime> (interval)July",-                                     -5.288267030694535),-                                    ("houryear", -5.288267030694535),-                                    ("from <time-of-day> - <time-of-day> (interval)July",-                                     -5.288267030694535),-                                    ("until <time-of-day><time-of-day> am|pm", -5.288267030694535),-                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.59511985013459),-                                    ("<time-of-day> am|pmintersect", -4.035504062199167),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.37197629882038),-                                    ("from|since|after <time-of-day>on <date>", -4.37197629882038),-                                    ("July<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("absorption of , after named dayJuly", -4.882801922586371),-                                    ("monthhour", -5.288267030694535),-                                    ("hourmonth", -4.59511985013459),-                                    ("todayat <time-of-day>", -5.288267030694535),-                                    ("from|since|after <time-of-day>July", -5.288267030694535),-                                    ("dayday", -4.882801922586371),-                                    ("mm/ddat <time-of-day>", -4.882801922586371),-                                    ("<time-of-day> am|pmon <date>", -4.035504062199167),-                                    ("dayyear", -4.035504062199167),-                                    ("Thursdaymm/dd", -5.288267030694535),-                                    ("Thursdayat <time-of-day>", -4.035504062199167),-                                    ("<integer> to|till|before <hour-of-day>September",-                                     -5.288267030694535),-                                    ("monthminute", -5.288267030694535),-                                    ("<time-of-day> am|pmtomorrow", -5.288267030694535),-                                    ("Thursdayhh:mm", -4.37197629882038),-                                    ("August<day-of-month> (ordinal or number) <named-month>",-                                     -5.288267030694535),-                                    ("Fridayyear", -4.882801922586371),-                                    ("minutemonth", -3.4965075614664802),-                                    ("Sundayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("Thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.882801922586371),-                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("Aprilyear", -5.288267030694535),-                                    ("mm/dd<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.288267030694535),-                                    ("<duration> after|before|from <time>December",-                                     -5.288267030694535),-                                    ("yesterday<time-of-day> am|pm", -5.288267030694535),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -4.37197629882038),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.882801922586371),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -5.288267030694535),-                                    ("until <time-of-day>on <date>", -4.59511985013459),-                                    ("at <time-of-day>intersect", -4.882801922586371),-                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("dayminute", -2.7625383863862796),-                                    ("intersectSeptember", -3.784189633918261),-                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -5.288267030694535),-                                    ("minuteday", -2.3704962986102562),-                                    ("absorption of , after named dayintersect",-                                     -5.288267030694535),-                                    ("Februaryin|during the <part-of-day>", -5.288267030694535),-                                    ("week-endin <named-month>", -5.288267030694535),-                                    ("Octoberyear", -5.288267030694535),-                                    ("from|since|after <time-of-day>year", -5.288267030694535),-                                    ("yearhh:mm", -5.288267030694535),-                                    ("hh:mmon <date>", -3.784189633918261),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -5.288267030694535),-                                    ("absorption of , after named daySeptember", -4.37197629882038),-                                    ("on <date>September", -4.882801922586371),-                                    ("at <time-of-day>on <date>", -4.882801922586371),-                                    ("dayweek", -5.288267030694535),-                                    ("Thursday<time-of-day> am|pm", -4.882801922586371),-                                    ("absorption of , after named dayFebruary", -4.37197629882038),-                                    ("July<integer> to|till|before <hour-of-day>",-                                     -5.288267030694535),-                                    ("tomorrowat <time-of-day>", -5.288267030694535),-                                    ("<integer> to|till|before <hour-of-day>July",-                                     -5.288267030694535),-                                    ("Thursdayfrom|since|after <time-of-day>", -3.6788291182604347),-                                    ("tomorrow<time-of-day> am|pm", -5.288267030694535),-                                    ("Tuesdayfrom|since|after <time-of-day>", -5.288267030694535),-                                    ("yearminute", -5.288267030694535)],-                               n = 129}}),-       ("one eleven",-        Classifier{okData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("after lunch/work/school",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("early morning",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <number> (implicit minutes)",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.3184537311185346),-                                    ("integer (0..19)", -1.2992829841302609)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.16251892949777494),-                                    ("integer (0..19)", -1.8971199848858813)],-                               n = 18}}),-       ("<ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.772588722239781,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -2.0149030205422647),-                                    ("quarteryear", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",-                                     -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",-                                     -2.0149030205422647),-                                    ("weekmonth", -1.6094379124341003),-                                    ("ordinal (digits)quarter (grain)year", -2.0149030205422647),-                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",-                                     -2.0149030205422647)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("year (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.1354942159291497,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 21},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -1.0116009116784799,-                               unseen = -3.6375861597263857,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -2.001480000210124),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("hh:mmhh:mm", -2.001480000210124),-                                    ("dayday", -2.512305623976115),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",-                                     -2.917770732084279),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),-                                    ("hourhour", -2.512305623976115),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.45198512374305727,-                               unseen = -3.912023005428146,-                               likelihoods =-                                 HashMap.fromList-                                   [("hourday", -3.1986731175506815),-                                    ("dayhour", -2.793208009442517),-                                    ("<day-of-month> (ordinal)time-of-day (latent)",-                                     -3.1986731175506815),-                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),-                                    ("minuteminute", -2.793208009442517),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.793208009442517),-                                    ("dayday", -3.1986731175506815),-                                    ("hourhour", -2.505525936990736),-                                    ("dayyear", -3.1986731175506815),-                                    ("<named-month>|<named-day> <day-of-month> (ordinal)past year (latent)",-                                     -3.1986731175506815),-                                    ("minutehour", -2.2823823856765264),-                                    ("hh:mmintersect", -2.793208009442517),-                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<time-of-day> am|pm",-                                     -3.1986731175506815),-                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",-                                     -3.1986731175506815),-                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",-                                     -3.1986731175506815)],-                               n = 14}}),-       ("Saturday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",-                                     -1.7346010553881064),-                                    ("weekmonth", -1.7346010553881064),-                                    ("week (grain)October", -1.7346010553881064),-                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",-                                     -1.7346010553881064),-                                    ("weekday", -1.2237754316221157)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("number.number hours",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("from <time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.6094379124341003),-                                    ("hh:mmhh:mm", -1.6094379124341003),-                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),-                                    ("hourhour", -2.3025850929940455),-                                    ("hourminute", -2.3025850929940455),-                                    ("time-of-day (latent)<time-of-day> sharp|exactly",-                                     -2.70805020110221),-                                    ("time-of-day (latent)hh:mm", -2.70805020110221),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),-                                    ("time-of-day (latent)time-of-day (latent)",-                                     -2.0149030205422647),-                                    ("hourhour", -1.791759469228055),-                                    ("minutehour", -1.6094379124341003),-                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],-                               n = 9}}),-       ("integer 21..99",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),-                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],-                               n = 4}}),-       ("yyyy-mm-dd",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("mm/dd/yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -1.6094379124341003,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("Monday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("yesterday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<ordinal> quarter <year>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh:mm:ss",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<hour-of-day> <integer>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),-                                    ("hour", -0.9808292530117262),-                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -1.9459101490553135,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>integer (numeric)",-                                     -1.0986122886681098),-                                    ("hour", -1.0986122886681098)],-                               n = 1}}),-       ("nth <time> of <time>",-        Classifier{okData =-                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.9808292530117262),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -2.0794415416798357),-                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",-                                     -1.6739764335716716),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",-                                     -1.6739764335716716)],-                               n = 5},-                   koData =-                     ClassData{prior = -0.9808292530117262,-                               unseen = -2.5649493574615367,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -1.0986122886681098),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",-                                     -1.791759469228055),-                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",-                                     -1.3862943611198906)],-                               n = 3}}),-       ("Valentine's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("April",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("end of month",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("week (grain)",-        Classifier{okData =-                     ClassData{prior = -8.004270767353637e-2,-                               unseen = -3.6375861597263857,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 36},-                   koData =-                     ClassData{prior = -2.5649493574615367,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("<part-of-day> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -1.6094379124341003),-                                    ("hourday", -0.916290731874155),-                                    ("part of daysthe <day-of-month> (ordinal)",-                                     -1.6094379124341003),-                                    ("part of daysthe <day-of-month> (number)",-                                     -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("past year (latent)",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 2}}),-       ("six thirty six a.m.",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -1.252762968495368),-                                    ("one twenty two", -0.8472978603872037),-                                    ("one eleven", -1.252762968495368)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("now",-        Classifier{okData =-                     ClassData{prior = -0.15415067982725836,-                               unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -1.9459101490553135,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("<day-of-month> (ordinal or number) of <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.13353139262452263,-                               unseen = -3.0910424533583156,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)July", -2.3513752571634776),-                                    ("ordinals (first..twentieth,thirtieth,...)March",-                                     -2.3513752571634776),-                                    ("ordinal (digits)February", -2.3513752571634776),-                                    ("integer (numeric)February", -1.9459101490553135),-                                    ("month", -0.9650808960435872),-                                    ("ordinal (digits)March", -2.3513752571634776),-                                    ("integer (numeric)July", -2.3513752571634776)],-                               n = 7},-                   koData =-                     ClassData{prior = -2.0794415416798357,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)February", -1.5040773967762742),-                                    ("month", -1.5040773967762742)],-                               n = 1}}),-       ("this <part-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.6931471805599453),-                                    ("part of days", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Friday",-        Classifier{okData =-                     ClassData{prior = -0.3677247801253174,-                               unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},-                   koData =-                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("in|during the <part-of-day>",-        Classifier{okData =-                     ClassData{prior = -8.701137698962981e-2,-                               unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("early morning", -2.5257286443082556),-                                    ("hour", -0.7339691750802004),-                                    ("part of days", -0.8209805520698302)],-                               n = 11},-                   koData =-                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour", -0.916290731874155),-                                    ("part of days", -0.916290731874155)],-                               n = 1}}),-       ("tomorrow",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hh(:mm) - <time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this|last|next <cycle>",-        Classifier{okData =-                     ClassData{prior = -0.15822400521489416,-                               unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.5488132906176655),-                                    ("month (grain)", -2.995732273553991),-                                    ("year (grain)", -1.817077277212345),-                                    ("week (grain)", -1.5488132906176655),-                                    ("quarter", -2.772588722239781), ("year", -1.817077277212345),-                                    ("month", -2.995732273553991),-                                    ("quarter (grain)", -2.772588722239781)],-                               n = 35},-                   koData =-                     ClassData{prior = -1.9218125974762528,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -1.4816045409242156),-                                    ("week (grain)", -1.4816045409242156),-                                    ("day", -1.9924301646902063),-                                    ("day (grain)", -1.9924301646902063)],-                               n = 6}}),-       ("Mother's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Eve",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarteryear", -0.6931471805599453),-                                    ("ordinal (digits)quarter (grain)year", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("noon|midnight|EOD|end of day", -2.1972245773362196),-                                    ("end of month", -2.1972245773362196),-                                    ("time-of-day (latent)", -2.1972245773362196),-                                    ("<time-of-day> am|pm", -2.1972245773362196),-                                    ("hh:mm", -2.1972245773362196), ("hour", -1.791759469228055),-                                    ("month", -2.1972245773362196), ("minute", -1.791759469228055)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("half an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2006706954621511,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinals (first..twentieth,thirtieth,...)",-                                     -1.7047480922384253),-                                    ("ordinal (digits)", -0.2006706954621511)],-                               n = 9},-                   koData =-                     ClassData{prior = -1.7047480922384253,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],-                               n = 2}}),-       ("last weekend of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),-                                    ("month", -0.7731898882334817)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <day-of-month> (number)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("fractional number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17}}),-       ("Sunday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3025850929940455,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("February",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("minute (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.833213344056216,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <ordinal> quarter",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),-                                    ("quarter", -0.6931471805599453)],-                               n = 1}}),-       ("time-of-day (latent)",-        Classifier{okData =-                     ClassData{prior = -0.5315058290035293,-                               unseen = -4.2626798770413155,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.12136085700426748),-                                    ("integer (0..19)", -2.3025850929940455)],-                               n = 67},-                   koData =-                     ClassData{prior = -0.8860508466844369,-                               unseen = -3.9318256327243257,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -0.10536051565782628),-                                    ("integer (0..19)", -2.8134107167600364),-                                    ("integer 21..99", -3.2188758248682006)],-                               n = 47}}),-       ("year",-        Classifier{okData =-                     ClassData{prior = -0.23483959107740107, unseen = -3.58351893845611,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 34},-                   koData =-                     ClassData{prior = -1.563975538357343, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 9}}),-       ("last <day-of-week> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods =-                                 HashMap.fromList-                                   [("daymonth", -0.916290731874155),-                                    ("SundayMarch", -1.6094379124341003),-                                    ("MondayMarch", -1.6094379124341003),-                                    ("Sundayintersect", -1.6094379124341003)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.1479201300766222,-                               unseen = -5.0875963352323845,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.4423470353692043),-                                    ("integer (0..19)year (grain)", -3.289644895756408),-                                    ("integer (numeric)day (grain)", -2.6835090921860925),-                                    ("integer (0..19)second (grain) ", -3.6951100038645723),-                                    ("integer (0..19)hour (grain)", -3.001962823304627),-                                    ("second", -3.289644895756408),-                                    ("integer (numeric)second (grain) ", -3.982792076316353),-                                    ("integer (numeric)year (grain)", -3.6951100038645723),-                                    ("day", -2.4423470353692043), ("year", -2.8841797876482436),-                                    ("integer (numeric)week (grain)", -3.001962823304627),-                                    ("integer (0..19)month (grain)", -3.4719664525503626),-                                    ("hour", -2.5964977151964628), ("month", -3.1354942159291497),-                                    ("integer (numeric)minute (grain)", -3.1354942159291497),-                                    ("integer (0..19)minute (grain)", -3.001962823304627),-                                    ("integer (numeric)month (grain)", -3.982792076316353),-                                    ("minute", -2.4423470353692043),-                                    ("integer (numeric)hour (grain)", -3.4719664525503626),-                                    ("integer (0..19)day (grain)", -3.6951100038645723),-                                    ("integer (0..19)week (grain)", -3.1354942159291497)],-                               n = 69},-                   koData =-                     ClassData{prior = -1.984131361875511, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),-                                    ("integer (numeric)hour (grain)", -1.4087672169719492),-                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],-                               n = 11}}),-       ("hhmm (latent)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> am|pm",-        Classifier{okData =-                     ClassData{prior = -0.2929871246814741,-                               unseen = -5.3230099791384085,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer after|past <hour-of-day>", -3.9318256327243257),-                                    ("at <time-of-day>", -2.2270775404859005),-                                    ("from|since|after <time-of-day>", -3.708682081410116),-                                    ("<time-of-day> o'clock", -4.219507705176107),-                                    ("half after|past <hour-of-day>", -4.219507705176107),-                                    ("time-of-day (latent)", -1.7346010553881064),-                                    ("hhmm (latent)", -4.624972813284271),-                                    ("hh:mm", -2.2735975561207935),-                                    ("quarter after|past <hour-of-day>", -4.624972813284271),-                                    ("about|exactly <time-of-day>", -4.624972813284271),-                                    ("until <time-of-day>", -3.9318256327243257),-                                    ("hour", -1.2237754316221157),-                                    ("<time-of-day> sharp|exactly", -4.624972813284271),-                                    ("minute", -1.7346010553881064)],-                               n = 94},-                   koData =-                     ClassData{prior = -1.3705460041517514, unseen = -4.394449154672439,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),-                                    ("from|since|after <time-of-day>", -3.283414346005772),-                                    ("<hour-of-day> <integer>", -3.6888794541139363),-                                    ("time-of-day (latent)", -1.0498221244986778),-                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],-                               n = 32}}),-       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),-                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Thanksgiving Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of <named-month>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.1972245773362196,-                               likelihoods =-                                 HashMap.fromList-                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],-                               n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("a <unit-of-duration>",-        Classifier{okData =-                     ClassData{prior = -0.5753641449035618,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.0794415416798357),-                                    ("year (grain)", -2.772588722239781),-                                    ("second", -2.772588722239781),-                                    ("week (grain)", -2.0794415416798357),-                                    ("day", -2.0794415416798357),-                                    ("minute (grain)", -2.772588722239781),-                                    ("year", -2.772588722239781),-                                    ("second (grain) ", -2.772588722239781),-                                    ("minute", -2.772588722239781),-                                    ("day (grain)", -2.0794415416798357)],-                               n = 9},-                   koData =-                     ClassData{prior = -0.8266785731844679, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("hour (grain)", -1.7227665977411035),-                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),-                                    ("quarter (grain)", -1.9459101490553135)],-                               n = 7}}),-       ("hh:mm",-        Classifier{okData =-                     ClassData{prior = -6.782259633876106e-2,-                               unseen = -4.07753744390572,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 57},-                   koData =-                     ClassData{prior = -2.7245795030534206, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("quarter of an hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("second (grain) ",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinals (first..twentieth,thirtieth,...)",-        Classifier{okData =-                     ClassData{prior = -6.899287148695143e-2,-                               unseen = -2.772588722239781,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},-                   koData =-                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("quarter after|past <hour-of-day>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -0.6931471805599453),-                                    ("hour", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("the <cycle> after|before <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)tomorrow", -1.252762968495368),-                                    ("dayday", -0.8472978603872037),-                                    ("day (grain)yesterday", -1.252762968495368)],-                               n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("about|exactly <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("week", -2.639057329615259),-                                    ("hh(:mm) - <time-of-day> am|pm", -2.639057329615259),-                                    ("this|last|next <cycle>", -2.639057329615259),-                                    ("day", -2.2335922215070942),-                                    ("time-of-day (latent)", -2.639057329615259),-                                    ("hhmm (latent)", -2.2335922215070942),-                                    ("<time-of-day> am|pm", -2.639057329615259),-                                    ("hour", -1.9459101490553135),-                                    ("next <time>", -2.639057329615259),-                                    ("this|next <day-of-week>", -2.639057329615259),-                                    ("minute", -2.2335922215070942)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.833213344056216,-                               likelihoods =-                                 HashMap.fromList-                                   [("mm/dd", -2.0794415416798357), ("day", -2.0794415416798357),-                                    ("time-of-day (latent)", -2.0794415416798357),-                                    ("hour", -2.0794415416798357)],-                               n = 2}}),-       ("intersect by \",\", \"of\", \"from\", \"'s\"",-        Classifier{okData =-                     ClassData{prior = -0.48130318449966897,-                               unseen = -5.170483995038151,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayhour", -3.2188758248682006),-                                    ("daymonth", -3.2188758248682006),-                                    ("<named-month> <day-of-month> (non ordinal)Friday",-                                     -4.471638793363569),-                                    ("Friday<named-month> <day-of-month> (non ordinal)",-                                     -3.7784916128036232),-                                    ("Wednesdayintersect", -4.471638793363569),-                                    ("Labor Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Black Fridaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year",-                                     -4.471638793363569),-                                    ("<part-of-day> of <time>February", -4.471638793363569),-                                    ("Saturday<time-of-day> am|pm", -4.471638793363569),-                                    ("Martin Luther King's Daythis|last|next <cycle>",-                                     -4.471638793363569),-                                    ("on <date><time-of-day> am|pm", -4.471638793363569),-                                    ("hourmonth", -4.471638793363569),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.471638793363569),-                                    ("dayday", -2.5998366164619773),-                                    ("the <day-of-month> (ordinal)February", -4.0661736852554045),-                                    ("WednesdayOctober", -4.471638793363569),-                                    ("Wednesdaythis|last|next <cycle>", -4.0661736852554045),-                                    ("intersect<named-month> <day-of-month> (non ordinal)",-                                     -3.5553480614894135),-                                    ("dayyear", -2.8622008809294686),-                                    ("Saturday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.471638793363569),-                                    ("Thursdayhh:mm", -4.0661736852554045),-                                    ("Thanksgiving Daythis|last|next <cycle>", -4.471638793363569),-                                    ("Memorial Daythis|last|next <cycle>", -4.471638793363569),-                                    ("on <date><named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("TuesdayOctober", -4.471638793363569),-                                    ("the <day-of-month> (ordinal)March", -4.471638793363569),-                                    ("Mondaythis|last|next <cycle>", -4.471638793363569),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.0661736852554045),-                                    ("Fridayintersect", -4.471638793363569),-                                    ("Thursday<datetime> - <datetime> (interval)",-                                     -3.7784916128036232),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.5553480614894135),-                                    ("Tuesdaythis|last|next <cycle>", -4.471638793363569),-                                    ("Sunday<named-month> <day-of-month> (non ordinal)",-                                     -4.471638793363569),-                                    ("dayminute", -2.6798793241355137),-                                    ("intersectyear", -4.471638793363569),-                                    ("minuteday", -3.5553480614894135),-                                    ("this|last|next <cycle>Sunday", -4.471638793363569),-                                    ("Sundaythis|last|next <cycle>", -4.471638793363569),-                                    ("intersectintersect", -4.471638793363569),-                                    ("weekday", -4.471638793363569),-                                    ("dayweek", -3.373026504695459),-                                    ("Thursday<time-of-day> am|pm", -4.471638793363569),-                                    ("Monday<named-month> <day-of-month> (non ordinal)",-                                     -4.0661736852554045),-                                    ("<named-month> <day-of-month> (non ordinal)year",-                                     -4.0661736852554045)],-                               n = 55},-                   koData =-                     ClassData{prior = -0.9622758451159785, unseen = -4.897839799950911,-                               likelihoods =-                                 HashMap.fromList-                                   [("week-endJuly", -4.197201947661808),-                                    ("week-endOctober", -3.5040547671018634),-                                    ("daymonth", -1.9999773703255892),-                                    ("TuesdaySeptember", -4.197201947661808),-                                    ("Wednesdayintersect", -4.197201947661808),-                                    ("hourmonth", -3.0985896589936988),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"intersect",-                                     -4.197201947661808),-                                    ("Fridaythis|last|next <cycle>", -4.197201947661808),-                                    ("SundayFebruary", -4.197201947661808),-                                    ("WednesdayOctober", -4.197201947661808),-                                    ("week-endintersect", -4.197201947661808),-                                    ("dayyear", -4.197201947661808),-                                    ("FridayJuly", -3.791736839553644),-                                    ("<named-month> <day-of-month> (non ordinal)intersect",-                                     -4.197201947661808),-                                    ("FridaySeptember", -4.197201947661808),-                                    ("WednesdayFebruary", -4.197201947661808),-                                    ("minutemonth", -3.2809112157876537),-                                    ("SundayMarch", -4.197201947661808),-                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",-                                     -4.197201947661808),-                                    ("MondayFebruary", -3.791736839553644),-                                    ("Fridayintersect", -4.197201947661808),-                                    ("Thursday<time-of-day> - <time-of-day> (interval)",-                                     -3.791736839553644),-                                    ("dayminute", -2.810907586541918),-                                    ("SaturdaySeptember", -4.197201947661808),-                                    ("intersectSeptember", -3.2809112157876537),-                                    ("MondayMarch", -4.197201947661808),-                                    ("on <date>September", -3.791736839553644),-                                    ("intersectintersect", -4.197201947661808),-                                    ("Tuesdayintersect", -4.197201947661808),-                                    ("Sundayintersect", -4.197201947661808)],-                               n = 34}}),-       ("last <time>",-        Classifier{okData =-                     ClassData{prior = -0.6286086594223742, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("Father's Day", -2.6026896854443837),-                                    ("Martin Luther King's Day", -2.6026896854443837),-                                    ("Memorial Day", -2.6026896854443837),-                                    ("Mother's Day", -2.6026896854443837),-                                    ("day", -1.2163953243244932), ("Sunday", -2.6026896854443837),-                                    ("Thanksgiving Day", -2.6026896854443837),-                                    ("hour", -2.6026896854443837), ("Tuesday", -2.6026896854443837),-                                    ("week-end", -2.6026896854443837)],-                               n = 8},-                   koData =-                     ClassData{prior = -0.7621400520468967, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Monday", -2.5257286443082556), ("day", -2.120263536200091),-                                    ("Sunday", -2.5257286443082556), ("hour", -1.4271163556401458),-                                    ("week-end", -1.4271163556401458)],-                               n = 7}}),-       ("March",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<named-month>|<named-day> <day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Octoberordinal (digits)", -2.120263536200091),-                                    ("Thursdayordinal (digits)", -2.5257286443082556),-                                    ("day", -2.120263536200091),-                                    ("Augustordinal (digits)", -2.5257286443082556),-                                    ("Marchordinals (first..twentieth,thirtieth,...)",-                                     -2.120263536200091),-                                    ("Tuesdayordinal (digits)", -2.5257286443082556),-                                    ("month", -1.2729656758128873),-                                    ("Marchordinal (digits)", -2.5257286443082556)],-                               n = 8},-                   koData =-                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("from|since|after <time-of-day>ordinal (digits)",-                                     -1.8718021769015913),-                                    ("Augustordinal (digits)", -1.8718021769015913),-                                    ("month", -1.466337068793427)],-                               n = 2}}),-       ("Labor Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month> (ordinal)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Christmas",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("until <time-of-day>",-        Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,-                               likelihoods =-                                 HashMap.fromList-                                   [("time-of-day (latent)", -2.3025850929940455),-                                    ("<time-of-day> am|pm", -1.6094379124341003),-                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),-                                    ("minute", -1.3862943611198906)],-                               n = 6},-                   koData =-                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersect", -1.7227665977411035),-                                    ("yesterday", -2.2335922215070942),-                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),-                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],-                               n = 10}}),-       ("mm.dd.yyyy",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<duration> after|before|from <time>",-        Classifier{okData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -3.4339872044851463,-                               likelihoods =-                                 HashMap.fromList-                                   [("a <unit-of-duration>now", -2.70805020110221),-                                    ("a <unit-of-duration>Christmas", -2.70805020110221),-                                    ("<integer> <unit-of-duration>today", -2.70805020110221),-                                    ("daysecond", -2.70805020110221),-                                    ("a <unit-of-duration>right now", -2.70805020110221),-                                    ("minutenograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>Christmas", -2.70805020110221),-                                    ("secondnograin", -2.70805020110221),-                                    ("yearday", -2.0149030205422647),-                                    ("daynograin", -2.70805020110221),-                                    ("<integer> <unit-of-duration>now", -2.3025850929940455)],-                               n = 7},-                   koData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.1354942159291497,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -2.3978952727983707),-                                    ("dayday", -1.9924301646902063),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -2.3978952727983707),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -2.3978952727983707)],-                               n = 3}}),-       ("Independence Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("decimal number",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),-       ("next <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5263605246161616,-                               likelihoods =-                                 HashMap.fromList-                                   [("Martin Luther King's Day", -2.803360380906535),-                                    ("Halloween", -2.803360380906535),-                                    ("Wednesday", -2.803360380906535),-                                    ("Memorial Day", -2.803360380906535),-                                    ("Monday", -2.803360380906535),-                                    ("Mother's Day", -2.803360380906535),-                                    ("day", -1.0986122886681098),-                                    ("Thanksgiving Day", -2.803360380906535),-                                    ("March", -2.803360380906535), ("month", -2.803360380906535),-                                    ("Tuesday", -2.1102132003465894)],-                               n = 11},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.4849066497880004,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time-of-day> sharp|exactly",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("at <time-of-day>", -2.1400661634962708),-                                    ("time-of-day (latent)", -2.1400661634962708),-                                    ("hhmm (latent)", -2.1400661634962708),-                                    ("<time-of-day> am|pm", -2.1400661634962708),-                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),-                                    ("minute", -1.4469189829363254)],-                               n = 5},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("negative numbers",-        Classifier{okData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0},-                   koData =-                     ClassData{prior = 0.0, unseen = -3.332204510175204,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)", -7.696104113612832e-2),-                                    ("integer (0..19)", -2.6026896854443837)],-                               n = 25}}),-       ("about|exactly <duration>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("half an hour", -0.6931471805599453),-                                    ("minute", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<time> before last|after next",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods =-                                 HashMap.fromList-                                   [("Wednesday", -1.8718021769015913),-                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),-                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],-                               n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("by the end of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("this|last|next <cycle>", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("hhmm (military) am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<datetime> - <datetime> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,-                               likelihoods =-                                 HashMap.fromList-                                   [("intersecthh:mm", -3.1918471524802814),-                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),-                                    ("minuteminute", -1.457246097092175),-                                    ("hh:mmhh:mm", -2.093234863812172),-                                    ("dayday", -3.1918471524802814),-                                    ("hourhour", -2.093234863812172),-                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",-                                     -3.1918471524802814),-                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.597312260588446),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),-                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],-                               n = 26},-                   koData =-                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,-                               likelihoods =-                                 HashMap.fromList-                                   [("<named-month> <day-of-month> (non ordinal)July",-                                     -3.1135153092103742),-                                    ("daymonth", -2.70805020110221),-                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),-                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),-                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),-                                    ("minuteminute", -1.8607523407150064),-                                    ("hourhour", -2.70805020110221),-                                    ("minutehour", -2.70805020110221),-                                    ("hh:mmintersect", -2.1972245773362196),-                                    ("<named-month> <day-of-month> (non ordinal)August",-                                     -3.1135153092103742),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.1135153092103742)],-                               n = 12}}),-       ("Tuesday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("New Year's Day",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),-       ("fortnight",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Memorial Day weekend",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<integer> and an half hour",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("in <named-month>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -1.252762968495368), ("March", -1.252762968495368),-                                    ("month", -0.8472978603872037)],-                               n = 2},-                   koData =-                     ClassData{prior = -0.6931471805599453,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("October", -0.8472978603872037),-                                    ("month", -0.8472978603872037)],-                               n = 2}}),-       ("<time-of-day> - <time-of-day> (interval)",-        Classifier{okData =-                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.529395204760564),-                                    ("hh:mmhh:mm", -1.8971199848858813),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -2.4849066497880004),-                                    ("hourhour", -1.6964492894237302),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -3.4011973816621555),-                                    ("from|since|after <time-of-day><time-of-day> am|pm",-                                     -3.4011973816621555),-                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),-                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],-                               n = 22},-                   koData =-                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("about|exactly <time-of-day>time-of-day (latent)",-                                     -3.4657359027997265),-                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),-                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),-                                    ("<time-of-day> am|pmtime-of-day (latent)",-                                     -3.4657359027997265),-                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),-                                    ("hourhour", -2.2129729343043585),-                                    ("minutehour", -1.2144441041932315),-                                    ("about|exactly <time-of-day><time-of-day> am|pm",-                                     -3.4657359027997265),-                                    ("from|since|after <time-of-day>time-of-day (latent)",-                                     -2.5494451709255714),-                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),-                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",-                                     -3.0602707946915624)],-                               n = 24}}),-       ("military spelled out numbers am|pm",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods =-                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("winter",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("nth <time> after <time>",-        Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",-                                     -0.916290731874155)],-                               n = 1},-                   koData =-                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayday", -0.916290731874155),-                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",-                                     -0.916290731874155)],-                               n = 1}}),-       ("<named-month> <day-of-month> (non ordinal)",-        Classifier{okData =-                     ClassData{prior = -0.42121346507630353,-                               unseen = -3.951243718581427,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.5455312716044354),-                                    ("Marchinteger (numeric)", -2.833213344056216),-                                    ("Aprilinteger (numeric)", -3.2386784521643803),-                                    ("month", -0.8407831793660099),-                                    ("Februaryinteger (numeric)", -1.9859154836690123),-                                    ("Septemberinteger (numeric)", -2.833213344056216),-                                    ("Octoberinteger (numeric)", -2.833213344056216),-                                    ("Julyinteger (numeric)", -2.1400661634962708)],-                               n = 21},-                   koData =-                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Augustinteger (numeric)", -2.3353749158170367),-                                    ("Marchinteger (numeric)", -2.740840023925201),-                                    ("Aprilinteger (numeric)", -2.740840023925201),-                                    ("month", -0.9490805546971459),-                                    ("from|since|after <time-of-day>integer (numeric)",-                                     -2.3353749158170367),-                                    ("Julyinteger (numeric)", -1.6422277352570913)],-                               n = 11}}),-       ("this|next <day-of-week>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.2512917986064953),-                                    ("Wednesday", -2.2512917986064953),-                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),-                                    ("Tuesday", -1.55814461804655)],-                               n = 7},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("ordinal (digits)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.5553480614894135,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 33},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("quarter (grain)",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},-                   koData =-                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),-       ("last <cycle> of <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("day (grain)October", -1.791759469228055),-                                    ("daymonth", -1.2809338454620642),-                                    ("day (grain)intersect", -1.791759469228055),-                                    ("weekmonth", -1.791759469228055),-                                    ("week (grain)intersect", -2.1972245773362196),-                                    ("week (grain)September", -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("<day-of-month>(ordinal) <named-month> year",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods =-                                 HashMap.fromList-                                   [("ordinal (digits)April", -0.6931471805599453),-                                    ("month", -0.6931471805599453)],-                               n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Black Friday",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Labor Day",-        Classifier{okData =-                     ClassData{prior = -0.2876820724517809,-                               unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -1.3862943611198906,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("week-end",-        Classifier{okData =-                     ClassData{prior = -1.5040773967762742,-                               unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -0.25131442828090605,-                               unseen = -2.1972245773362196,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 7}}),-       ("day (grain)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.2188758248682006,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("right now",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.6094379124341003,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("for <duration> from <time>",-        Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.3025850929940455,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",-                                     -1.5040773967762742),-                                    ("dayday", -1.0986122886681098),-                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",-                                     -1.5040773967762742)],-                               n = 2},-                   koData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.0794415416798357,-                               likelihoods =-                                 HashMap.fromList-                                   [("dayhour", -1.252762968495368),-                                    ("<integer> <unit-of-duration>time-of-day (latent)",-                                     -1.252762968495368)],-                               n = 1}}),-       ("between <time> and <time>",-        Classifier{okData =-                     ClassData{prior = -1.0986122886681098,-                               unseen = -2.4849066497880004,-                               likelihoods =-                                 HashMap.fromList-                                   [("minuteminute", -1.0116009116784799),-                                    ("hh:mmhh:mm", -1.0116009116784799)],-                               n = 3},-                   koData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -2.890371757896165,-                               likelihoods =-                                 HashMap.fromList-                                   [("hh:mmtime-of-day (latent)", -1.4469189829363254),-                                    ("minuteminute", -1.4469189829363254),-                                    ("minutehour", -1.4469189829363254),-                                    ("hh:mmintersect", -1.4469189829363254)],-                               n = 6}}),-       ("<month> dd-dd (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.4657359027997265,-                               likelihoods =-                                 HashMap.fromList-                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),-                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",-                                     -2.740840023925201),-                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",-                                     -2.740840023925201),-                                    ("Augustordinal (digits)integer (numeric)",-                                     -2.3353749158170367),-                                    ("month", -0.8690378470236094),-                                    ("Augustordinal (digits)ordinal (digits)",-                                     -2.3353749158170367)],-                               n = 12},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.0794415416798357,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("part of days",-        Classifier{okData =-                     ClassData{prior = -4.0821994520255166e-2,-                               unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},-                   koData =-                     ClassData{prior = -3.2188758248682006,-                               unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),-       ("summer",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("dd-dd <month> (interval)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.9444389791664407,-                               likelihoods =-                                 HashMap.fromList-                                   [("integer (numeric)integer (numeric)September",-                                     -1.791759469228055),-                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),-                                    ("ordinal (digits)ordinal (digits)October",-                                     -2.1972245773362196),-                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),-                                    ("month", -0.9444616088408514),-                                    ("ordinal (digits)ordinal (digits)August",-                                     -2.1972245773362196)],-                               n = 6},-                   koData =-                     ClassData{prior = -infinity, unseen = -1.9459101490553135,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("this <time>",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.258096538021482,-                               likelihoods =-                                 HashMap.fromList-                                   [("Thursday", -2.5257286443082556),-                                    ("Martin Luther King's Day", -2.5257286443082556),-                                    ("Monday", -2.5257286443082556), ("day", -1.1394342831883648),-                                    ("Thanksgiving Day", -2.5257286443082556),-                                    ("hour", -2.5257286443082556), ("winter", -2.5257286443082556),-                                    ("week-end", -2.5257286443082556),-                                    ("summer", -2.120263536200091)],-                               n = 8},-                   koData =-                     ClassData{prior = -infinity, unseen = -2.3025850929940455,+      [("Bhai Dooj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = -2.0794415416798357, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)noon|midnight|EOD|end of day",+                                     -0.916290731874155),+                                    ("hour", -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.7537718023763802),+                                    ("integer (numeric)time-of-day (latent)", -0.7537718023763802)],+                               n = 7}}),+       ("<time> timezone",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -1.824549292051046),+                                    ("<time-of-day> am|pm", -1.6422277352570913),+                                    ("hh:mm", -1.824549292051046), ("hour", -1.1314021114911006),+                                    ("minute", -1.824549292051046)],+                               n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thursday",+        Classifier{okData =+                     ClassData{prior = -9.53101798043249e-2,+                               unseen = -3.4657359027997265,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 30},+                   koData =+                     ClassData{prior = -2.3978952727983707,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("integer (numeric)",+        Classifier{okData =+                     ClassData{prior = -0.6231370149872965, unseen = -5.645446897643238,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 281},+                   koData =+                     ClassData{prior = -0.7684302409804936,+                               unseen = -5.5012582105447265,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 243}}),+       ("<duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -3.784189633918261,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.563975538357343), ("day", -1.8152899666382492),+                                    ("year", -2.662587827025453),+                                    ("<integer> <unit-of-duration>", -1.0531499145913523),+                                    ("a <unit-of-duration>", -2.662587827025453),+                                    ("month", -2.662587827025453),+                                    ("fortnight", -2.662587827025453)],+                               n = 18},+                   koData =+                     ClassData{prior = -1.9459101490553135, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("year", -1.466337068793427),+                                    ("<integer> <unit-of-duration>", -1.1786549963416462),+                                    ("month", -1.8718021769015913)],+                               n = 3}}),+       ("noon|midnight|EOD|end of day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter to|till|before <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.6739764335716716),+                                    ("dayday", -1.1631508098056809),+                                    ("day (grain)yesterday", -1.6739764335716716)],+                               n = 4},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.6739764335716716),+                                    ("year (grain)Christmas", -2.0794415416798357),+                                    ("dayday", -2.0794415416798357),+                                    ("day (grain)intersect", -1.6739764335716716),+                                    ("day (grain)Easter Sunday", -2.0794415416798357),+                                    ("yearday", -2.0794415416798357)],+                               n = 4}}),+       ("Easter Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Navaratri",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Martin Luther King's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("integer (20..90)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Shemini Atzeret",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ramadan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lazarus Saturday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect 2 numbers",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("compose by multiplicationinteger (0..19)",+                                     -0.2231435513142097)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("powers of tensinteger (0..19)", -0.2231435513142097)],+                               n = 3}}),+       ("mm/yyyy",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("integer after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.8109302162163288),+                                    ("integer (numeric)time-of-day (latent)", -1.0986122886681098),+                                    ("integer (20..90)time-of-day (latent)", -1.5040773967762742)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom HaShoah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal or number) <named-month>",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)December", -2.1400661634962708),+                                    ("ordinal (digits)February", -2.1400661634962708),+                                    ("integer (numeric)April", -2.1400661634962708),+                                    ("month", -1.4469189829363254)],+                               n = 3},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.4011973816621555,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)October", -2.6741486494265287),+                                    ("ordinal (digits)July", -2.6741486494265287),+                                    ("integer (numeric)September", -2.268683541318364),+                                    ("ordinal (digits)August", -2.6741486494265287),+                                    ("integer (numeric)August", -2.6741486494265287),+                                    ("ordinal (digits)April", -2.6741486494265287),+                                    ("month", -1.0647107369924282),+                                    ("integer (numeric)July", -2.268683541318364)],+                               n = 9}}),+       ("<time> <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -9.237332013101517e-2,+                               unseen = -4.48863636973214,+                               likelihoods =+                                 HashMap.fromList+                                   [("<day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("dayhour", -1.4816045409242156),+                                    ("Mondayearly morning", -3.378724525810097),+                                    ("time-of-day (latent)tonight", -3.378724525810097),+                                    ("hourhour", -2.3978952727983707),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("todaypart of days", -3.784189633918261),+                                    ("minutehour", -2.6855773452501515),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -3.378724525810097),+                                    ("time-of-day (latent)this <part-of-day>", -3.784189633918261),+                                    ("Mondayin|during the <part-of-day>", -3.784189633918261),+                                    ("intersectpart of days", -3.784189633918261),+                                    ("intersectin|during the <part-of-day>", -3.784189633918261),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("tomorrowpart of days", -2.3978952727983707),+                                    ("hh:mmin|during the <part-of-day>", -3.0910424533583156),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("hhmm (latent)in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("yesterdaypart of days", -3.378724525810097),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -3.784189633918261),+                                    ("Mondaypart of days", -3.784189633918261)],+                               n = 31},+                   koData =+                     ClassData{prior = -2.4277482359480516,+                               unseen = -3.4965075614664802,+                               likelihoods =+                                 HashMap.fromList+                                   [("yearhour", -2.772588722239781),+                                    ("monthhour", -2.772588722239781),+                                    ("hourhour", -2.772588722239781),+                                    ("year (latent)in|during the <part-of-day>",+                                     -2.772588722239781),+                                    ("Februaryin|during the <part-of-day>", -2.772588722239781),+                                    ("time-of-day (latent)in|during the <part-of-day>",+                                     -2.772588722239781)],+                               n = 3}}),+       ("today",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("mm/dd",+        Classifier{okData =+                     ClassData{prior = -1.2729656758128873,+                               unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},+                   koData =+                     ClassData{prior = -0.3285040669720361, unseen = -2.995732273553991,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 18}}),+       ("at <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.961215868968717e-2,+                               unseen = -4.948759890378168,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time> timezone", -3.8430301339411947),+                                    ("noon|midnight|EOD|end of day", -3.8430301339411947),+                                    ("integer after|past <hour-of-day>", -3.8430301339411947),+                                    ("half after|past <hour-of-day>", -4.248495242049359),+                                    ("time-of-day (latent)", -1.6835458845878222),+                                    ("hhmm (latent)", -3.5553480614894135),+                                    ("<time-of-day> am|pm", -1.8061482066801546),+                                    ("hh:mm", -3.332204510175204),+                                    ("about|exactly <time-of-day>", -3.8430301339411947),+                                    ("hour", -1.0704414117014134),+                                    ("<time-of-day> sharp|exactly", -4.248495242049359),+                                    ("minute", -2.05127066471314)],+                               n = 64},+                   koData =+                     ClassData{prior = -2.456735772821304, unseen = -3.2188758248682006,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -1.2321436812926323),+                                    ("hour", -1.2321436812926323)],+                               n = 6}}),+       ("December",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("absorption of , after named day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("on <date>", -2.1972245773362196),+                                    ("Wednesday", -2.6026896854443837),+                                    ("Saturday", -2.6026896854443837),+                                    ("Monday", -2.1972245773362196),+                                    ("Friday", -1.9095425048844386), ("day", -0.8979415932059586),+                                    ("Sunday", -2.6026896854443837)],+                               n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("September",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("tonight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|past|next <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.2626798770413155,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.456735772821304), ("second", -2.639057329615259),+                                    ("day", -2.3025850929940455), ("year", -2.639057329615259),+                                    ("<integer> <unit-of-duration>", -0.7827593392496325),+                                    ("hour", -2.639057329615259), ("month", -2.639057329615259),+                                    ("minute", -2.639057329615259)],+                               n = 31},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the ides of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("on <date>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -4.204692619390966,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -1.4816045409242156),+                                    ("mm/dd", -3.4965075614664802),+                                    ("absorption of , after named day", -3.0910424533583156),+                                    ("intersect", -3.0910424533583156),+                                    ("Saturday", -2.803360380906535),+                                    ("Friday", -3.4965075614664802), ("day", -0.8574502318512216),+                                    ("the <day-of-month> (ordinal)", -3.0910424533583156),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.803360380906535),+                                    ("hour", -3.4965075614664802)],+                               n = 28},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.791759469228055), ("day", -1.2809338454620642),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -1.791759469228055)],+                               n = 4}}),+       ("integer (0..19)",+        Classifier{okData =+                     ClassData{prior = -0.11122563511022437,+                               unseen = -3.970291913552122,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 51},+                   koData =+                     ClassData{prior = -2.2512917986064953,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),+       ("between <time-of-day> and <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.7884573603642702),+                                    ("hh:mmhh:mm", -0.7884573603642702)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -0.7884573603642702),+                                    ("minutehour", -0.7884573603642702)],+                               n = 9}}),+       ("Halloween",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Passover",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6094379124341003),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -1.6094379124341003),+                                    ("month", -0.916290731874155),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("October",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 16},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from|since|after <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -1.6094379124341003, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("July", -3.332204510175204),+                                    ("time-of-day (latent)", -2.4159137783010487),+                                    ("<time-of-day> am|pm", -2.4159137783010487),+                                    ("hh:mm", -2.4159137783010487), ("hour", -1.8281271133989299),+                                    ("month", -2.9267394020670396), ("minute", -2.4159137783010487),+                                    ("August", -3.332204510175204)],+                               n = 14},+                   koData =+                     ClassData{prior = -0.2231435513142097, unseen = -4.948759890378168,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.8430301339411947),+                                    ("week", -4.248495242049359),+                                    ("<day-of-month> (ordinal or number) <named-month>",+                                     -4.248495242049359),+                                    ("today", -4.248495242049359),+                                    ("intersect", -2.3766930651477676),+                                    ("second", -4.248495242049359), ("now", -3.332204510175204),+                                    ("tomorrow", -3.8430301339411947),+                                    ("this|last|next <cycle>", -4.248495242049359),+                                    ("day", -1.8971199848858813),+                                    ("time-of-day (latent)", -4.248495242049359),+                                    ("<time-of-day> am|pm", -3.8430301339411947),+                                    ("nograin", -3.332204510175204),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -4.248495242049359),+                                    ("Easter Sunday", -4.248495242049359),+                                    ("Christmas", -3.5553480614894135),+                                    ("hour", -2.995732273553991), ("month", -4.248495242049359),+                                    ("<datetime> - <datetime> (interval)", -2.8622008809294686),+                                    ("<time-of-day> - <time-of-day> (interval)",+                                     -2.5437471498109336),+                                    ("<named-month> <day-of-month> (non ordinal)",+                                     -3.8430301339411947),+                                    ("minute", -1.7635885922613588),+                                    ("right now", -4.248495242049359),+                                    ("<month> dd-dd (interval)", -3.5553480614894135),+                                    ("dd-dd <month> (interval)", -3.8430301339411947)],+                               n = 56}}),+       ("month (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 18},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> more <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)minute (grain)", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> o'clock",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in|within|after <duration>",+        Classifier{okData =+                     ClassData{prior = -0.17062551703076334,+                               unseen = -4.653960350157523,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -3.258096538021482),+                                    ("<integer> more <unit-of-duration>", -3.951243718581427),+                                    ("three-quarters of an hour", -3.0349529867072724),+                                    ("<integer> + '\"", -3.258096538021482),+                                    ("number.number hours", -3.951243718581427),+                                    ("second", -3.545778610473263), ("day", -3.258096538021482),+                                    ("half an hour", -3.0349529867072724),+                                    ("year", -3.951243718581427),+                                    ("<integer> <unit-of-duration>", -1.5998684614179497),+                                    ("a <unit-of-duration>", -3.0349529867072724),+                                    ("quarter of an hour", -3.0349529867072724),+                                    ("hour", -2.5649493574615367),+                                    ("about|exactly <duration>", -3.951243718581427),+                                    ("<integer> and an half hour", -3.951243718581427),+                                    ("minute", -1.3121863889661687)],+                               n = 43},+                   koData =+                     ClassData{prior = -1.8523840910444898,+                               unseen = -3.5553480614894135,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -2.4277482359480516), ("year", -1.7346010553881064),+                                    ("<integer> <unit-of-duration>", -1.7346010553881064),+                                    ("a <unit-of-duration>", -2.1400661634962708),+                                    ("month", -2.833213344056216)],+                               n = 8}}),+       ("January",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("three-quarters of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Mattu Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Wednesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> + '\"",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half <integer> (UK style hour-of-day)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("July",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hour (grain)",+        Classifier{okData =+                     ClassData{prior = -0.8209805520698302,+                               unseen = -2.5649493574615367,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                   koData =+                     ClassData{prior = -0.579818495252942, unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14}}),+       ("Shavuot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> <duration> hence|ago",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.3862943611198906),+                                    ("Thanksgiving Day<integer> <unit-of-duration>",+                                     -1.0986122886681098),+                                    ("dayyear", -1.3862943611198906),+                                    ("Diwali<integer> <unit-of-duration>", -1.791759469228055)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -1.1786549963416462),+                                    ("ordinals (first..twentieth,thirtieth,...)quarter (grain)",+                                     -1.466337068793427),+                                    ("quarter", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.8109302162163288),+                                    ("quarter", -0.8109302162163288)],+                               n = 3}}),+       ("Boss's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Orthodox Easter Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("one twenty two",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect",+        Classifier{okData =+                     ClassData{prior = -0.459704877045161, unseen = -6.704414354964107,+                               likelihoods =+                                 HashMap.fromList+                                   [("Navaratriyear (latent)", -6.010040932680917),+                                    ("Ramadanyear (latent)", -6.010040932680917),+                                    ("<datetime> - <datetime> (interval)on <date>",+                                     -4.757277964185549),+                                    ("Bhai Doojyear (latent)", -6.010040932680917),+                                    ("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -4.757277964185549),+                                    ("hourday", -4.305292840442492),+                                    ("dayhour", -3.092270200596638),+                                    ("Martin Luther King's Dayyear (latent)", -5.604575824572753),+                                    ("Shemini Atzeretyear (latent)", -6.010040932680917),+                                    ("daymonth", -5.316893752120972),+                                    ("monthday", -5.604575824572753),+                                    ("monthyear", -4.400603020246817),+                                    ("Yom Ha'atzmautyear (latent)", -6.010040932680917),+                                    ("Vijayadashamiyear (latent)", -6.010040932680917),+                                    ("Thanksgiving Dayyear (latent)", -4.911428644012807),+                                    ("Thai Pongalyear (latent)", -5.316893752120972),+                                    ("Thiru Onamyear (latent)", -5.316893752120972),+                                    ("Tuesdaythe <day-of-month> (ordinal)", -6.010040932680917),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -6.010040932680917),+                                    ("houryear", -5.316893752120972),+                                    ("this|next <day-of-week>hh(:mm) - <time-of-day> am|pm",+                                     -6.010040932680917),+                                    ("Christmas<time-of-day> am|pm", -6.010040932680917),+                                    ("last <day-of-week> of <time>year (latent)",+                                     -6.010040932680917),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.316893752120972),+                                    ("<time-of-day> am|pmintersect", -4.757277964185549),+                                    ("Octoberyear (latent)", -4.757277964185549),+                                    ("intersect<time-of-day> am|pm", -6.010040932680917),+                                    ("Mattu Pongalyear (latent)", -6.010040932680917),+                                    ("Shavuotyear (latent)", -6.010040932680917),+                                    ("Dhanterasin <named-month>|year", -6.010040932680917),+                                    ("at <time-of-day>in|within|after <duration>",+                                     -6.010040932680917),+                                    ("Thursdayhh(:mm) - <time-of-day> am|pm", -6.010040932680917),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -5.604575824572753),+                                    ("Marchyear (latent)", -6.010040932680917),+                                    ("Sukkotyear (latent)", -5.604575824572753),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -6.010040932680917),+                                    ("Clean Mondayyear (latent)", -5.604575824572753),+                                    ("monthhour", -5.604575824572753),+                                    ("todayat <time-of-day>", -6.010040932680917),+                                    ("Thursday<time> timezone", -4.305292840442492),+                                    ("this <time>hh(:mm) - <time-of-day> am|pm",+                                     -6.010040932680917),+                                    ("Palm SundaySunday", -5.604575824572753),+                                    ("dayday", -3.812816355344698),+                                    ("<time> <part-of-day>at <time-of-day>", -6.010040932680917),+                                    ("mm/ddat <time-of-day>", -6.010040932680917),+                                    ("tonightat <time-of-day>", -6.010040932680917),+                                    ("<time-of-day> am|pmabsorption of , after named day",+                                     -5.316893752120972),+                                    ("today<time-of-day> am|pm", -6.010040932680917),+                                    ("Februarythe <day-of-month> (ordinal)", -5.604575824572753),+                                    ("at <time-of-day><time> <part-of-day>", -6.010040932680917),+                                    ("mm/dd<time-of-day> am|pm", -6.010040932680917),+                                    ("hourhour", -4.757277964185549),+                                    ("<time-of-day> am|pmon <date>", -3.9951379121386528),+                                    ("Wednesdaythis|last|next <cycle>", -6.010040932680917),+                                    ("Lentyear (latent)", -6.010040932680917),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -4.505963535904644),+                                    ("Boghiyear (latent)", -6.010040932680917),+                                    ("dayyear", -2.011840231011719),+                                    ("<time-of-day> o'clockin|during the <part-of-day>",+                                     -6.010040932680917),+                                    ("Thursdayat <time-of-day>", -5.604575824572753),+                                    ("Islamic New Yearyear (latent)", -5.604575824572753),+                                    ("Laylat al-Qadryear (latent)", -5.093750200806762),+                                    ("Chhathin <named-month>|year", -6.010040932680917),+                                    ("Vasant Panchamiin <named-month>|year", -6.010040932680917),+                                    ("Diwaliin <named-month>|year", -6.010040932680917),+                                    ("Shrove Tuesdayyear (latent)", -6.010040932680917),+                                    ("<time-of-day> am|pmtomorrow", -5.316893752120972),+                                    ("Yom Kippuryear (latent)", -6.010040932680917),+                                    ("<part-of-day> of <time>year (latent)", -6.010040932680917),+                                    ("minutehour", -5.093750200806762),+                                    ("Kaanum Pongalyear (latent)", -5.604575824572753),+                                    ("Maha Saptamiyear (latent)", -6.010040932680917),+                                    ("at <time-of-day>in|during the <part-of-day>",+                                     -5.604575824572753),+                                    ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",+                                     -4.305292840442492),+                                    ("for <duration> from <time>December", -6.010040932680917),+                                    ("tomorrow<time-of-day> sharp|exactly", -6.010040932680917),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.093750200806762),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -5.604575824572753),+                                    ("Pentecostyear (latent)", -6.010040932680917),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.093750200806762),+                                    ("Eid al-Fitryear (latent)", -6.010040932680917),+                                    ("Mondayin|during the <part-of-day>", -6.010040932680917),+                                    ("Raksha Bandhanyear (latent)", -6.010040932680917),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.604575824572753),+                                    ("Navaratriin <named-month>|year", -6.010040932680917),+                                    ("Ashurayear (latent)", -6.010040932680917),+                                    ("Chinese New Yearyear (latent)", -6.010040932680917),+                                    ("Sundayyear (latent)", -6.010040932680917),+                                    ("Lag BaOmeryear (latent)", -6.010040932680917),+                                    ("last weekend of <named-month>year (latent)",+                                     -6.010040932680917),+                                    ("Eid al-Adhayear (latent)", -5.093750200806762),+                                    ("intersectin|during the <part-of-day>", -6.010040932680917),+                                    ("Christmasat <time-of-day>", -6.010040932680917),+                                    ("Passoveryear (latent)", -6.010040932680917),+                                    ("Lazarus Saturdayyear (latent)", -6.010040932680917),+                                    ("<day-of-month> (ordinal or number) <named-month>year (latent)",+                                     -6.010040932680917),+                                    ("Yom HaShoahyear (latent)", -5.604575824572753),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -5.093750200806762),+                                    ("<day-of-month> (ordinal or number) of <named-month>in|during the <part-of-day>",+                                     -6.010040932680917),+                                    ("Thai Pongalin <named-month>|year", -6.010040932680917),+                                    ("Septemberyear (latent)", -5.604575824572753),+                                    ("mm/ddyear (latent)", -6.010040932680917),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -4.757277964185549),+                                    ("Halloweenyear (latent)", -6.010040932680917),+                                    ("from <time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.316893752120972),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -5.093750200806762),+                                    ("at <time-of-day>intersect", -5.604575824572753),+                                    ("Rosh Hashanahyear (latent)", -6.010040932680917),+                                    ("Dhanterasyear (latent)", -6.010040932680917),+                                    ("Tu BiShvatyear (latent)", -6.010040932680917),+                                    ("Holiyear (latent)", -5.316893752120972),+                                    ("<time-of-day> - <time-of-day> (interval)tomorrow",+                                     -6.010040932680917),+                                    ("Holika Dahanyear (latent)", -5.316893752120972),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.010040932680917),+                                    ("dayminute", -3.3709836030656586),+                                    ("Mawlidyear (latent)", -6.010040932680917),+                                    ("from <datetime> - <datetime> (interval)on <date>",+                                     -5.604575824572753),+                                    ("<datetime> - <datetime> (interval)tomorrow",+                                     -6.010040932680917),+                                    ("Jumu'atul-Widayear (latent)", -5.093750200806762),+                                    ("absorption of , after named dayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -6.010040932680917),+                                    ("minuteday", -2.3724547729545318),+                                    ("absorption of , after named dayintersect",+                                     -6.010040932680917),+                                    ("intersectyear (latent)", -6.010040932680917),+                                    ("Orthodox Easter Sundayyear (latent)", -6.010040932680917),+                                    ("<ordinal> <cycle> of <time>year (latent)",+                                     -6.010040932680917),+                                    ("the <day-of-month> (ordinal)in|during the <part-of-day>",+                                     -6.010040932680917),+                                    ("Boss's Dayyear (latent)", -5.604575824572753),+                                    ("Tisha B'Avyear (latent)", -6.010040932680917),+                                    ("Isra and Mi'rajyear (latent)", -5.093750200806762),+                                    ("at <time-of-day>absorption of , after named day",+                                     -6.010040932680917),+                                    ("Christmasyear (latent)", -5.604575824572753),+                                    ("Naraka Chaturdashiyear (latent)", -5.604575824572753),+                                    ("at <time-of-day>on <date>", -4.911428644012807),+                                    ("between <time-of-day> and <time-of-day> (interval)on <date>",+                                     -4.400603020246817),+                                    ("dayweek", -6.010040932680917),+                                    ("Easter Sundayyear (latent)", -5.316893752120972),+                                    ("Thursday<time-of-day> am|pm", -6.010040932680917),+                                    ("weekyear", -5.604575824572753),+                                    ("hh:mmin|during the <part-of-day>", -5.316893752120972),+                                    ("<cycle> after|before <time><time-of-day> am|pm",+                                     -5.604575824572753),+                                    ("Hanukkahyear (latent)", -6.010040932680917),+                                    ("February<time> <part-of-day>", -6.010040932680917),+                                    ("Tuesdayin <named-month>|year", -6.010040932680917),+                                    ("Great Lentyear (latent)", -6.010040932680917),+                                    ("tomorrowat <time-of-day>", -5.316893752120972),+                                    ("between <time> and <time>on <date>", -4.400603020246817),+                                    ("Thursdayfrom|since|after <time-of-day>", -5.316893752120972),+                                    ("last <cycle> of <time>year (latent)", -5.316893752120972),+                                    ("at <time-of-day>tomorrow", -5.604575824572753),+                                    ("tomorrow<time-of-day> am|pm", -6.010040932680917),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -6.010040932680917),+                                    ("Diwaliyear (latent)", -6.010040932680917),+                                    ("Black Fridayyear (latent)", -5.604575824572753),+                                    ("in|during the <part-of-day>at <time-of-day>",+                                     -6.010040932680917),+                                    ("Chhathyear (latent)", -5.604575824572753),+                                    ("Vasant Panchamiyear (latent)", -6.010040932680917),+                                    ("Palm Sundayintersect", -6.010040932680917),+                                    ("<day-of-month> (ordinal or number) of <month>in|during the <part-of-day>",+                                     -6.010040932680917),+                                    ("Februaryintersect", -6.010040932680917),+                                    ("Simchat Torahyear (latent)", -6.010040932680917)],+                               n = 305},+                   koData =+                     ClassData{prior = -0.9982331033604875, unseen = -6.331501849893691,+                               likelihoods =+                                 HashMap.fromList+                                   [("<time-of-day> - <time-of-day> (interval)on <date>",+                                     -5.636573724962751),+                                    ("hourday", -5.636573724962751),+                                    ("<named-month> <day-of-month> (non ordinal)July",+                                     -5.636573724962751),+                                    ("dayhour", -3.1942266895935467),+                                    ("daymonth", -3.5571321832829152),+                                    ("monthday", -5.231108616854587),+                                    ("monthyear", -4.383810756467383),+                                    ("<time-of-day> am|pmyear (latent)", -5.231108616854587),+                                    ("Thai Pongalyear (latent)", -4.943426544402806),+                                    ("intersecthh:mm", -5.636573724962751),+                                    ("from <datetime> - <datetime> (interval)July",+                                     -5.636573724962751),+                                    ("houryear", -4.720282993088596),+                                    ("from <time-of-day> - <time-of-day> (interval)July",+                                     -5.636573724962751),+                                    ("until <time-of-day><time-of-day> am|pm", -5.636573724962751),+                                    ("<time-of-day> am|pmintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.943426544402806),+                                    ("<time-of-day> am|pmintersect", -4.383810756467383),+                                    ("Octoberyear (latent)", -5.636573724962751),+                                    ("from|since|after <time-of-day>year (latent)",+                                     -4.383810756467383),+                                    ("from|since|after <time-of-day>on <date>", -4.720282993088596),+                                    ("July<day-of-month> (ordinal or number) <named-month>",+                                     -5.636573724962751),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -4.383810756467383),+                                    ("about|exactly <time-of-day>year (latent)",+                                     -5.636573724962751),+                                    ("absorption of , after named dayJuly", -5.231108616854587),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.720282993088596),+                                    ("Clean Mondayyear (latent)", -5.636573724962751),+                                    ("monthhour", -5.636573724962751),+                                    ("hourmonth", -4.943426544402806),+                                    ("todayat <time-of-day>", -5.636573724962751),+                                    ("from|since|after <time-of-day>July", -5.636573724962751),+                                    ("Mondayyear (latent)", -4.943426544402806),+                                    ("dayday", -5.231108616854587),+                                    ("mm/ddat <time-of-day>", -5.231108616854587),+                                    ("<time-of-day> am|pmon <date>", -4.383810756467383),+                                    ("dayyear", -2.66615925939305),+                                    ("Thursdaymm/dd", -5.636573724962751),+                                    ("New Year's Dayyear (latent)", -5.231108616854587),+                                    ("Thursdayat <time-of-day>", -4.383810756467383),+                                    ("<integer> to|till|before <hour-of-day>September",+                                     -5.636573724962751),+                                    ("Aprilyear (latent)", -5.636573724962751),+                                    ("monthminute", -5.636573724962751),+                                    ("<time-of-day> am|pmtomorrow", -5.636573724962751),+                                    ("Thursdayhh:mm", -4.720282993088596),+                                    ("August<day-of-month> (ordinal or number) <named-month>",+                                     -5.636573724962751),+                                    ("minutemonth", -3.844814255734696),+                                    ("Sundayfrom|since|after <time-of-day>", -5.636573724962751),+                                    ("week-endin <named-month>|year", -5.636573724962751),+                                    ("Augustyear (latent)", -5.231108616854587),+                                    ("Thursdayfrom <datetime> - <datetime> (interval)",+                                     -5.231108616854587),+                                    ("Thursdayfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.231108616854587),+                                    ("mm/dd<time-of-day> - <time-of-day> (interval)",+                                     -5.231108616854587),+                                    ("tomorrowfrom <time-of-day> - <time-of-day> (interval)",+                                     -5.636573724962751),+                                    ("Sundayyear (latent)", -4.943426544402806),+                                    ("Christmasat <time-of-day>", -5.636573724962751),+                                    ("<duration> after|before|from <time>December",+                                     -5.636573724962751),+                                    ("yesterday<time-of-day> am|pm", -5.636573724962751),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -4.720282993088596),+                                    ("mm/ddyear (latent)", -5.636573724962751),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -5.231108616854587),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -5.636573724962751),+                                    ("until <time-of-day>on <date>", -4.943426544402806),+                                    ("at <time-of-day>intersect", -5.231108616854587),+                                    ("hh:mmyear (latent)", -4.537961436294641),+                                    ("Holiyear (latent)", -5.636573724962751),+                                    ("at <time-of-day>intersect by \",\", \"of\", \"from\", \"'s\"",+                                     -5.636573724962751),+                                    ("dayminute", -3.1516670751747506),+                                    ("intersectSeptember", -4.132496328186477),+                                    ("minuteday", -2.568520789829134),+                                    ("absorption of , after named dayintersect",+                                     -5.636573724962751),+                                    ("Februaryin|during the <part-of-day>", -5.636573724962751),+                                    ("hh:mmon <date>", -3.6216707044204863),+                                    ("Saturdayyear (latent)", -5.636573724962751),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -5.636573724962751),+                                    ("absorption of , after named daySeptember",+                                     -4.720282993088596),+                                    ("Naraka Chaturdashiyear (latent)", -5.636573724962751),+                                    ("on <date>September", -5.231108616854587),+                                    ("at <time-of-day>on <date>", -5.231108616854587),+                                    ("in <named-month>|yearyear (latent)", -5.636573724962751),+                                    ("dayweek", -5.636573724962751),+                                    ("Easter Sundayyear (latent)", -5.231108616854587),+                                    ("Thursday<time-of-day> am|pm", -5.231108616854587),+                                    ("absorption of , after named dayFebruary", -4.720282993088596),+                                    ("July<integer> to|till|before <hour-of-day>",+                                     -5.636573724962751),+                                    ("tomorrowat <time-of-day>", -5.636573724962751),+                                    ("<integer> to|till|before <hour-of-day>July",+                                     -5.636573724962751),+                                    ("Thursdayfrom|since|after <time-of-day>", -4.027135812528651),+                                    ("tomorrow<time-of-day> am|pm", -5.636573724962751),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -4.943426544402806),+                                    ("Diwaliyear (latent)", -5.231108616854587),+                                    ("Tuesdayfrom|since|after <time-of-day>", -5.636573724962751),+                                    ("Fridayyear (latent)", -5.231108616854587),+                                    ("minuteyear", -4.383810756467383)],+                               n = 178}}),+       ("one eleven",+        Classifier{okData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("after lunch/work/school",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("early morning",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <number> (implicit minutes)",+        Classifier{okData =+                     ClassData{prior = -1.2685113254635072,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.3184537311185346),+                                    ("integer (0..19)", -1.2992829841302609)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.33024168687057687,+                               unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.1743533871447778),+                                    ("integer (0..19)", -1.8325814637483102)],+                               n = 23}}),+       ("<ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.791759469228055),+                                    ("ordinal (digits)quarter (grain)year (latent)",+                                     -2.1972245773362196),+                                    ("quarteryear", -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)day (grain)October",+                                     -2.1972245773362196),+                                    ("ordinal (digits)day (grain)this|last|next <cycle>",+                                     -2.1972245773362196),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)intersect",+                                     -2.1972245773362196),+                                    ("weekmonth", -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)week (grain)October",+                                     -2.1972245773362196)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4011973816621555,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 28},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -1.0116009116784799,+                               unseen = -3.6375861597263857,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -2.001480000210124),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("hh:mmhh:mm", -2.001480000210124),+                                    ("dayday", -2.512305623976115),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)<day-of-month> (ordinal)",+                                     -2.917770732084279),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.917770732084279),+                                    ("hourhour", -2.512305623976115),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.917770732084279)],+                               n = 8},+                   koData =+                     ClassData{prior = -0.45198512374305727,+                               unseen = -3.912023005428146,+                               likelihoods =+                                 HashMap.fromList+                                   [("hourday", -3.1986731175506815),+                                    ("dayhour", -2.793208009442517),+                                    ("<day-of-month> (ordinal)time-of-day (latent)",+                                     -3.1986731175506815),+                                    ("<named-month>|<named-day> <day-of-month> (ordinal)year (latent)",+                                     -3.1986731175506815),+                                    ("hh:mmtime-of-day (latent)", -2.2823823856765264),+                                    ("minuteminute", -2.793208009442517),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.793208009442517),+                                    ("dayday", -3.1986731175506815),+                                    ("hourhour", -2.505525936990736),+                                    ("dayyear", -3.1986731175506815),+                                    ("minutehour", -2.2823823856765264),+                                    ("hh:mmintersect", -2.793208009442517),+                                    ("<day-of-month> (ordinal)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<time-of-day> am|pm",+                                     -3.1986731175506815),+                                    ("time-of-day (latent)<day-of-month> (ordinal or number) <named-month>",+                                     -3.1986731175506815),+                                    ("<named-month> <day-of-month> (non ordinal)time-of-day (latent)",+                                     -3.1986731175506815)],+                               n = 14}}),+       ("Saturday",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.9459101490553135,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("the <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("week (grain)<named-month>|<named-day> <day-of-month> (ordinal)",+                                     -1.7346010553881064),+                                    ("weekmonth", -1.7346010553881064),+                                    ("week (grain)October", -1.7346010553881064),+                                    ("week (grain)<named-month> <day-of-month> (non ordinal)",+                                     -1.7346010553881064),+                                    ("weekday", -1.2237754316221157)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("number.number hours",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.6094379124341003),+                                    ("hh:mmhh:mm", -1.6094379124341003),+                                    ("<time-of-day> am|pmtime-of-day (latent)", -2.70805020110221),+                                    ("hourhour", -2.3025850929940455),+                                    ("hourminute", -2.3025850929940455),+                                    ("time-of-day (latent)<time-of-day> sharp|exactly",+                                     -2.70805020110221),+                                    ("time-of-day (latent)hh:mm", -2.70805020110221),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.70805020110221)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.6094379124341003),+                                    ("time-of-day (latent)time-of-day (latent)",+                                     -2.0149030205422647),+                                    ("hourhour", -1.791759469228055),+                                    ("minutehour", -1.6094379124341003),+                                    ("time-of-day (latent)<time-of-day> am|pm", -2.70805020110221)],+                               n = 9}}),+       ("integer 21..99",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)", -0.6931471805599453),+                                    ("integer (20..90)integer (0..19)", -0.6931471805599453)],+                               n = 4}}),+       ("Tisha B'Av",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("yyyy-mm-dd",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("year (latent)",+        Classifier{okData =+                     ClassData{prior = -0.16454938704815686,+                               unseen = -4.852030263919617,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -4.839654086185021e-2),+                                    ("intersect 2 numbers", -3.457892725338701)],+                               n = 123},+                   koData =+                     ClassData{prior = -1.8856912890622586, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.3121863889661687),+                                    ("negative numbers", -0.6190392084062235),+                                    ("compose by multiplication", -1.8718021769015913)],+                               n = 22}}),+       ("mm/dd/yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Monday",+        Classifier{okData =+                     ClassData{prior = -0.3483066942682157, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.2237754316221157,+                               unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5}}),+       ("yesterday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<ordinal> quarter <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm:ss",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Hanukkah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<hour-of-day> <integer>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>integer (20..90)", -1.3862943611198906),+                                    ("hour", -0.9808292530117262),+                                    ("at <time-of-day>integer (numeric)", -1.3862943611198906)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>integer (numeric)",+                                     -1.0986122886681098),+                                    ("hour", -1.0986122886681098)],+                               n = 1}}),+       ("nth <time> of <time>",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.9808292530117262),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -2.0794415416798357),+                                    ("ordinals (first..twentieth,thirtieth,...)Wednesdayintersect",+                                     -1.6739764335716716),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayOctober",+                                     -1.6739764335716716)],+                               n = 5},+                   koData =+                     ClassData{prior = -0.9808292530117262,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -1.0986122886681098),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdaySeptember",+                                     -1.791759469228055),+                                    ("ordinals (first..twentieth,thirtieth,...)WednesdayOctober",+                                     -1.3862943611198906)],+                               n = 3}}),+       ("Valentine's Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("April",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maha Saptami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week (grain)",+        Classifier{okData =+                     ClassData{prior = -4.0821994520255166e-2,+                               unseen = -4.304065093204169,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 72},+                   koData =+                     ClassData{prior = -3.2188758248682006,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("<part-of-day> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("part of daysintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -2.3513752571634776),+                                    ("part of daysintersect", -2.3513752571634776),+                                    ("hourday", -0.9650808960435872),+                                    ("part of daysthe <day-of-month> (ordinal)",+                                     -2.3513752571634776),+                                    ("part of daysthe <day-of-month> (number)",+                                     -2.3513752571634776),+                                    ("part of daysthis <time>", -2.3513752571634776),+                                    ("part of daysChristmas", -1.9459101490553135)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("six thirty six a.m.",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -1.252762968495368),+                                    ("one twenty two", -0.8472978603872037),+                                    ("one eleven", -1.252762968495368)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Shrove Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("now",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),+       ("<day-of-month> (ordinal or number) of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.13353139262452263,+                               unseen = -3.0910424533583156,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.3513752571634776),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.3513752571634776),+                                    ("ordinal (digits)February", -2.3513752571634776),+                                    ("integer (numeric)February", -1.9459101490553135),+                                    ("month", -0.9650808960435872),+                                    ("ordinal (digits)March", -2.3513752571634776),+                                    ("integer (numeric)July", -2.3513752571634776)],+                               n = 7},+                   koData =+                     ClassData{prior = -2.0794415416798357,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.5040773967762742),+                                    ("month", -1.5040773967762742)],+                               n = 1}}),+       ("this <part-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.6931471805599453),+                                    ("part of days", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Kaanum Pongal",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Yom Kippur",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("powers of tens",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Friday",+        Classifier{okData =+                     ClassData{prior = -0.3677247801253174,+                               unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},+                   koData =+                     ClassData{prior = -1.1786549963416462, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("in|during the <part-of-day>",+        Classifier{okData =+                     ClassData{prior = -8.701137698962981e-2,+                               unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("early morning", -2.5257286443082556),+                                    ("hour", -0.7339691750802004),+                                    ("part of days", -0.8209805520698302)],+                               n = 11},+                   koData =+                     ClassData{prior = -2.4849066497880004, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour", -0.916290731874155),+                                    ("part of days", -0.916290731874155)],+                               n = 1}}),+       ("tomorrow",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh(:mm) - <time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|last|next <cycle>",+        Classifier{okData =+                     ClassData{prior = -7.598590697792199e-2,+                               unseen = -5.093750200806762,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.1173044216802621),+                                    ("month (grain)", -2.7850112422383386),+                                    ("year (grain)", -2.6026896854443837),+                                    ("week (grain)", -1.1173044216802621),+                                    ("quarter", -3.4781584227982836), ("year", -2.6026896854443837),+                                    ("month", -2.7850112422383386),+                                    ("quarter (grain)", -3.4781584227982836)],+                               n = 76},+                   koData =+                     ClassData{prior = -2.6149597780361984,+                               unseen = -3.1354942159291497,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.4816045409242156),+                                    ("week (grain)", -1.4816045409242156),+                                    ("day", -1.9924301646902063),+                                    ("day (grain)", -1.9924301646902063)],+                               n = 6}}),+       ("Simchat Torah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Eve",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)year (latent)",+                                     -0.6931471805599453),+                                    ("quarteryear", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Raksha Bandhan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Ashura",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Palm Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Adha",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods =+                                 HashMap.fromList+                                   [("noon|midnight|EOD|end of day", -1.9459101490553135),+                                    ("time-of-day (latent)", -1.9459101490553135),+                                    ("<time-of-day> am|pm", -1.9459101490553135),+                                    ("hh:mm", -1.9459101490553135), ("hour", -1.540445040947149),+                                    ("minute", -1.540445040947149)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("half an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2006706954621511,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinals (first..twentieth,thirtieth,...)",+                                     -1.7047480922384253),+                                    ("ordinal (digits)", -0.2006706954621511)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.7047480922384253,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("ordinal (digits)", -0.2876820724517809)],+                               n = 2}}),+       ("last weekend of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -0.9555114450274363), ("July", -1.8718021769015913),+                                    ("month", -0.7731898882334817)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <day-of-month> (number)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lag BaOmer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("fractional number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17}}),+       ("Sunday",+        Classifier{okData =+                     ClassData{prior = -0.262364264467491, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -1.466337068793427, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Chinese New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("February",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.70805020110221,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 13},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("minute (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.833213344056216,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 15},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last|this|next <season>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <ordinal> quarter",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)quarter (grain)", -0.6931471805599453),+                                    ("quarter", -0.6931471805599453)],+                               n = 1}}),+       ("time-of-day (latent)",+        Classifier{okData =+                     ClassData{prior = -0.5699145401359973, unseen = -4.290459441148391,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -0.11778303565638351),+                                    ("integer (0..19)", -2.330755969960742)],+                               n = 69},+                   koData =+                     ClassData{prior = -0.8337291311811348, unseen = -4.04305126783455,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -9.352605801082348e-2),+                                    ("integer (0..19)", -2.9267394020670396),+                                    ("integer 21..99", -3.332204510175204)],+                               n = 53}}),+       ("beginning of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("last <day-of-week> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -0.916290731874155),+                                    ("SundayMarch", -1.6094379124341003),+                                    ("MondayMarch", -1.6094379124341003),+                                    ("Sundayintersect", -1.6094379124341003)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.13036181786324358,+                               unseen = -5.204006687076795,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.5594397016505672),+                                    ("integer (0..19)year (grain)", -3.11905548958599),+                                    ("integer (numeric)day (grain)", -2.8006017584674554),+                                    ("integer (0..19)second (grain) ", -3.8122026701459353),+                                    ("integer (0..19)hour (grain)", -3.11905548958599),+                                    ("second", -3.4067375620377707),+                                    ("integer (numeric)second (grain) ", -4.099884742597716),+                                    ("integer (numeric)year (grain)", -3.11905548958599),+                                    ("day", -2.4904468301636156), ("year", -2.4904468301636156),+                                    ("integer (numeric)week (grain)", -3.11905548958599),+                                    ("integer (0..19)month (grain)", -3.5890591188317256),+                                    ("hour", -2.7135903814778253), ("month", -2.89591193827178),+                                    ("integer (numeric)minute (grain)", -3.2525868822105126),+                                    ("integer (0..19)minute (grain)", -3.11905548958599),+                                    ("integer (numeric)month (grain)", -3.4067375620377707),+                                    ("minute", -2.5594397016505672),+                                    ("integer (numeric)hour (grain)", -3.5890591188317256),+                                    ("integer (0..19)day (grain)", -3.5890591188317256),+                                    ("integer (0..19)week (grain)", -3.2525868822105126)],+                               n = 79},+                   koData =+                     ClassData{prior = -2.1019143975318944, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("quarter", -3.1135153092103742), ("hour", -1.4087672169719492),+                                    ("integer (numeric)hour (grain)", -1.4087672169719492),+                                    ("integer (0..19)quarter (grain)", -3.1135153092103742)],+                               n = 11}}),+       ("hhmm (latent)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> am|pm",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -5.342334251964811,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer after|past <hour-of-day>", -3.951243718581427),+                                    ("at <time-of-day>", -2.202043863772168),+                                    ("from|since|after <time-of-day>", -3.7281001672672174),+                                    ("<time-of-day> o'clock", -4.238925791033208),+                                    ("half after|past <hour-of-day>", -4.238925791033208),+                                    ("time-of-day (latent)", -1.7266201670570935),+                                    ("hhmm (latent)", -4.6443908991413725),+                                    ("hh:mm", -2.293015641977895),+                                    ("quarter after|past <hour-of-day>", -4.6443908991413725),+                                    ("about|exactly <time-of-day>", -4.6443908991413725),+                                    ("until <time-of-day>", -3.951243718581427),+                                    ("hour", -1.2104036946562264),+                                    ("<time-of-day> sharp|exactly", -4.6443908991413725),+                                    ("minute", -1.754019141245208)],+                               n = 96},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -4.394449154672439,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> to|till|before <hour-of-day>", -3.283414346005772),+                                    ("from|since|after <time-of-day>", -3.283414346005772),+                                    ("<hour-of-day> <integer>", -3.6888794541139363),+                                    ("time-of-day (latent)", -1.0498221244986778),+                                    ("hour", -1.0147308046874075), ("minute", -2.772588722239781)],+                               n = 32}}),+       ("Yom Ha'atzmaut",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("from <day-of-month> (ordinal or number) to <day-of-month> (ordinal or number) <named-month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)ordinal (digits)July", -1.252762968495368),+                                    ("integer (numeric)integer (numeric)July", -1.252762968495368),+                                    ("month", -0.8472978603872037)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thiru Onam",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thai Pongal",+        Classifier{okData =+                     ClassData{prior = -0.5596157879354228, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -0.8472978603872037,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Vijayadashami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Thanksgiving Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 17},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of <named-month>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods =+                                 HashMap.fromList+                                   [("March", -0.6931471805599453), ("month", -0.6931471805599453)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("a <unit-of-duration>",+        Classifier{okData =+                     ClassData{prior = -0.49247648509779407,+                               unseen = -3.6109179126442243,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -2.1972245773362196),+                                    ("year (grain)", -2.1972245773362196),+                                    ("second", -2.890371757896165),+                                    ("week (grain)", -2.1972245773362196),+                                    ("day", -2.1972245773362196),+                                    ("minute (grain)", -2.890371757896165),+                                    ("year", -2.1972245773362196),+                                    ("second (grain) ", -2.890371757896165),+                                    ("minute", -2.890371757896165),+                                    ("day (grain)", -2.1972245773362196)],+                               n = 11},+                   koData =+                     ClassData{prior = -0.9444616088408514, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("hour (grain)", -1.7227665977411035),+                                    ("quarter", -1.9459101490553135), ("hour", -1.7227665977411035),+                                    ("quarter (grain)", -1.9459101490553135)],+                               n = 7}}),+       ("at the beginning|end of <year>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods =+                                 HashMap.fromList+                                   [("year (latent)", -0.6931471805599453),+                                    ("year", -0.6931471805599453)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Dhanteras",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Tu BiShvat",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Whit Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hh:mm",+        Classifier{okData =+                     ClassData{prior = -5.6352936551131744e-2,+                               unseen = -4.2626798770413155,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 69},+                   koData =+                     ClassData{prior = -2.9041650800285006, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("Holi",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Rosh Hashanah",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Holika Dahan",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter of an hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("second (grain) ",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinals (first..twentieth,thirtieth,...)",+        Classifier{okData =+                     ClassData{prior = -6.899287148695143e-2,+                               unseen = -2.772588722239781,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 14},+                   koData =+                     ClassData{prior = -2.70805020110221, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("Mawlid",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Jumu'atul-Wida",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter after|past <hour-of-day>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -0.6931471805599453),+                                    ("hour", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("the <cycle> after|before <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)tomorrow", -1.252762968495368),+                                    ("dayday", -0.8472978603872037),+                                    ("day (grain)yesterday", -1.252762968495368)],+                               n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("about|exactly <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.15415067982725836,+                               unseen = -3.6109179126442243,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -1.791759469228055),+                                    ("hh(:mm) - <time-of-day> am|pm", -2.890371757896165),+                                    ("this|last|next <cycle>", -1.791759469228055),+                                    ("day", -2.4849066497880004),+                                    ("time-of-day (latent)", -2.890371757896165),+                                    ("hhmm (latent)", -2.4849066497880004),+                                    ("<time-of-day> am|pm", -2.890371757896165),+                                    ("hour", -2.1972245773362196),+                                    ("next <time>", -2.890371757896165),+                                    ("this|next <day-of-week>", -2.890371757896165),+                                    ("minute", -2.4849066497880004)],+                               n = 12},+                   koData =+                     ClassData{prior = -1.9459101490553135, unseen = -2.833213344056216,+                               likelihoods =+                                 HashMap.fromList+                                   [("mm/dd", -2.0794415416798357), ("day", -2.0794415416798357),+                                    ("time-of-day (latent)", -2.0794415416798357),+                                    ("hour", -2.0794415416798357)],+                               n = 2}}),+       ("Sukkot",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day> in <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.044522437723423,+                               likelihoods =+                                 HashMap.fromList+                                   [("daymonth", -2.3025850929940455),+                                    ("monthyear", -1.8971199848858813),+                                    ("Marcha <unit-of-duration>", -2.3025850929940455),+                                    ("March<integer> <unit-of-duration>", -2.3025850929940455),+                                    ("Thanksgiving Daya <unit-of-duration>", -2.3025850929940455),+                                    ("Thanksgiving Day<integer> <unit-of-duration>",+                                     -1.8971199848858813),+                                    ("Vijayadashami<integer> <unit-of-duration>",+                                     -2.3025850929940455),+                                    ("dayyear", -1.6094379124341003)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("World Vegan Day",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("intersect by \",\", \"of\", \"from\", \"'s\"",+        Classifier{okData =+                     ClassData{prior = -0.4700036292457356, unseen = -5.081404364984463,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday<named-month> <day-of-month> (non ordinal)",+                                     -4.382026634673881),+                                    ("dayhour", -3.1292636661785136),+                                    ("daymonth", -3.1292636661785136),+                                    ("<named-month> <day-of-month> (non ordinal)Friday",+                                     -4.382026634673881),+                                    ("Friday<named-month> <day-of-month> (non ordinal)",+                                     -3.6888794541139363),+                                    ("Wednesdayintersect", -4.382026634673881),+                                    ("Black Fridaythis|last|next <cycle>", -4.382026634673881),+                                    ("<part-of-day> of <time>February", -4.382026634673881),+                                    ("Saturday<time-of-day> am|pm", -4.382026634673881),+                                    ("Martin Luther King's Daythis|last|next <cycle>",+                                     -3.9765615265657175),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"year (latent)",+                                     -4.382026634673881),+                                    ("on <date><time-of-day> am|pm", -4.382026634673881),+                                    ("hourmonth", -4.382026634673881),+                                    ("dayday", -2.5102244577722903),+                                    ("the <day-of-month> (ordinal)February", -3.9765615265657175),+                                    ("WednesdayOctober", -4.382026634673881),+                                    ("Wednesdaythis|last|next <cycle>", -3.9765615265657175),+                                    ("intersect<named-month> <day-of-month> (non ordinal)",+                                     -3.4657359027997265),+                                    ("dayyear", -2.8779492378976075),+                                    ("Saturday<named-month> <day-of-month> (non ordinal)",+                                     -4.382026634673881),+                                    ("Thursdayhh:mm", -3.9765615265657175),+                                    ("Thanksgiving Daythis|last|next <cycle>", -4.382026634673881),+                                    ("on <date><named-month> <day-of-month> (non ordinal)",+                                     -3.9765615265657175),+                                    ("TuesdayOctober", -4.382026634673881),+                                    ("the <day-of-month> (ordinal)March", -4.382026634673881),+                                    ("Mondaythis|last|next <cycle>", -4.382026634673881),+                                    ("Fridayintersect by \",\", \"of\", \"from\", \"'s\"",+                                     -4.382026634673881),+                                    ("Fridayintersect", -4.382026634673881),+                                    ("Thursday<datetime> - <datetime> (interval)",+                                     -3.6888794541139363),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.4657359027997265),+                                    ("Tuesdaythis|last|next <cycle>", -4.382026634673881),+                                    ("Sunday<named-month> <day-of-month> (non ordinal)",+                                     -4.382026634673881),+                                    ("dayminute", -2.995732273553991),+                                    ("minuteday", -3.4657359027997265),+                                    ("this|last|next <cycle>Sunday", -4.382026634673881),+                                    ("intersectyear (latent)", -4.382026634673881),+                                    ("Sundaythis|last|next <cycle>", -4.382026634673881),+                                    ("weekday", -4.382026634673881),+                                    ("dayweek", -3.283414346005772),+                                    ("Thursday<time-of-day> am|pm", -4.382026634673881),+                                    ("Monday<named-month> <day-of-month> (non ordinal)",+                                     -3.9765615265657175),+                                    ("<named-month> <day-of-month> (non ordinal)year (latent)",+                                     -3.9765615265657175)],+                               n = 50},+                   koData =+                     ClassData{prior = -0.9808292530117262, unseen = -4.795790545596741,+                               likelihoods =+                                 HashMap.fromList+                                   [("week-endJuly", -4.0943445622221),+                                    ("week-endOctober", -3.4011973816621555),+                                    ("daymonth", -1.8971199848858813),+                                    ("TuesdaySeptember", -4.0943445622221),+                                    ("Wednesdayintersect", -4.0943445622221),+                                    ("hourmonth", -2.995732273553991),+                                    ("Fridaythis|last|next <cycle>", -4.0943445622221),+                                    ("SundayFebruary", -4.0943445622221),+                                    ("WednesdayOctober", -4.0943445622221),+                                    ("week-endintersect", -4.0943445622221),+                                    ("dayyear", -4.0943445622221),+                                    ("FridayJuly", -3.6888794541139363),+                                    ("FridaySeptember", -4.0943445622221),+                                    ("WednesdayFebruary", -4.0943445622221),+                                    ("minutemonth", -3.1780538303479458),+                                    ("SundayMarch", -4.0943445622221),+                                    ("MondayFebruary", -3.6888794541139363),+                                    ("Fridayintersect", -4.0943445622221),+                                    ("Thursday<time-of-day> - <time-of-day> (interval)",+                                     -3.6888794541139363),+                                    ("dayminute", -3.4011973816621555),+                                    ("SaturdaySeptember", -4.0943445622221),+                                    ("intersectSeptember", -3.1780538303479458),+                                    ("MondayMarch", -4.0943445622221),+                                    ("on <date>September", -3.6888794541139363),+                                    ("Tuesdayintersect", -4.0943445622221),+                                    ("Sundayintersect", -4.0943445622221)],+                               n = 30}}),+       ("last <time>",+        Classifier{okData =+                     ClassData{prior = -0.6286086594223742, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("Martin Luther King's Day", -2.5649493574615367),+                                    ("day", -1.1786549963416462), ("Sunday", -2.5649493574615367),+                                    ("Chinese New Year", -2.159484249353372),+                                    ("Thanksgiving Day", -2.5649493574615367),+                                    ("Easter Sunday", -2.5649493574615367),+                                    ("hour", -2.5649493574615367), ("Tuesday", -2.5649493574615367),+                                    ("week-end", -2.5649493574615367)],+                               n = 8},+                   koData =+                     ClassData{prior = -0.7621400520468967,+                               unseen = -3.2188758248682006,+                               likelihoods =+                                 HashMap.fromList+                                   [("Monday", -2.4849066497880004), ("day", -2.0794415416798357),+                                    ("Sunday", -2.4849066497880004), ("hour", -1.3862943611198906),+                                    ("week-end", -1.3862943611198906)],+                               n = 7}}),+       ("March",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.044522437723423,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 19},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<named-month>|<named-day> <day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097, unseen = -3.258096538021482,+                               likelihoods =+                                 HashMap.fromList+                                   [("Octoberordinal (digits)", -2.120263536200091),+                                    ("Thursdayordinal (digits)", -2.5257286443082556),+                                    ("day", -2.120263536200091),+                                    ("Augustordinal (digits)", -2.5257286443082556),+                                    ("Marchordinals (first..twentieth,thirtieth,...)",+                                     -2.120263536200091),+                                    ("Tuesdayordinal (digits)", -2.5257286443082556),+                                    ("month", -1.2729656758128873),+                                    ("Marchordinal (digits)", -2.5257286443082556)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.6094379124341003, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("from|since|after <time-of-day>ordinal (digits)",+                                     -1.8718021769015913),+                                    ("Augustordinal (digits)", -1.8718021769015913),+                                    ("month", -1.466337068793427)],+                               n = 2}}),+       ("Clean Monday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month> (ordinal)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("ordinal (digits)", 0.0)], n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Easter Sunday",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),+       ("Christmas",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("until <time-of-day>",+        Classifier{okData =+                     ClassData{prior = -0.9808292530117262, unseen = -3.044522437723423,+                               likelihoods =+                                 HashMap.fromList+                                   [("time-of-day (latent)", -2.3025850929940455),+                                    ("<time-of-day> am|pm", -1.6094379124341003),+                                    ("hh:mm", -1.8971199848858813), ("hour", -1.8971199848858813),+                                    ("minute", -1.3862943611198906)],+                               n = 6},+                   koData =+                     ClassData{prior = -0.4700036292457356, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersect", -1.7227665977411035),+                                    ("yesterday", -2.2335922215070942),+                                    ("day", -2.2335922215070942), ("hh:mm", -1.7227665977411035),+                                    ("hour", -2.639057329615259), ("minute", -1.252762968495368)],+                               n = 10}}),+       ("mm.dd.yyyy",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Isra and Mi'raj",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<duration> after|before|from <time>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -3.5553480614894135,+                               likelihoods =+                                 HashMap.fromList+                                   [("a <unit-of-duration>now", -2.833213344056216),+                                    ("a <unit-of-duration>Christmas", -2.833213344056216),+                                    ("dayday", -2.833213344056216),+                                    ("<integer> <unit-of-duration>today", -2.833213344056216),+                                    ("daysecond", -2.833213344056216),+                                    ("a <unit-of-duration>right now", -2.833213344056216),+                                    ("minutenograin", -2.833213344056216),+                                    ("<integer> <unit-of-duration>Christmas", -2.833213344056216),+                                    ("<integer> <unit-of-duration>Easter Sunday",+                                     -2.833213344056216),+                                    ("secondnograin", -2.833213344056216),+                                    ("yearday", -2.1400661634962708),+                                    ("daynograin", -2.833213344056216),+                                    ("<integer> <unit-of-duration>now", -2.4277482359480516)],+                               n = 8},+                   koData =+                     ClassData{prior = -1.0986122886681098, unseen = -3.295836866004329,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -2.5649493574615367),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -2.5649493574615367),+                                    ("monthnograin", -2.5649493574615367),+                                    ("dayday", -2.159484249353372),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -2.5649493574615367),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -2.5649493574615367),+                                    ("<integer> <unit-of-duration>now", -2.5649493574615367)],+                               n = 4}}),+       ("<day-of-month> (ordinal or number) of <month>",+        Classifier{okData =+                     ClassData{prior = -8.004270767353637e-2,+                               unseen = -3.5263605246161616,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)July", -2.803360380906535),+                                    ("ordinals (first..twentieth,thirtieth,...)March",+                                     -2.803360380906535),+                                    ("ordinal (digits)this|last|next <cycle>", -2.1102132003465894),+                                    ("integer (numeric)this|last|next <cycle>",+                                     -2.3978952727983707),+                                    ("ordinal (digits)February", -2.803360380906535),+                                    ("integer (numeric)February", -2.3978952727983707),+                                    ("month", -0.9315582040049435),+                                    ("ordinal (digits)March", -2.803360380906535),+                                    ("integer (numeric)July", -2.803360380906535)],+                               n = 12},+                   koData =+                     ClassData{prior = -2.5649493574615367,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)February", -1.7047480922384253),+                                    ("month", -1.7047480922384253)],+                               n = 1}}),+       ("decimal number",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3}}),+       ("Naraka Chaturdashi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("beginning of month",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("next <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4339872044851463,+                               likelihoods =+                                 HashMap.fromList+                                   [("Martin Luther King's Day", -2.70805020110221),+                                    ("Halloween", -2.70805020110221),+                                    ("Wednesday", -2.70805020110221),+                                    ("Boss's Day", -2.70805020110221),+                                    ("Monday", -2.70805020110221), ("day", -1.0986122886681098),+                                    ("Thanksgiving Day", -2.70805020110221),+                                    ("March", -2.70805020110221), ("month", -2.70805020110221),+                                    ("Tuesday", -2.0149030205422647)],+                               n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time-of-day> sharp|exactly",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.890371757896165,+                               likelihoods =+                                 HashMap.fromList+                                   [("at <time-of-day>", -2.1400661634962708),+                                    ("time-of-day (latent)", -2.1400661634962708),+                                    ("hhmm (latent)", -2.1400661634962708),+                                    ("<time-of-day> am|pm", -2.1400661634962708),+                                    ("hh:mm", -2.1400661634962708), ("hour", -1.7346010553881064),+                                    ("minute", -1.4469189829363254)],+                               n = 5},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("in <named-month>|year",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -2.4423470353692043),+                                    ("year (latent)", -1.0560526742493137),+                                    ("year", -1.0560526742493137), ("March", -2.4423470353692043),+                                    ("month", -2.03688192726104)],+                               n = 9},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -2.4849066497880004,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.2992829841302609),+                                    ("year (latent)", -1.7047480922384253),+                                    ("year", -1.7047480922384253), ("month", -1.2992829841302609)],+                               n = 3}}),+       ("Islamic New Year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("negative numbers",+        Classifier{okData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0},+                   koData =+                     ClassData{prior = 0.0, unseen = -3.332204510175204,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)", -7.696104113612832e-2),+                                    ("integer (0..19)", -2.6026896854443837)],+                               n = 25}}),+       ("about|exactly <duration>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("half an hour", -0.6931471805599453),+                                    ("minute", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time> before last|after next",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods =+                                 HashMap.fromList+                                   [("Wednesday", -1.8718021769015913),+                                    ("Friday", -1.466337068793427), ("day", -1.1786549963416462),+                                    ("March", -1.8718021769015913), ("month", -1.8718021769015913)],+                               n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("by the end of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("this|last|next <cycle>", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("hhmm (military) am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<datetime> - <datetime> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.3794896217049037, unseen = -4.304065093204169,+                               likelihoods =+                                 HashMap.fromList+                                   [("intersecthh:mm", -3.1918471524802814),+                                    ("intersect<time-of-day> am|pm", -3.1918471524802814),+                                    ("minuteminute", -1.457246097092175),+                                    ("hh:mmhh:mm", -2.093234863812172),+                                    ("dayday", -3.1918471524802814),+                                    ("hourhour", -2.093234863812172),+                                    ("<named-month> <day-of-month> (non ordinal)<named-month> <day-of-month> (non ordinal)",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"hh:mm",+                                     -3.1918471524802814),+                                    ("intersect by \",\", \"of\", \"from\", \"'s\"<time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.597312260588446),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.681021528714291),+                                    ("from|since|after <time-of-day>hh:mm", -2.681021528714291)],+                               n = 26},+                   koData =+                     ClassData{prior = -1.1526795099383855, unseen = -3.828641396489095,+                               likelihoods =+                                 HashMap.fromList+                                   [("<named-month> <day-of-month> (non ordinal)July",+                                     -3.1135153092103742),+                                    ("daymonth", -2.70805020110221),+                                    ("from|since|after <time-of-day>intersect", -2.70805020110221),+                                    ("<time-of-day> am|pmintersect", -3.1135153092103742),+                                    ("hh:mm<time-of-day> am|pm", -2.70805020110221),+                                    ("minuteminute", -1.8607523407150064),+                                    ("hourhour", -2.70805020110221),+                                    ("minutehour", -2.70805020110221),+                                    ("hh:mmintersect", -2.1972245773362196),+                                    ("<named-month> <day-of-month> (non ordinal)August",+                                     -3.1135153092103742),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.1135153092103742)],+                               n = 12}}),+       ("Tuesday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("New Year's Day",+        Classifier{okData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.3025850929940455,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 8}}),+       ("fortnight",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<integer> and an half hour",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("integer (numeric)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Laylat al-Qadr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Boghi",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("at the beginning|end of <named-month>",+        Classifier{okData =+                     ClassData{prior = -0.2231435513142097,+                               unseen = -2.5649493574615367,+                               likelihoods =+                                 HashMap.fromList+                                   [("January", -1.3862943611198906),+                                    ("April", -1.3862943611198906), ("month", -0.8754687373538999)],+                               n = 4},+                   koData =+                     ClassData{prior = -1.6094379124341003,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList+                                   [("October", -1.0986122886681098),+                                    ("month", -1.0986122886681098)],+                               n = 1}}),+       ("<time-of-day> - <time-of-day> (interval)",+        Classifier{okData =+                     ClassData{prior = -0.7375989431307791, unseen = -4.110873864173311,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -1.529395204760564),+                                    ("hh:mmhh:mm", -1.8971199848858813),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -2.4849066497880004),+                                    ("hourhour", -1.6964492894237302),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -3.4011973816621555),+                                    ("from|since|after <time-of-day><time-of-day> am|pm",+                                     -3.4011973816621555),+                                    ("<time-of-day> am|pm<time-of-day> am|pm", -2.4849066497880004),+                                    ("from|since|after <time-of-day>hh:mm", -2.4849066497880004)],+                               n = 22},+                   koData =+                     ClassData{prior = -0.6505875661411494, unseen = -4.174387269895637,+                               likelihoods =+                                 HashMap.fromList+                                   [("about|exactly <time-of-day>time-of-day (latent)",+                                     -3.4657359027997265),+                                    ("hh:mmtime-of-day (latent)", -1.7609878105613013),+                                    ("hh:mm<time-of-day> am|pm", -3.0602707946915624),+                                    ("<time-of-day> am|pmtime-of-day (latent)",+                                     -3.4657359027997265),+                                    ("at <time-of-day><time-of-day> am|pm", -3.4657359027997265),+                                    ("hourhour", -2.2129729343043585),+                                    ("minutehour", -1.2144441041932315),+                                    ("about|exactly <time-of-day><time-of-day> am|pm",+                                     -3.4657359027997265),+                                    ("from|since|after <time-of-day>time-of-day (latent)",+                                     -2.5494451709255714),+                                    ("at <time-of-day>time-of-day (latent)", -3.0602707946915624),+                                    ("<integer> to|till|before <hour-of-day>time-of-day (latent)",+                                     -3.0602707946915624)],+                               n = 24}}),+       ("military spelled out numbers am|pm",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)integer (20..90)", 0.0)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("winter",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("nth <time> after <time>",+        Classifier{okData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)Tuesdayintersect",+                                     -0.916290731874155)],+                               n = 1},+                   koData =+                     ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..twentieth,thirtieth,...)TuesdayChristmas",+                                     -0.916290731874155)],+                               n = 1}}),+       ("<named-month> <day-of-month> (non ordinal)",+        Classifier{okData =+                     ClassData{prior = -0.42121346507630353,+                               unseen = -3.951243718581427,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.5455312716044354),+                                    ("Marchinteger (numeric)", -2.833213344056216),+                                    ("Aprilinteger (numeric)", -3.2386784521643803),+                                    ("month", -0.8407831793660099),+                                    ("Februaryinteger (numeric)", -1.9859154836690123),+                                    ("Septemberinteger (numeric)", -2.833213344056216),+                                    ("Octoberinteger (numeric)", -2.833213344056216),+                                    ("Julyinteger (numeric)", -2.1400661634962708)],+                               n = 21},+                   koData =+                     ClassData{prior = -1.067840630001356, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Augustinteger (numeric)", -2.3353749158170367),+                                    ("Marchinteger (numeric)", -2.740840023925201),+                                    ("Aprilinteger (numeric)", -2.740840023925201),+                                    ("month", -0.9490805546971459),+                                    ("from|since|after <time-of-day>integer (numeric)",+                                     -2.3353749158170367),+                                    ("Julyinteger (numeric)", -1.6422277352570913)],+                               n = 11}}),+       ("Diwali",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809,+                               unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -1.3862943611198906,+                               unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("last night",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this|next <day-of-week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.2512917986064953),+                                    ("Wednesday", -2.2512917986064953),+                                    ("Monday", -1.845826690498331), ("day", -0.8649974374866046),+                                    ("Tuesday", -1.55814461804655)],+                               n = 7},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("ordinal (digits)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.6635616461296463,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 37},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("quarter (grain)",+        Classifier{okData =+                     ClassData{prior = -0.2876820724517809, unseen = -2.639057329615259,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 12},+                   koData =+                     ClassData{prior = -1.3862943611198906, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4}}),+       ("last <cycle> of <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("day (grain)October", -1.791759469228055),+                                    ("daymonth", -1.2809338454620642),+                                    ("day (grain)intersect", -1.791759469228055),+                                    ("weekmonth", -1.791759469228055),+                                    ("week (grain)intersect", -2.1972245773362196),+                                    ("week (grain)September", -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Chhath",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Vasant Panchami",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<day-of-month>(ordinal) <named-month> year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList+                                   [("ordinal (digits)April", -0.6931471805599453),+                                    ("month", -0.6931471805599453)],+                               n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Black Friday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("week-end",+        Classifier{okData =+                     ClassData{prior = -1.252762968495368, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -0.3364722366212129,+                               unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 5}}),+       ("Great Lent",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Maundy Thursday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("day (grain)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.295836866004329,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 25},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("right now",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("for <duration> from <time>",+        Classifier{okData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -2.3025850929940455,+                               likelihoods =+                                 HashMap.fromList+                                   [("<integer> <unit-of-duration><day-of-month> (ordinal)",+                                     -1.5040773967762742),+                                    ("dayday", -1.0986122886681098),+                                    ("<integer> <unit-of-duration><day-of-month> (ordinal or number) <named-month>",+                                     -1.5040773967762742)],+                               n = 2},+                   koData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -2.0794415416798357,+                               likelihoods =+                                 HashMap.fromList+                                   [("dayhour", -1.252762968495368),+                                    ("<integer> <unit-of-duration>time-of-day (latent)",+                                     -1.252762968495368)],+                               n = 1}}),+       ("compose by multiplication",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods =+                                 HashMap.fromList [("integer (0..19)powers of tens", 0.0)],+                               n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("end of year",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.4849066497880004,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 10},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("between <time> and <time>",+        Classifier{okData =+                     ClassData{prior = -1.0986122886681098,+                               unseen = -3.1780538303479458,+                               likelihoods =+                                 HashMap.fromList+                                   [("minuteminute", -0.832909122935104),+                                    ("hh:mmhh:mm", -0.832909122935104)],+                               n = 9},+                   koData =+                     ClassData{prior = -0.40546510810816444,+                               unseen = -3.7376696182833684,+                               likelihoods =+                                 HashMap.fromList+                                   [("hh:mmtime-of-day (latent)", -1.410986973710262),+                                    ("minuteminute", -1.410986973710262),+                                    ("minutehour", -1.410986973710262),+                                    ("hh:mmintersect", -1.410986973710262)],+                               n = 18}}),+       ("<month> dd-dd (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4657359027997265,+                               likelihoods =+                                 HashMap.fromList+                                   [("Julyinteger (numeric)integer (numeric)", -1.6422277352570913),+                                    ("from|since|after <time-of-day>ordinal (digits)ordinal (digits)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>integer (numeric)integer (numeric)",+                                     -2.740840023925201),+                                    ("from|since|after <time-of-day>ordinal (digits)integer (numeric)",+                                     -2.740840023925201),+                                    ("Augustordinal (digits)integer (numeric)",+                                     -2.3353749158170367),+                                    ("month", -0.8690378470236094),+                                    ("Augustordinal (digits)ordinal (digits)",+                                     -2.3353749158170367)],+                               n = 12},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.0794415416798357,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("part of days",+        Classifier{okData =+                     ClassData{prior = -3.509131981127006e-2,+                               unseen = -3.4011973816621555,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 28},+                   koData =+                     ClassData{prior = -3.367295829986474, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+       ("at the beginning|end of <week>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -4.330733340286331,+                               likelihoods =+                                 HashMap.fromList+                                   [("week", -0.706570200892086),+                                    ("this|last|next <cycle>", -0.8209805520698302),+                                    ("about|exactly <time-of-day>", -2.70805020110221)],+                               n = 36},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Eid al-Fitr",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("summer",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Trinity Sunday",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("dd-dd <month> (interval)",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -2.9444389791664407,+                               likelihoods =+                                 HashMap.fromList+                                   [("integer (numeric)integer (numeric)September",+                                     -1.791759469228055),+                                    ("ordinal (digits)ordinal (digits)July", -2.1972245773362196),+                                    ("ordinal (digits)ordinal (digits)October",+                                     -2.1972245773362196),+                                    ("integer (numeric)integer (numeric)July", -2.1972245773362196),+                                    ("month", -0.9444616088408514),+                                    ("ordinal (digits)ordinal (digits)August",+                                     -2.1972245773362196)],+                               n = 6},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("Pentecost",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("this <time>",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("Thursday", -2.639057329615259),+                                    ("Martin Luther King's Day", -2.639057329615259),+                                    ("Monday", -2.639057329615259), ("day", -1.1349799328389845),+                                    ("Thanksgiving Day", -2.639057329615259),+                                    ("Christmas", -2.639057329615259), ("hour", -2.639057329615259),+                                    ("winter", -2.639057329615259),+                                    ("week-end", -2.639057329615259),+                                    ("summer", -2.2335922215070942)],+                               n = 9},+                   koData =+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("August",         Classifier{okData =
Duckling/Ranking/Classifiers/ES_XX.hs view
@@ -454,13 +454,6 @@                                     ("<hour-of-day> and <relative minutes>", -1.791759469228055),                                     ("hour", -1.791759469228055), ("minute", -1.791759469228055)],                                n = 4}}),-       ("season",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("minutos (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -620,6 +613,13 @@                    koData =                      ClassData{prior = 0.0, unseen = -2.639057329615259,                                likelihoods = HashMap.fromList [("", 0.0)], n = 12}}),+       ("invierno",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("this <part-of-day>",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.6094379124341003,@@ -701,6 +701,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("verano",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("number (20..90)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.791759469228055,@@ -1243,13 +1250,14 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("ce <time>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.772588722239781,+                     ClassData{prior = 0.0, unseen = -2.833213344056216,                                likelihoods =                                  HashMap.fromList-                                   [("season", -1.6094379124341003), ("Lunes", -2.0149030205422647),-                                    ("day", -1.3217558399823195), ("hour", -1.6094379124341003),-                                    ("week-end", -1.6094379124341003)],+                                   [("invierno", -2.0794415416798357),+                                    ("Lunes", -2.0794415416798357), ("verano", -2.0794415416798357),+                                    ("day", -1.3862943611198906), ("hour", -1.6739764335716716),+                                    ("week-end", -1.6739764335716716)],                                n = 5},                    koData =-                     ClassData{prior = -infinity, unseen = -1.791759469228055,+                     ClassData{prior = -infinity, unseen = -1.9459101490553135,                                likelihoods = HashMap.fromList [], n = 0}})]
Duckling/Ranking/Classifiers/NL_XX.hs view
@@ -21,8 +21,15 @@ classifiers :: Classifiers classifiers   = HashMap.fromList-      [("<time> timezone",+      [("Kerstmis",         Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<time> timezone",+        Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.3978952727983707,                                likelihoods =                                  HashMap.fromList@@ -65,13 +72,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -1.791759469228055,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("Father's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("thursday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.4849066497880004,@@ -249,6 +249,13 @@                                    [("hh:mmtime-of-day (latent)", -1.0986122886681098),                                     ("minutehour", -1.0986122886681098)],                                n = 1}}),+       ("Halloween",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("between <datetime> and <datetime> (interval)",         Classifier{okData =                      ClassData{prior = -0.6931471805599453,@@ -380,268 +387,260 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("May",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.30818059400012193,-                               unseen = -6.182084906716631,+                     ClassData{prior = -0.29944691403136736,+                               unseen = -6.180016653652572,                                likelihoods =                                  HashMap.fromList-                                   [("last <cycle>sunday", -5.486869473092628),-                                    ("hourday", -4.388257184424518),+                                   [("last <cycle>sunday", -5.484796933490655),+                                    ("Koningsdagyear", -5.484796933490655),+                                    ("hourday", -4.386184644822546),                                     ("on a named-day<day-of-month> (non ordinal) <named-month>",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("<day-of-month> (non ordinal) <named-month><time-of-day>  o'clock",-                                     -5.486869473092628),-                                    ("dayhour", -2.3513752571634776),-                                    ("daymonth", -4.570578741218473),-                                    ("next <cycle>friday", -5.486869473092628),-                                    ("monthyear", -3.8774315606585272),+                                     -5.484796933490655),+                                    ("dayhour", -2.3493027175615055),+                                    ("daymonth", -4.5685062016165),+                                    ("next <cycle>friday", -5.484796933490655),+                                    ("monthyear", -3.8753590210565547),                                     ("friday<day-of-month> (non ordinal) <named-month>",-                                     -5.081404364984463),-                                    ("yearhour", -5.486869473092628),-                                    ("intersect<time-of-day>  o'clock", -4.793722292532682),-                                    ("tuesdaythis <cycle>", -5.486869473092628),-                                    ("christmasyear", -5.486869473092628),+                                     -5.079331825382491),+                                    ("yearhour", -5.484796933490655),+                                    ("intersect<time-of-day>  o'clock", -4.791649752930709),+                                    ("tuesdaythis <cycle>", -5.484796933490655),                                     ("on a named-dayfrom <time-of-day> - <time-of-day> (interval)",-                                     -5.081404364984463),-                                    ("saturday<time-of-day>  o'clock", -5.486869473092628),+                                     -5.079331825382491),+                                    ("saturday<time-of-day>  o'clock", -5.484796933490655),                                     ("absorption of , after named daydd/mm/yyyy",-                                     -5.081404364984463),-                                    ("<time-of-day> am|pmintersect", -5.486869473092628),-                                    ("intersect<time> <part-of-day>", -4.793722292532682),-                                    ("Marchyear", -5.486869473092628),-                                    ("saturdayat <time-of-day>", -5.081404364984463),-                                    ("saturday<time> <part-of-day>", -5.081404364984463),-                                    ("dd/mm<time-of-day>  o'clock", -5.486869473092628),-                                    ("on a named-dayat <time-of-day>", -4.793722292532682),-                                    ("today<time-of-day>  o'clock", -5.486869473092628),-                                    ("at <time-of-day>on a named-day", -5.486869473092628),+                                     -5.079331825382491),+                                    ("<time-of-day> am|pmintersect", -5.484796933490655),+                                    ("intersect<time> <part-of-day>", -4.791649752930709),+                                    ("Marchyear", -5.484796933490655),+                                    ("saturdayat <time-of-day>", -5.079331825382491),+                                    ("saturday<time> <part-of-day>", -5.079331825382491),+                                    ("dd/mm<time-of-day>  o'clock", -5.484796933490655),+                                    ("on a named-dayat <time-of-day>", -4.791649752930709),+                                    ("today<time-of-day>  o'clock", -5.484796933490655),+                                    ("at <time-of-day>on a named-day", -5.484796933490655),                                     ("on a named-daybetween <datetime> and <datetime> (interval)",-                                     -5.486869473092628),-                                    ("intersect by ','year", -5.486869473092628),-                                    ("on <date><time-of-day>  o'clock", -4.793722292532682),-                                    ("next <cycle>monday", -5.486869473092628),+                                     -5.484796933490655),+                                    ("intersect by ','year", -5.484796933490655),+                                    ("on <date><time-of-day>  o'clock", -4.791649752930709),+                                    ("next <cycle>monday", -5.484796933490655),                                     ("on a named-daybetween <time-of-day> and <time-of-day> (interval)",-                                     -5.486869473092628),-                                    ("exactly <time-of-day>tomorrow", -5.486869473092628),-                                    ("on a named-day<time> <part-of-day>", -5.081404364984463),-                                    ("monthhour", -4.570578741218473),+                                     -5.484796933490655),+                                    ("exactly <time-of-day>tomorrow", -5.484796933490655),+                                    ("on a named-day<time> <part-of-day>", -5.079331825382491),+                                    ("monthhour", -4.5685062016165),                                     ("on <date>between <datetime> and <datetime> (interval)",-                                     -5.486869473092628),-                                    ("last <day-of-week> of <time>year", -5.486869473092628),-                                    ("on a named-day<time-of-day>  o'clock", -5.486869473092628),-                                    ("next <cycle>March", -5.486869473092628),-                                    ("todayat <time-of-day>", -4.793722292532682),+                                     -5.484796933490655),+                                    ("last <day-of-week> of <time>year", -5.484796933490655),+                                    ("on a named-day<time-of-day>  o'clock", -5.484796933490655),+                                    ("next <cycle>March", -5.484796933490655),+                                    ("todayat <time-of-day>", -4.791649752930709),                                     ("on <date>between <time-of-day> and <time-of-day> (interval)",-                                     -5.486869473092628),-                                    ("on <date>at <time-of-day>", -4.793722292532682),-                                    ("thursday<time> timezone", -5.081404364984463),-                                    ("on <date>about <time-of-day>", -4.793722292532682),-                                    ("dayday", -3.184284380098582),-                                    ("on <date><time> <part-of-day>", -4.570578741218473),-                                    ("dd/mmabout <time-of-day>", -5.081404364984463),-                                    ("<day-of-month> (ordinal)intersect", -5.486869473092628),-                                    ("hourhour", -4.388257184424518),+                                     -5.484796933490655),+                                    ("on <date>at <time-of-day>", -4.791649752930709),+                                    ("thursday<time> timezone", -5.079331825382491),+                                    ("on <date>about <time-of-day>", -4.791649752930709),+                                    ("dayday", -3.1822118404966093),+                                    ("on <date><time> <part-of-day>", -4.5685062016165),+                                    ("dd/mmabout <time-of-day>", -5.079331825382491),+                                    ("<day-of-month> (ordinal)intersect", -5.484796933490655),+                                    ("hourhour", -4.386184644822546),                                     ("saturday<day-of-month> (non ordinal) <named-month>",-                                     -5.486869473092628),-                                    ("thursdayat <time-of-day>", -5.486869473092628),+                                     -5.484796933490655),+                                    ("thursdayat <time-of-day>", -5.484796933490655),                                     ("today/tomorrow/yesterday afternoon<hour-of-day> <integer> (as relative minutes)",-                                     -5.081404364984463),+                                     -5.079331825382491),                                     ("intersect<day-of-month> (non ordinal) <named-month>",-                                     -4.388257184424518),-                                    ("dayyear", -3.4074279314127915),-                                    ("tuesdayafter <duration>", -5.486869473092628),-                                    ("tomorrow<time-of-day>  o'clock", -5.486869473092628),-                                    ("<time-of-day>  o'clocktomorrow", -4.793722292532682),+                                     -4.386184644822546),+                                    ("dayyear", -3.405355391810819),+                                    ("tuesdayafter <duration>", -5.484796933490655),+                                    ("tomorrow<time-of-day>  o'clock", -5.484796933490655),+                                    ("<time-of-day>  o'clocktomorrow", -4.791649752930709),                                     ("<day-of-month> (non ordinal) <named-month>intersect",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("thursdaybetween <time-of-day> and <time-of-day> (interval)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("thursdaybetween <datetime> and <datetime> (interval)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("<day-of-month>(ordinal) <named-month>year",-                                     -5.486869473092628),-                                    ("<day-of-month> (ordinal)tuesday", -5.486869473092628),-                                    ("hourminute", -4.793722292532682),-                                    ("thursdayhh:mm", -5.486869473092628),-                                    ("this <cycle>wednesday", -5.486869473092628),+                                     -5.484796933490655),+                                    ("<day-of-month> (ordinal)tuesday", -5.484796933490655),+                                    ("hourminute", -4.791649752930709),+                                    ("thursdayhh:mm", -5.484796933490655),+                                    ("this <cycle>wednesday", -5.484796933490655),                                     ("absorption of , after named day<named-month> <day-of-month> (non ordinal)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("<day-of-month> (non ordinal) <named-month><time> <part-of-day>",-                                     -5.081404364984463),+                                     -5.079331825382491),                                     ("on <date><day-of-month> (non ordinal) <named-month>",-                                     -5.486869473092628),-                                    ("Aprilabout <time-of-day>", -5.486869473092628),+                                     -5.484796933490655),+                                    ("Aprilabout <time-of-day>", -5.484796933490655),                                     ("thursdayfrom <datetime> - <datetime> (interval)",-                                     -5.486869473092628),-                                    ("<day-of-month> (ordinal)February", -5.486869473092628),+                                     -5.484796933490655),+                                    ("<day-of-month> (ordinal)February", -5.484796933490655),                                     ("thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.793722292532682),+                                     -4.791649752930709),                                     ("absorption of , after named day<day-of-month> (non ordinal) <named-month>",-                                     -4.570578741218473),+                                     -4.5685062016165),                                     ("today/tomorrow/yesterday evening<time-of-day>  o'clock",-                                     -5.486869473092628),-                                    ("fridayintersect", -4.793722292532682),+                                     -5.484796933490655),+                                    ("fridayintersect", -4.791649752930709),                                     ("on <date><time-of-day> - <time-of-day> (interval)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("on <date><datetime> - <datetime> (interval)",-                                     -5.486869473092628),-                                    ("this <cycle>monday", -5.486869473092628),-                                    ("April<time-of-day>  o'clock", -5.486869473092628),-                                    ("next <cycle>wednesday", -5.486869473092628),-                                    ("hh:mmintersect", -5.081404364984463),+                                     -5.484796933490655),+                                    ("this <cycle>monday", -5.484796933490655),+                                    ("April<time-of-day>  o'clock", -5.484796933490655),+                                    ("next <cycle>wednesday", -5.484796933490655),+                                    ("hh:mmintersect", -5.079331825382491),                                     ("thursday<datetime> - <datetime> (interval)",-                                     -5.081404364984463),-                                    ("<day-of-month> (ordinal)July", -5.486869473092628),+                                     -5.079331825382491),+                                    ("<day-of-month> (ordinal)July", -5.484796933490655),                                     ("thursday<time-of-day> - <time-of-day> (interval)",-                                     -5.081404364984463),-                                    ("yearmonth", -5.486869473092628),-                                    ("at <time-of-day>intersect", -5.081404364984463),+                                     -5.079331825382491),+                                    ("yearmonth", -5.484796933490655),+                                    ("at <time-of-day>intersect", -5.079331825382491),                                     ("on <date>from <time-of-day> - <time-of-day> (interval)",-                                     -5.081404364984463),+                                     -5.079331825382491),                                     ("<time> <part-of-day>from <time-of-day> - <time-of-day> (interval)",-                                     -5.486869473092628),-                                    ("dayminute", -2.7788192719904172),+                                     -5.484796933490655),+                                    ("dayminute", -2.7767467323884447),                                     ("<time> <part-of-day>from <datetime> - <datetime> (interval)",-                                     -5.486869473092628),-                                    ("intersectyear", -4.793722292532682),-                                    ("<time-of-day> am|pmsaturday", -5.486869473092628),-                                    ("<ordinal> <cycle> of <time>year", -5.486869473092628),-                                    ("minuteday", -3.289644895756408),+                                     -5.484796933490655),+                                    ("intersectyear", -4.791649752930709),+                                    ("<time-of-day> am|pmsaturday", -5.484796933490655),+                                    ("<ordinal> <cycle> of <time>year", -5.484796933490655),+                                    ("minuteday", -3.2875723561544357),                                     ("absorption of , after named dayintersect",-                                     -5.486869473092628),-                                    ("Julyyear", -5.486869473092628),-                                    ("year<time-of-day>  o'clock", -5.486869473092628),-                                    ("Octoberyear", -4.388257184424518),-                                    ("hh:mmon <date>", -5.081404364984463),+                                     -5.484796933490655),+                                    ("Julyyear", -5.484796933490655),+                                    ("year<time-of-day>  o'clock", -5.484796933490655),+                                    ("Octoberyear", -4.386184644822546),+                                    ("hh:mmon <date>", -5.079331825382491),                                     ("today/tomorrow/yesterday afternoonat <time-of-day>",-                                     -5.486869473092628),-                                    ("dd/mmyear", -5.486869473092628),-                                    ("tuesdayin <duration>", -5.486869473092628),-                                    ("Septemberyear", -5.081404364984463),-                                    ("at <time-of-day>on <date>", -5.081404364984463),-                                    ("absorption of , after named daydd/mm", -5.081404364984463),-                                    ("intersectintersect", -5.486869473092628),-                                    ("hh:mmon a named-day", -5.486869473092628),-                                    ("weekday", -4.100575111972737),-                                    ("dayweek", -4.793722292532682),-                                    ("weekyear", -5.081404364984463),-                                    ("on <date>February", -5.486869473092628),-                                    ("<month> dd-dd (interval)year", -5.486869473092628),-                                    ("Dutch King dayyear", -5.486869473092628),-                                    ("tomorrowat <time-of-day>", -5.081404364984463),-                                    ("next <cycle>tuesday", -5.486869473092628),+                                     -5.484796933490655),+                                    ("dd/mmyear", -5.484796933490655),+                                    ("tuesdayin <duration>", -5.484796933490655),+                                    ("Septemberyear", -5.079331825382491),+                                    ("at <time-of-day>on <date>", -5.079331825382491),+                                    ("absorption of , after named daydd/mm", -5.079331825382491),+                                    ("intersectintersect", -5.484796933490655),+                                    ("hh:mmon a named-day", -5.484796933490655),+                                    ("weekday", -4.098502572370764),+                                    ("dayweek", -4.791649752930709),+                                    ("weekyear", -5.079331825382491),+                                    ("on <date>February", -5.484796933490655),+                                    ("Kerstmisyear", -5.484796933490655),+                                    ("<month> dd-dd (interval)year", -5.484796933490655),+                                    ("tomorrowat <time-of-day>", -5.079331825382491),+                                    ("next <cycle>tuesday", -5.484796933490655),                                     ("monday<day-of-month> (non ordinal) <named-month>",-                                     -5.486869473092628),-                                    ("at <time-of-day>tomorrow", -5.486869473092628),+                                     -5.484796933490655),+                                    ("at <time-of-day>tomorrow", -5.484796933490655),                                     ("monday<named-month> <day-of-month> (non ordinal)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("<day-of-month> (non ordinal) <named-month>about <time-of-day>",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("on a named-day<time-of-day> - <time-of-day> (interval)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("today/tomorrow/yesterday eveningat <time-of-day>",-                                     -5.081404364984463),-                                    ("last <cycle> of <time>year", -5.081404364984463),+                                     -5.079331825382491),+                                    ("last <cycle> of <time>year", -5.079331825382491),                                     ("on a named-day<datetime> - <datetime> (interval)",-                                     -5.486869473092628),+                                     -5.484796933490655),                                     ("<day-of-month> (non ordinal) <named-month>year",-                                     -4.570578741218473),-                                    ("April<time> <part-of-day>", -5.081404364984463)],+                                     -4.5685062016165),+                                    ("April<time> <part-of-day>", -5.079331825382491)],                                n = 169},                    koData =-                     ClassData{prior = -1.327205444749884, unseen = -5.5909869805108565,+                     ClassData{prior = -1.3518081850487211, unseen = -5.572154032177765,                                likelihoods =                                  HashMap.fromList                                    [("<named-month> <day-of-month> (non ordinal)July",-                                     -4.894101477840304),-                                    ("dayhour", -3.5078071167204135),-                                    ("on a named-dayafter <time-of-day>", -4.894101477840304),+                                     -4.875197323201151),+                                    ("dayhour", -3.488902962081261),+                                    ("on a named-dayafter <time-of-day>", -4.875197323201151),                                     ("July<day-of-month> (non ordinal) <named-month>",-                                     -4.894101477840304),-                                    ("daymonth", -3.977810745966149),-                                    ("monthday", -4.48863636973214),-                                    ("monthyear", -3.7954891891721947),-                                    ("yearhour", -4.894101477840304),-                                    ("intersect<time-of-day>  o'clock", -4.894101477840304),+                                     -4.875197323201151),+                                    ("daymonth", -3.9589065913269965),+                                    ("monthday", -4.4697322150929875),+                                    ("monthyear", -3.776585034533042),+                                    ("yearhour", -4.875197323201151),+                                    ("intersect<time-of-day>  o'clock", -4.875197323201151),                                     ("on a named-dayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.48863636973214),-                                    ("<day-of-month> (ordinal)wednesday", -4.48863636973214),-                                    ("Julyintersect", -4.894101477840304),-                                    ("thursdayafter <time-of-day>", -4.894101477840304),-                                    ("intersect<time> <part-of-day>", -4.894101477840304),-                                    ("Marchyear", -4.894101477840304),-                                    ("<day-of-month> (ordinal)year", -4.894101477840304),-                                    ("on a named-dayat <time-of-day>", -4.894101477840304),+                                     -4.4697322150929875),+                                    ("<day-of-month> (ordinal)wednesday", -4.4697322150929875),+                                    ("Julyintersect", -4.875197323201151),+                                    ("thursdayafter <time-of-day>", -4.875197323201151),+                                    ("intersect<time> <part-of-day>", -4.875197323201151),+                                    ("Marchyear", -4.875197323201151),+                                    ("<day-of-month> (ordinal)year", -4.875197323201151),+                                    ("on a named-dayat <time-of-day>", -4.875197323201151),                                     ("on a named-daybetween <datetime> and <datetime> (interval)",-                                     -4.894101477840304),-                                    ("tuesdayafter <time-of-day>", -4.894101477840304),+                                     -4.875197323201151),+                                    ("tuesdayafter <time-of-day>", -4.875197323201151),                                     ("on a named-daybetween <time-of-day> and <time-of-day> (interval)",-                                     -4.894101477840304),-                                    ("monthhour", -3.977810745966149),+                                     -4.875197323201151),+                                    ("monthhour", -3.9589065913269965),                                     ("on <date>between <datetime> and <datetime> (interval)",-                                     -4.894101477840304),-                                    ("todayat <time-of-day>", -4.894101477840304),+                                     -4.875197323201151),+                                    ("todayat <time-of-day>", -4.875197323201151),                                     ("on <date>between <time-of-day> and <time-of-day> (interval)",-                                     -4.894101477840304),-                                    ("on <date>at <time-of-day>", -4.894101477840304),-                                    ("on <date>about <time-of-day>", -4.894101477840304),-                                    ("dayday", -3.5078071167204135),-                                    ("hourhour", -4.200954297280359),-                                    ("thursdayat <time-of-day>", -4.894101477840304),-                                    ("dayyear", -4.200954297280359),+                                     -4.875197323201151),+                                    ("on <date>at <time-of-day>", -4.875197323201151),+                                    ("on <date>about <time-of-day>", -4.875197323201151),+                                    ("dayday", -3.776585034533042),+                                    ("hourhour", -4.182050142641207),+                                    ("thursdayat <time-of-day>", -4.875197323201151),+                                    ("dayyear", -4.182050142641207),                                     ("thursdaybetween <time-of-day> and <time-of-day> (interval)",-                                     -4.894101477840304),+                                     -4.875197323201151),                                     ("thursdaybetween <datetime> and <datetime> (interval)",-                                     -4.894101477840304),-                                    ("<day-of-month> (ordinal)tuesday", -4.48863636973214),-                                    ("thursdayhh:mm", -4.48863636973214),-                                    ("Aprilabout <time-of-day>", -4.894101477840304),+                                     -4.875197323201151),+                                    ("<day-of-month> (ordinal)tuesday", -4.4697322150929875),+                                    ("thursdayhh:mm", -4.4697322150929875),+                                    ("Aprilabout <time-of-day>", -4.875197323201151),                                     ("thursdayfrom <datetime> - <datetime> (interval)",-                                     -4.894101477840304),-                                    ("Aprilyear", -4.894101477840304),-                                    ("<day-of-month> (ordinal)sunday", -4.48863636973214),+                                     -4.875197323201151),+                                    ("Aprilyear", -4.875197323201151),                                     ("thursdayfrom <time-of-day> - <time-of-day> (interval)",-                                     -4.200954297280359),-                                    ("mondayFebruary", -4.894101477840304),+                                     -4.182050142641207),+                                    ("mondayFebruary", -4.875197323201151),                                     ("on <date><time-of-day> - <time-of-day> (interval)",-                                     -4.894101477840304),-                                    ("yearuntil <time-of-day>", -4.48863636973214),+                                     -4.875197323201151),+                                    ("yearuntil <time-of-day>", -4.4697322150929875),                                     ("thursday<time-of-day> - <time-of-day> (interval)",-                                     -4.48863636973214),+                                     -4.4697322150929875),                                     ("<named-month> <day-of-month> (non ordinal)August",-                                     -4.894101477840304),+                                     -4.875197323201151),                                     ("August<day-of-month> (non ordinal) <named-month>",-                                     -4.894101477840304),+                                     -4.875197323201151),                                     ("on <date>from <time-of-day> - <time-of-day> (interval)",-                                     -4.48863636973214),-                                    ("dayminute", -2.409194828052304),-                                    ("thursday<part-of-day> of <time>", -4.894101477840304),-                                    ("Julyyear", -4.48863636973214),-                                    ("Octoberyear", -4.894101477840304),+                                     -4.4697322150929875),+                                    ("dayminute", -2.3902906734131513),+                                    ("thursday<part-of-day> of <time>", -4.875197323201151),+                                    ("Julyyear", -4.4697322150929875),+                                    ("Octoberyear", -4.875197323201151),                                     ("today/tomorrow/yesterday afternoonat <time-of-day>",-                                     -4.48863636973214),-                                    ("year<time> <part-of-day>", -4.894101477840304),+                                     -4.4697322150929875),+                                    ("year<time> <part-of-day>", -4.875197323201151),                                     ("today/tomorrow/yesterday afternoon<time-of-day>  o'clock",-                                     -4.894101477840304),-                                    ("yearday", -4.48863636973214),-                                    ("absorption of , after named dayFebruary", -4.894101477840304),+                                     -4.875197323201151),+                                    ("yearday", -4.4697322150929875),+                                    ("absorption of , after named dayFebruary", -4.875197323201151),                                     ("<day-of-month> (non ordinal) <named-month>about <time-of-day>",-                                     -4.894101477840304),-                                    ("after <time-of-day>year", -4.894101477840304),+                                     -4.875197323201151),+                                    ("after <time-of-day>year", -4.875197323201151),                                     ("on a named-day<time-of-day> - <time-of-day> (interval)",-                                     -4.894101477840304),-                                    ("on <date>after <time-of-day>", -4.894101477840304),+                                     -4.875197323201151),+                                    ("on <date>after <time-of-day>", -4.875197323201151),                                     ("<day-of-month> (non ordinal) <named-month>year",-                                     -4.894101477840304)],-                               n = 61}}),+                                     -4.875197323201151)],+                               n = 59}}),        ("<ordinal> <cycle> of <time>",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.4849066497880004,@@ -820,27 +819,24 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("nth <time> of <time>",         Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.044522437723423,+                     ClassData{prior = -0.5596157879354228, unseen = -2.70805020110221,                                likelihoods =                                  HashMap.fromList-                                   [("daymonth", -1.0498221244986778),-                                    ("ordinals (first..19th)sundayMay", -2.3025850929940455),-                                    ("ordinals (first..19th)tuesdayOctober", -2.3025850929940455),-                                    ("ordinals (first..19th)sundayJune", -2.3025850929940455),+                                   [("daymonth", -1.0296194171811581),+                                    ("ordinals (first..19th)tuesdayOctober", -1.9459101490553135),                                     ("ordinals (first..19th)wednesdayintersect",-                                     -1.8971199848858813),+                                     -1.540445040947149),                                     ("ordinals (first..19th)tuesdayintersect",-                                     -2.3025850929940455)],-                               n = 6},+                                     -1.9459101490553135)],+                               n = 4},                    koData =-                     ClassData{prior = -1.0986122886681098, unseen = -2.70805020110221,+                     ClassData{prior = -0.8472978603872037,+                               unseen = -2.5649493574615367,                                likelihoods =                                  HashMap.fromList-                                   [("daymonth", -1.252762968495368),-                                    ("ordinals (first..19th)wednesdayOctober", -1.540445040947149),-                                    ("ordinals (first..19th)tuesdaySeptember",-                                     -1.9459101490553135)],+                                   [("daymonth", -1.0986122886681098),+                                    ("ordinals (first..19th)wednesdayOctober", -1.3862943611198906),+                                    ("ordinals (first..19th)tuesdaySeptember", -1.791759469228055)],                                n = 3}}),        ("the <day-of-month> (non ordinal)",         Classifier{okData =@@ -882,7 +878,7 @@                                    [("hourhour", -0.6931471805599453),                                     ("morningtime-of-day (latent)", -0.6931471805599453)],                                n = 1}}),-       ("valentine's day",+       ("Vaderdag",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.0986122886681098,                                likelihoods = HashMap.fromList [("", 0.0)], n = 1},@@ -937,7 +933,7 @@                                    [("integer (numeric)", -9.53101798043249e-2),                                     ("fractional number", -2.3978952727983707)],                                n = 20}}),-       ("new year's eve",+       ("Nieuwjaarsdag",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2},@@ -953,13 +949,6 @@                      ClassData{prior = -1.3862943611198906,                                unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2}}),-       ("Mother's Day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("friday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.3025850929940455,@@ -992,13 +981,6 @@                    koData =                      ClassData{prior = 0.0, unseen = -2.0794415416798357,                                likelihoods = HashMap.fromList [("", 0.0)], n = 6}}),-       ("June",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("afternoon",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.5649493574615367,@@ -1045,8 +1027,8 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("sunday",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.3978952727983707,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},+                     ClassData{prior = 0.0, unseen = -2.1972245773362196,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 7},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),@@ -1153,8 +1135,8 @@                                n = 68}}),        ("ordinals (first..19th)",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.5649493574615367,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 11},+                     ClassData{prior = 0.0, unseen = -2.3978952727983707,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 9},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),@@ -1176,8 +1158,8 @@                      ClassData{prior = 0.0, unseen = -1.6094379124341003,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> <unit-of-duration>christmas", -0.6931471805599453),-                                    ("yearday", -0.6931471805599453)],+                                   [("yearday", -0.6931471805599453),+                                    ("<integer> <unit-of-duration>Kerstmis", -0.6931471805599453)],                                n = 1},                    koData =                      ClassData{prior = -infinity, unseen = -1.0986122886681098,@@ -1292,7 +1274,7 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<day-of-month> (ordinal)",         Classifier{okData =-                     ClassData{prior = -1.3862943611198906,+                     ClassData{prior = -1.2809338454620642,                                unseen = -2.0794415416798357,                                likelihoods =                                  HashMap.fromList@@ -1300,12 +1282,19 @@                                     ("ordinal (digits)", -0.5596157879354228)],                                n = 5},                    koData =-                     ClassData{prior = -0.2876820724517809, unseen = -2.890371757896165,+                     ClassData{prior = -0.325422400434628, unseen = -2.772588722239781,                                likelihoods =                                  HashMap.fromList-                                   [("ordinals (first..19th)", -0.5306282510621704),-                                    ("ordinal (digits)", -0.8873031950009028)],-                               n = 15}}),+                                   [("ordinals (first..19th)", -0.6286086594223742),+                                    ("ordinal (digits)", -0.7621400520468967)],+                               n = 13}}),+       ("Valentijnsdag",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("until <time-of-day>",         Classifier{okData =                      ClassData{prior = -0.40546510810816444,@@ -1402,20 +1391,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -1.9459101490553135,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("christmas",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("new year's day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),        ("Sinterklaas",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.6094379124341003,@@ -1467,7 +1442,7 @@                                    [("<integer> <unit-of-duration>", -0.6931471805599453),                                     ("hour", -0.6931471805599453)],                                n = 1}}),-       ("halloween day",+       ("Koningsdag",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.0986122886681098,                                likelihoods = HashMap.fromList [("", 0.0)], n = 1},@@ -1624,8 +1599,8 @@                      ClassData{prior = -0.6931471805599453, unseen = -1.791759469228055,                                likelihoods =                                  HashMap.fromList-                                   [("ordinals (first..19th)tuesdaychristmas", -0.916290731874155),-                                    ("dayday", -0.916290731874155)],+                                   [("dayday", -0.916290731874155),+                                    ("ordinals (first..19th)tuesdayKerstmis", -0.916290731874155)],                                n = 1}}),        ("<named-month> <day-of-month> (non ordinal)",         Classifier{okData =@@ -1741,6 +1716,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("Oudjaar",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.3862943611198906,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("after <time-of-day>",         Classifier{okData =                      ClassData{prior = -0.587786664902119, unseen = -2.995732273553991,@@ -1755,9 +1737,9 @@                      ClassData{prior = -0.8109302162163288, unseen = -2.890371757896165,                                likelihoods =                                  HashMap.fromList-                                   [("intersect", -2.1400661634962708),+                                   [("Kerstmis", -1.7346010553881064),+                                    ("intersect", -2.1400661634962708),                                     ("day", -1.4469189829363254), ("hh:mm", -2.1400661634962708),-                                    ("christmas", -1.7346010553881064),                                     ("minute", -2.1400661634962708)],                                n = 4}}),        ("day (grain)",@@ -1767,6 +1749,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("Moederdag",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("<month> dd-dd (interval)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.639057329615259,@@ -1777,13 +1766,6 @@                                n = 5},                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,-                               likelihoods = HashMap.fromList [], n = 0}}),-       ("Dutch King day",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),        ("summer",         Classifier{okData =
Duckling/Ranking/Classifiers/PL_XX.hs view
@@ -37,10 +37,10 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (numeric)",         Classifier{okData =-                     ClassData{prior = -0.5997731097824868, unseen = -4.875197323201151,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 129},+                     ClassData{prior = -0.5762828404206344, unseen = -4.927253685157205,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 136},                    koData =-                     ClassData{prior = -0.7961464200320919, unseen = -4.68213122712422,+                     ClassData{prior = -0.8254986320446193, unseen = -4.68213122712422,                                likelihoods = HashMap.fromList [("", 0.0)], n = 106}}),        ("exactly <time-of-day>",         Classifier{okData =@@ -390,6 +390,13 @@                                    [("20th ordinal", -2.3513752571634776),                                     ("first ordinal", -2.3513752571634776)],                                n = 2}}),+       ("November",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.791759469228055,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 4},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("July",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.9459101490553135,@@ -427,6 +434,13 @@                                    [("ordinal (digits)quarter (grain)", -0.916290731874155),                                     ("quarter", -0.916290731874155)],                                n = 1}}),+       ("May",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -1.6094379124341003,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 3},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =                      ClassData{prior = -0.3189150921417123, unseen = -6.280395838960195,@@ -2035,25 +2049,26 @@                                n = 8}}),        ("<day-of-month> (non ordinal) <named-month>",         Classifier{okData =-                     ClassData{prior = -0.1431008436406733,-                               unseen = -3.5263605246161616,+                     ClassData{prior = -9.53101798043249e-2,+                               unseen = -3.912023005428146,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)September", -2.803360380906535),-                                    ("integer (numeric)April", -2.803360380906535),-                                    ("integer (numeric)August", -2.803360380906535),-                                    ("integer (numeric)February", -1.1939224684724346),-                                    ("month", -0.8574502318512216),-                                    ("integer (numeric)March", -2.803360380906535)],-                               n = 13},+                                   [("integer (numeric)September", -3.1986731175506815),+                                    ("integer (numeric)May", -2.505525936990736),+                                    ("integer (numeric)April", -3.1986731175506815),+                                    ("integer (numeric)August", -3.1986731175506815),+                                    ("integer (numeric)February", -1.589235205116581),+                                    ("month", -0.8472978603872037),+                                    ("integer (numeric)November", -2.2823823856765264),+                                    ("integer (numeric)March", -3.1986731175506815)],+                               n = 20},                    koData =-                     ClassData{prior = -2.0149030205422647,-                               unseen = -2.4849066497880004,+                     ClassData{prior = -2.3978952727983707, unseen = -2.639057329615259,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)August", -1.7047480922384253),-                                    ("month", -1.2992829841302609),-                                    ("integer (numeric)July", -1.7047480922384253)],+                                   [("integer (numeric)August", -1.8718021769015913),+                                    ("month", -1.466337068793427),+                                    ("integer (numeric)July", -1.8718021769015913)],                                n = 2}}),        ("this|next <day-of-week>",         Classifier{okData =
+ Duckling/Ranking/Classifiers/TA_XX.hs view
@@ -0,0 +1,22 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.++-----------------------------------------------------------------+-- Auto-generated by regenClassifiers+--+-- DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING+--  @generated+-----------------------------------------------------------------+{-# LANGUAGE OverloadedStrings #-}+module Duckling.Ranking.Classifiers.TA_XX (classifiers) where+import Data.String+import Prelude+import qualified Data.HashMap.Strict as HashMap+import Duckling.Ranking.Types++classifiers :: Classifiers+classifiers = HashMap.fromList []
Duckling/Ranking/Classifiers/ZH_CN.hs view
@@ -95,10 +95,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (grain)",         Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                     ClassData{prior = -1.0076405104623831,+                               unseen = -3.2188758248682006,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},                    koData =-                     ClassData{prior = -0.4700036292457356,+                     ClassData{prior = -0.45425527227759643,                                unseen = -3.7376696182833684,                                likelihoods = HashMap.fromList [("", 0.0)], n = 40}}),        ("<time-of-day> o'clock",@@ -124,6 +125,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("number suffix: \21313",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.258096538021482,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("Wednesday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.9444389791664407,@@ -140,44 +148,43 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.4367176516122688, unseen = -4.624972813284271,+                     ClassData{prior = -0.3519764231571781, unseen = -4.983606621708336,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -3.5165082281731497),+                                   [("children's day<part-of-day> <dim time>", -3.367295829986474),                                     ("year (numeric with year symbol)<named-month> <day-of-month>",-                                     -1.5705980791178364),-                                    ("dayday", -1.9070703157390494),-                                    ("hourhour", -3.005682604407159),-                                    ("hourminute", -3.5165082281731497),+                                     -1.7578579175523736),+                                    ("dayday", -1.6094379124341003),+                                    ("hourhour", -3.367295829986474),+                                    ("hourminute", -3.367295829986474),                                     ("absorption of , after named day<named-month> <day-of-month>",-                                     -1.9070703157390494),-                                    ("dayminute", -3.5165082281731497),-                                    ("tonight<time-of-day> o'clock", -3.005682604407159),+                                     -1.6094379124341003),+                                    ("dayminute", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -3.367295829986474),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.5165082281731497),-                                    ("yearday", -1.5705980791178364)],-                               n = 42},+                                     -3.367295829986474),+                                    ("yearday", -1.7578579175523736)],+                               n = 64},                    koData =-                     ClassData{prior = -1.0388930539664873,-                               unseen = -4.1588830833596715,+                     ClassData{prior = -1.215022640512521, unseen = -4.276666119016055,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -2.1972245773362196),-                                    ("dayhour", -2.5336968139574325),-                                    ("daymonth", -2.063693184711697),-                                    ("year (numeric with year symbol)February", -3.044522437723423),+                                   [("children's day<part-of-day> <dim time>", -2.065455299705096),+                                    ("dayhour", -2.653241964607215),+                                    ("daymonth", -2.1832383353614793),+                                    ("year (numeric with year symbol)February", -3.164067588373206),                                     ("<dim time> <part-of-day><time-of-day> o'clock",-                                     -3.044522437723423),-                                    ("hourhour", -3.044522437723423),-                                    ("year (numeric with year symbol)March", -2.5336968139574325),-                                    ("hourminute", -3.044522437723423),-                                    ("yearmonth", -2.1972245773362196),-                                    ("dayminute", -3.044522437723423),+                                     -3.164067588373206),+                                    ("hourhour", -3.164067588373206),+                                    ("year (numeric with year symbol)March", -2.653241964607215),+                                    ("hourminute", -2.653241964607215),+                                    ("yearmonth", -2.316769727986002),+                                    ("dayminute", -2.653241964607215),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.044522437723423),+                                     -2.653241964607215),                                     ("absorption of , after named dayFebruary",-                                     -2.063693184711697)],-                               n = 23}}),+                                     -2.1832383353614793)],+                               n = 27}}),        ("year (grain)",         Classifier{okData =                      ClassData{prior = -0.8209805520698302,@@ -193,25 +200,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("last tuesday, last july",-        Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],-                               n = 12},-                   koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),        ("next <cycle>",         Classifier{okData =                      ClassData{prior = -0.7472144018302211,@@ -301,48 +289,50 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<integer> (latent time-of-day)",         Classifier{okData =-                     ClassData{prior = -1.3217558399823195,-                               unseen = -2.9444389791664407,+                     ClassData{prior = -1.4170660197866443, unseen = -2.995732273553991,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.2809338454620642),-                                    ("integer (0..10)", -0.325422400434628)],+                                   [("integer (numeric)", -1.3350010667323402),+                                    ("integer (0..10)", -0.3794896217049037)],                                n = 16},                    koData =-                     ClassData{prior = -0.3101549283038396,-                               unseen = -3.8501476017100584,+                     ClassData{prior = -0.2776317365982795,+                               unseen = -3.9889840465642745,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -2.2192034840549946),-                                    ("integer (0..10)", -0.11506932978478723)],-                               n = 44}}),+                                   [("integer (numeric)", -2.3608540011180215),+                                    ("integer (0..10)", -0.28141245943818544),+                                    ("<number>\20010/\20491", -1.890850371872286)],+                               n = 50}}),        ("nth <time> of <time>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                     ClassData{prior = 0.0, unseen = -3.332204510175204,                                likelihoods =                                  HashMap.fromList-                                   [("Octoberordinal (digits)Monday", -1.3350010667323402),-                                    ("monthday", -0.7472144018302211),+                                   [("Octoberordinal (digits)Monday", -1.6863989535702288),+                                    ("monthday", -0.7308875085427924),                                     ("month (numeric with month symbol)ordinal (digits)Monday",-                                     -1.3350010667323402)],-                               n = 8},+                                     -1.0986122886681098)],+                               n = 12},                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (numeric with month symbol)",         Classifier{okData =-                     ClassData{prior = -0.13976194237515874,-                               unseen = -3.7612001156935624,+                     ClassData{prior = -0.10763066419236544,+                               unseen = -3.891820298110627,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.0296194171811581),-                                    ("integer (0..10)", -0.4418327522790392)],-                               n = 40},+                                   [("integer (numeric)", -1.1631508098056809),+                                    ("number suffix: \21313", -2.2617630984737906),+                                    ("integer (0..10)", -0.5753641449035618)],+                               n = 44},                    koData =-                     ClassData{prior = -2.03688192726104, unseen = -2.1972245773362196,+                     ClassData{prior = -2.2823823856765264,+                               unseen = -2.3025850929940455,                                likelihoods =-                                 HashMap.fromList [("integer (0..10)", -0.13353139262452263)],-                               n = 6}}),+                                 HashMap.fromList [("<number>\20010/\20491", -0.40546510810816444)],+                               n = 5}}),        ("week (grain)",         Classifier{okData =                      ClassData{prior = -0.8434293836092833,@@ -451,12 +441,11 @@                                n = 20}}),        ("February",         Classifier{okData =-                     ClassData{prior = -6.453852113757118e-2,-                               unseen = -2.833213344056216,+                     ClassData{prior = 0.0, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [("", 0.0)], n = 15},                    koData =-                     ClassData{prior = -2.772588722239781, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("this <cycle>",         Classifier{okData =                      ClassData{prior = -1.0185695809945732,@@ -485,77 +474,75 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<dim time> <part-of-day>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.9889840465642745,+                     ClassData{prior = 0.0, unseen = -4.248495242049359,                                likelihoods =                                  HashMap.fromList-                                   [("dayhour", -0.7514160886839211),-                                    ("national dayevening|night", -2.871679624884012),-                                    ("<named-month> <day-of-month>morning", -1.405342556090585),-                                    ("children's dayafternoon", -2.871679624884012),-                                    ("Mondaymorning", -1.7730673362159024)],-                               n = 24},+                                   [("dayhour", -0.7375989431307791),+                                    ("national dayevening|night", -3.1354942159291497),+                                    ("<named-month> <day-of-month>morning", -1.1895840668738362),+                                    ("children's dayafternoon", -3.1354942159291497),+                                    ("Mondaymorning", -2.03688192726104)],+                               n = 32},                    koData =                      ClassData{prior = -infinity, unseen = -1.791759469228055,                                likelihoods = HashMap.fromList [], n = 0}}),        ("<part-of-day> <dim time>",         Classifier{okData =-                     ClassData{prior = -0.587786664902119, unseen = -3.891820298110627,+                     ClassData{prior = -0.6097655716208943, unseen = -4.07753744390572,                                likelihoods =                                  HashMap.fromList-                                   [("tonight<integer> (latent time-of-day)", -2.2617630984737906),-                                    ("hourhour", -1.1631508098056809),+                                   [("tonight<integer> (latent time-of-day)", -2.451005098112319),+                                    ("hourhour", -1.3523928094442093),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -2.0794415416798357),-                                    ("afternoon<time-of-day> o'clock", -2.4849066497880004),-                                    ("hourminute", -1.9252908618525775),+                                     -1.6625477377480489),+                                    ("afternoon<time-of-day> o'clock", -2.6741486494265287),+                                    ("hourminute", -1.575536360758419),                                     ("afternoon<integer> (latent time-of-day)",-                                     -2.4849066497880004),-                                    ("afternoonhh:mm (time-of-day)", -3.1780538303479458),-                                    ("tonight<time-of-day> o'clock", -2.2617630984737906)],-                               n = 20},+                                     -2.6741486494265287),+                                    ("afternoonhh:mm (time-of-day)", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -2.451005098112319)],+                               n = 25},                    koData =-                     ClassData{prior = -0.8109302162163288, unseen = -3.713572066704308,+                     ClassData{prior = -0.7841189587656721,+                               unseen = -3.9318256327243257,                                likelihoods =                                  HashMap.fromList-                                   [("hourhour", -1.2039728043259361),+                                   [("hourhour", -1.4271163556401458),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -1.8971199848858813),-                                    ("afternoon<time-of-day> o'clock", -1.8971199848858813),-                                    ("hourminute", -1.8971199848858813),+                                     -1.5141277326297755),+                                    ("afternoon<time-of-day> o'clock", -2.120263536200091),+                                    ("hourminute", -1.5141277326297755),                                     ("afternoon<integer> (latent time-of-day)",-                                     -1.742969305058623)],-                               n = 16}}),+                                     -1.9661128563728327)],+                               n = 21}}),        ("<integer> <unit-of-duration>",         Classifier{okData =-                     ClassData{prior = -infinity, unseen = -2.833213344056216,+                     ClassData{prior = -infinity, unseen = -3.044522437723423,                                likelihoods = HashMap.fromList [], n = 0},                    koData =-                     ClassData{prior = 0.0, unseen = -5.877735781779639,+                     ClassData{prior = 0.0, unseen = -5.905361848054571,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.6560549059838294),-                                    ("integer (0..10)month (grain)", -2.068268241081711),-                                    ("integer (0..10)hour (grain)", -2.8304082931286074),-                                    ("second", -3.235873401236772),-                                    ("integer (0..10)day (grain)", -3.0417173867958143),-                                    ("integer (0..10)year (grain)", -3.572345637857985),-                                    ("integer (numeric)year (grain)", -3.1668805297498204),-                                    ("integer (0..10)second (grain)", -3.235873401236772),-                                    ("day", -3.0417173867958143), ("year", -2.6968769005040847),-                                    ("integer (0..10)minute (grain)", -3.0417173867958143),-                                    ("hour", -2.8304082931286074),-                                    ("integer (0..10)week (grain)", -2.6560549059838294),-                                    ("month", -1.7973932869463112),-                                    ("integer (numeric)month (grain)", -3.1668805297498204),-                                    ("minute", -3.0417173867958143)],-                               n = 170}}),-       ("integer (11..19)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                                   [("week", -2.6837575085331653),+                                    ("integer (0..10)month (grain)", -2.535337503414892),+                                    ("integer (0..10)hour (grain)", -3.06941998934515),+                                    ("<number>\20010/\20491week (grain)", -3.5047380606029956),+                                    ("second", -3.2635760037861075),+                                    ("integer (0..10)day (grain)", -3.06941998934515),+                                    ("number suffix: \21313month (grain)", -4.293195420967266),+                                    ("integer (0..10)year (grain)", -3.6000482404073204),+                                    ("<number>\20010/\20491month (grain)", -3.130044611161585),+                                    ("integer (numeric)year (grain)", -3.1945831322991562),+                                    ("integer (0..10)second (grain)", -3.2635760037861075),+                                    ("day", -3.06941998934515), ("year", -2.7245795030534206),+                                    ("integer (0..10)minute (grain)", -3.06941998934515),+                                    ("hour", -2.8581108956779433),+                                    ("integer (0..10)week (grain)", -3.1945831322991562),+                                    ("month", -1.7754989483562746),+                                    ("<number>\20010/\20491hour (grain)", -4.293195420967266),+                                    ("integer (numeric)month (grain)", -3.1945831322991562),+                                    ("minute", -3.06941998934515)],+                               n = 173}}),        ("<time-of-day> am|pm",         Classifier{okData =                      ClassData{prior = -0.4700036292457356, unseen = -2.70805020110221,@@ -575,21 +562,25 @@                                n = 3}}),        ("relative minutes after|past <integer> (hour-of-day)",         Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (11..19)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5},+                                   [("<integer> (latent time-of-day)integer with consecutive unit modifiers",+                                     -0.7801585575495751),+                                    ("hour", -0.7801585575495751)],+                               n = 10},                    koData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (0..10)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5}}),+                                   [("<integer> (latent time-of-day)number suffix: \21313",+                                     -1.3862943611198906),+                                    ("<integer> (latent time-of-day)integer (0..10)",+                                     -1.3862943611198906),+                                    ("hour", -0.7801585575495751)],+                               n = 10}}),        ("army's day",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,@@ -599,21 +590,31 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect by \",\"",         Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -0.2231435513142097, unseen = -4.110873864173311,                                likelihoods =                                  HashMap.fromList-                                   [("Sunday<named-month> <day-of-month>", -0.7576857016975165),-                                    ("dayday", -0.7576857016975165)],-                               n = 14},+                                   [("Sunday<named-month> <day-of-month>", -0.7270487322356266),+                                    ("dayday", -0.7270487322356266)],+                               n = 28},                    koData =-                     ClassData{prior = -1.0986122886681098,+                     ClassData{prior = -1.6094379124341003,                                unseen = -2.9444389791664407,                                likelihoods =                                  HashMap.fromList                                    [("daymonth", -0.8109302162163288),                                     ("SundayFebruary", -0.8109302162163288)],                                n = 7}}),+       ("integer with consecutive unit modifiers",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("number suffix: \21313integer (0..10)", -0.6931471805599453),+                                    ("integer (0..10)integer (0..10)", -0.6931471805599453)],+                               n = 26},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("second (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.70805020110221,@@ -637,23 +638,21 @@                                n = 20}}),        ("last <time>",         Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -1.2286654169163076,+                               unseen = -3.4657359027997265,                                likelihoods =                                  HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],+                                   [("day", -0.8690378470236094), ("Sunday", -1.3545456628053103),+                                    ("Tuesday", -1.6422277352570913)],                                n = 12},                    koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,+                     ClassData{prior = -0.3462762367178338, unseen = -4.189654742026425,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),+                                   [("<integer> (latent time-of-day)", -0.916290731874155),+                                    ("month (numeric with month symbol)", -2.5649493574615367),+                                    ("hour", -0.916290731874155), ("month", -2.5649493574615367)],+                               n = 29}}),        ("March",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -670,22 +669,22 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next <time>",         Classifier{okData =-                     ClassData{prior = -1.5260563034950494, unseen = -2.890371757896165,+                     ClassData{prior = -1.6486586255873816, unseen = -2.890371757896165,                                likelihoods =                                  HashMap.fromList                                    [("day", -1.041453874828161), ("Tuesday", -1.041453874828161)],                                n = 5},                    koData =-                     ClassData{prior = -0.24512245803298496,-                               unseen = -3.784189633918261,+                     ClassData{prior = -0.21357410029805904,+                               unseen = -3.912023005428146,                                likelihoods =                                  HashMap.fromList-                                   [("Wednesday", -1.9694406464655074),-                                    ("<integer> (latent time-of-day)", -1.1962507582320256),-                                    ("month (numeric with month symbol)", -3.068052935133617),-                                    ("day", -1.9694406464655074), ("hour", -1.1962507582320256),-                                    ("month", -3.068052935133617)],-                               n = 18}}),+                                   [("Wednesday", -2.1000608288825715),+                                    ("<integer> (latent time-of-day)", -1.1192315758708455),+                                    ("month (numeric with month symbol)", -3.1986731175506815),+                                    ("day", -2.1000608288825715), ("hour", -1.1192315758708455),+                                    ("month", -3.1986731175506815)],+                               n = 21}}),        ("last <cycle>",         Classifier{okData =                      ClassData{prior = -0.8472978603872037,@@ -722,24 +721,27 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.59511985013459,+                     ClassData{prior = 0.0, unseen = -4.61512051684126,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.3877429013343523),-                                    ("integer (0..10)month (grain)", -2.793208009442517),-                                    ("integer (0..10)hour (grain)", -2.3877429013343523),-                                    ("second", -2.793208009442517),-                                    ("integer (0..10)day (grain)", -2.505525936990736),-                                    ("integer (0..10)year (grain)", -3.1986731175506815),-                                    ("integer (0..10)second (grain)", -2.793208009442517),-                                    ("day", -2.505525936990736), ("year", -3.1986731175506815),-                                    ("integer (0..10)minute (grain)", -2.639057329615259),-                                    ("hour", -2.3877429013343523),-                                    ("integer (0..10)week (grain)", -2.3877429013343523),-                                    ("month", -2.793208009442517), ("minute", -2.639057329615259)],+                                   [("week", -2.4079456086518722),+                                    ("integer (0..10)hour (grain)", -2.659260036932778),+                                    ("<number>\20010/\20491week (grain)", -2.995732273553991),+                                    ("second", -2.8134107167600364),+                                    ("integer (0..10)day (grain)", -2.5257286443082556),+                                    ("integer (0..10)year (grain)", -3.2188758248682006),+                                    ("<number>\20010/\20491month (grain)", -2.8134107167600364),+                                    ("integer (0..10)second (grain)", -2.8134107167600364),+                                    ("day", -2.5257286443082556), ("year", -3.2188758248682006),+                                    ("integer (0..10)minute (grain)", -2.659260036932778),+                                    ("hour", -2.4079456086518722),+                                    ("integer (0..10)week (grain)", -2.995732273553991),+                                    ("month", -2.8134107167600364),+                                    ("<number>\20010/\20491hour (grain)", -3.506557897319982),+                                    ("minute", -2.659260036932778)],                                n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("Tuesday",         Classifier{okData =@@ -757,79 +759,95 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<named-month> <day-of-month>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.8283137373023015,+                     ClassData{prior = 0.0, unseen = -5.231108616854587,                                likelihoods =                                  HashMap.fromList-                                   [("Marchinteger (0..10)", -3.028522096376982),-                                    ("Februaryinteger (11..19)", -2.6230569882688175),-                                    ("month (numeric with month symbol)integer (11..19)",-                                     -2.6230569882688175),-                                    ("Marchinteger (numeric)", -3.721669276936927),+                                   [("month (numeric with month symbol)integer with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Marchinteger (0..10)", -3.4339872044851463),+                                    ("Marchinteger (numeric)", -4.127134385045092),                                     ("month (numeric with month symbol)integer (numeric)",-                                     -2.1122313645028266),-                                    ("Februaryinteger (0..10)", -2.740840023925201),-                                    ("month", -0.7427441216993174),+                                     -2.517696472610991),+                                    ("Februaryinteger (0..10)", -3.146305132033365),+                                    ("month (numeric with month symbol)number suffix: \21313",+                                     -3.146305132033365),+                                    ("month", -0.7371103039810614),                                     ("month (numeric with month symbol)integer (0..10)",-                                     -2.1122313645028266)],-                               n = 58},+                                     -2.517696472610991),+                                    ("Februaryinteger with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Februarynumber suffix: \21313", -3.146305132033365)],+                               n = 88},                    koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (0..10)",         Classifier{okData =-                     ClassData{prior = -0.4540728071735412, unseen = -5.170483995038151,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 174},+                     ClassData{prior = -0.38372512147175847,+                               unseen = -5.236441962829949,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 186},                    koData =-                     ClassData{prior = -1.007957920399979, unseen = -4.624972813284271,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 100}}),+                     ClassData{prior = -1.143563676530376, unseen = -4.48863636973214,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 87}}),        ("last n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.61512051684126,+                     ClassData{prior = 0.0, unseen = -4.605170185988091,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.995732273553991),-                                    ("integer (0..10)month (grain)", -2.120263536200091),-                                    ("integer (0..10)hour (grain)", -2.4079456086518722),-                                    ("second", -2.659260036932778),-                                    ("integer (0..10)day (grain)", -2.995732273553991),-                                    ("integer (0..10)year (grain)", -3.506557897319982),-                                    ("integer (0..10)second (grain)", -2.659260036932778),-                                    ("day", -2.995732273553991), ("year", -3.506557897319982),-                                    ("integer (0..10)minute (grain)", -2.4079456086518722),-                                    ("hour", -2.4079456086518722),-                                    ("integer (0..10)week (grain)", -2.995732273553991),-                                    ("month", -2.120263536200091), ("minute", -2.4079456086518722)],-                               n = 43},+                                   [("week", -2.9856819377004897),+                                    ("integer (0..10)month (grain)", -3.4965075614664802),+                                    ("integer (0..10)hour (grain)", -2.3978952727983707),+                                    ("second", -2.649209701079277),+                                    ("integer (0..10)day (grain)", -2.9856819377004897),+                                    ("integer (0..10)year (grain)", -3.4965075614664802),+                                    ("<number>\20010/\20491month (grain)", -2.3978952727983707),+                                    ("integer (0..10)second (grain)", -2.649209701079277),+                                    ("day", -2.9856819377004897), ("year", -3.4965075614664802),+                                    ("integer (0..10)minute (grain)", -2.3978952727983707),+                                    ("hour", -2.3978952727983707),+                                    ("integer (0..10)week (grain)", -2.9856819377004897),+                                    ("month", -2.1972245773362196),+                                    ("minute", -2.3978952727983707)],+                               n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.772588722239781,                                likelihoods = HashMap.fromList [], n = 0}}),        ("ordinal (digits)",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 4},+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("<number>\20010/\20491", -0.1823215567939546)],+                               n = 4},                    koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("integer (0..10)", -0.1823215567939546)],+                               n = 4}}),        ("n <cycle> last",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.007333185232471,+                     ClassData{prior = 0.0, unseen = -4.04305126783455,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.379546134130174),-                                    ("integer (0..10)month (grain)", -2.890371757896165),-                                    ("integer (0..10)hour (grain)", -2.379546134130174),-                                    ("second", -2.890371757896165),-                                    ("integer (0..10)day (grain)", -2.379546134130174),-                                    ("integer (0..10)year (grain)", -2.890371757896165),-                                    ("integer (0..10)second (grain)", -2.890371757896165),-                                    ("day", -2.379546134130174), ("year", -2.890371757896165),-                                    ("integer (0..10)minute (grain)", -2.890371757896165),-                                    ("hour", -2.379546134130174),-                                    ("integer (0..10)week (grain)", -2.379546134130174),-                                    ("month", -2.890371757896165), ("minute", -2.890371757896165)],+                                   [("week", -2.4159137783010487),+                                    ("integer (0..10)hour (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491week (grain)", -2.9267394020670396),+                                    ("second", -2.9267394020670396),+                                    ("integer (0..10)day (grain)", -2.4159137783010487),+                                    ("integer (0..10)year (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491month (grain)", -2.9267394020670396),+                                    ("integer (0..10)second (grain)", -2.9267394020670396),+                                    ("day", -2.4159137783010487), ("year", -2.9267394020670396),+                                    ("integer (0..10)minute (grain)", -2.9267394020670396),+                                    ("hour", -2.4159137783010487),+                                    ("integer (0..10)week (grain)", -2.9267394020670396),+                                    ("month", -2.9267394020670396),+                                    ("<number>\20010/\20491hour (grain)", -2.9267394020670396),+                                    ("minute", -2.9267394020670396)],                                n = 20},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("morning",         Classifier{okData =@@ -864,6 +882,13 @@         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<number>\20010/\20491",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4339872044851463,+                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 29},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),
Duckling/Ranking/Classifiers/ZH_HK.hs view
@@ -95,10 +95,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (grain)",         Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                     ClassData{prior = -1.0076405104623831,+                               unseen = -3.2188758248682006,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},                    koData =-                     ClassData{prior = -0.4700036292457356,+                     ClassData{prior = -0.45425527227759643,                                unseen = -3.7376696182833684,                                likelihoods = HashMap.fromList [("", 0.0)], n = 40}}),        ("<time-of-day> o'clock",@@ -124,6 +125,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("number suffix: \21313",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.258096538021482,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("Wednesday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.9444389791664407,@@ -140,44 +148,43 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.4367176516122688, unseen = -4.624972813284271,+                     ClassData{prior = -0.3519764231571781, unseen = -4.983606621708336,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -3.5165082281731497),+                                   [("children's day<part-of-day> <dim time>", -3.367295829986474),                                     ("year (numeric with year symbol)<named-month> <day-of-month>",-                                     -1.5705980791178364),-                                    ("dayday", -1.9070703157390494),-                                    ("hourhour", -3.005682604407159),-                                    ("hourminute", -3.5165082281731497),+                                     -1.7578579175523736),+                                    ("dayday", -1.6094379124341003),+                                    ("hourhour", -3.367295829986474),+                                    ("hourminute", -3.367295829986474),                                     ("absorption of , after named day<named-month> <day-of-month>",-                                     -1.9070703157390494),-                                    ("dayminute", -3.5165082281731497),-                                    ("tonight<time-of-day> o'clock", -3.005682604407159),+                                     -1.6094379124341003),+                                    ("dayminute", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -3.367295829986474),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.5165082281731497),-                                    ("yearday", -1.5705980791178364)],-                               n = 42},+                                     -3.367295829986474),+                                    ("yearday", -1.7578579175523736)],+                               n = 64},                    koData =-                     ClassData{prior = -1.0388930539664873,-                               unseen = -4.1588830833596715,+                     ClassData{prior = -1.215022640512521, unseen = -4.276666119016055,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -2.1972245773362196),-                                    ("dayhour", -2.5336968139574325),-                                    ("daymonth", -2.063693184711697),-                                    ("year (numeric with year symbol)February", -3.044522437723423),+                                   [("children's day<part-of-day> <dim time>", -2.065455299705096),+                                    ("dayhour", -2.653241964607215),+                                    ("daymonth", -2.1832383353614793),+                                    ("year (numeric with year symbol)February", -3.164067588373206),                                     ("<dim time> <part-of-day><time-of-day> o'clock",-                                     -3.044522437723423),-                                    ("hourhour", -3.044522437723423),-                                    ("year (numeric with year symbol)March", -2.5336968139574325),-                                    ("hourminute", -3.044522437723423),-                                    ("yearmonth", -2.1972245773362196),-                                    ("dayminute", -3.044522437723423),+                                     -3.164067588373206),+                                    ("hourhour", -3.164067588373206),+                                    ("year (numeric with year symbol)March", -2.653241964607215),+                                    ("hourminute", -2.653241964607215),+                                    ("yearmonth", -2.316769727986002),+                                    ("dayminute", -2.653241964607215),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.044522437723423),+                                     -2.653241964607215),                                     ("absorption of , after named dayFebruary",-                                     -2.063693184711697)],-                               n = 23}}),+                                     -2.1832383353614793)],+                               n = 27}}),        ("year (grain)",         Classifier{okData =                      ClassData{prior = -0.8209805520698302,@@ -193,25 +200,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("last tuesday, last july",-        Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],-                               n = 12},-                   koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),        ("next <cycle>",         Classifier{okData =                      ClassData{prior = -0.7472144018302211,@@ -301,48 +289,50 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<integer> (latent time-of-day)",         Classifier{okData =-                     ClassData{prior = -1.3217558399823195,-                               unseen = -2.9444389791664407,+                     ClassData{prior = -1.4170660197866443, unseen = -2.995732273553991,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.2809338454620642),-                                    ("integer (0..10)", -0.325422400434628)],+                                   [("integer (numeric)", -1.3350010667323402),+                                    ("integer (0..10)", -0.3794896217049037)],                                n = 16},                    koData =-                     ClassData{prior = -0.3101549283038396,-                               unseen = -3.8501476017100584,+                     ClassData{prior = -0.2776317365982795,+                               unseen = -3.9889840465642745,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -2.2192034840549946),-                                    ("integer (0..10)", -0.11506932978478723)],-                               n = 44}}),+                                   [("integer (numeric)", -2.3608540011180215),+                                    ("integer (0..10)", -0.28141245943818544),+                                    ("<number>\20010/\20491", -1.890850371872286)],+                               n = 50}}),        ("nth <time> of <time>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                     ClassData{prior = 0.0, unseen = -3.332204510175204,                                likelihoods =                                  HashMap.fromList-                                   [("Octoberordinal (digits)Monday", -1.3350010667323402),-                                    ("monthday", -0.7472144018302211),+                                   [("Octoberordinal (digits)Monday", -1.6863989535702288),+                                    ("monthday", -0.7308875085427924),                                     ("month (numeric with month symbol)ordinal (digits)Monday",-                                     -1.3350010667323402)],-                               n = 8},+                                     -1.0986122886681098)],+                               n = 12},                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (numeric with month symbol)",         Classifier{okData =-                     ClassData{prior = -0.13976194237515874,-                               unseen = -3.7612001156935624,+                     ClassData{prior = -0.10763066419236544,+                               unseen = -3.891820298110627,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.0296194171811581),-                                    ("integer (0..10)", -0.4418327522790392)],-                               n = 40},+                                   [("integer (numeric)", -1.1631508098056809),+                                    ("number suffix: \21313", -2.2617630984737906),+                                    ("integer (0..10)", -0.5753641449035618)],+                               n = 44},                    koData =-                     ClassData{prior = -2.03688192726104, unseen = -2.1972245773362196,+                     ClassData{prior = -2.2823823856765264,+                               unseen = -2.3025850929940455,                                likelihoods =-                                 HashMap.fromList [("integer (0..10)", -0.13353139262452263)],-                               n = 6}}),+                                 HashMap.fromList [("<number>\20010/\20491", -0.40546510810816444)],+                               n = 5}}),        ("week (grain)",         Classifier{okData =                      ClassData{prior = -0.8434293836092833,@@ -451,12 +441,11 @@                                n = 20}}),        ("February",         Classifier{okData =-                     ClassData{prior = -6.453852113757118e-2,-                               unseen = -2.833213344056216,+                     ClassData{prior = 0.0, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [("", 0.0)], n = 15},                    koData =-                     ClassData{prior = -2.772588722239781, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("this <cycle>",         Classifier{okData =                      ClassData{prior = -1.0185695809945732,@@ -485,77 +474,75 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<dim time> <part-of-day>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.9889840465642745,+                     ClassData{prior = 0.0, unseen = -4.248495242049359,                                likelihoods =                                  HashMap.fromList-                                   [("dayhour", -0.7514160886839211),-                                    ("national dayevening|night", -2.871679624884012),-                                    ("<named-month> <day-of-month>morning", -1.405342556090585),-                                    ("children's dayafternoon", -2.871679624884012),-                                    ("Mondaymorning", -1.7730673362159024)],-                               n = 24},+                                   [("dayhour", -0.7375989431307791),+                                    ("national dayevening|night", -3.1354942159291497),+                                    ("<named-month> <day-of-month>morning", -1.1895840668738362),+                                    ("children's dayafternoon", -3.1354942159291497),+                                    ("Mondaymorning", -2.03688192726104)],+                               n = 32},                    koData =                      ClassData{prior = -infinity, unseen = -1.791759469228055,                                likelihoods = HashMap.fromList [], n = 0}}),        ("<part-of-day> <dim time>",         Classifier{okData =-                     ClassData{prior = -0.587786664902119, unseen = -3.891820298110627,+                     ClassData{prior = -0.6097655716208943, unseen = -4.07753744390572,                                likelihoods =                                  HashMap.fromList-                                   [("tonight<integer> (latent time-of-day)", -2.2617630984737906),-                                    ("hourhour", -1.1631508098056809),+                                   [("tonight<integer> (latent time-of-day)", -2.451005098112319),+                                    ("hourhour", -1.3523928094442093),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -2.0794415416798357),-                                    ("afternoon<time-of-day> o'clock", -2.4849066497880004),-                                    ("hourminute", -1.9252908618525775),+                                     -1.6625477377480489),+                                    ("afternoon<time-of-day> o'clock", -2.6741486494265287),+                                    ("hourminute", -1.575536360758419),                                     ("afternoon<integer> (latent time-of-day)",-                                     -2.4849066497880004),-                                    ("afternoonhh:mm (time-of-day)", -3.1780538303479458),-                                    ("tonight<time-of-day> o'clock", -2.2617630984737906)],-                               n = 20},+                                     -2.6741486494265287),+                                    ("afternoonhh:mm (time-of-day)", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -2.451005098112319)],+                               n = 25},                    koData =-                     ClassData{prior = -0.8109302162163288, unseen = -3.713572066704308,+                     ClassData{prior = -0.7841189587656721,+                               unseen = -3.9318256327243257,                                likelihoods =                                  HashMap.fromList-                                   [("hourhour", -1.2039728043259361),+                                   [("hourhour", -1.4271163556401458),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -1.8971199848858813),-                                    ("afternoon<time-of-day> o'clock", -1.8971199848858813),-                                    ("hourminute", -1.8971199848858813),+                                     -1.5141277326297755),+                                    ("afternoon<time-of-day> o'clock", -2.120263536200091),+                                    ("hourminute", -1.5141277326297755),                                     ("afternoon<integer> (latent time-of-day)",-                                     -1.742969305058623)],-                               n = 16}}),+                                     -1.9661128563728327)],+                               n = 21}}),        ("<integer> <unit-of-duration>",         Classifier{okData =-                     ClassData{prior = -infinity, unseen = -2.833213344056216,+                     ClassData{prior = -infinity, unseen = -3.044522437723423,                                likelihoods = HashMap.fromList [], n = 0},                    koData =-                     ClassData{prior = 0.0, unseen = -5.877735781779639,+                     ClassData{prior = 0.0, unseen = -5.905361848054571,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.6560549059838294),-                                    ("integer (0..10)month (grain)", -2.068268241081711),-                                    ("integer (0..10)hour (grain)", -2.8304082931286074),-                                    ("second", -3.235873401236772),-                                    ("integer (0..10)day (grain)", -3.0417173867958143),-                                    ("integer (0..10)year (grain)", -3.572345637857985),-                                    ("integer (numeric)year (grain)", -3.1668805297498204),-                                    ("integer (0..10)second (grain)", -3.235873401236772),-                                    ("day", -3.0417173867958143), ("year", -2.6968769005040847),-                                    ("integer (0..10)minute (grain)", -3.0417173867958143),-                                    ("hour", -2.8304082931286074),-                                    ("integer (0..10)week (grain)", -2.6560549059838294),-                                    ("month", -1.7973932869463112),-                                    ("integer (numeric)month (grain)", -3.1668805297498204),-                                    ("minute", -3.0417173867958143)],-                               n = 170}}),-       ("integer (11..19)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                                   [("week", -2.6837575085331653),+                                    ("integer (0..10)month (grain)", -2.535337503414892),+                                    ("integer (0..10)hour (grain)", -3.06941998934515),+                                    ("<number>\20010/\20491week (grain)", -3.5047380606029956),+                                    ("second", -3.2635760037861075),+                                    ("integer (0..10)day (grain)", -3.06941998934515),+                                    ("number suffix: \21313month (grain)", -4.293195420967266),+                                    ("integer (0..10)year (grain)", -3.6000482404073204),+                                    ("<number>\20010/\20491month (grain)", -3.130044611161585),+                                    ("integer (numeric)year (grain)", -3.1945831322991562),+                                    ("integer (0..10)second (grain)", -3.2635760037861075),+                                    ("day", -3.06941998934515), ("year", -2.7245795030534206),+                                    ("integer (0..10)minute (grain)", -3.06941998934515),+                                    ("hour", -2.8581108956779433),+                                    ("integer (0..10)week (grain)", -3.1945831322991562),+                                    ("month", -1.7754989483562746),+                                    ("<number>\20010/\20491hour (grain)", -4.293195420967266),+                                    ("integer (numeric)month (grain)", -3.1945831322991562),+                                    ("minute", -3.06941998934515)],+                               n = 173}}),        ("<time-of-day> am|pm",         Classifier{okData =                      ClassData{prior = -0.4700036292457356, unseen = -2.70805020110221,@@ -575,21 +562,25 @@                                n = 3}}),        ("relative minutes after|past <integer> (hour-of-day)",         Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (11..19)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5},+                                   [("<integer> (latent time-of-day)integer with consecutive unit modifiers",+                                     -0.7801585575495751),+                                    ("hour", -0.7801585575495751)],+                               n = 10},                    koData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (0..10)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5}}),+                                   [("<integer> (latent time-of-day)number suffix: \21313",+                                     -1.3862943611198906),+                                    ("<integer> (latent time-of-day)integer (0..10)",+                                     -1.3862943611198906),+                                    ("hour", -0.7801585575495751)],+                               n = 10}}),        ("army's day",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,@@ -599,21 +590,31 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect by \",\"",         Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -0.2231435513142097, unseen = -4.110873864173311,                                likelihoods =                                  HashMap.fromList-                                   [("Sunday<named-month> <day-of-month>", -0.7576857016975165),-                                    ("dayday", -0.7576857016975165)],-                               n = 14},+                                   [("Sunday<named-month> <day-of-month>", -0.7270487322356266),+                                    ("dayday", -0.7270487322356266)],+                               n = 28},                    koData =-                     ClassData{prior = -1.0986122886681098,+                     ClassData{prior = -1.6094379124341003,                                unseen = -2.9444389791664407,                                likelihoods =                                  HashMap.fromList                                    [("daymonth", -0.8109302162163288),                                     ("SundayFebruary", -0.8109302162163288)],                                n = 7}}),+       ("integer with consecutive unit modifiers",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("number suffix: \21313integer (0..10)", -0.6931471805599453),+                                    ("integer (0..10)integer (0..10)", -0.6931471805599453)],+                               n = 26},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("second (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.70805020110221,@@ -637,23 +638,21 @@                                n = 20}}),        ("last <time>",         Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -1.2286654169163076,+                               unseen = -3.4657359027997265,                                likelihoods =                                  HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],+                                   [("day", -0.8690378470236094), ("Sunday", -1.3545456628053103),+                                    ("Tuesday", -1.6422277352570913)],                                n = 12},                    koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,+                     ClassData{prior = -0.3462762367178338, unseen = -4.189654742026425,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),+                                   [("<integer> (latent time-of-day)", -0.916290731874155),+                                    ("month (numeric with month symbol)", -2.5649493574615367),+                                    ("hour", -0.916290731874155), ("month", -2.5649493574615367)],+                               n = 29}}),        ("March",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -670,22 +669,22 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next <time>",         Classifier{okData =-                     ClassData{prior = -1.5260563034950494, unseen = -2.890371757896165,+                     ClassData{prior = -1.6486586255873816, unseen = -2.890371757896165,                                likelihoods =                                  HashMap.fromList                                    [("day", -1.041453874828161), ("Tuesday", -1.041453874828161)],                                n = 5},                    koData =-                     ClassData{prior = -0.24512245803298496,-                               unseen = -3.784189633918261,+                     ClassData{prior = -0.21357410029805904,+                               unseen = -3.912023005428146,                                likelihoods =                                  HashMap.fromList-                                   [("Wednesday", -1.9694406464655074),-                                    ("<integer> (latent time-of-day)", -1.1962507582320256),-                                    ("month (numeric with month symbol)", -3.068052935133617),-                                    ("day", -1.9694406464655074), ("hour", -1.1962507582320256),-                                    ("month", -3.068052935133617)],-                               n = 18}}),+                                   [("Wednesday", -2.1000608288825715),+                                    ("<integer> (latent time-of-day)", -1.1192315758708455),+                                    ("month (numeric with month symbol)", -3.1986731175506815),+                                    ("day", -2.1000608288825715), ("hour", -1.1192315758708455),+                                    ("month", -3.1986731175506815)],+                               n = 21}}),        ("last <cycle>",         Classifier{okData =                      ClassData{prior = -0.8472978603872037,@@ -722,24 +721,27 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.59511985013459,+                     ClassData{prior = 0.0, unseen = -4.61512051684126,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.3877429013343523),-                                    ("integer (0..10)month (grain)", -2.793208009442517),-                                    ("integer (0..10)hour (grain)", -2.3877429013343523),-                                    ("second", -2.793208009442517),-                                    ("integer (0..10)day (grain)", -2.505525936990736),-                                    ("integer (0..10)year (grain)", -3.1986731175506815),-                                    ("integer (0..10)second (grain)", -2.793208009442517),-                                    ("day", -2.505525936990736), ("year", -3.1986731175506815),-                                    ("integer (0..10)minute (grain)", -2.639057329615259),-                                    ("hour", -2.3877429013343523),-                                    ("integer (0..10)week (grain)", -2.3877429013343523),-                                    ("month", -2.793208009442517), ("minute", -2.639057329615259)],+                                   [("week", -2.4079456086518722),+                                    ("integer (0..10)hour (grain)", -2.659260036932778),+                                    ("<number>\20010/\20491week (grain)", -2.995732273553991),+                                    ("second", -2.8134107167600364),+                                    ("integer (0..10)day (grain)", -2.5257286443082556),+                                    ("integer (0..10)year (grain)", -3.2188758248682006),+                                    ("<number>\20010/\20491month (grain)", -2.8134107167600364),+                                    ("integer (0..10)second (grain)", -2.8134107167600364),+                                    ("day", -2.5257286443082556), ("year", -3.2188758248682006),+                                    ("integer (0..10)minute (grain)", -2.659260036932778),+                                    ("hour", -2.4079456086518722),+                                    ("integer (0..10)week (grain)", -2.995732273553991),+                                    ("month", -2.8134107167600364),+                                    ("<number>\20010/\20491hour (grain)", -3.506557897319982),+                                    ("minute", -2.659260036932778)],                                n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("Tuesday",         Classifier{okData =@@ -757,79 +759,95 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<named-month> <day-of-month>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.8283137373023015,+                     ClassData{prior = 0.0, unseen = -5.231108616854587,                                likelihoods =                                  HashMap.fromList-                                   [("Marchinteger (0..10)", -3.028522096376982),-                                    ("Februaryinteger (11..19)", -2.6230569882688175),-                                    ("month (numeric with month symbol)integer (11..19)",-                                     -2.6230569882688175),-                                    ("Marchinteger (numeric)", -3.721669276936927),+                                   [("month (numeric with month symbol)integer with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Marchinteger (0..10)", -3.4339872044851463),+                                    ("Marchinteger (numeric)", -4.127134385045092),                                     ("month (numeric with month symbol)integer (numeric)",-                                     -2.1122313645028266),-                                    ("Februaryinteger (0..10)", -2.740840023925201),-                                    ("month", -0.7427441216993174),+                                     -2.517696472610991),+                                    ("Februaryinteger (0..10)", -3.146305132033365),+                                    ("month (numeric with month symbol)number suffix: \21313",+                                     -3.146305132033365),+                                    ("month", -0.7371103039810614),                                     ("month (numeric with month symbol)integer (0..10)",-                                     -2.1122313645028266)],-                               n = 58},+                                     -2.517696472610991),+                                    ("Februaryinteger with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Februarynumber suffix: \21313", -3.146305132033365)],+                               n = 88},                    koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (0..10)",         Classifier{okData =-                     ClassData{prior = -0.4540728071735412, unseen = -5.170483995038151,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 174},+                     ClassData{prior = -0.38372512147175847,+                               unseen = -5.236441962829949,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 186},                    koData =-                     ClassData{prior = -1.007957920399979, unseen = -4.624972813284271,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 100}}),+                     ClassData{prior = -1.143563676530376, unseen = -4.48863636973214,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 87}}),        ("last n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.61512051684126,+                     ClassData{prior = 0.0, unseen = -4.605170185988091,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.995732273553991),-                                    ("integer (0..10)month (grain)", -2.120263536200091),-                                    ("integer (0..10)hour (grain)", -2.4079456086518722),-                                    ("second", -2.659260036932778),-                                    ("integer (0..10)day (grain)", -2.995732273553991),-                                    ("integer (0..10)year (grain)", -3.506557897319982),-                                    ("integer (0..10)second (grain)", -2.659260036932778),-                                    ("day", -2.995732273553991), ("year", -3.506557897319982),-                                    ("integer (0..10)minute (grain)", -2.4079456086518722),-                                    ("hour", -2.4079456086518722),-                                    ("integer (0..10)week (grain)", -2.995732273553991),-                                    ("month", -2.120263536200091), ("minute", -2.4079456086518722)],-                               n = 43},+                                   [("week", -2.9856819377004897),+                                    ("integer (0..10)month (grain)", -3.4965075614664802),+                                    ("integer (0..10)hour (grain)", -2.3978952727983707),+                                    ("second", -2.649209701079277),+                                    ("integer (0..10)day (grain)", -2.9856819377004897),+                                    ("integer (0..10)year (grain)", -3.4965075614664802),+                                    ("<number>\20010/\20491month (grain)", -2.3978952727983707),+                                    ("integer (0..10)second (grain)", -2.649209701079277),+                                    ("day", -2.9856819377004897), ("year", -3.4965075614664802),+                                    ("integer (0..10)minute (grain)", -2.3978952727983707),+                                    ("hour", -2.3978952727983707),+                                    ("integer (0..10)week (grain)", -2.9856819377004897),+                                    ("month", -2.1972245773362196),+                                    ("minute", -2.3978952727983707)],+                               n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.772588722239781,                                likelihoods = HashMap.fromList [], n = 0}}),        ("ordinal (digits)",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 4},+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("<number>\20010/\20491", -0.1823215567939546)],+                               n = 4},                    koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("integer (0..10)", -0.1823215567939546)],+                               n = 4}}),        ("n <cycle> last",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.007333185232471,+                     ClassData{prior = 0.0, unseen = -4.04305126783455,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.379546134130174),-                                    ("integer (0..10)month (grain)", -2.890371757896165),-                                    ("integer (0..10)hour (grain)", -2.379546134130174),-                                    ("second", -2.890371757896165),-                                    ("integer (0..10)day (grain)", -2.379546134130174),-                                    ("integer (0..10)year (grain)", -2.890371757896165),-                                    ("integer (0..10)second (grain)", -2.890371757896165),-                                    ("day", -2.379546134130174), ("year", -2.890371757896165),-                                    ("integer (0..10)minute (grain)", -2.890371757896165),-                                    ("hour", -2.379546134130174),-                                    ("integer (0..10)week (grain)", -2.379546134130174),-                                    ("month", -2.890371757896165), ("minute", -2.890371757896165)],+                                   [("week", -2.4159137783010487),+                                    ("integer (0..10)hour (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491week (grain)", -2.9267394020670396),+                                    ("second", -2.9267394020670396),+                                    ("integer (0..10)day (grain)", -2.4159137783010487),+                                    ("integer (0..10)year (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491month (grain)", -2.9267394020670396),+                                    ("integer (0..10)second (grain)", -2.9267394020670396),+                                    ("day", -2.4159137783010487), ("year", -2.9267394020670396),+                                    ("integer (0..10)minute (grain)", -2.9267394020670396),+                                    ("hour", -2.4159137783010487),+                                    ("integer (0..10)week (grain)", -2.9267394020670396),+                                    ("month", -2.9267394020670396),+                                    ("<number>\20010/\20491hour (grain)", -2.9267394020670396),+                                    ("minute", -2.9267394020670396)],                                n = 20},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("morning",         Classifier{okData =@@ -864,6 +882,13 @@         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<number>\20010/\20491",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4339872044851463,+                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 29},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),
Duckling/Ranking/Classifiers/ZH_MO.hs view
@@ -95,10 +95,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (grain)",         Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                     ClassData{prior = -1.0076405104623831,+                               unseen = -3.2188758248682006,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},                    koData =-                     ClassData{prior = -0.4700036292457356,+                     ClassData{prior = -0.45425527227759643,                                unseen = -3.7376696182833684,                                likelihoods = HashMap.fromList [("", 0.0)], n = 40}}),        ("<time-of-day> o'clock",@@ -124,6 +125,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("number suffix: \21313",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.258096538021482,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("Wednesday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.9444389791664407,@@ -140,44 +148,43 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.4367176516122688, unseen = -4.624972813284271,+                     ClassData{prior = -0.3519764231571781, unseen = -4.983606621708336,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -3.5165082281731497),+                                   [("children's day<part-of-day> <dim time>", -3.367295829986474),                                     ("year (numeric with year symbol)<named-month> <day-of-month>",-                                     -1.5705980791178364),-                                    ("dayday", -1.9070703157390494),-                                    ("hourhour", -3.005682604407159),-                                    ("hourminute", -3.5165082281731497),+                                     -1.7578579175523736),+                                    ("dayday", -1.6094379124341003),+                                    ("hourhour", -3.367295829986474),+                                    ("hourminute", -3.367295829986474),                                     ("absorption of , after named day<named-month> <day-of-month>",-                                     -1.9070703157390494),-                                    ("dayminute", -3.5165082281731497),-                                    ("tonight<time-of-day> o'clock", -3.005682604407159),+                                     -1.6094379124341003),+                                    ("dayminute", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -3.367295829986474),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.5165082281731497),-                                    ("yearday", -1.5705980791178364)],-                               n = 42},+                                     -3.367295829986474),+                                    ("yearday", -1.7578579175523736)],+                               n = 64},                    koData =-                     ClassData{prior = -1.0388930539664873,-                               unseen = -4.1588830833596715,+                     ClassData{prior = -1.215022640512521, unseen = -4.276666119016055,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -2.1972245773362196),-                                    ("dayhour", -2.5336968139574325),-                                    ("daymonth", -2.063693184711697),-                                    ("year (numeric with year symbol)February", -3.044522437723423),+                                   [("children's day<part-of-day> <dim time>", -2.065455299705096),+                                    ("dayhour", -2.653241964607215),+                                    ("daymonth", -2.1832383353614793),+                                    ("year (numeric with year symbol)February", -3.164067588373206),                                     ("<dim time> <part-of-day><time-of-day> o'clock",-                                     -3.044522437723423),-                                    ("hourhour", -3.044522437723423),-                                    ("year (numeric with year symbol)March", -2.5336968139574325),-                                    ("hourminute", -3.044522437723423),-                                    ("yearmonth", -2.1972245773362196),-                                    ("dayminute", -3.044522437723423),+                                     -3.164067588373206),+                                    ("hourhour", -3.164067588373206),+                                    ("year (numeric with year symbol)March", -2.653241964607215),+                                    ("hourminute", -2.653241964607215),+                                    ("yearmonth", -2.316769727986002),+                                    ("dayminute", -2.653241964607215),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.044522437723423),+                                     -2.653241964607215),                                     ("absorption of , after named dayFebruary",-                                     -2.063693184711697)],-                               n = 23}}),+                                     -2.1832383353614793)],+                               n = 27}}),        ("year (grain)",         Classifier{okData =                      ClassData{prior = -0.8209805520698302,@@ -193,25 +200,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("last tuesday, last july",-        Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],-                               n = 12},-                   koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),        ("next <cycle>",         Classifier{okData =                      ClassData{prior = -0.7472144018302211,@@ -301,48 +289,50 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<integer> (latent time-of-day)",         Classifier{okData =-                     ClassData{prior = -1.3217558399823195,-                               unseen = -2.9444389791664407,+                     ClassData{prior = -1.4170660197866443, unseen = -2.995732273553991,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.2809338454620642),-                                    ("integer (0..10)", -0.325422400434628)],+                                   [("integer (numeric)", -1.3350010667323402),+                                    ("integer (0..10)", -0.3794896217049037)],                                n = 16},                    koData =-                     ClassData{prior = -0.3101549283038396,-                               unseen = -3.8501476017100584,+                     ClassData{prior = -0.2776317365982795,+                               unseen = -3.9889840465642745,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -2.2192034840549946),-                                    ("integer (0..10)", -0.11506932978478723)],-                               n = 44}}),+                                   [("integer (numeric)", -2.3608540011180215),+                                    ("integer (0..10)", -0.28141245943818544),+                                    ("<number>\20010/\20491", -1.890850371872286)],+                               n = 50}}),        ("nth <time> of <time>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                     ClassData{prior = 0.0, unseen = -3.332204510175204,                                likelihoods =                                  HashMap.fromList-                                   [("Octoberordinal (digits)Monday", -1.3350010667323402),-                                    ("monthday", -0.7472144018302211),+                                   [("Octoberordinal (digits)Monday", -1.6863989535702288),+                                    ("monthday", -0.7308875085427924),                                     ("month (numeric with month symbol)ordinal (digits)Monday",-                                     -1.3350010667323402)],-                               n = 8},+                                     -1.0986122886681098)],+                               n = 12},                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (numeric with month symbol)",         Classifier{okData =-                     ClassData{prior = -0.13976194237515874,-                               unseen = -3.7612001156935624,+                     ClassData{prior = -0.10763066419236544,+                               unseen = -3.891820298110627,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.0296194171811581),-                                    ("integer (0..10)", -0.4418327522790392)],-                               n = 40},+                                   [("integer (numeric)", -1.1631508098056809),+                                    ("number suffix: \21313", -2.2617630984737906),+                                    ("integer (0..10)", -0.5753641449035618)],+                               n = 44},                    koData =-                     ClassData{prior = -2.03688192726104, unseen = -2.1972245773362196,+                     ClassData{prior = -2.2823823856765264,+                               unseen = -2.3025850929940455,                                likelihoods =-                                 HashMap.fromList [("integer (0..10)", -0.13353139262452263)],-                               n = 6}}),+                                 HashMap.fromList [("<number>\20010/\20491", -0.40546510810816444)],+                               n = 5}}),        ("week (grain)",         Classifier{okData =                      ClassData{prior = -0.8434293836092833,@@ -451,12 +441,11 @@                                n = 20}}),        ("February",         Classifier{okData =-                     ClassData{prior = -6.453852113757118e-2,-                               unseen = -2.833213344056216,+                     ClassData{prior = 0.0, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [("", 0.0)], n = 15},                    koData =-                     ClassData{prior = -2.772588722239781, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("this <cycle>",         Classifier{okData =                      ClassData{prior = -1.0185695809945732,@@ -485,77 +474,75 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<dim time> <part-of-day>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.9889840465642745,+                     ClassData{prior = 0.0, unseen = -4.248495242049359,                                likelihoods =                                  HashMap.fromList-                                   [("dayhour", -0.7514160886839211),-                                    ("national dayevening|night", -2.871679624884012),-                                    ("<named-month> <day-of-month>morning", -1.405342556090585),-                                    ("children's dayafternoon", -2.871679624884012),-                                    ("Mondaymorning", -1.7730673362159024)],-                               n = 24},+                                   [("dayhour", -0.7375989431307791),+                                    ("national dayevening|night", -3.1354942159291497),+                                    ("<named-month> <day-of-month>morning", -1.1895840668738362),+                                    ("children's dayafternoon", -3.1354942159291497),+                                    ("Mondaymorning", -2.03688192726104)],+                               n = 32},                    koData =                      ClassData{prior = -infinity, unseen = -1.791759469228055,                                likelihoods = HashMap.fromList [], n = 0}}),        ("<part-of-day> <dim time>",         Classifier{okData =-                     ClassData{prior = -0.587786664902119, unseen = -3.891820298110627,+                     ClassData{prior = -0.6097655716208943, unseen = -4.07753744390572,                                likelihoods =                                  HashMap.fromList-                                   [("tonight<integer> (latent time-of-day)", -2.2617630984737906),-                                    ("hourhour", -1.1631508098056809),+                                   [("tonight<integer> (latent time-of-day)", -2.451005098112319),+                                    ("hourhour", -1.3523928094442093),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -2.0794415416798357),-                                    ("afternoon<time-of-day> o'clock", -2.4849066497880004),-                                    ("hourminute", -1.9252908618525775),+                                     -1.6625477377480489),+                                    ("afternoon<time-of-day> o'clock", -2.6741486494265287),+                                    ("hourminute", -1.575536360758419),                                     ("afternoon<integer> (latent time-of-day)",-                                     -2.4849066497880004),-                                    ("afternoonhh:mm (time-of-day)", -3.1780538303479458),-                                    ("tonight<time-of-day> o'clock", -2.2617630984737906)],-                               n = 20},+                                     -2.6741486494265287),+                                    ("afternoonhh:mm (time-of-day)", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -2.451005098112319)],+                               n = 25},                    koData =-                     ClassData{prior = -0.8109302162163288, unseen = -3.713572066704308,+                     ClassData{prior = -0.7841189587656721,+                               unseen = -3.9318256327243257,                                likelihoods =                                  HashMap.fromList-                                   [("hourhour", -1.2039728043259361),+                                   [("hourhour", -1.4271163556401458),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -1.8971199848858813),-                                    ("afternoon<time-of-day> o'clock", -1.8971199848858813),-                                    ("hourminute", -1.8971199848858813),+                                     -1.5141277326297755),+                                    ("afternoon<time-of-day> o'clock", -2.120263536200091),+                                    ("hourminute", -1.5141277326297755),                                     ("afternoon<integer> (latent time-of-day)",-                                     -1.742969305058623)],-                               n = 16}}),+                                     -1.9661128563728327)],+                               n = 21}}),        ("<integer> <unit-of-duration>",         Classifier{okData =-                     ClassData{prior = -infinity, unseen = -2.833213344056216,+                     ClassData{prior = -infinity, unseen = -3.044522437723423,                                likelihoods = HashMap.fromList [], n = 0},                    koData =-                     ClassData{prior = 0.0, unseen = -5.877735781779639,+                     ClassData{prior = 0.0, unseen = -5.905361848054571,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.6560549059838294),-                                    ("integer (0..10)month (grain)", -2.068268241081711),-                                    ("integer (0..10)hour (grain)", -2.8304082931286074),-                                    ("second", -3.235873401236772),-                                    ("integer (0..10)day (grain)", -3.0417173867958143),-                                    ("integer (0..10)year (grain)", -3.572345637857985),-                                    ("integer (numeric)year (grain)", -3.1668805297498204),-                                    ("integer (0..10)second (grain)", -3.235873401236772),-                                    ("day", -3.0417173867958143), ("year", -2.6968769005040847),-                                    ("integer (0..10)minute (grain)", -3.0417173867958143),-                                    ("hour", -2.8304082931286074),-                                    ("integer (0..10)week (grain)", -2.6560549059838294),-                                    ("month", -1.7973932869463112),-                                    ("integer (numeric)month (grain)", -3.1668805297498204),-                                    ("minute", -3.0417173867958143)],-                               n = 170}}),-       ("integer (11..19)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                                   [("week", -2.6837575085331653),+                                    ("integer (0..10)month (grain)", -2.535337503414892),+                                    ("integer (0..10)hour (grain)", -3.06941998934515),+                                    ("<number>\20010/\20491week (grain)", -3.5047380606029956),+                                    ("second", -3.2635760037861075),+                                    ("integer (0..10)day (grain)", -3.06941998934515),+                                    ("number suffix: \21313month (grain)", -4.293195420967266),+                                    ("integer (0..10)year (grain)", -3.6000482404073204),+                                    ("<number>\20010/\20491month (grain)", -3.130044611161585),+                                    ("integer (numeric)year (grain)", -3.1945831322991562),+                                    ("integer (0..10)second (grain)", -3.2635760037861075),+                                    ("day", -3.06941998934515), ("year", -2.7245795030534206),+                                    ("integer (0..10)minute (grain)", -3.06941998934515),+                                    ("hour", -2.8581108956779433),+                                    ("integer (0..10)week (grain)", -3.1945831322991562),+                                    ("month", -1.7754989483562746),+                                    ("<number>\20010/\20491hour (grain)", -4.293195420967266),+                                    ("integer (numeric)month (grain)", -3.1945831322991562),+                                    ("minute", -3.06941998934515)],+                               n = 173}}),        ("<time-of-day> am|pm",         Classifier{okData =                      ClassData{prior = -0.4700036292457356, unseen = -2.70805020110221,@@ -575,21 +562,25 @@                                n = 3}}),        ("relative minutes after|past <integer> (hour-of-day)",         Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (11..19)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5},+                                   [("<integer> (latent time-of-day)integer with consecutive unit modifiers",+                                     -0.7801585575495751),+                                    ("hour", -0.7801585575495751)],+                               n = 10},                    koData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (0..10)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5}}),+                                   [("<integer> (latent time-of-day)number suffix: \21313",+                                     -1.3862943611198906),+                                    ("<integer> (latent time-of-day)integer (0..10)",+                                     -1.3862943611198906),+                                    ("hour", -0.7801585575495751)],+                               n = 10}}),        ("army's day",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,@@ -599,21 +590,31 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect by \",\"",         Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -0.2231435513142097, unseen = -4.110873864173311,                                likelihoods =                                  HashMap.fromList-                                   [("Sunday<named-month> <day-of-month>", -0.7576857016975165),-                                    ("dayday", -0.7576857016975165)],-                               n = 14},+                                   [("Sunday<named-month> <day-of-month>", -0.7270487322356266),+                                    ("dayday", -0.7270487322356266)],+                               n = 28},                    koData =-                     ClassData{prior = -1.0986122886681098,+                     ClassData{prior = -1.6094379124341003,                                unseen = -2.9444389791664407,                                likelihoods =                                  HashMap.fromList                                    [("daymonth", -0.8109302162163288),                                     ("SundayFebruary", -0.8109302162163288)],                                n = 7}}),+       ("integer with consecutive unit modifiers",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("number suffix: \21313integer (0..10)", -0.6931471805599453),+                                    ("integer (0..10)integer (0..10)", -0.6931471805599453)],+                               n = 26},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("second (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.70805020110221,@@ -637,23 +638,21 @@                                n = 20}}),        ("last <time>",         Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -1.2286654169163076,+                               unseen = -3.4657359027997265,                                likelihoods =                                  HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],+                                   [("day", -0.8690378470236094), ("Sunday", -1.3545456628053103),+                                    ("Tuesday", -1.6422277352570913)],                                n = 12},                    koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,+                     ClassData{prior = -0.3462762367178338, unseen = -4.189654742026425,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),+                                   [("<integer> (latent time-of-day)", -0.916290731874155),+                                    ("month (numeric with month symbol)", -2.5649493574615367),+                                    ("hour", -0.916290731874155), ("month", -2.5649493574615367)],+                               n = 29}}),        ("March",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -670,22 +669,22 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next <time>",         Classifier{okData =-                     ClassData{prior = -1.5260563034950494, unseen = -2.890371757896165,+                     ClassData{prior = -1.6486586255873816, unseen = -2.890371757896165,                                likelihoods =                                  HashMap.fromList                                    [("day", -1.041453874828161), ("Tuesday", -1.041453874828161)],                                n = 5},                    koData =-                     ClassData{prior = -0.24512245803298496,-                               unseen = -3.784189633918261,+                     ClassData{prior = -0.21357410029805904,+                               unseen = -3.912023005428146,                                likelihoods =                                  HashMap.fromList-                                   [("Wednesday", -1.9694406464655074),-                                    ("<integer> (latent time-of-day)", -1.1962507582320256),-                                    ("month (numeric with month symbol)", -3.068052935133617),-                                    ("day", -1.9694406464655074), ("hour", -1.1962507582320256),-                                    ("month", -3.068052935133617)],-                               n = 18}}),+                                   [("Wednesday", -2.1000608288825715),+                                    ("<integer> (latent time-of-day)", -1.1192315758708455),+                                    ("month (numeric with month symbol)", -3.1986731175506815),+                                    ("day", -2.1000608288825715), ("hour", -1.1192315758708455),+                                    ("month", -3.1986731175506815)],+                               n = 21}}),        ("last <cycle>",         Classifier{okData =                      ClassData{prior = -0.8472978603872037,@@ -722,24 +721,27 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.59511985013459,+                     ClassData{prior = 0.0, unseen = -4.61512051684126,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.3877429013343523),-                                    ("integer (0..10)month (grain)", -2.793208009442517),-                                    ("integer (0..10)hour (grain)", -2.3877429013343523),-                                    ("second", -2.793208009442517),-                                    ("integer (0..10)day (grain)", -2.505525936990736),-                                    ("integer (0..10)year (grain)", -3.1986731175506815),-                                    ("integer (0..10)second (grain)", -2.793208009442517),-                                    ("day", -2.505525936990736), ("year", -3.1986731175506815),-                                    ("integer (0..10)minute (grain)", -2.639057329615259),-                                    ("hour", -2.3877429013343523),-                                    ("integer (0..10)week (grain)", -2.3877429013343523),-                                    ("month", -2.793208009442517), ("minute", -2.639057329615259)],+                                   [("week", -2.4079456086518722),+                                    ("integer (0..10)hour (grain)", -2.659260036932778),+                                    ("<number>\20010/\20491week (grain)", -2.995732273553991),+                                    ("second", -2.8134107167600364),+                                    ("integer (0..10)day (grain)", -2.5257286443082556),+                                    ("integer (0..10)year (grain)", -3.2188758248682006),+                                    ("<number>\20010/\20491month (grain)", -2.8134107167600364),+                                    ("integer (0..10)second (grain)", -2.8134107167600364),+                                    ("day", -2.5257286443082556), ("year", -3.2188758248682006),+                                    ("integer (0..10)minute (grain)", -2.659260036932778),+                                    ("hour", -2.4079456086518722),+                                    ("integer (0..10)week (grain)", -2.995732273553991),+                                    ("month", -2.8134107167600364),+                                    ("<number>\20010/\20491hour (grain)", -3.506557897319982),+                                    ("minute", -2.659260036932778)],                                n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("Tuesday",         Classifier{okData =@@ -757,79 +759,95 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<named-month> <day-of-month>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.8283137373023015,+                     ClassData{prior = 0.0, unseen = -5.231108616854587,                                likelihoods =                                  HashMap.fromList-                                   [("Marchinteger (0..10)", -3.028522096376982),-                                    ("Februaryinteger (11..19)", -2.6230569882688175),-                                    ("month (numeric with month symbol)integer (11..19)",-                                     -2.6230569882688175),-                                    ("Marchinteger (numeric)", -3.721669276936927),+                                   [("month (numeric with month symbol)integer with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Marchinteger (0..10)", -3.4339872044851463),+                                    ("Marchinteger (numeric)", -4.127134385045092),                                     ("month (numeric with month symbol)integer (numeric)",-                                     -2.1122313645028266),-                                    ("Februaryinteger (0..10)", -2.740840023925201),-                                    ("month", -0.7427441216993174),+                                     -2.517696472610991),+                                    ("Februaryinteger (0..10)", -3.146305132033365),+                                    ("month (numeric with month symbol)number suffix: \21313",+                                     -3.146305132033365),+                                    ("month", -0.7371103039810614),                                     ("month (numeric with month symbol)integer (0..10)",-                                     -2.1122313645028266)],-                               n = 58},+                                     -2.517696472610991),+                                    ("Februaryinteger with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Februarynumber suffix: \21313", -3.146305132033365)],+                               n = 88},                    koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (0..10)",         Classifier{okData =-                     ClassData{prior = -0.4540728071735412, unseen = -5.170483995038151,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 174},+                     ClassData{prior = -0.38372512147175847,+                               unseen = -5.236441962829949,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 186},                    koData =-                     ClassData{prior = -1.007957920399979, unseen = -4.624972813284271,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 100}}),+                     ClassData{prior = -1.143563676530376, unseen = -4.48863636973214,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 87}}),        ("last n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.61512051684126,+                     ClassData{prior = 0.0, unseen = -4.605170185988091,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.995732273553991),-                                    ("integer (0..10)month (grain)", -2.120263536200091),-                                    ("integer (0..10)hour (grain)", -2.4079456086518722),-                                    ("second", -2.659260036932778),-                                    ("integer (0..10)day (grain)", -2.995732273553991),-                                    ("integer (0..10)year (grain)", -3.506557897319982),-                                    ("integer (0..10)second (grain)", -2.659260036932778),-                                    ("day", -2.995732273553991), ("year", -3.506557897319982),-                                    ("integer (0..10)minute (grain)", -2.4079456086518722),-                                    ("hour", -2.4079456086518722),-                                    ("integer (0..10)week (grain)", -2.995732273553991),-                                    ("month", -2.120263536200091), ("minute", -2.4079456086518722)],-                               n = 43},+                                   [("week", -2.9856819377004897),+                                    ("integer (0..10)month (grain)", -3.4965075614664802),+                                    ("integer (0..10)hour (grain)", -2.3978952727983707),+                                    ("second", -2.649209701079277),+                                    ("integer (0..10)day (grain)", -2.9856819377004897),+                                    ("integer (0..10)year (grain)", -3.4965075614664802),+                                    ("<number>\20010/\20491month (grain)", -2.3978952727983707),+                                    ("integer (0..10)second (grain)", -2.649209701079277),+                                    ("day", -2.9856819377004897), ("year", -3.4965075614664802),+                                    ("integer (0..10)minute (grain)", -2.3978952727983707),+                                    ("hour", -2.3978952727983707),+                                    ("integer (0..10)week (grain)", -2.9856819377004897),+                                    ("month", -2.1972245773362196),+                                    ("minute", -2.3978952727983707)],+                               n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.772588722239781,                                likelihoods = HashMap.fromList [], n = 0}}),        ("ordinal (digits)",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 4},+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("<number>\20010/\20491", -0.1823215567939546)],+                               n = 4},                    koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("integer (0..10)", -0.1823215567939546)],+                               n = 4}}),        ("n <cycle> last",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.007333185232471,+                     ClassData{prior = 0.0, unseen = -4.04305126783455,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.379546134130174),-                                    ("integer (0..10)month (grain)", -2.890371757896165),-                                    ("integer (0..10)hour (grain)", -2.379546134130174),-                                    ("second", -2.890371757896165),-                                    ("integer (0..10)day (grain)", -2.379546134130174),-                                    ("integer (0..10)year (grain)", -2.890371757896165),-                                    ("integer (0..10)second (grain)", -2.890371757896165),-                                    ("day", -2.379546134130174), ("year", -2.890371757896165),-                                    ("integer (0..10)minute (grain)", -2.890371757896165),-                                    ("hour", -2.379546134130174),-                                    ("integer (0..10)week (grain)", -2.379546134130174),-                                    ("month", -2.890371757896165), ("minute", -2.890371757896165)],+                                   [("week", -2.4159137783010487),+                                    ("integer (0..10)hour (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491week (grain)", -2.9267394020670396),+                                    ("second", -2.9267394020670396),+                                    ("integer (0..10)day (grain)", -2.4159137783010487),+                                    ("integer (0..10)year (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491month (grain)", -2.9267394020670396),+                                    ("integer (0..10)second (grain)", -2.9267394020670396),+                                    ("day", -2.4159137783010487), ("year", -2.9267394020670396),+                                    ("integer (0..10)minute (grain)", -2.9267394020670396),+                                    ("hour", -2.4159137783010487),+                                    ("integer (0..10)week (grain)", -2.9267394020670396),+                                    ("month", -2.9267394020670396),+                                    ("<number>\20010/\20491hour (grain)", -2.9267394020670396),+                                    ("minute", -2.9267394020670396)],                                n = 20},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("morning",         Classifier{okData =@@ -864,6 +882,13 @@         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<number>\20010/\20491",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4339872044851463,+                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 29},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),
Duckling/Ranking/Classifiers/ZH_TW.hs view
@@ -95,10 +95,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (grain)",         Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                     ClassData{prior = -1.0076405104623831,+                               unseen = -3.2188758248682006,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},                    koData =-                     ClassData{prior = -0.4700036292457356,+                     ClassData{prior = -0.45425527227759643,                                unseen = -3.7376696182833684,                                likelihoods = HashMap.fromList [("", 0.0)], n = 40}}),        ("<time-of-day> o'clock",@@ -124,6 +125,13 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),+       ("number suffix: \21313",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.258096538021482,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("Wednesday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.9444389791664407,@@ -140,44 +148,43 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.4367176516122688, unseen = -4.624972813284271,+                     ClassData{prior = -0.3519764231571781, unseen = -4.983606621708336,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -3.5165082281731497),+                                   [("children's day<part-of-day> <dim time>", -3.367295829986474),                                     ("year (numeric with year symbol)<named-month> <day-of-month>",-                                     -1.5705980791178364),-                                    ("dayday", -1.9070703157390494),-                                    ("hourhour", -3.005682604407159),-                                    ("hourminute", -3.5165082281731497),+                                     -1.7578579175523736),+                                    ("dayday", -1.6094379124341003),+                                    ("hourhour", -3.367295829986474),+                                    ("hourminute", -3.367295829986474),                                     ("absorption of , after named day<named-month> <day-of-month>",-                                     -1.9070703157390494),-                                    ("dayminute", -3.5165082281731497),-                                    ("tonight<time-of-day> o'clock", -3.005682604407159),+                                     -1.6094379124341003),+                                    ("dayminute", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -3.367295829986474),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.5165082281731497),-                                    ("yearday", -1.5705980791178364)],-                               n = 42},+                                     -3.367295829986474),+                                    ("yearday", -1.7578579175523736)],+                               n = 64},                    koData =-                     ClassData{prior = -1.0388930539664873,-                               unseen = -4.1588830833596715,+                     ClassData{prior = -1.215022640512521, unseen = -4.276666119016055,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -2.1972245773362196),-                                    ("dayhour", -2.5336968139574325),-                                    ("daymonth", -2.063693184711697),-                                    ("year (numeric with year symbol)February", -3.044522437723423),+                                   [("children's day<part-of-day> <dim time>", -2.065455299705096),+                                    ("dayhour", -2.653241964607215),+                                    ("daymonth", -2.1832383353614793),+                                    ("year (numeric with year symbol)February", -3.164067588373206),                                     ("<dim time> <part-of-day><time-of-day> o'clock",-                                     -3.044522437723423),-                                    ("hourhour", -3.044522437723423),-                                    ("year (numeric with year symbol)March", -2.5336968139574325),-                                    ("hourminute", -3.044522437723423),-                                    ("yearmonth", -2.1972245773362196),-                                    ("dayminute", -3.044522437723423),+                                     -3.164067588373206),+                                    ("hourhour", -3.164067588373206),+                                    ("year (numeric with year symbol)March", -2.653241964607215),+                                    ("hourminute", -2.653241964607215),+                                    ("yearmonth", -2.316769727986002),+                                    ("dayminute", -2.653241964607215),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.044522437723423),+                                     -2.653241964607215),                                     ("absorption of , after named dayFebruary",-                                     -2.063693184711697)],-                               n = 23}}),+                                     -2.1832383353614793)],+                               n = 27}}),        ("year (grain)",         Classifier{okData =                      ClassData{prior = -0.8209805520698302,@@ -193,25 +200,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("last tuesday, last july",-        Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],-                               n = 12},-                   koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),        ("next <cycle>",         Classifier{okData =                      ClassData{prior = -0.7472144018302211,@@ -301,48 +289,50 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<integer> (latent time-of-day)",         Classifier{okData =-                     ClassData{prior = -1.3217558399823195,-                               unseen = -2.9444389791664407,+                     ClassData{prior = -1.4170660197866443, unseen = -2.995732273553991,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.2809338454620642),-                                    ("integer (0..10)", -0.325422400434628)],+                                   [("integer (numeric)", -1.3350010667323402),+                                    ("integer (0..10)", -0.3794896217049037)],                                n = 16},                    koData =-                     ClassData{prior = -0.3101549283038396,-                               unseen = -3.8501476017100584,+                     ClassData{prior = -0.2776317365982795,+                               unseen = -3.9889840465642745,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -2.2192034840549946),-                                    ("integer (0..10)", -0.11506932978478723)],-                               n = 44}}),+                                   [("integer (numeric)", -2.3608540011180215),+                                    ("integer (0..10)", -0.28141245943818544),+                                    ("<number>\20010/\20491", -1.890850371872286)],+                               n = 50}}),        ("nth <time> of <time>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                     ClassData{prior = 0.0, unseen = -3.332204510175204,                                likelihoods =                                  HashMap.fromList-                                   [("Octoberordinal (digits)Monday", -1.3350010667323402),-                                    ("monthday", -0.7472144018302211),+                                   [("Octoberordinal (digits)Monday", -1.6863989535702288),+                                    ("monthday", -0.7308875085427924),                                     ("month (numeric with month symbol)ordinal (digits)Monday",-                                     -1.3350010667323402)],-                               n = 8},+                                     -1.0986122886681098)],+                               n = 12},                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (numeric with month symbol)",         Classifier{okData =-                     ClassData{prior = -0.13976194237515874,-                               unseen = -3.7612001156935624,+                     ClassData{prior = -0.10763066419236544,+                               unseen = -3.891820298110627,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.0296194171811581),-                                    ("integer (0..10)", -0.4418327522790392)],-                               n = 40},+                                   [("integer (numeric)", -1.1631508098056809),+                                    ("number suffix: \21313", -2.2617630984737906),+                                    ("integer (0..10)", -0.5753641449035618)],+                               n = 44},                    koData =-                     ClassData{prior = -2.03688192726104, unseen = -2.1972245773362196,+                     ClassData{prior = -2.2823823856765264,+                               unseen = -2.3025850929940455,                                likelihoods =-                                 HashMap.fromList [("integer (0..10)", -0.13353139262452263)],-                               n = 6}}),+                                 HashMap.fromList [("<number>\20010/\20491", -0.40546510810816444)],+                               n = 5}}),        ("week (grain)",         Classifier{okData =                      ClassData{prior = -0.8434293836092833,@@ -451,12 +441,11 @@                                n = 20}}),        ("February",         Classifier{okData =-                     ClassData{prior = -6.453852113757118e-2,-                               unseen = -2.833213344056216,+                     ClassData{prior = 0.0, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [("", 0.0)], n = 15},                    koData =-                     ClassData{prior = -2.772588722239781, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("this <cycle>",         Classifier{okData =                      ClassData{prior = -1.0185695809945732,@@ -485,77 +474,75 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<dim time> <part-of-day>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.9889840465642745,+                     ClassData{prior = 0.0, unseen = -4.248495242049359,                                likelihoods =                                  HashMap.fromList-                                   [("dayhour", -0.7514160886839211),-                                    ("national dayevening|night", -2.871679624884012),-                                    ("<named-month> <day-of-month>morning", -1.405342556090585),-                                    ("children's dayafternoon", -2.871679624884012),-                                    ("Mondaymorning", -1.7730673362159024)],-                               n = 24},+                                   [("dayhour", -0.7375989431307791),+                                    ("national dayevening|night", -3.1354942159291497),+                                    ("<named-month> <day-of-month>morning", -1.1895840668738362),+                                    ("children's dayafternoon", -3.1354942159291497),+                                    ("Mondaymorning", -2.03688192726104)],+                               n = 32},                    koData =                      ClassData{prior = -infinity, unseen = -1.791759469228055,                                likelihoods = HashMap.fromList [], n = 0}}),        ("<part-of-day> <dim time>",         Classifier{okData =-                     ClassData{prior = -0.587786664902119, unseen = -3.891820298110627,+                     ClassData{prior = -0.6097655716208943, unseen = -4.07753744390572,                                likelihoods =                                  HashMap.fromList-                                   [("tonight<integer> (latent time-of-day)", -2.2617630984737906),-                                    ("hourhour", -1.1631508098056809),+                                   [("tonight<integer> (latent time-of-day)", -2.451005098112319),+                                    ("hourhour", -1.3523928094442093),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -2.0794415416798357),-                                    ("afternoon<time-of-day> o'clock", -2.4849066497880004),-                                    ("hourminute", -1.9252908618525775),+                                     -1.6625477377480489),+                                    ("afternoon<time-of-day> o'clock", -2.6741486494265287),+                                    ("hourminute", -1.575536360758419),                                     ("afternoon<integer> (latent time-of-day)",-                                     -2.4849066497880004),-                                    ("afternoonhh:mm (time-of-day)", -3.1780538303479458),-                                    ("tonight<time-of-day> o'clock", -2.2617630984737906)],-                               n = 20},+                                     -2.6741486494265287),+                                    ("afternoonhh:mm (time-of-day)", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -2.451005098112319)],+                               n = 25},                    koData =-                     ClassData{prior = -0.8109302162163288, unseen = -3.713572066704308,+                     ClassData{prior = -0.7841189587656721,+                               unseen = -3.9318256327243257,                                likelihoods =                                  HashMap.fromList-                                   [("hourhour", -1.2039728043259361),+                                   [("hourhour", -1.4271163556401458),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -1.8971199848858813),-                                    ("afternoon<time-of-day> o'clock", -1.8971199848858813),-                                    ("hourminute", -1.8971199848858813),+                                     -1.5141277326297755),+                                    ("afternoon<time-of-day> o'clock", -2.120263536200091),+                                    ("hourminute", -1.5141277326297755),                                     ("afternoon<integer> (latent time-of-day)",-                                     -1.742969305058623)],-                               n = 16}}),+                                     -1.9661128563728327)],+                               n = 21}}),        ("<integer> <unit-of-duration>",         Classifier{okData =-                     ClassData{prior = -infinity, unseen = -2.833213344056216,+                     ClassData{prior = -infinity, unseen = -3.044522437723423,                                likelihoods = HashMap.fromList [], n = 0},                    koData =-                     ClassData{prior = 0.0, unseen = -5.877735781779639,+                     ClassData{prior = 0.0, unseen = -5.905361848054571,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.6560549059838294),-                                    ("integer (0..10)month (grain)", -2.068268241081711),-                                    ("integer (0..10)hour (grain)", -2.8304082931286074),-                                    ("second", -3.235873401236772),-                                    ("integer (0..10)day (grain)", -3.0417173867958143),-                                    ("integer (0..10)year (grain)", -3.572345637857985),-                                    ("integer (numeric)year (grain)", -3.1668805297498204),-                                    ("integer (0..10)second (grain)", -3.235873401236772),-                                    ("day", -3.0417173867958143), ("year", -2.6968769005040847),-                                    ("integer (0..10)minute (grain)", -3.0417173867958143),-                                    ("hour", -2.8304082931286074),-                                    ("integer (0..10)week (grain)", -2.6560549059838294),-                                    ("month", -1.7973932869463112),-                                    ("integer (numeric)month (grain)", -3.1668805297498204),-                                    ("minute", -3.0417173867958143)],-                               n = 170}}),-       ("integer (11..19)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                                   [("week", -2.6837575085331653),+                                    ("integer (0..10)month (grain)", -2.535337503414892),+                                    ("integer (0..10)hour (grain)", -3.06941998934515),+                                    ("<number>\20010/\20491week (grain)", -3.5047380606029956),+                                    ("second", -3.2635760037861075),+                                    ("integer (0..10)day (grain)", -3.06941998934515),+                                    ("number suffix: \21313month (grain)", -4.293195420967266),+                                    ("integer (0..10)year (grain)", -3.6000482404073204),+                                    ("<number>\20010/\20491month (grain)", -3.130044611161585),+                                    ("integer (numeric)year (grain)", -3.1945831322991562),+                                    ("integer (0..10)second (grain)", -3.2635760037861075),+                                    ("day", -3.06941998934515), ("year", -2.7245795030534206),+                                    ("integer (0..10)minute (grain)", -3.06941998934515),+                                    ("hour", -2.8581108956779433),+                                    ("integer (0..10)week (grain)", -3.1945831322991562),+                                    ("month", -1.7754989483562746),+                                    ("<number>\20010/\20491hour (grain)", -4.293195420967266),+                                    ("integer (numeric)month (grain)", -3.1945831322991562),+                                    ("minute", -3.06941998934515)],+                               n = 173}}),        ("<time-of-day> am|pm",         Classifier{okData =                      ClassData{prior = -0.4700036292457356, unseen = -2.70805020110221,@@ -575,21 +562,25 @@                                n = 3}}),        ("relative minutes after|past <integer> (hour-of-day)",         Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (11..19)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5},+                                   [("<integer> (latent time-of-day)integer with consecutive unit modifiers",+                                     -0.7801585575495751),+                                    ("hour", -0.7801585575495751)],+                               n = 10},                    koData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (0..10)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5}}),+                                   [("<integer> (latent time-of-day)number suffix: \21313",+                                     -1.3862943611198906),+                                    ("<integer> (latent time-of-day)integer (0..10)",+                                     -1.3862943611198906),+                                    ("hour", -0.7801585575495751)],+                               n = 10}}),        ("army's day",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,@@ -599,21 +590,31 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect by \",\"",         Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -0.2231435513142097, unseen = -4.110873864173311,                                likelihoods =                                  HashMap.fromList-                                   [("Sunday<named-month> <day-of-month>", -0.7576857016975165),-                                    ("dayday", -0.7576857016975165)],-                               n = 14},+                                   [("Sunday<named-month> <day-of-month>", -0.7270487322356266),+                                    ("dayday", -0.7270487322356266)],+                               n = 28},                    koData =-                     ClassData{prior = -1.0986122886681098,+                     ClassData{prior = -1.6094379124341003,                                unseen = -2.9444389791664407,                                likelihoods =                                  HashMap.fromList                                    [("daymonth", -0.8109302162163288),                                     ("SundayFebruary", -0.8109302162163288)],                                n = 7}}),+       ("integer with consecutive unit modifiers",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("number suffix: \21313integer (0..10)", -0.6931471805599453),+                                    ("integer (0..10)integer (0..10)", -0.6931471805599453)],+                               n = 26},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("second (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.70805020110221,@@ -637,23 +638,21 @@                                n = 20}}),        ("last <time>",         Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -1.2286654169163076,+                               unseen = -3.4657359027997265,                                likelihoods =                                  HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],+                                   [("day", -0.8690378470236094), ("Sunday", -1.3545456628053103),+                                    ("Tuesday", -1.6422277352570913)],                                n = 12},                    koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,+                     ClassData{prior = -0.3462762367178338, unseen = -4.189654742026425,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),+                                   [("<integer> (latent time-of-day)", -0.916290731874155),+                                    ("month (numeric with month symbol)", -2.5649493574615367),+                                    ("hour", -0.916290731874155), ("month", -2.5649493574615367)],+                               n = 29}}),        ("March",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -670,22 +669,22 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next <time>",         Classifier{okData =-                     ClassData{prior = -1.5260563034950494, unseen = -2.890371757896165,+                     ClassData{prior = -1.6486586255873816, unseen = -2.890371757896165,                                likelihoods =                                  HashMap.fromList                                    [("day", -1.041453874828161), ("Tuesday", -1.041453874828161)],                                n = 5},                    koData =-                     ClassData{prior = -0.24512245803298496,-                               unseen = -3.784189633918261,+                     ClassData{prior = -0.21357410029805904,+                               unseen = -3.912023005428146,                                likelihoods =                                  HashMap.fromList-                                   [("Wednesday", -1.9694406464655074),-                                    ("<integer> (latent time-of-day)", -1.1962507582320256),-                                    ("month (numeric with month symbol)", -3.068052935133617),-                                    ("day", -1.9694406464655074), ("hour", -1.1962507582320256),-                                    ("month", -3.068052935133617)],-                               n = 18}}),+                                   [("Wednesday", -2.1000608288825715),+                                    ("<integer> (latent time-of-day)", -1.1192315758708455),+                                    ("month (numeric with month symbol)", -3.1986731175506815),+                                    ("day", -2.1000608288825715), ("hour", -1.1192315758708455),+                                    ("month", -3.1986731175506815)],+                               n = 21}}),        ("last <cycle>",         Classifier{okData =                      ClassData{prior = -0.8472978603872037,@@ -722,24 +721,27 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.59511985013459,+                     ClassData{prior = 0.0, unseen = -4.61512051684126,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.3877429013343523),-                                    ("integer (0..10)month (grain)", -2.793208009442517),-                                    ("integer (0..10)hour (grain)", -2.3877429013343523),-                                    ("second", -2.793208009442517),-                                    ("integer (0..10)day (grain)", -2.505525936990736),-                                    ("integer (0..10)year (grain)", -3.1986731175506815),-                                    ("integer (0..10)second (grain)", -2.793208009442517),-                                    ("day", -2.505525936990736), ("year", -3.1986731175506815),-                                    ("integer (0..10)minute (grain)", -2.639057329615259),-                                    ("hour", -2.3877429013343523),-                                    ("integer (0..10)week (grain)", -2.3877429013343523),-                                    ("month", -2.793208009442517), ("minute", -2.639057329615259)],+                                   [("week", -2.4079456086518722),+                                    ("integer (0..10)hour (grain)", -2.659260036932778),+                                    ("<number>\20010/\20491week (grain)", -2.995732273553991),+                                    ("second", -2.8134107167600364),+                                    ("integer (0..10)day (grain)", -2.5257286443082556),+                                    ("integer (0..10)year (grain)", -3.2188758248682006),+                                    ("<number>\20010/\20491month (grain)", -2.8134107167600364),+                                    ("integer (0..10)second (grain)", -2.8134107167600364),+                                    ("day", -2.5257286443082556), ("year", -3.2188758248682006),+                                    ("integer (0..10)minute (grain)", -2.659260036932778),+                                    ("hour", -2.4079456086518722),+                                    ("integer (0..10)week (grain)", -2.995732273553991),+                                    ("month", -2.8134107167600364),+                                    ("<number>\20010/\20491hour (grain)", -3.506557897319982),+                                    ("minute", -2.659260036932778)],                                n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("Tuesday",         Classifier{okData =@@ -757,79 +759,95 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<named-month> <day-of-month>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.8283137373023015,+                     ClassData{prior = 0.0, unseen = -5.231108616854587,                                likelihoods =                                  HashMap.fromList-                                   [("Marchinteger (0..10)", -3.028522096376982),-                                    ("Februaryinteger (11..19)", -2.6230569882688175),-                                    ("month (numeric with month symbol)integer (11..19)",-                                     -2.6230569882688175),-                                    ("Marchinteger (numeric)", -3.721669276936927),+                                   [("month (numeric with month symbol)integer with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Marchinteger (0..10)", -3.4339872044851463),+                                    ("Marchinteger (numeric)", -4.127134385045092),                                     ("month (numeric with month symbol)integer (numeric)",-                                     -2.1122313645028266),-                                    ("Februaryinteger (0..10)", -2.740840023925201),-                                    ("month", -0.7427441216993174),+                                     -2.517696472610991),+                                    ("Februaryinteger (0..10)", -3.146305132033365),+                                    ("month (numeric with month symbol)number suffix: \21313",+                                     -3.146305132033365),+                                    ("month", -0.7371103039810614),                                     ("month (numeric with month symbol)integer (0..10)",-                                     -2.1122313645028266)],-                               n = 58},+                                     -2.517696472610991),+                                    ("Februaryinteger with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Februarynumber suffix: \21313", -3.146305132033365)],+                               n = 88},                    koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (0..10)",         Classifier{okData =-                     ClassData{prior = -0.4540728071735412, unseen = -5.170483995038151,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 174},+                     ClassData{prior = -0.38372512147175847,+                               unseen = -5.236441962829949,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 186},                    koData =-                     ClassData{prior = -1.007957920399979, unseen = -4.624972813284271,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 100}}),+                     ClassData{prior = -1.143563676530376, unseen = -4.48863636973214,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 87}}),        ("last n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.61512051684126,+                     ClassData{prior = 0.0, unseen = -4.605170185988091,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.995732273553991),-                                    ("integer (0..10)month (grain)", -2.120263536200091),-                                    ("integer (0..10)hour (grain)", -2.4079456086518722),-                                    ("second", -2.659260036932778),-                                    ("integer (0..10)day (grain)", -2.995732273553991),-                                    ("integer (0..10)year (grain)", -3.506557897319982),-                                    ("integer (0..10)second (grain)", -2.659260036932778),-                                    ("day", -2.995732273553991), ("year", -3.506557897319982),-                                    ("integer (0..10)minute (grain)", -2.4079456086518722),-                                    ("hour", -2.4079456086518722),-                                    ("integer (0..10)week (grain)", -2.995732273553991),-                                    ("month", -2.120263536200091), ("minute", -2.4079456086518722)],-                               n = 43},+                                   [("week", -2.9856819377004897),+                                    ("integer (0..10)month (grain)", -3.4965075614664802),+                                    ("integer (0..10)hour (grain)", -2.3978952727983707),+                                    ("second", -2.649209701079277),+                                    ("integer (0..10)day (grain)", -2.9856819377004897),+                                    ("integer (0..10)year (grain)", -3.4965075614664802),+                                    ("<number>\20010/\20491month (grain)", -2.3978952727983707),+                                    ("integer (0..10)second (grain)", -2.649209701079277),+                                    ("day", -2.9856819377004897), ("year", -3.4965075614664802),+                                    ("integer (0..10)minute (grain)", -2.3978952727983707),+                                    ("hour", -2.3978952727983707),+                                    ("integer (0..10)week (grain)", -2.9856819377004897),+                                    ("month", -2.1972245773362196),+                                    ("minute", -2.3978952727983707)],+                               n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.772588722239781,                                likelihoods = HashMap.fromList [], n = 0}}),        ("ordinal (digits)",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 4},+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("<number>\20010/\20491", -0.1823215567939546)],+                               n = 4},                    koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("integer (0..10)", -0.1823215567939546)],+                               n = 4}}),        ("n <cycle> last",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.007333185232471,+                     ClassData{prior = 0.0, unseen = -4.04305126783455,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.379546134130174),-                                    ("integer (0..10)month (grain)", -2.890371757896165),-                                    ("integer (0..10)hour (grain)", -2.379546134130174),-                                    ("second", -2.890371757896165),-                                    ("integer (0..10)day (grain)", -2.379546134130174),-                                    ("integer (0..10)year (grain)", -2.890371757896165),-                                    ("integer (0..10)second (grain)", -2.890371757896165),-                                    ("day", -2.379546134130174), ("year", -2.890371757896165),-                                    ("integer (0..10)minute (grain)", -2.890371757896165),-                                    ("hour", -2.379546134130174),-                                    ("integer (0..10)week (grain)", -2.379546134130174),-                                    ("month", -2.890371757896165), ("minute", -2.890371757896165)],+                                   [("week", -2.4159137783010487),+                                    ("integer (0..10)hour (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491week (grain)", -2.9267394020670396),+                                    ("second", -2.9267394020670396),+                                    ("integer (0..10)day (grain)", -2.4159137783010487),+                                    ("integer (0..10)year (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491month (grain)", -2.9267394020670396),+                                    ("integer (0..10)second (grain)", -2.9267394020670396),+                                    ("day", -2.4159137783010487), ("year", -2.9267394020670396),+                                    ("integer (0..10)minute (grain)", -2.9267394020670396),+                                    ("hour", -2.4159137783010487),+                                    ("integer (0..10)week (grain)", -2.9267394020670396),+                                    ("month", -2.9267394020670396),+                                    ("<number>\20010/\20491hour (grain)", -2.9267394020670396),+                                    ("minute", -2.9267394020670396)],                                n = 20},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("morning",         Classifier{okData =@@ -864,6 +882,13 @@         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<number>\20010/\20491",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4339872044851463,+                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 29},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),
Duckling/Ranking/Classifiers/ZH_XX.hs view
@@ -95,10 +95,11 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (grain)",         Classifier{okData =-                     ClassData{prior = -0.9808292530117262, unseen = -3.258096538021482,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                     ClassData{prior = -1.0076405104623831,+                               unseen = -3.2188758248682006,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 23},                    koData =-                     ClassData{prior = -0.4700036292457356,+                     ClassData{prior = -0.45425527227759643,                                unseen = -3.7376696182833684,                                likelihoods = HashMap.fromList [("", 0.0)], n = 40}}),        ("<time-of-day> o'clock",@@ -117,6 +118,13 @@                                    [("<integer> (latent time-of-day)", -0.6931471805599453),                                     ("hour", -0.6931471805599453)],                                n = 5}}),+       ("number suffix: \21313",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.258096538021482,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 24},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("Wednesday",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.9444389791664407,@@ -133,44 +141,43 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect",         Classifier{okData =-                     ClassData{prior = -0.4367176516122688, unseen = -4.624972813284271,+                     ClassData{prior = -0.3519764231571781, unseen = -4.983606621708336,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -3.5165082281731497),+                                   [("children's day<part-of-day> <dim time>", -3.367295829986474),                                     ("year (numeric with year symbol)<named-month> <day-of-month>",-                                     -1.5705980791178364),-                                    ("dayday", -1.9070703157390494),-                                    ("hourhour", -3.005682604407159),-                                    ("hourminute", -3.5165082281731497),+                                     -1.7578579175523736),+                                    ("dayday", -1.6094379124341003),+                                    ("hourhour", -3.367295829986474),+                                    ("hourminute", -3.367295829986474),                                     ("absorption of , after named day<named-month> <day-of-month>",-                                     -1.9070703157390494),-                                    ("dayminute", -3.5165082281731497),-                                    ("tonight<time-of-day> o'clock", -3.005682604407159),+                                     -1.6094379124341003),+                                    ("dayminute", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -3.367295829986474),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.5165082281731497),-                                    ("yearday", -1.5705980791178364)],-                               n = 42},+                                     -3.367295829986474),+                                    ("yearday", -1.7578579175523736)],+                               n = 64},                    koData =-                     ClassData{prior = -1.0388930539664873,-                               unseen = -4.1588830833596715,+                     ClassData{prior = -1.215022640512521, unseen = -4.276666119016055,                                likelihoods =                                  HashMap.fromList-                                   [("children's day<part-of-day> <dim time>", -2.1972245773362196),-                                    ("dayhour", -2.5336968139574325),-                                    ("daymonth", -2.063693184711697),-                                    ("year (numeric with year symbol)February", -3.044522437723423),+                                   [("children's day<part-of-day> <dim time>", -2.065455299705096),+                                    ("dayhour", -2.653241964607215),+                                    ("daymonth", -2.1832383353614793),+                                    ("year (numeric with year symbol)February", -3.164067588373206),                                     ("<dim time> <part-of-day><time-of-day> o'clock",-                                     -3.044522437723423),-                                    ("hourhour", -3.044522437723423),-                                    ("year (numeric with year symbol)March", -2.5336968139574325),-                                    ("hourminute", -3.044522437723423),-                                    ("yearmonth", -2.1972245773362196),-                                    ("dayminute", -3.044522437723423),+                                     -3.164067588373206),+                                    ("hourhour", -3.164067588373206),+                                    ("year (numeric with year symbol)March", -2.653241964607215),+                                    ("hourminute", -2.653241964607215),+                                    ("yearmonth", -2.316769727986002),+                                    ("dayminute", -2.653241964607215),                                     ("<dim time> <part-of-day>relative minutes after|past <integer> (hour-of-day)",-                                     -3.044522437723423),+                                     -2.653241964607215),                                     ("absorption of , after named dayFebruary",-                                     -2.063693184711697)],-                               n = 23}}),+                                     -2.1832383353614793)],+                               n = 27}}),        ("year (grain)",         Classifier{okData =                      ClassData{prior = -0.8209805520698302,@@ -186,25 +193,6 @@                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),-       ("last tuesday, last july",-        Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,-                               likelihoods =-                                 HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],-                               n = 12},-                   koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,-                               likelihoods =-                                 HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),        ("next <cycle>",         Classifier{okData =                      ClassData{prior = -0.7472144018302211,@@ -287,48 +275,50 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<integer> (latent time-of-day)",         Classifier{okData =-                     ClassData{prior = -1.3217558399823195,-                               unseen = -2.9444389791664407,+                     ClassData{prior = -1.4170660197866443, unseen = -2.995732273553991,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.2809338454620642),-                                    ("integer (0..10)", -0.325422400434628)],+                                   [("integer (numeric)", -1.3350010667323402),+                                    ("integer (0..10)", -0.3794896217049037)],                                n = 16},                    koData =-                     ClassData{prior = -0.3101549283038396,-                               unseen = -3.8501476017100584,+                     ClassData{prior = -0.2776317365982795,+                               unseen = -3.9889840465642745,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -2.2192034840549946),-                                    ("integer (0..10)", -0.11506932978478723)],-                               n = 44}}),+                                   [("integer (numeric)", -2.3608540011180215),+                                    ("integer (0..10)", -0.28141245943818544),+                                    ("<number>\20010/\20491", -1.890850371872286)],+                               n = 50}}),        ("nth <time> of <time>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.995732273553991,+                     ClassData{prior = 0.0, unseen = -3.332204510175204,                                likelihoods =                                  HashMap.fromList-                                   [("Octoberordinal (digits)Monday", -1.3350010667323402),-                                    ("monthday", -0.7472144018302211),+                                   [("Octoberordinal (digits)Monday", -1.6863989535702288),+                                    ("monthday", -0.7308875085427924),                                     ("month (numeric with month symbol)ordinal (digits)Monday",-                                     -1.3350010667323402)],-                               n = 8},+                                     -1.0986122886681098)],+                               n = 12},                    koData =                      ClassData{prior = -infinity, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [], n = 0}}),        ("month (numeric with month symbol)",         Classifier{okData =-                     ClassData{prior = -0.13976194237515874,-                               unseen = -3.7612001156935624,+                     ClassData{prior = -0.10763066419236544,+                               unseen = -3.891820298110627,                                likelihoods =                                  HashMap.fromList-                                   [("integer (numeric)", -1.0296194171811581),-                                    ("integer (0..10)", -0.4418327522790392)],-                               n = 40},+                                   [("integer (numeric)", -1.1631508098056809),+                                    ("number suffix: \21313", -2.2617630984737906),+                                    ("integer (0..10)", -0.5753641449035618)],+                               n = 44},                    koData =-                     ClassData{prior = -2.03688192726104, unseen = -2.1972245773362196,+                     ClassData{prior = -2.2823823856765264,+                               unseen = -2.3025850929940455,                                likelihoods =-                                 HashMap.fromList [("integer (0..10)", -0.13353139262452263)],-                               n = 6}}),+                                 HashMap.fromList [("<number>\20010/\20491", -0.40546510810816444)],+                               n = 5}}),        ("week (grain)",         Classifier{okData =                      ClassData{prior = -0.8434293836092833,@@ -437,12 +427,11 @@                                n = 20}}),        ("February",         Classifier{okData =-                     ClassData{prior = -6.453852113757118e-2,-                               unseen = -2.833213344056216,+                     ClassData{prior = 0.0, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [("", 0.0)], n = 15},                    koData =-                     ClassData{prior = -2.772588722239781, unseen = -1.0986122886681098,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 1}}),+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("this <cycle>",         Classifier{okData =                      ClassData{prior = -1.0185695809945732,@@ -471,76 +460,74 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<dim time> <part-of-day>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -3.891820298110627,+                     ClassData{prior = 0.0, unseen = -4.174387269895637,                                likelihoods =                                  HashMap.fromList-                                   [("dayhour", -0.7357067949787413),-                                    ("<named-month> <day-of-month>morning", -1.3062516534463542),-                                    ("children's dayafternoon", -2.772588722239781),-                                    ("Mondaymorning", -1.6739764335716716)],-                               n = 22},+                                   [("dayhour", -0.7248958788745256),+                                    ("<named-month> <day-of-month>morning", -1.114360645636249),+                                    ("children's dayafternoon", -3.0602707946915624),+                                    ("Mondaymorning", -1.9616585060234524)],+                               n = 30},                    koData =                      ClassData{prior = -infinity, unseen = -1.6094379124341003,                                likelihoods = HashMap.fromList [], n = 0}}),        ("<part-of-day> <dim time>",         Classifier{okData =-                     ClassData{prior = -0.587786664902119, unseen = -3.891820298110627,+                     ClassData{prior = -0.6097655716208943, unseen = -4.07753744390572,                                likelihoods =                                  HashMap.fromList-                                   [("tonight<integer> (latent time-of-day)", -2.2617630984737906),-                                    ("hourhour", -1.1631508098056809),+                                   [("tonight<integer> (latent time-of-day)", -2.451005098112319),+                                    ("hourhour", -1.3523928094442093),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -2.0794415416798357),-                                    ("afternoon<time-of-day> o'clock", -2.4849066497880004),-                                    ("hourminute", -1.9252908618525775),+                                     -1.6625477377480489),+                                    ("afternoon<time-of-day> o'clock", -2.6741486494265287),+                                    ("hourminute", -1.575536360758419),                                     ("afternoon<integer> (latent time-of-day)",-                                     -2.4849066497880004),-                                    ("afternoonhh:mm (time-of-day)", -3.1780538303479458),-                                    ("tonight<time-of-day> o'clock", -2.2617630984737906)],-                               n = 20},+                                     -2.6741486494265287),+                                    ("afternoonhh:mm (time-of-day)", -3.367295829986474),+                                    ("tonight<time-of-day> o'clock", -2.451005098112319)],+                               n = 25},                    koData =-                     ClassData{prior = -0.8109302162163288, unseen = -3.713572066704308,+                     ClassData{prior = -0.7841189587656721,+                               unseen = -3.9318256327243257,                                likelihoods =                                  HashMap.fromList-                                   [("hourhour", -1.2039728043259361),+                                   [("hourhour", -1.4271163556401458),                                     ("afternoonrelative minutes after|past <integer> (hour-of-day)",-                                     -1.8971199848858813),-                                    ("afternoon<time-of-day> o'clock", -1.8971199848858813),-                                    ("hourminute", -1.8971199848858813),+                                     -1.5141277326297755),+                                    ("afternoon<time-of-day> o'clock", -2.120263536200091),+                                    ("hourminute", -1.5141277326297755),                                     ("afternoon<integer> (latent time-of-day)",-                                     -1.742969305058623)],-                               n = 16}}),+                                     -1.9661128563728327)],+                               n = 21}}),        ("<integer> <unit-of-duration>",         Classifier{okData =-                     ClassData{prior = -infinity, unseen = -2.833213344056216,+                     ClassData{prior = -infinity, unseen = -3.044522437723423,                                likelihoods = HashMap.fromList [], n = 0},                    koData =-                     ClassData{prior = 0.0, unseen = -5.877735781779639,+                     ClassData{prior = 0.0, unseen = -5.905361848054571,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.6560549059838294),-                                    ("integer (0..10)month (grain)", -2.068268241081711),-                                    ("integer (0..10)hour (grain)", -2.8304082931286074),-                                    ("second", -3.235873401236772),-                                    ("integer (0..10)day (grain)", -3.0417173867958143),-                                    ("integer (0..10)year (grain)", -3.572345637857985),-                                    ("integer (numeric)year (grain)", -3.1668805297498204),-                                    ("integer (0..10)second (grain)", -3.235873401236772),-                                    ("day", -3.0417173867958143), ("year", -2.6968769005040847),-                                    ("integer (0..10)minute (grain)", -3.0417173867958143),-                                    ("hour", -2.8304082931286074),-                                    ("integer (0..10)week (grain)", -2.6560549059838294),-                                    ("month", -1.7973932869463112),-                                    ("integer (numeric)month (grain)", -3.1668805297498204),-                                    ("minute", -3.0417173867958143)],-                               n = 170}}),-       ("integer (11..19)",-        Classifier{okData =-                     ClassData{prior = 0.0, unseen = -2.70805020110221,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 13},-                   koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                                   [("week", -2.6837575085331653),+                                    ("integer (0..10)month (grain)", -2.535337503414892),+                                    ("integer (0..10)hour (grain)", -3.06941998934515),+                                    ("<number>\20010/\20491week (grain)", -3.5047380606029956),+                                    ("second", -3.2635760037861075),+                                    ("integer (0..10)day (grain)", -3.06941998934515),+                                    ("number suffix: \21313month (grain)", -4.293195420967266),+                                    ("integer (0..10)year (grain)", -3.6000482404073204),+                                    ("<number>\20010/\20491month (grain)", -3.130044611161585),+                                    ("integer (numeric)year (grain)", -3.1945831322991562),+                                    ("integer (0..10)second (grain)", -3.2635760037861075),+                                    ("day", -3.06941998934515), ("year", -2.7245795030534206),+                                    ("integer (0..10)minute (grain)", -3.06941998934515),+                                    ("hour", -2.8581108956779433),+                                    ("integer (0..10)week (grain)", -3.1945831322991562),+                                    ("month", -1.7754989483562746),+                                    ("<number>\20010/\20491hour (grain)", -4.293195420967266),+                                    ("integer (numeric)month (grain)", -3.1945831322991562),+                                    ("minute", -3.06941998934515)],+                               n = 173}}),        ("<time-of-day> am|pm",         Classifier{okData =                      ClassData{prior = -0.4700036292457356, unseen = -2.70805020110221,@@ -560,21 +547,25 @@                                n = 3}}),        ("relative minutes after|past <integer> (hour-of-day)",         Classifier{okData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (11..19)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5},+                                   [("<integer> (latent time-of-day)integer with consecutive unit modifiers",+                                     -0.7801585575495751),+                                    ("hour", -0.7801585575495751)],+                               n = 10},                    koData =-                     ClassData{prior = -0.6931471805599453, unseen = -2.639057329615259,+                     ClassData{prior = -0.6931471805599453,+                               unseen = -3.2188758248682006,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)integer (0..10)",-                                     -0.7731898882334817),-                                    ("hour", -0.7731898882334817)],-                               n = 5}}),+                                   [("<integer> (latent time-of-day)number suffix: \21313",+                                     -1.3862943611198906),+                                    ("<integer> (latent time-of-day)integer (0..10)",+                                     -1.3862943611198906),+                                    ("hour", -0.7801585575495751)],+                               n = 10}}),        ("army's day",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,@@ -584,21 +575,31 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("intersect by \",\"",         Classifier{okData =-                     ClassData{prior = -0.40546510810816444,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -0.2231435513142097, unseen = -4.110873864173311,                                likelihoods =                                  HashMap.fromList-                                   [("Sunday<named-month> <day-of-month>", -0.7576857016975165),-                                    ("dayday", -0.7576857016975165)],-                               n = 14},+                                   [("Sunday<named-month> <day-of-month>", -0.7270487322356266),+                                    ("dayday", -0.7270487322356266)],+                               n = 28},                    koData =-                     ClassData{prior = -1.0986122886681098,+                     ClassData{prior = -1.6094379124341003,                                unseen = -2.9444389791664407,                                likelihoods =                                  HashMap.fromList                                    [("daymonth", -0.8109302162163288),                                     ("SundayFebruary", -0.8109302162163288)],                                n = 7}}),+       ("integer with consecutive unit modifiers",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.367295829986474,+                               likelihoods =+                                 HashMap.fromList+                                   [("number suffix: \21313integer (0..10)", -0.6931471805599453),+                                    ("integer (0..10)integer (0..10)", -0.6931471805599453)],+                               n = 26},+                   koData =+                     ClassData{prior = -infinity, unseen = -1.0986122886681098,+                               likelihoods = HashMap.fromList [], n = 0}}),        ("second (grain)",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.70805020110221,@@ -622,23 +623,21 @@                                n = 20}}),        ("last <time>",         Classifier{okData =-                     ClassData{prior = -1.2039728043259361,-                               unseen = -3.4965075614664802,+                     ClassData{prior = -1.2286654169163076,+                               unseen = -3.4657359027997265,                                likelihoods =                                  HashMap.fromList-                                   [("day", -0.9007865453381898), ("Sunday", -1.3862943611198906),-                                    ("Tuesday", -1.6739764335716716)],+                                   [("day", -0.8690378470236094), ("Sunday", -1.3545456628053103),+                                    ("Tuesday", -1.6422277352570913)],                                n = 12},                    koData =-                     ClassData{prior = -0.35667494393873245,-                               unseen = -4.174387269895637,+                     ClassData{prior = -0.3462762367178338, unseen = -4.189654742026425,                                likelihoods =                                  HashMap.fromList-                                   [("<integer> (latent time-of-day)", -1.0233888674305223),-                                    ("month (numeric with month symbol)", -2.367123614131617),-                                    ("February", -3.4657359027997265),-                                    ("hour", -1.0233888674305223), ("month", -2.2129729343043585)],-                               n = 28}}),+                                   [("<integer> (latent time-of-day)", -0.916290731874155),+                                    ("month (numeric with month symbol)", -2.5649493574615367),+                                    ("hour", -0.916290731874155), ("month", -2.5649493574615367)],+                               n = 29}}),        ("March",         Classifier{okData =                      ClassData{prior = 0.0, unseen = -2.1972245773362196,@@ -655,22 +654,22 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next <time>",         Classifier{okData =-                     ClassData{prior = -1.5260563034950494, unseen = -2.890371757896165,+                     ClassData{prior = -1.6486586255873816, unseen = -2.890371757896165,                                likelihoods =                                  HashMap.fromList                                    [("day", -1.041453874828161), ("Tuesday", -1.041453874828161)],                                n = 5},                    koData =-                     ClassData{prior = -0.24512245803298496,-                               unseen = -3.784189633918261,+                     ClassData{prior = -0.21357410029805904,+                               unseen = -3.912023005428146,                                likelihoods =                                  HashMap.fromList-                                   [("Wednesday", -1.9694406464655074),-                                    ("<integer> (latent time-of-day)", -1.1962507582320256),-                                    ("month (numeric with month symbol)", -3.068052935133617),-                                    ("day", -1.9694406464655074), ("hour", -1.1962507582320256),-                                    ("month", -3.068052935133617)],-                               n = 18}}),+                                   [("Wednesday", -2.1000608288825715),+                                    ("<integer> (latent time-of-day)", -1.1192315758708455),+                                    ("month (numeric with month symbol)", -3.1986731175506815),+                                    ("day", -2.1000608288825715), ("hour", -1.1192315758708455),+                                    ("month", -3.1986731175506815)],+                               n = 21}}),        ("last <cycle>",         Classifier{okData =                      ClassData{prior = -0.8472978603872037,@@ -707,24 +706,27 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("next n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.59511985013459,+                     ClassData{prior = 0.0, unseen = -4.61512051684126,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.3877429013343523),-                                    ("integer (0..10)month (grain)", -2.793208009442517),-                                    ("integer (0..10)hour (grain)", -2.3877429013343523),-                                    ("second", -2.793208009442517),-                                    ("integer (0..10)day (grain)", -2.505525936990736),-                                    ("integer (0..10)year (grain)", -3.1986731175506815),-                                    ("integer (0..10)second (grain)", -2.793208009442517),-                                    ("day", -2.505525936990736), ("year", -3.1986731175506815),-                                    ("integer (0..10)minute (grain)", -2.639057329615259),-                                    ("hour", -2.3877429013343523),-                                    ("integer (0..10)week (grain)", -2.3877429013343523),-                                    ("month", -2.793208009442517), ("minute", -2.639057329615259)],+                                   [("week", -2.4079456086518722),+                                    ("integer (0..10)hour (grain)", -2.659260036932778),+                                    ("<number>\20010/\20491week (grain)", -2.995732273553991),+                                    ("second", -2.8134107167600364),+                                    ("integer (0..10)day (grain)", -2.5257286443082556),+                                    ("integer (0..10)year (grain)", -3.2188758248682006),+                                    ("<number>\20010/\20491month (grain)", -2.8134107167600364),+                                    ("integer (0..10)second (grain)", -2.8134107167600364),+                                    ("day", -2.5257286443082556), ("year", -3.2188758248682006),+                                    ("integer (0..10)minute (grain)", -2.659260036932778),+                                    ("hour", -2.4079456086518722),+                                    ("integer (0..10)week (grain)", -2.995732273553991),+                                    ("month", -2.8134107167600364),+                                    ("<number>\20010/\20491hour (grain)", -3.506557897319982),+                                    ("minute", -2.659260036932778)],                                n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("Tuesday",         Classifier{okData =@@ -742,79 +744,95 @@                                likelihoods = HashMap.fromList [], n = 0}}),        ("<named-month> <day-of-month>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.8283137373023015,+                     ClassData{prior = 0.0, unseen = -5.231108616854587,                                likelihoods =                                  HashMap.fromList-                                   [("Marchinteger (0..10)", -3.028522096376982),-                                    ("Februaryinteger (11..19)", -2.6230569882688175),-                                    ("month (numeric with month symbol)integer (11..19)",-                                     -2.6230569882688175),-                                    ("Marchinteger (numeric)", -3.721669276936927),+                                   [("month (numeric with month symbol)integer with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Marchinteger (0..10)", -3.4339872044851463),+                                    ("Marchinteger (numeric)", -4.127134385045092),                                     ("month (numeric with month symbol)integer (numeric)",-                                     -2.1122313645028266),-                                    ("Februaryinteger (0..10)", -2.740840023925201),-                                    ("month", -0.7427441216993174),+                                     -2.517696472610991),+                                    ("Februaryinteger (0..10)", -3.146305132033365),+                                    ("month (numeric with month symbol)number suffix: \21313",+                                     -3.146305132033365),+                                    ("month", -0.7371103039810614),                                     ("month (numeric with month symbol)integer (0..10)",-                                     -2.1122313645028266)],-                               n = 58},+                                     -2.517696472610991),+                                    ("Februaryinteger with consecutive unit modifiers",+                                     -2.392533329656985),+                                    ("Februarynumber suffix: \21313", -3.146305132033365)],+                               n = 88},                    koData =-                     ClassData{prior = -infinity, unseen = -2.1972245773362196,+                     ClassData{prior = -infinity, unseen = -2.3978952727983707,                                likelihoods = HashMap.fromList [], n = 0}}),        ("integer (0..10)",         Classifier{okData =-                     ClassData{prior = -0.4540728071735412, unseen = -5.170483995038151,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 174},+                     ClassData{prior = -0.38372512147175847,+                               unseen = -5.236441962829949,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 186},                    koData =-                     ClassData{prior = -1.007957920399979, unseen = -4.624972813284271,-                               likelihoods = HashMap.fromList [("", 0.0)], n = 100}}),+                     ClassData{prior = -1.143563676530376, unseen = -4.48863636973214,+                               likelihoods = HashMap.fromList [("", 0.0)], n = 87}}),        ("last n <cycle>",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.61512051684126,+                     ClassData{prior = 0.0, unseen = -4.605170185988091,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.995732273553991),-                                    ("integer (0..10)month (grain)", -2.120263536200091),-                                    ("integer (0..10)hour (grain)", -2.4079456086518722),-                                    ("second", -2.659260036932778),-                                    ("integer (0..10)day (grain)", -2.995732273553991),-                                    ("integer (0..10)year (grain)", -3.506557897319982),-                                    ("integer (0..10)second (grain)", -2.659260036932778),-                                    ("day", -2.995732273553991), ("year", -3.506557897319982),-                                    ("integer (0..10)minute (grain)", -2.4079456086518722),-                                    ("hour", -2.4079456086518722),-                                    ("integer (0..10)week (grain)", -2.995732273553991),-                                    ("month", -2.120263536200091), ("minute", -2.4079456086518722)],-                               n = 43},+                                   [("week", -2.9856819377004897),+                                    ("integer (0..10)month (grain)", -3.4965075614664802),+                                    ("integer (0..10)hour (grain)", -2.3978952727983707),+                                    ("second", -2.649209701079277),+                                    ("integer (0..10)day (grain)", -2.9856819377004897),+                                    ("integer (0..10)year (grain)", -3.4965075614664802),+                                    ("<number>\20010/\20491month (grain)", -2.3978952727983707),+                                    ("integer (0..10)second (grain)", -2.649209701079277),+                                    ("day", -2.9856819377004897), ("year", -3.4965075614664802),+                                    ("integer (0..10)minute (grain)", -2.3978952727983707),+                                    ("hour", -2.3978952727983707),+                                    ("integer (0..10)week (grain)", -2.9856819377004897),+                                    ("month", -2.1972245773362196),+                                    ("minute", -2.3978952727983707)],+                               n = 42},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.772588722239781,                                likelihoods = HashMap.fromList [], n = 0}}),        ("ordinal (digits)",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -1.791759469228055,-                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 4},+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("<number>\20010/\20491", -0.1823215567939546)],+                               n = 4},                    koData =-                     ClassData{prior = -infinity, unseen = -0.6931471805599453,-                               likelihoods = HashMap.fromList [], n = 0}}),+                     ClassData{prior = -0.6931471805599453,+                               unseen = -1.9459101490553135,+                               likelihoods =+                                 HashMap.fromList [("integer (0..10)", -0.1823215567939546)],+                               n = 4}}),        ("n <cycle> last",         Classifier{okData =-                     ClassData{prior = 0.0, unseen = -4.007333185232471,+                     ClassData{prior = 0.0, unseen = -4.04305126783455,                                likelihoods =                                  HashMap.fromList-                                   [("week", -2.379546134130174),-                                    ("integer (0..10)month (grain)", -2.890371757896165),-                                    ("integer (0..10)hour (grain)", -2.379546134130174),-                                    ("second", -2.890371757896165),-                                    ("integer (0..10)day (grain)", -2.379546134130174),-                                    ("integer (0..10)year (grain)", -2.890371757896165),-                                    ("integer (0..10)second (grain)", -2.890371757896165),-                                    ("day", -2.379546134130174), ("year", -2.890371757896165),-                                    ("integer (0..10)minute (grain)", -2.890371757896165),-                                    ("hour", -2.379546134130174),-                                    ("integer (0..10)week (grain)", -2.379546134130174),-                                    ("month", -2.890371757896165), ("minute", -2.890371757896165)],+                                   [("week", -2.4159137783010487),+                                    ("integer (0..10)hour (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491week (grain)", -2.9267394020670396),+                                    ("second", -2.9267394020670396),+                                    ("integer (0..10)day (grain)", -2.4159137783010487),+                                    ("integer (0..10)year (grain)", -2.9267394020670396),+                                    ("<number>\20010/\20491month (grain)", -2.9267394020670396),+                                    ("integer (0..10)second (grain)", -2.9267394020670396),+                                    ("day", -2.4159137783010487), ("year", -2.9267394020670396),+                                    ("integer (0..10)minute (grain)", -2.9267394020670396),+                                    ("hour", -2.4159137783010487),+                                    ("integer (0..10)week (grain)", -2.9267394020670396),+                                    ("month", -2.9267394020670396),+                                    ("<number>\20010/\20491hour (grain)", -2.9267394020670396),+                                    ("minute", -2.9267394020670396)],                                n = 20},                    koData =-                     ClassData{prior = -infinity, unseen = -2.70805020110221,+                     ClassData{prior = -infinity, unseen = -2.833213344056216,                                likelihoods = HashMap.fromList [], n = 0}}),        ("morning",         Classifier{okData =@@ -849,6 +867,13 @@         Classifier{okData =                      ClassData{prior = 0.0, unseen = -1.3862943611198906,                                likelihoods = HashMap.fromList [("", 0.0)], n = 2},+                   koData =+                     ClassData{prior = -infinity, unseen = -0.6931471805599453,+                               likelihoods = HashMap.fromList [], n = 0}}),+       ("<number>\20010/\20491",+        Classifier{okData =+                     ClassData{prior = 0.0, unseen = -3.4339872044851463,+                               likelihoods = HashMap.fromList [("integer (0..10)", 0.0)], n = 29},                    koData =                      ClassData{prior = -infinity, unseen = -0.6931471805599453,                                likelihoods = HashMap.fromList [], n = 0}}),
Duckling/Regex/Types.hs view
@@ -27,4 +27,4 @@  instance Resolve GroupMatch where   type ResolvedValue GroupMatch = ()-  resolve _ _ = Nothing+  resolve _ _ _ = Nothing
Duckling/Resolve.hs view
@@ -12,12 +12,13 @@ module Duckling.Resolve   ( Context(..)   , DucklingTime(..)+  , Options(..)   , Resolve(..)   , fromUTC   , toUTC   ) where -import Data.Aeson+import Data.Aeson (ToJSON) import Prelude import qualified Data.Time as Time import qualified Data.Time.LocalTime.TimeZone.Series as Series@@ -36,9 +37,14 @@   }   deriving (Eq, Show) +newtype Options = Options+  { withLatent :: Bool  -- When set, includes less certain parses, e.g. "7" as an hour of the day+  }+  deriving (Eq, Show)+ class ToJSON (ResolvedValue a) => Resolve a where   type ResolvedValue a-  resolve :: Context -> a -> Maybe (ResolvedValue a)+  resolve :: Context -> Options -> a -> Maybe (ResolvedValue a, Bool)  -- | Given a UTCTime and an TimeZone, build a ZonedTime (no conversion) fromUTC :: Time.UTCTime -> Time.TimeZone -> Time.ZonedTime
Duckling/Rules.hs view
@@ -52,6 +52,7 @@ import qualified Duckling.Rules.RO as RORules import qualified Duckling.Rules.RU as RURules import qualified Duckling.Rules.SV as SVRules+import qualified Duckling.Rules.TA as TARules import qualified Duckling.Rules.TR as TRRules import qualified Duckling.Rules.UK as UKRules import qualified Duckling.Rules.VI as VIRules@@ -107,6 +108,7 @@ defaultRules RO = RORules.defaultRules defaultRules RU = RURules.defaultRules defaultRules SV = SVRules.defaultRules+defaultRules TA = TARules.defaultRules defaultRules TR = TRRules.defaultRules defaultRules UK = UKRules.defaultRules defaultRules VI = VIRules.defaultRules@@ -142,6 +144,7 @@ localeRules RO = RORules.localeRules localeRules RU = RURules.localeRules localeRules SV = SVRules.localeRules+localeRules TA = TARules.localeRules localeRules TR = TRRules.localeRules localeRules UK = UKRules.localeRules localeRules VI = VIRules.localeRules@@ -177,6 +180,7 @@ langRules RO = RORules.langRules langRules RU = RURules.langRules langRules SV = SVRules.langRules+langRules TA = TARules.langRules langRules TR = TRRules.langRules langRules UK = UKRules.langRules langRules VI = VIRules.langRules
Duckling/Rules/AR.hs view
@@ -32,6 +32,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -49,3 +50,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules AR dim
Duckling/Rules/BG.hs view
@@ -20,25 +20,31 @@ import Duckling.Types import qualified Duckling.Numeral.BG.Rules as Numeral import qualified Duckling.AmountOfMoney.BG.Rules as AmountOfMoney+import qualified Duckling.Distance.BG.Rules as Distance+import qualified Duckling.Duration.BG.Rules as Duration+import qualified Duckling.TimeGrain.BG.Rules as TimeGrain+import qualified Duckling.Ordinal.BG.Rules as Ordinal  defaultRules :: Some Dimension -> [Rule] defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule] langRules (This AmountOfMoney) = AmountOfMoney.rules-langRules (This Distance) = []-langRules (This Duration) = []+langRules (This Distance) = Distance.rules+langRules (This Duration) = Duration.rules langRules (This Email) = [] langRules (This Numeral) = Numeral.rules-langRules (This Ordinal) = []+langRules (This Ordinal) = Ordinal.rules langRules (This PhoneNumber) = [] langRules (This Quantity) = [] langRules (This RegexMatch) = [] langRules (This Temperature) = [] langRules (This Time) = []-langRules (This TimeGrain) = []+langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules BG dim
Duckling/Rules/CS.hs view
@@ -25,6 +25,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -42,3 +43,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules CS dim
Duckling/Rules/Common.hs view
@@ -40,3 +40,4 @@ rules (This TimeGrain) = [] rules (This Url) = Url.rules rules (This Volume) = Volume.rules+rules (This (CustomDimension dim)) = dimRules dim
Duckling/Rules/DA.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules DA dim
Duckling/Rules/DE.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules DE dim
Duckling/Rules/EL.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules EL dim
Duckling/Rules/EN.hs view
@@ -45,13 +45,8 @@ import qualified Duckling.Volume.EN.Rules as Volume  defaultRules :: Some Dimension -> [Rule]-defaultRules dim@(This Time) =-  [ TimeUS.ruleMMDD-  , TimeUS.ruleMMDDYYYY-  , TimeUS.ruleMMDDYYYYDot-  , TimeUS.ruleThanksgiving-  ] ++ langRules dim-defaultRules dim = langRules dim+defaultRules dim@(This Time) = TimeUS.rulesBackwardCompatible ++ langRules dim+defaultRules dim             = langRules dim  localeRules :: Region -> Some Dimension -> [Rule] localeRules AU (This Time) = TimeAU.rules@@ -66,7 +61,8 @@ localeRules TT (This Time) = TimeTT.rules localeRules US (This Time) = TimeUS.rules localeRules ZA (This Time) = TimeZA.rules-localeRules _ _            = []+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim+localeRules _ _ = []  langRules :: Some Dimension -> [Rule] langRules (This AmountOfMoney) = AmountOfMoney.rules@@ -83,3 +79,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules EN dim
Duckling/Rules/ES.hs view
@@ -31,6 +31,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -48,3 +49,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules ES dim
Duckling/Rules/ET.hs view
@@ -25,6 +25,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -42,3 +43,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules ET dim
Duckling/Rules/FR.hs view
@@ -34,6 +34,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -51,3 +52,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules FR dim
Duckling/Rules/GA.hs view
@@ -32,6 +32,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -49,3 +50,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules GA dim
Duckling/Rules/HE.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules HE dim
Duckling/Rules/HI.hs view
@@ -24,6 +24,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -41,3 +42,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules HI dim
Duckling/Rules/HR.hs view
@@ -34,6 +34,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -51,3 +52,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules HR dim
Duckling/Rules/HU.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules HU dim
Duckling/Rules/ID.hs view
@@ -26,6 +26,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -43,3 +44,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules ID dim
Duckling/Rules/IT.hs view
@@ -31,6 +31,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -48,3 +49,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules IT dim
Duckling/Rules/JA.hs view
@@ -27,6 +27,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -44,3 +45,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules JA dim
Duckling/Rules/KA.hs view
@@ -24,6 +24,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -41,3 +42,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules KA dim
Duckling/Rules/KO.hs view
@@ -33,6 +33,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -50,3 +51,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules KO dim
Duckling/Rules/MY.hs view
@@ -24,6 +24,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -41,3 +42,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules MY dim
Duckling/Rules/NB.hs view
@@ -29,6 +29,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -46,3 +47,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules NB dim
Duckling/Rules/NE.hs view
@@ -23,6 +23,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -40,3 +41,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules NE dim
Duckling/Rules/NL.hs view
@@ -18,6 +18,7 @@ import Duckling.Dimensions.Types import Duckling.Locale import Duckling.Types+import qualified Duckling.AmountOfMoney.NL.Rules as AmountOfMoney import qualified Duckling.Distance.NL.Rules as Distance import qualified Duckling.Duration.NL.Rules as Duration import qualified Duckling.Numeral.NL.Rules as Numeral@@ -30,10 +31,11 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]-langRules (This AmountOfMoney) = []+langRules (This AmountOfMoney) = AmountOfMoney.rules langRules (This Distance) = Distance.rules langRules (This Duration) = Duration.rules langRules (This Email) = []@@ -47,3 +49,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules NL dim
Duckling/Rules/PL.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules PL dim
Duckling/Rules/PT.hs view
@@ -33,6 +33,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -50,3 +51,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules PT dim
Duckling/Rules/RO.hs view
@@ -33,6 +33,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -50,3 +51,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules RO dim
Duckling/Rules/RU.hs view
@@ -31,6 +31,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -48,3 +49,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules RU dim
Duckling/Rules/SV.hs view
@@ -20,6 +20,7 @@ import Duckling.Types import qualified Duckling.AmountOfMoney.SV.Rules as AmountOfMoney import qualified Duckling.Duration.SV.Rules as Duration+import qualified Duckling.Distance.SV.Rules as Distance import qualified Duckling.Ordinal.SV.Rules as Ordinal import qualified Duckling.Numeral.SV.Rules as Numeral import qualified Duckling.Time.SV.Rules as Time@@ -29,11 +30,12 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule] langRules (This AmountOfMoney) = AmountOfMoney.rules-langRules (This Distance) = []+langRules (This Distance) = Distance.rules langRules (This Duration) = Duration.rules langRules (This Email) = [] langRules (This Numeral) = Numeral.rules@@ -46,3 +48,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules SV dim
+ Duckling/Rules/TA.hs view
@@ -0,0 +1,44 @@+--Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE GADTs #-}++module Duckling.Rules.TA+  ( defaultRules+  , langRules+  , localeRules+  ) where++import Duckling.Dimensions.Types+import Duckling.Locale+import Duckling.Types+import qualified Duckling.Numeral.TA.Rules as Numeral++defaultRules :: Some Dimension -> [Rule]+defaultRules = langRules++localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim+localeRules _ _ = []++langRules :: Some Dimension -> [Rule]+langRules (This AmountOfMoney) = []+langRules (This Distance) = []+langRules (This Duration) = []+langRules (This Numeral) = Numeral.rules+langRules (This Email) = []+langRules (This Ordinal) = []+langRules (This PhoneNumber) = []+langRules (This Quantity) = []+langRules (This RegexMatch) = []+langRules (This Temperature) = []+langRules (This Time) = []+langRules (This TimeGrain) = []+langRules (This Url) = []+langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules TA dim
Duckling/Rules/TR.hs view
@@ -30,6 +30,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -47,3 +48,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = Volume.rules+langRules (This (CustomDimension dim)) = dimLangRules TR dim
Duckling/Rules/UK.hs view
@@ -25,6 +25,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -42,3 +43,4 @@ langRules (This TimeGrain) = [] langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules UK dim
Duckling/Rules/VI.hs view
@@ -28,6 +28,7 @@ defaultRules = langRules  localeRules :: Region -> Some Dimension -> [Rule]+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim localeRules _ _ = []  langRules :: Some Dimension -> [Rule]@@ -45,3 +46,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules VI dim
Duckling/Rules/ZH.hs view
@@ -18,6 +18,8 @@ import Duckling.Dimensions.Types import Duckling.Locale import Duckling.Types+import qualified Duckling.AmountOfMoney.ZH.Rules as AmountOfMoney+import qualified Duckling.Distance.ZH.Rules as Distance import qualified Duckling.Numeral.ZH.Rules as Numeral import qualified Duckling.Ordinal.ZH.Rules as Ordinal import qualified Duckling.Temperature.ZH.Rules as Temperature@@ -36,11 +38,12 @@ localeRules HK (This Time) = TimeHK.rules localeRules MO (This Time) = TimeMO.rules localeRules TW (This Time) = TimeTW.rules-localeRules _ _            = []+localeRules region (This (CustomDimension dim)) = dimLocaleRules region dim+localeRules _ _ = []  langRules :: Some Dimension -> [Rule]-langRules (This AmountOfMoney) = []-langRules (This Distance) = []+langRules (This AmountOfMoney) = AmountOfMoney.rules+langRules (This Distance) = Distance.rules langRules (This Duration) = [] langRules (This Email) = [] langRules (This Numeral) = Numeral.rules@@ -53,3 +56,4 @@ langRules (This TimeGrain) = TimeGrain.rules langRules (This Url) = [] langRules (This Volume) = []+langRules (This (CustomDimension dim)) = dimLangRules ZH dim
Duckling/Temperature/AR/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/EN/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/ES/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/FR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/GA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/HR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/Helpers.hs view
@@ -20,7 +20,7 @@ import Duckling.Dimensions.Types import qualified Duckling.Temperature.Types as TTemperature import Duckling.Temperature.Types (TemperatureData(..))-import Duckling.Types+import Duckling.Types hiding (isLatent)  -- ----------------------------------------------------------------- -- Patterns
Duckling/Temperature/IT/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale IT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale IT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/JA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale JA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale JA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/KO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/KO/Rules.hs view
@@ -18,7 +18,7 @@ import Duckling.Dimensions.Types import Duckling.Temperature.Helpers import qualified Duckling.Temperature.Types as TTemperature-import Duckling.Types+import Duckling.Types hiding (isLatent)  ruleLatentTempDegrees :: Rule ruleLatentTempDegrees = Rule
Duckling/Temperature/PT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/RO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/TR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale TR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale TR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Temperature/Types.hs view
@@ -39,9 +39,9 @@  instance Resolve TemperatureData where   type ResolvedValue TemperatureData = TemperatureValue-  resolve _ TemperatureData {unit = Nothing} = Nothing-  resolve _ TemperatureData {unit = Just unit, value} =-    Just TemperatureValue {vUnit = unit, vValue = value}+  resolve _ _ TemperatureData {unit = Nothing} = Nothing+  resolve _ _ TemperatureData {unit = Just unit, value} =+    Just (TemperatureValue {vUnit = unit, vValue = value}, False)  data TemperatureValue = TemperatureValue   { vUnit :: TemperatureUnit
Duckling/Temperature/ZH/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ZH Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ZH Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Testing/Types.hs view
@@ -20,12 +20,14 @@   , examplesCustom   , parserCheck   , refTime+  , simpleCheck   , testContext+  , testOptions   , withLocale   , zTime   ) where -import Data.Aeson+import Data.Aeson (toJSON, ToJSON, Value) import Data.Fixed (Pico) import Data.Text (Text) import Prelude@@ -37,8 +39,8 @@  type TestPredicate = Context -> ResolvedToken -> Bool type Example = (Text, TestPredicate)-type Corpus = (Context, [Example])-type NegativeCorpus = (Context, [Text])+type Corpus = (Context, Options, [Example])+type NegativeCorpus = (Context, Options, [Text])  examplesCustom :: TestPredicate -> [Text] -> [Example] examplesCustom check = map (, check)@@ -74,6 +76,12 @@   , referenceTime = refTime (2013, 2, 12, 4, 30, 0) (-2)   } -withLocale :: (Context, [a]) -> Locale -> [a] -> (Context, [a])-withLocale (langContext, langXs) locale localeXs-  = (langContext {locale = locale}, langXs ++ localeXs)+testOptions :: Options+testOptions = Options+  { withLatent = False+  }++withLocale :: (Context, Options, [a]) -> Locale -> [a]+  -> (Context, Options, [a])+withLocale (langContext, options, langXs) locale localeXs+  = (langContext {locale = locale}, options, langXs ++ localeXs)
Duckling/Time/AR/Corpus.hs view
@@ -27,10 +27,10 @@ context = testContext {locale = makeLocale AR Nothing}  corpus :: Corpus-corpus = (context, allExamples)+corpus = (context, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (context, examples)+negativeCorpus = (context, testOptions, examples)   where     examples =       [ "حب"
Duckling/Time/AR/Rules.hs view
@@ -17,7 +17,7 @@ import Data.Maybe import Data.Text (Text) import Prelude-import Data.HashMap.Strict ( HashMap)+import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HashMap import qualified Data.Text as Text @@ -25,7 +25,6 @@ import Duckling.Duration.Helpers (duration) import Duckling.Numeral.Helpers (parseInt) import Duckling.Numeral.Types (NumeralData (..))-import Duckling.Ordinal.Types (OrdinalData (..)) import Duckling.Regex.Types import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..))
+ Duckling/Time/Computed.hs view
@@ -0,0 +1,1571 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.++module Duckling.Time.Computed+  ( chanukah, chineseNewYear, dhanteras, easterSunday, eidalAdha, eidalFitr+  , lagBaOmer, mawlid, muharram, navaratri, orthodoxEaster, passover, rajab+  , rakshaBandhan, ramadan, roshHashana, thaiPongal, thiruOnam, tishaBAv+  , tuBishvat, vasantPanchami, yomHaatzmaut+  ) where++import Data.Maybe+import Prelude+import qualified Data.Time as Time++import Duckling.Time.Helpers (timeComputed)+import Duckling.Time.Types (TimeData(..), TimeObject(..), timedata')+import qualified Duckling.TimeGrain.Types as TG++toTimeObjectM :: (Integer, Int, Int) -> Maybe TimeObject+toTimeObjectM (year, month, day) = do+  day <- Time.fromGregorianValid year month day+  return TimeObject+    { start = Time.UTCTime day 0+    , grain = TG.Day+    , end = Nothing+    }++computedDays :: [TimeObject] -> TimeData+computedDays xs = timedata'+  { timePred = timeComputed xs+  , timeGrain = TG.Day+  }++chanukah :: TimeData+chanukah = computedDays chanukah'++chanukah' :: [TimeObject]+chanukah' = mapMaybe toTimeObjectM+  [ (1950, 12, 3)+  , (1951, 12, 23)+  , (1952, 12, 12)+  , (1953, 12, 1)+  , (1954, 12, 19)+  , (1955, 12, 9)+  , (1956, 11, 28)+  , (1957, 12, 17)+  , (1958, 12, 6)+  , (1959, 12, 25)+  , (1960, 12, 13)+  , (1961, 12, 2)+  , (1962, 12, 21)+  , (1963, 12, 10)+  , (1964, 11, 29)+  , (1965, 12, 18)+  , (1966, 12, 7)+  , (1967, 12, 26)+  , (1968, 12, 15)+  , (1969, 12, 4)+  , (1970, 12, 22)+  , (1971, 12, 12)+  , (1972, 11, 30)+  , (1973, 12, 19)+  , (1974, 12, 8)+  , (1975, 11, 28)+  , (1976, 12, 16)+  , (1977, 12, 4)+  , (1978, 12, 24)+  , (1979, 12, 14)+  , (1980, 12, 2)+  , (1981, 12, 20)+  , (1982, 12, 10)+  , (1983, 11, 30)+  , (1984, 12, 18)+  , (1985, 12, 7)+  , (1986, 12, 26)+  , (1987, 12, 15)+  , (1988, 12, 3)+  , (1989, 12, 22)+  , (1990, 12, 11)+  , (1991, 12, 1)+  , (1992, 12, 19)+  , (1993, 12, 8)+  , (1994, 11, 27)+  , (1995, 12, 17)+  , (1996, 12, 5)+  , (1997, 12, 23)+  , (1998, 12, 13)+  , (1999, 12, 3)+  , (2000, 12, 21)+  , (2001, 12, 9)+  , (2002, 11, 29)+  , (2003, 12, 19)+  , (2004, 12, 7)+  , (2005, 12, 25)+  , (2006, 12, 15)+  , (2007, 12, 4)+  , (2008, 12, 21)+  , (2009, 12, 11)+  , (2010, 12, 1)+  , (2011, 12, 20)+  , (2012, 12, 8)+  , (2013, 11, 27)+  , (2014, 12, 16)+  , (2015, 12, 6)+  , (2016, 12, 24)+  , (2017, 12, 12)+  , (2018, 12, 2)+  , (2019, 12, 22)+  , (2020, 12, 10)+  , (2021, 11, 28)+  , (2022, 12, 18)+  , (2023, 12, 7)+  , (2024, 12, 25)+  , (2025, 12, 14)+  , (2026, 12, 4)+  , (2027, 12, 24)+  , (2028, 12, 12)+  , (2029, 12, 1)+  , (2030, 12, 20)+  , (2031, 12, 9)+  , (2032, 11, 27)+  , (2033, 12, 16)+  , (2034, 12, 6)+  , (2035, 12, 25)+  , (2036, 12, 13)+  , (2037, 12, 2)+  , (2038, 12, 21)+  , (2039, 12, 11)+  , (2040, 11, 29)+  , (2041, 12, 17)+  , (2042, 12, 7)+  , (2043, 12, 26)+  , (2044, 12, 14)+  , (2045, 12, 3)+  , (2046, 12, 23)+  , (2047, 12, 12)+  , (2048, 11, 29)+  , (2049, 12, 19)+  , (2050, 12, 9)+  ]++chineseNewYear :: TimeData+chineseNewYear = computedDays chineseNewYear'++chineseNewYear' :: [TimeObject]+chineseNewYear' = mapMaybe toTimeObjectM+  [ (1950, 2, 17)+  , (1951, 2, 6)+  , (1952, 1, 27)+  , (1953, 2, 14)+  , (1954, 2, 3)+  , (1955, 1, 24)+  , (1956, 2, 12)+  , (1957, 1, 31)+  , (1958, 2, 18)+  , (1959, 2, 8)+  , (1960, 1, 28)+  , (1961, 2, 15)+  , (1962, 2, 5)+  , (1963, 1, 25)+  , (1964, 2, 13)+  , (1965, 2, 2)+  , (1966, 1, 21)+  , (1967, 2, 9)+  , (1968, 1, 30)+  , (1969, 2, 17)+  , (1970, 2, 6)+  , (1971, 1, 27)+  , (1972, 2, 15)+  , (1973, 2, 3)+  , (1974, 1, 23)+  , (1975, 2, 11)+  , (1976, 1, 31)+  , (1977, 2, 18)+  , (1978, 2, 7)+  , (1979, 1, 28)+  , (1980, 2, 16)+  , (1981, 2, 5)+  , (1982, 1, 25)+  , (1983, 2, 13)+  , (1984, 2, 2)+  , (1985, 2, 20)+  , (1986, 2, 9)+  , (1987, 1, 29)+  , (1988, 2, 17)+  , (1989, 2, 6)+  , (1990, 1, 27)+  , (1991, 2, 15)+  , (1992, 2, 4)+  , (1993, 1, 23)+  , (1994, 2, 10)+  , (1995, 1, 31)+  , (1996, 2, 19)+  , (1997, 2, 7)+  , (1998, 1, 28)+  , (1999, 2, 16)+  , (2000, 2, 5)+  , (2001, 1, 24)+  , (2002, 2, 12)+  , (2003, 2, 1)+  , (2004, 1, 22)+  , (2005, 2, 9)+  , (2006, 1, 29)+  , (2007, 2, 18)+  , (2008, 2, 7)+  , (2009, 1, 26)+  , (2010, 2, 14)+  , (2011, 2, 3)+  , (2012, 1, 23)+  , (2013, 2, 10)+  , (2014, 1, 31)+  , (2015, 2, 19)+  , (2016, 2, 8)+  , (2017, 1, 28)+  , (2018, 2, 16)+  , (2019, 2, 5)+  , (2020, 1, 25)+  , (2021, 2, 12)+  , (2022, 2, 1)+  , (2023, 1, 22)+  , (2024, 2, 10)+  , (2025, 1, 29)+  , (2026, 2, 17)+  , (2027, 2, 6)+  , (2028, 1, 26)+  , (2029, 2, 13)+  , (2030, 2, 3)+  , (2031, 1, 23)+  , (2032, 2, 11)+  , (2033, 1, 31)+  , (2034, 2, 19)+  , (2035, 2, 8)+  , (2036, 1, 28)+  , (2037, 2, 15)+  , (2038, 2, 4)+  , (2039, 1, 24)+  , (2040, 2, 12)+  , (2041, 2, 1)+  , (2042, 1, 22)+  , (2043, 2, 10)+  , (2044, 1, 30)+  , (2045, 2, 17)+  , (2046, 2, 6)+  , (2047, 1, 26)+  , (2048, 2, 14)+  , (2049, 2, 2)+  , (2050, 1, 23)+  ]++easterSunday :: TimeData+easterSunday = computedDays easterSunday'++easterSunday' :: [TimeObject]+easterSunday' = mapMaybe toTimeObjectM+  [ (1950, 4, 9)+  , (1951, 3, 25)+  , (1952, 4, 13)+  , (1953, 4, 5)+  , (1954, 4, 18)+  , (1955, 4, 10)+  , (1956, 4, 1)+  , (1957, 4, 21)+  , (1958, 4, 6)+  , (1959, 3, 29)+  , (1960, 4, 17)+  , (1961, 4, 2)+  , (1962, 4, 22)+  , (1963, 4, 14)+  , (1964, 3, 29)+  , (1965, 4, 18)+  , (1966, 4, 10)+  , (1967, 3, 26)+  , (1968, 4, 14)+  , (1969, 4, 6)+  , (1970, 3, 29)+  , (1971, 4, 11)+  , (1972, 4, 2)+  , (1973, 4, 22)+  , (1974, 4, 14)+  , (1975, 3, 30)+  , (1976, 4, 18)+  , (1977, 4, 10)+  , (1978, 3, 26)+  , (1979, 4, 15)+  , (1980, 4, 6)+  , (1981, 4, 19)+  , (1982, 4, 11)+  , (1983, 4, 3)+  , (1984, 4, 22)+  , (1985, 4, 7)+  , (1986, 3, 30)+  , (1987, 4, 19)+  , (1988, 4, 3)+  , (1989, 3, 26)+  , (1990, 4, 15)+  , (1991, 3, 31)+  , (1992, 4, 19)+  , (1993, 4, 11)+  , (1994, 4, 3)+  , (1995, 4, 16)+  , (1996, 4, 7)+  , (1997, 3, 30)+  , (1998, 4, 12)+  , (1999, 4, 4)+  , (2000, 4, 23)+  , (2001, 4, 15)+  , (2002, 3, 31)+  , (2003, 4, 20)+  , (2004, 4, 11)+  , (2005, 3, 27)+  , (2006, 4, 16)+  , (2007, 4, 8)+  , (2008, 3, 23)+  , (2009, 4, 12)+  , (2010, 4, 4)+  , (2011, 4, 24)+  , (2012, 4, 8)+  , (2013, 3, 31)+  , (2014, 4, 20)+  , (2015, 4, 5)+  , (2016, 3, 27)+  , (2017, 4, 16)+  , (2018, 4, 1)+  , (2019, 4, 21)+  , (2020, 4, 12)+  , (2021, 4, 4)+  , (2022, 4, 17)+  , (2023, 4, 9)+  , (2024, 3, 31)+  , (2025, 4, 20)+  , (2026, 4, 5)+  , (2027, 3, 28)+  , (2028, 4, 16)+  , (2029, 4, 1)+  , (2030, 4, 21)+  , (2031, 4, 13)+  , (2032, 3, 28)+  , (2033, 4, 17)+  , (2034, 4, 9)+  , (2035, 3, 25)+  , (2036, 4, 13)+  , (2037, 4, 5)+  , (2038, 4, 25)+  , (2039, 4, 10)+  , (2040, 4, 1)+  , (2041, 4, 21)+  , (2042, 4, 6)+  , (2043, 3, 29)+  , (2044, 4, 17)+  , (2045, 4, 9)+  , (2046, 3, 25)+  , (2047, 4, 14)+  , (2048, 4, 5)+  , (2049, 4, 18)+  , (2050, 4, 10)+  ]++lagBaOmer :: TimeData+lagBaOmer = computedDays lagBaOmer'++lagBaOmer' :: [TimeObject]+lagBaOmer' = mapMaybe toTimeObjectM+  [ (1950, 5, 4)+  , (1951, 5, 23)+  , (1952, 5, 12)+  , (1953, 5, 2)+  , (1954, 5, 20)+  , (1955, 5, 9)+  , (1956, 4, 28)+  , (1957, 5, 18)+  , (1958, 5, 7)+  , (1959, 5, 25)+  , (1960, 5, 14)+  , (1961, 5, 3)+  , (1962, 5, 21)+  , (1963, 5, 11)+  , (1964, 4, 29)+  , (1965, 5, 19)+  , (1966, 5, 7)+  , (1967, 5, 27)+  , (1968, 5, 15)+  , (1969, 5, 5)+  , (1970, 5, 23)+  , (1971, 5, 12)+  , (1972, 5, 1)+  , (1973, 5, 19)+  , (1974, 5, 9)+  , (1975, 4, 28)+  , (1976, 5, 17)+  , (1977, 5, 5)+  , (1978, 5, 24)+  , (1979, 5, 14)+  , (1980, 5, 3)+  , (1981, 5, 21)+  , (1982, 5, 10)+  , (1983, 4, 30)+  , (1984, 5, 19)+  , (1985, 5, 8)+  , (1986, 5, 26)+  , (1987, 5, 16)+  , (1988, 5, 4)+  , (1989, 5, 22)+  , (1990, 5, 12)+  , (1991, 5, 1)+  , (1992, 5, 20)+  , (1993, 5, 8)+  , (1994, 4, 28)+  , (1995, 5, 17)+  , (1996, 5, 6)+  , (1997, 5, 24)+  , (1998, 5, 13)+  , (1999, 5, 3)+  , (2000, 5, 22)+  , (2001, 5, 10)+  , (2002, 4, 29)+  , (2003, 5, 19)+  , (2004, 5, 8)+  , (2005, 5, 26)+  , (2006, 5, 15)+  , (2007, 5, 5)+  , (2008, 5, 22)+  , (2009, 5, 11)+  , (2010, 5, 1)+  , (2011, 5, 21)+  , (2012, 5, 9)+  , (2013, 4, 27)+  , (2014, 5, 17)+  , (2015, 5, 6)+  , (2016, 5, 25)+  , (2017, 5, 13)+  , (2018, 5, 2)+  , (2019, 5, 22)+  , (2020, 5, 11)+  , (2021, 4, 29)+  , (2022, 5, 18)+  , (2023, 5, 8)+  , (2024, 5, 25)+  , (2025, 5, 15)+  , (2026, 5, 4)+  , (2027, 5, 24)+  , (2028, 5, 13)+  , (2029, 5, 2)+  , (2030, 5, 20)+  , (2031, 5, 10)+  , (2032, 4, 28)+  , (2033, 5, 16)+  , (2034, 5, 6)+  , (2035, 5, 26)+  , (2036, 5, 14)+  , (2037, 5, 2)+  , (2038, 5, 22)+  , (2039, 5, 11)+  , (2040, 4, 30)+  , (2041, 5, 18)+  , (2042, 5, 7)+  , (2043, 5, 27)+  , (2044, 5, 14)+  , (2045, 5, 4)+  , (2046, 5, 23)+  , (2047, 5, 13)+  , (2048, 4, 30)+  , (2049, 5, 19)+  , (2050, 5, 9)+  ]++orthodoxEaster :: TimeData+orthodoxEaster = computedDays orthodoxEaster'++orthodoxEaster' :: [TimeObject]+orthodoxEaster' = mapMaybe toTimeObjectM+  [ (1950, 4, 9)+  , (1951, 4, 29)+  , (1952, 4, 20)+  , (1953, 4, 5)+  , (1954, 4, 25)+  , (1955, 4, 17)+  , (1956, 5, 6)+  , (1957, 4, 21)+  , (1958, 4, 13)+  , (1959, 5, 3)+  , (1960, 4, 17)+  , (1961, 4, 9)+  , (1962, 4, 29)+  , (1963, 4, 14)+  , (1964, 5, 3)+  , (1965, 4, 25)+  , (1966, 4, 10)+  , (1967, 4, 30)+  , (1968, 4, 21)+  , (1969, 4, 13)+  , (1970, 4, 26)+  , (1971, 4, 18)+  , (1972, 4, 9)+  , (1973, 4, 29)+  , (1974, 4, 14)+  , (1975, 5, 4)+  , (1976, 4, 25)+  , (1977, 4, 10)+  , (1978, 4, 30)+  , (1979, 4, 22)+  , (1980, 4, 6)+  , (1981, 4, 26)+  , (1982, 4, 18)+  , (1983, 5, 8)+  , (1984, 4, 22)+  , (1985, 4, 14)+  , (1986, 5, 4)+  , (1987, 4, 19)+  , (1988, 4, 10)+  , (1989, 4, 30)+  , (1990, 4, 15)+  , (1991, 4, 7)+  , (1992, 4, 26)+  , (1993, 4, 18)+  , (1994, 5, 1)+  , (1995, 4, 23)+  , (1996, 4, 14)+  , (1997, 4, 27)+  , (1998, 4, 19)+  , (1999, 4, 11)+  , (2000, 4, 30)+  , (2001, 4, 15)+  , (2002, 5, 5)+  , (2003, 4, 27)+  , (2004, 4, 11)+  , (2005, 5, 1)+  , (2006, 4, 23)+  , (2007, 4, 8)+  , (2008, 4, 27)+  , (2009, 4, 19)+  , (2010, 4, 4)+  , (2011, 4, 24)+  , (2012, 4, 15)+  , (2013, 5, 5)+  , (2014, 4, 20)+  , (2015, 4, 12)+  , (2016, 5, 1)+  , (2017, 4, 16)+  , (2018, 4, 8)+  , (2019, 4, 28)+  , (2020, 4, 19)+  , (2021, 5, 2)+  , (2022, 4, 24)+  , (2023, 4, 16)+  , (2024, 5, 5)+  , (2025, 4, 20)+  , (2026, 4, 12)+  , (2027, 5, 2)+  , (2028, 4, 16)+  , (2029, 4, 8)+  , (2030, 4, 28)+  , (2031, 4, 13)+  , (2032, 5, 2)+  , (2033, 4, 24)+  , (2034, 4, 9)+  , (2035, 4, 29)+  , (2036, 4, 20)+  , (2037, 4, 5)+  , (2038, 4, 25)+  , (2039, 4, 17)+  , (2040, 5, 6)+  , (2041, 4, 21)+  , (2042, 4, 13)+  , (2043, 5, 3)+  , (2044, 4, 24)+  , (2045, 4, 9)+  , (2046, 4, 29)+  , (2047, 4, 21)+  , (2048, 4, 5)+  , (2049, 4, 25)+  , (2050, 4, 17)+  ]++passover :: TimeData+passover = computedDays passover'++passover' :: [TimeObject]+passover' = mapMaybe toTimeObjectM+  [ (1950, 4, 1)+  , (1951, 4, 20)+  , (1952, 4, 9)+  , (1953, 3, 30)+  , (1954, 4, 17)+  , (1955, 4, 6)+  , (1956, 3, 26)+  , (1957, 4, 15)+  , (1958, 4, 4)+  , (1959, 4, 22)+  , (1960, 4, 11)+  , (1961, 3, 31)+  , (1962, 4, 18)+  , (1963, 4, 8)+  , (1964, 3, 27)+  , (1965, 4, 16)+  , (1966, 4, 4)+  , (1967, 4, 24)+  , (1968, 4, 12)+  , (1969, 4, 2)+  , (1970, 4, 20)+  , (1971, 4, 9)+  , (1972, 3, 29)+  , (1973, 4, 16)+  , (1974, 4, 6)+  , (1975, 3, 26)+  , (1976, 4, 14)+  , (1977, 4, 2)+  , (1978, 4, 21)+  , (1979, 4, 11)+  , (1980, 3, 31)+  , (1981, 4, 18)+  , (1982, 4, 7)+  , (1983, 3, 28)+  , (1984, 4, 16)+  , (1985, 4, 5)+  , (1986, 4, 23)+  , (1987, 4, 13)+  , (1988, 4, 1)+  , (1989, 4, 19)+  , (1990, 4, 9)+  , (1991, 3, 29)+  , (1992, 4, 17)+  , (1993, 4, 5)+  , (1994, 3, 26)+  , (1995, 4, 14)+  , (1996, 4, 3)+  , (1997, 4, 21)+  , (1998, 4, 10)+  , (1999, 3, 31)+  , (2000, 4, 19)+  , (2001, 4, 7)+  , (2002, 3, 27)+  , (2003, 4, 16)+  , (2004, 4, 5)+  , (2005, 4, 23)+  , (2006, 4, 12)+  , (2007, 4, 2)+  , (2008, 4, 19)+  , (2009, 4, 8)+  , (2010, 3, 29)+  , (2011, 4, 18)+  , (2012, 4, 6)+  , (2013, 3, 25)+  , (2014, 4, 14)+  , (2015, 4, 3)+  , (2016, 4, 22)+  , (2017, 4, 10)+  , (2018, 3, 30)+  , (2019, 4, 19)+  , (2020, 4, 8)+  , (2021, 3, 27)+  , (2022, 4, 15)+  , (2023, 4, 5)+  , (2024, 4, 22)+  , (2025, 4, 12)+  , (2026, 4, 1)+  , (2027, 4, 21)+  , (2028, 4, 10)+  , (2029, 3, 30)+  , (2030, 4, 17)+  , (2031, 4, 7)+  , (2032, 3, 26)+  , (2033, 4, 13)+  , (2034, 4, 3)+  , (2035, 4, 23)+  , (2036, 4, 11)+  , (2037, 3, 30)+  , (2038, 4, 19)+  , (2039, 4, 8)+  , (2040, 3, 28)+  , (2041, 4, 15)+  , (2042, 4, 4)+  , (2043, 4, 24)+  , (2044, 4, 11)+  , (2045, 4, 1)+  , (2046, 4, 20)+  , (2047, 4, 10)+  , (2048, 3, 28)+  , (2049, 4, 16)+  , (2050, 4, 6)+  ]++roshHashana :: TimeData+roshHashana = computedDays roshHashana'++roshHashana' :: [TimeObject]+roshHashana' = mapMaybe toTimeObjectM+  [ (1950, 9, 11)+  , (1951, 9, 30)+  , (1952, 9, 19)+  , (1953, 9, 9)+  , (1954, 9, 27)+  , (1955, 9, 16)+  , (1956, 9, 5)+  , (1957, 9, 25)+  , (1958, 9, 14)+  , (1959, 10, 2)+  , (1960, 9, 21)+  , (1961, 9, 10)+  , (1962, 9, 28)+  , (1963, 9, 18)+  , (1964, 9, 6)+  , (1965, 9, 26)+  , (1966, 9, 14)+  , (1967, 10, 4)+  , (1968, 9, 22)+  , (1969, 9, 12)+  , (1970, 9, 30)+  , (1971, 9, 19)+  , (1972, 9, 8)+  , (1973, 9, 26)+  , (1974, 9, 16)+  , (1975, 9, 5)+  , (1976, 9, 24)+  , (1977, 9, 12)+  , (1978, 10, 1)+  , (1979, 9, 21)+  , (1980, 9, 10)+  , (1981, 9, 28)+  , (1982, 9, 17)+  , (1983, 9, 7)+  , (1984, 9, 26)+  , (1985, 9, 15)+  , (1986, 10, 3)+  , (1987, 9, 23)+  , (1988, 9, 11)+  , (1989, 9, 29)+  , (1990, 9, 19)+  , (1991, 9, 8)+  , (1992, 9, 27)+  , (1993, 9, 15)+  , (1994, 9, 5)+  , (1995, 9, 24)+  , (1996, 9, 13)+  , (1997, 10, 1)+  , (1998, 9, 20)+  , (1999, 9, 10)+  , (2000, 9, 29)+  , (2001, 9, 17)+  , (2002, 9, 6)+  , (2003, 9, 26)+  , (2004, 9, 15)+  , (2005, 10, 3)+  , (2006, 9, 22)+  , (2007, 9, 12)+  , (2008, 9, 29)+  , (2009, 9, 18)+  , (2010, 9, 8)+  , (2011, 9, 28)+  , (2012, 9, 18)+  , (2013, 9, 4)+  , (2014, 9, 24)+  , (2015, 9, 13)+  , (2016, 10, 2)+  , (2017, 9, 20)+  , (2018, 9, 9)+  , (2019, 9, 29)+  , (2020, 9, 18)+  , (2021, 9, 6)+  , (2022, 9, 25)+  , (2023, 9, 15)+  , (2024, 10, 2)+  , (2025, 9, 22)+  , (2026, 9, 11)+  , (2027, 10, 1)+  , (2028, 9, 20)+  , (2029, 9, 9)+  , (2030, 9, 27)+  , (2031, 9, 17)+  , (2032, 9, 5)+  , (2033, 9, 23)+  , (2034, 9, 13)+  , (2035, 10, 3)+  , (2036, 9, 21)+  , (2037, 9, 9)+  , (2038, 9, 29)+  , (2039, 9, 18)+  , (2040, 9, 7)+  , (2041, 9, 25)+  , (2042, 9, 14)+  , (2043, 10, 4)+  , (2044, 9, 21)+  , (2045, 9, 11)+  , (2046, 9, 30)+  , (2047, 9, 20)+  , (2048, 9, 7)+  , (2049, 9, 26)+  , (2050, 9, 16)+  ]++tishaBAv :: TimeData+tishaBAv = computedDays tishaBAv'++tishaBAv' :: [TimeObject]+tishaBAv' = mapMaybe toTimeObjectM+  [ (1950, 7, 22)+  , (1951, 8, 11)+  , (1952, 7, 30)+  , (1953, 7, 20)+  , (1954, 8, 7)+  , (1955, 7, 27)+  , (1956, 7, 16)+  , (1957, 8, 5)+  , (1958, 7, 26)+  , (1959, 8, 12)+  , (1960, 8, 1)+  , (1961, 7, 22)+  , (1962, 8, 8)+  , (1963, 7, 29)+  , (1964, 7, 18)+  , (1965, 8, 7)+  , (1966, 7, 25)+  , (1967, 8, 14)+  , (1968, 8, 3)+  , (1969, 7, 23)+  , (1970, 8, 10)+  , (1971, 7, 31)+  , (1972, 7, 19)+  , (1973, 8, 6)+  , (1974, 7, 27)+  , (1975, 7, 16)+  , (1976, 8, 4)+  , (1977, 7, 23)+  , (1978, 8, 12)+  , (1979, 8, 1)+  , (1980, 7, 21)+  , (1981, 8, 8)+  , (1982, 7, 28)+  , (1983, 7, 18)+  , (1984, 8, 6)+  , (1985, 7, 27)+  , (1986, 8, 13)+  , (1987, 8, 3)+  , (1988, 7, 23)+  , (1989, 8, 9)+  , (1990, 7, 30)+  , (1991, 7, 20)+  , (1992, 8, 8)+  , (1993, 7, 26)+  , (1994, 7, 16)+  , (1995, 8, 5)+  , (1996, 7, 24)+  , (1997, 8, 11)+  , (1998, 8, 1)+  , (1999, 7, 21)+  , (2000, 8, 9)+  , (2001, 7, 28)+  , (2002, 7, 17)+  , (2003, 8, 6)+  , (2004, 7, 26)+  , (2005, 8, 13)+  , (2006, 8, 2)+  , (2007, 7, 23)+  , (2008, 8, 9)+  , (2009, 7, 29)+  , (2010, 7, 19)+  , (2011, 8, 8)+  , (2012, 7, 28)+  , (2013, 7, 15)+  , (2014, 8, 4)+  , (2015, 7, 25)+  , (2016, 8, 13)+  , (2017, 7, 31)+  , (2018, 7, 21)+  , (2019, 8, 10)+  , (2020, 7, 29)+  , (2021, 7, 17)+  , (2022, 8, 6)+  , (2023, 7, 26)+  , (2024, 8, 12)+  , (2025, 8, 2)+  , (2026, 7, 22)+  , (2027, 8, 11)+  , (2028, 7, 31)+  , (2029, 7, 21)+  , (2030, 8, 7)+  , (2031, 7, 28)+  , (2032, 7, 17)+  , (2033, 8, 3)+  , (2034, 7, 24)+  , (2035, 8, 13)+  , (2036, 8, 2)+  , (2037, 7, 20)+  , (2038, 8, 9)+  , (2039, 7, 30)+  , (2040, 7, 18)+  , (2041, 8, 5)+  , (2042, 7, 26)+  , (2043, 8, 15)+  , (2044, 8, 1)+  , (2045, 7, 22)+  , (2046, 8, 11)+  , (2047, 7, 31)+  , (2048, 7, 18)+  , (2049, 8, 7)+  , (2050, 7, 27)+  ]++yomHaatzmaut :: TimeData+yomHaatzmaut = computedDays yomHaatzmaut'++yomHaatzmaut' :: [TimeObject]+yomHaatzmaut' = mapMaybe toTimeObjectM+  [ (1950, 4, 19)+  , (1951, 5, 9)+  , (1952, 4, 29)+  , (1953, 4, 19)+  , (1954, 5, 5)+  , (1955, 4, 26)+  , (1956, 4, 15)+  , (1957, 5, 5)+  , (1958, 4, 23)+  , (1959, 5, 12)+  , (1960, 5, 1)+  , (1961, 4, 19)+  , (1962, 5, 8)+  , (1963, 4, 28)+  , (1964, 4, 15)+  , (1965, 5, 5)+  , (1966, 4, 24)+  , (1967, 5, 14)+  , (1968, 5, 1)+  , (1969, 4, 22)+  , (1970, 5, 10)+  , (1971, 4, 28)+  , (1972, 4, 18)+  , (1973, 5, 6)+  , (1974, 4, 24)+  , (1975, 4, 15)+  , (1976, 5, 4)+  , (1977, 4, 20)+  , (1978, 5, 10)+  , (1979, 5, 1)+  , (1980, 4, 20)+  , (1981, 5, 6)+  , (1982, 4, 27)+  , (1983, 4, 17)+  , (1984, 5, 6)+  , (1985, 4, 24)+  , (1986, 5, 13)+  , (1987, 5, 3)+  , (1988, 4, 20)+  , (1989, 5, 9)+  , (1990, 4, 29)+  , (1991, 4, 17)+  , (1992, 5, 6)+  , (1993, 4, 25)+  , (1994, 4, 13)+  , (1995, 5, 3)+  , (1996, 4, 23)+  , (1997, 5, 11)+  , (1998, 4, 29)+  , (1999, 4, 20)+  , (2000, 5, 9)+  , (2001, 4, 25)+  , (2002, 4, 16)+  , (2003, 5, 6)+  , (2004, 4, 26)+  , (2005, 5, 11)+  , (2006, 5, 2)+  , (2007, 4, 23)+  , (2008, 5, 7)+  , (2009, 4, 28)+  , (2010, 4, 19)+  , (2011, 5, 9)+  , (2012, 4, 25)+  , (2013, 4, 15)+  , (2014, 5, 5)+  , (2015, 4, 22)+  , (2016, 5, 11)+  , (2017, 5, 1)+  , (2018, 4, 18)+  , (2019, 5, 8)+  , (2020, 4, 28)+  , (2021, 4, 14)+  , (2022, 5, 4)+  , (2023, 4, 25)+  , (2024, 5, 13)+  , (2025, 4, 30)+  , (2026, 4, 21)+  , (2027, 5, 11)+  , (2028, 5, 1)+  , (2029, 4, 18)+  , (2030, 5, 7)+  , (2031, 4, 28)+  , (2032, 4, 14)+  , (2033, 5, 3)+  , (2034, 4, 24)+  , (2035, 5, 14)+  , (2036, 4, 30)+  , (2037, 4, 20)+  , (2038, 5, 10)+  , (2039, 4, 27)+  , (2040, 4, 17)+  , (2041, 5, 6)+  , (2042, 4, 23)+  , (2043, 5, 13)+  , (2044, 5, 2)+  , (2045, 4, 19)+  , (2046, 5, 9)+  , (2047, 4, 30)+  , (2048, 4, 15)+  , (2049, 5, 5)+  , (2050, 4, 26)+  ]++eidalAdha :: TimeData+eidalAdha = computedDays eidalAdha'++eidalAdha' :: [TimeObject]+eidalAdha' = mapMaybe toTimeObjectM+  [ (2000, 3, 16)+  , (2001, 3, 5)+  , (2002, 2, 22)+  , (2003, 2, 11)+  , (2004, 2, 1)+  , (2005, 1, 21)+  , (2006, 1, 10)+  , (2006, 12, 31)+  , (2007, 12, 20)+  , (2008, 12, 8)+  , (2009, 11, 27)+  , (2011, 11, 6)+  , (2012, 10, 26)+  , (2013, 10, 15)+  , (2014, 10, 4)+  , (2015, 8, 23)+  , (2016, 9, 11)+  , (2017, 9, 1)+  , (2018, 8, 21)+  , (2019, 8, 11)+  , (2020, 7, 31)+  , (2021, 7, 20)+  , (2022, 7, 9)+  , (2023, 6, 28)+  , (2024, 6, 16)+  , (2025, 6, 6)+  , (2026, 5, 27)+  , (2027, 5, 16)+  , (2028, 5, 5)+  , (2029, 4, 24)+  ]++eidalFitr :: TimeData+eidalFitr = computedDays eidalFitr'++eidalFitr' :: [TimeObject]+eidalFitr' = mapMaybe toTimeObjectM+  [ (2000, 1, 8)+  , (2000, 12, 27)+  , (2001, 12, 16)+  , (2002, 12, 5)+  , (2003, 11, 25)+  , (2004, 11, 14)+  , (2005, 11, 3)+  , (2006, 10, 23)+  , (2007, 10, 13)+  , (2008, 10, 1)+  , (2009, 9, 20)+  , (2010, 9, 10)+  , (2011, 8, 30)+  , (2012, 8, 19)+  , (2013, 8, 8)+  , (2014, 7, 28)+  , (2015, 7, 17)+  , (2016, 7, 6)+  , (2017, 6, 25)+  , (2018, 6, 15)+  , (2019, 6, 4)+  , (2020, 5, 24)+  , (2021, 5, 13)+  , (2022, 5, 2)+  , (2023, 4, 21)+  , (2024, 4, 10)+  , (2025, 3, 30)+  , (2026, 3, 20)+  , (2027, 3, 9)+  , (2028, 2, 26)+  , (2029, 2, 14)+  ]++rajab :: TimeData+rajab = computedDays rajab'++rajab' :: [TimeObject]+rajab' = mapMaybe toTimeObjectM+  [ (1999, 10, 10)+  , (2000, 9, 28)+  , (2001, 9, 18)+  , (2002, 9, 8)+  , (2003, 8, 29)+  , (2004, 8, 17)+  , (2005, 8, 6)+  , (2006, 7, 26)+  , (2007, 7, 15)+  , (2008, 7, 4)+  , (2009, 6, 24)+  , (2010, 6, 13)+  , (2011, 6, 3)+  , (2012, 5, 22)+  , (2013, 5, 11)+  , (2014, 4, 30)+  , (2015, 4, 20)+  , (2016, 4, 8)+  , (2017, 3, 29)+  , (2018, 3, 18)+  , (2019, 3, 8)+  , (2020, 2, 25)+  , (2021, 2, 13)+  , (2022, 2, 2)+  , (2023, 1, 23)+  , (2024, 1, 13)+  , (2025, 1, 1)+  , (2025, 12, 21)+  , (2026, 12, 10)+  , (2027, 11, 29)+  , (2028, 11, 18)+  ]++muharram :: TimeData+muharram = computedDays muharram'++muharram' :: [TimeObject]+muharram' = mapMaybe toTimeObjectM+  [ (1998, 4, 27)+  , (1999, 4, 17)+  , (2000, 4, 6)+  , (2001, 3, 26)+  , (2002, 3, 15)+  , (2003, 4, 4)+  , (2004, 2, 21)+  , (2005, 2, 10)+  , (2006, 1, 31)+  , (2007, 1, 20)+  , (2008, 1, 10)+  , (2009, 12, 18)+  , (2010, 12, 7)+  , (2011, 11, 26)+  , (2012, 11, 15)+  , (2013, 11, 4)+  , (2014, 10, 25)+  , (2015, 10, 14)+  , (2016, 10, 2)+  , (2017, 9, 21)+  , (2018, 9, 11)+  , (2019, 8, 31)+  , (2020, 8, 20)+  , (2021, 8, 9)+  , (2022, 7, 30)+  , (2023, 7, 19)+  , (2024, 7, 7)+  , (2025, 6, 26)+  , (2026, 6, 16)+  , (2027, 6, 6)+  , (2028, 5, 25)+  ]++ramadan :: TimeData+ramadan = computedDays ramadan'++ramadan' :: [TimeObject]+ramadan' = mapMaybe toTimeObjectM+  [ (1999, 12, 9)+  , (2000, 11, 27)+  , (2001, 11, 16)+  , (2002, 11, 6)+  , (2003, 10, 26)+  , (2004, 10, 15)+  , (2005, 10, 4)+  , (2006, 9, 24)+  , (2007, 9, 13)+  , (2008, 9, 1)+  , (2009, 8, 22)+  , (2010, 8, 11)+  , (2011, 8, 1)+  , (2012, 7, 20)+  , (2013, 7, 9)+  , (2014, 6, 28)+  , (2015, 6, 18)+  , (2016, 6, 6)+  , (2017, 5, 27)+  , (2018, 5, 16)+  , (2019, 5, 6)+  , (2020, 4, 24)+  , (2021, 4, 13)+  , (2022, 4, 2)+  , (2023, 3, 23)+  , (2024, 3, 11)+  , (2025, 3, 1)+  , (2026, 2, 18)+  , (2027, 2, 8)+  , (2028, 1, 28)+  , (2029, 1, 16)+  ]++mawlid :: TimeData+mawlid = computedDays mawlid'++mawlid' :: [TimeObject]+mawlid' = mapMaybe toTimeObjectM+  [ (1999, 6, 26)+  , (2000, 6, 14)+  , (2001, 6, 4)+  , (2002, 5, 24)+  , (2003, 5, 13)+  , (2004, 5, 1)+  , (2005, 4, 21)+  , (2006, 4, 10)+  , (2007, 3, 31)+  , (2008, 3, 20)+  , (2009, 3, 9)+  , (2010, 2, 26)+  , (2011, 2, 15)+  , (2012, 2, 4)+  , (2013, 1, 24)+  , (2014, 1, 13)+  , (2015, 1, 3)+  , (2015, 12, 23)+  , (2016, 12, 11)+  , (2017, 11, 30)+  , (2018, 11, 20)+  , (2019, 11, 9)+  , (2020, 10, 29)+  , (2021, 10, 18)+  , (2022, 10, 8)+  , (2023, 9, 27)+  , (2024, 9, 15)+  , (2025, 9, 4)+  , (2026, 8, 25)+  , (2027, 8, 14)+  , (2028, 8, 3)+  ]++tuBishvat :: TimeData+tuBishvat = computedDays tuBishvat'++tuBishvat' :: [TimeObject]+tuBishvat' = mapMaybe toTimeObjectM+  [ (1950, 2, 1)+  , (1951, 1, 21)+  , (1952, 2, 10)+  , (1953, 1, 30)+  , (1954, 1, 18)+  , (1955, 2, 6)+  , (1956, 1, 27)+  , (1957, 1, 16)+  , (1958, 2, 4)+  , (1959, 1, 23)+  , (1960, 2, 12)+  , (1961, 1, 31)+  , (1962, 1, 19)+  , (1963, 2, 8)+  , (1964, 1, 28)+  , (1965, 1, 17)+  , (1966, 2, 4)+  , (1967, 1, 25)+  , (1968, 2, 13)+  , (1969, 2, 2)+  , (1970, 1, 21)+  , (1971, 2, 9)+  , (1972, 1, 30)+  , (1973, 1, 17)+  , (1974, 2, 6)+  , (1975, 1, 26)+  , (1976, 1, 16)+  , (1977, 2, 2)+  , (1978, 1, 22)+  , (1979, 2, 11)+  , (1980, 2, 1)+  , (1981, 1, 19)+  , (1982, 2, 7)+  , (1983, 1, 28)+  , (1984, 1, 18)+  , (1985, 2, 5)+  , (1986, 1, 24)+  , (1987, 2, 13)+  , (1988, 2, 2)+  , (1989, 1, 20)+  , (1990, 2, 9)+  , (1991, 1, 29)+  , (1992, 1, 19)+  , (1993, 2, 5)+  , (1994, 1, 26)+  , (1995, 1, 15)+  , (1996, 2, 4)+  , (1997, 1, 22)+  , (1998, 2, 10)+  , (1999, 1, 31)+  , (2000, 1, 21)+  , (2001, 2, 7)+  , (2002, 1, 27)+  , (2003, 1, 17)+  , (2004, 2, 6)+  , (2005, 1, 24)+  , (2006, 2, 12)+  , (2007, 2, 2)+  , (2008, 1, 21)+  , (2009, 2, 8)+  , (2010, 1, 29)+  , (2011, 1, 19)+  , (2012, 2, 7)+  , (2013, 1, 25)+  , (2014, 1, 15)+  , (2015, 2, 3)+  , (2016, 1, 24)+  , (2017, 2, 10)+  , (2018, 1, 30)+  , (2019, 1, 20)+  , (2020, 2, 9)+  , (2021, 1, 27)+  , (2022, 1, 16)+  , (2023, 2, 5)+  , (2024, 1, 24)+  , (2025, 2, 12)+  , (2026, 2, 1)+  , (2027, 1, 22)+  , (2028, 2, 11)+  , (2029, 1, 30)+  , (2030, 1, 18)+  , (2031, 2, 7)+  , (2032, 1, 27)+  , (2033, 1, 14)+  , (2034, 2, 3)+  , (2035, 1, 24)+  , (2036, 2, 12)+  , (2037, 1, 30)+  , (2038, 1, 20)+  , (2039, 2, 8)+  , (2040, 1, 29)+  , (2041, 1, 16)+  , (2042, 2, 4)+  , (2043, 1, 25)+  , (2044, 2, 12)+  , (2045, 2, 1)+  , (2046, 1, 21)+  , (2047, 2, 10)+  , (2048, 1, 29)+  , (2049, 1, 17)+  , (2050, 2, 6)+  ]++dhanteras :: TimeData+dhanteras = computedDays dhanteras'++dhanteras' :: [TimeObject]+dhanteras' = mapMaybe toTimeObjectM+  [ (2000, 10, 24)+  , (2001, 11, 12)+  , (2002, 11, 2)+  , (2003, 10, 23)+  , (2004, 11, 10)+  , (2005, 10, 30)+  , (2006, 10, 19)+  , (2007, 11, 7)+  , (2008, 10, 26)+  , (2009, 10, 15)+  , (2010, 11, 3)+  , (2011, 10, 24)+  , (2012, 11, 11)+  , (2013, 11, 1)+  , (2014, 10, 21)+  , (2015, 11, 9)+  , (2016, 10, 28)+  , (2017, 10, 17)+  , (2018, 11, 5)+  , (2019, 10, 25)+  , (2020, 11, 13)+  , (2021, 11, 2)+  , (2022, 10, 22)+  , (2023, 11, 10)+  , (2024, 10, 29)+  , (2025, 10, 18)+  , (2026, 11, 6)+  , (2027, 10, 27)+  , (2028, 10, 15)+  , (2029, 11, 4)+  , (2030, 10, 24)+  ]++navaratri :: TimeData+navaratri = computedDays navaratri'++navaratri' :: [TimeObject]+navaratri' = mapMaybe toTimeObjectM+  [ (2000, 9, 28)+  , (2001, 10, 17)+  , (2002, 10, 7)+  , (2003, 9, 26)+  , (2004, 10, 14)+  , (2005, 10, 4)+  , (2006, 9, 23)+  , (2007, 10, 12)+  , (2008, 9, 30)+  , (2009, 9, 19)+  , (2010, 10, 8)+  , (2011, 9, 28)+  , (2012, 10, 16)+  , (2013, 10, 5)+  , (2014, 9, 25)+  , (2015, 10, 13)+  , (2016, 10, 1)+  , (2017, 9, 21)+  , (2018, 10, 9)+  , (2019, 9, 29)+  , (2020, 10, 17)+  , (2021, 10, 6)+  , (2022, 9, 26)+  , (2023, 10, 15)+  , (2024, 10, 3)+  , (2025, 9, 22)+  , (2026, 10, 11)+  , (2027, 9, 30)+  , (2028, 9, 19)+  , (2029, 10, 8)+  , (2030, 9, 27)+  ]++rakshaBandhan :: TimeData+rakshaBandhan = computedDays rakshaBandhan'++rakshaBandhan' :: [TimeObject]+rakshaBandhan' = mapMaybe toTimeObjectM+  [ (2000, 8, 15)+  , (2001, 8, 4)+  , (2002, 8, 22)+  , (2003, 8, 12)+  , (2004, 8, 29)+  , (2005, 8, 19)+  , (2006, 8, 9)+  , (2007, 8, 28)+  , (2008, 8, 16)+  , (2009, 8, 5)+  , (2010, 8, 24)+  , (2011, 8, 13)+  , (2012, 8, 2)+  , (2013, 8, 20)+  , (2014, 8, 10)+  , (2015, 8, 29)+  , (2016, 8, 18)+  , (2017, 8, 7)+  , (2018, 8, 26)+  , (2019, 8, 15)+  , (2020, 8, 3)+  , (2021, 8, 22)+  , (2022, 8, 11)+  , (2023, 8, 30)+  , (2024, 8, 19)+  , (2025, 8, 9)+  , (2026, 8, 28)+  , (2027, 8, 17)+  , (2028, 8, 5)+  , (2029, 8, 23)+  , (2030, 8, 13)+  ]++thaiPongal :: TimeData+thaiPongal = computedDays thaiPongal'++thaiPongal' :: [TimeObject]+thaiPongal' = mapMaybe toTimeObjectM+  [ (2000, 1, 15)+  , (2001, 1, 14)+  , (2002, 1, 14)+  , (2003, 1, 14)+  , (2004, 1, 15)+  , (2005, 1, 14)+  , (2006, 1, 14)+  , (2007, 1, 15)+  , (2008, 1, 15)+  , (2009, 1, 14)+  , (2010, 1, 14)+  , (2011, 1, 15)+  , (2012, 1, 15)+  , (2013, 1, 14)+  , (2014, 1, 14)+  , (2015, 1, 15)+  , (2016, 1, 15)+  , (2017, 1, 14)+  , (2018, 1, 14)+  , (2019, 1, 15)+  , (2020, 1, 15)+  , (2021, 1, 14)+  , (2022, 1, 14)+  , (2023, 1, 15)+  , (2024, 1, 15)+  , (2025, 1, 14)+  , (2026, 1, 14)+  , (2027, 1, 15)+  , (2028, 1, 15)+  , (2029, 1, 14)+  , (2030, 1, 14)+  ]++thiruOnam :: TimeData+thiruOnam = computedDays thiruOnam'++thiruOnam' :: [TimeObject]+thiruOnam' = mapMaybe toTimeObjectM+  [ (2000, 9, 10)+  , (2001, 8, 31)+  , (2002, 8, 21)+  , (2003, 9, 8)+  , (2004, 8, 28)+  , (2005, 9, 15)+  , (2006, 9, 5)+  , (2007, 8, 26)+  , (2008, 9, 12)+  , (2009, 9, 2)+  , (2010, 8, 23)+  , (2011, 9, 9)+  , (2012, 8, 29)+  , (2013, 8, 20)+  , (2014, 9, 6)+  , (2015, 8, 28)+  , (2016, 9, 13)+  , (2017, 9, 4)+  , (2018, 8, 24)+  , (2019, 9, 11)+  , (2020, 8, 31)+  , (2021, 8, 21)+  , (2022, 9, 8)+  , (2023, 8, 29)+  , (2024, 9, 15)+  , (2025, 9, 5)+  , (2026, 8, 26)+  , (2027, 9, 12)+  , (2028, 9, 1)+  , (2029, 8, 22)+  , (2030, 9, 9)+  ]++vasantPanchami :: TimeData+vasantPanchami = computedDays vasantPanchami'++vasantPanchami' :: [TimeObject]+vasantPanchami' = mapMaybe toTimeObjectM+  [ (2000, 2, 10)+  , (2001, 1, 29)+  , (2002, 2, 17)+  , (2003, 2, 6)+  , (2004, 1, 26)+  , (2005, 2, 13)+  , (2006, 2, 2)+  , (2007, 1, 23)+  , (2008, 2, 11)+  , (2009, 1, 31)+  , (2010, 1, 20)+  , (2011, 2, 8)+  , (2012, 1, 28)+  , (2013, 2, 15)+  , (2014, 2, 4)+  , (2015, 1, 24)+  , (2016, 2, 12)+  , (2017, 2, 1)+  , (2018, 1, 22)+  , (2019, 2, 10)+  , (2020, 1, 29)+  , (2021, 2, 16)+  , (2022, 2, 5)+  , (2023, 1, 26)+  , (2024, 2, 14)+  , (2025, 2, 2)+  , (2026, 1, 23)+  , (2027, 2, 11)+  , (2028, 1, 31)+  , (2029, 1, 19)+  , (2030, 2, 7)+  ]
Duckling/Time/Corpus.hs view
@@ -11,7 +11,9 @@  module Duckling.Time.Corpus   ( datetime+  , datetimeHoliday   , datetimeInterval+  , datetimeIntervalHoliday   , datetimeOpenInterval   , examples   ) where@@ -29,29 +31,49 @@ import Duckling.TimeGrain.Types hiding (add) import Duckling.Types hiding (Entity(..)) -datetime :: Datetime -> Grain -> Context -> SingleTimeValue-datetime d g ctx =-  timeValue tzSeries TimeObject {start = dt d, end = Nothing, grain = g}-  where-    DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx+datetime :: Datetime -> Grain -> Context -> TimeValue+datetime d g ctx = datetimeIntervalHolidayHelper (d, Nothing) g Nothing ctx -datetimeInterval :: (Datetime, Datetime) -> Grain -> Context -> SingleTimeValue-datetimeInterval (d1, d2) g ctx = timeValue tzSeries TimeObject-  {start = dt d1, end = Just $ dt d2, grain = g}+datetimeHoliday :: Datetime -> Grain -> Text -> Context -> TimeValue+datetimeHoliday d g h ctx =+  datetimeIntervalHolidayHelper (d, Nothing) g (Just h) ctx++datetimeInterval :: (Datetime, Datetime) -> Grain -> Context -> TimeValue+datetimeInterval (d1, d2) g ctx =+  datetimeIntervalHolidayHelper (d1, Just d2) g Nothing ctx++datetimeIntervalHoliday ::+  (Datetime, Datetime) -> Grain -> Text -> Context -> TimeValue+datetimeIntervalHoliday (d1, d2) g h ctx =+  datetimeIntervalHolidayHelper (d1, Just d2) g (Just h) ctx++datetimeIntervalHolidayHelper ::+  (Datetime, Maybe Datetime) -> Grain -> Maybe Text -> Context -> TimeValue+datetimeIntervalHolidayHelper (d1, md2) g hol ctx = TimeValue tv [tv] hol   where     DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx+    tv = timeValue tzSeries TimeObject {start = dt d1, end = d, grain = g}+    d = case md2 of+      Nothing -> Nothing+      Just d2 -> Just $ dt d2  datetimeOpenInterval-  :: IntervalDirection -> Datetime -> Grain -> Context -> SingleTimeValue-datetimeOpenInterval dir d g ctx = openInterval tzSeries dir TimeObject-  {start = dt d, end = Nothing, grain = g}+  :: IntervalDirection -> Datetime -> Grain -> Context -> TimeValue+datetimeOpenInterval dir d g ctx = TimeValue tv [tv] Nothing   where     DucklingTime (Series.ZoneSeriesTime _ tzSeries) = referenceTime ctx+    tv = openInterval tzSeries dir TimeObject+      {start = dt d, end = Nothing, grain = g} + check :: ToJSON a => (Context -> a) -> TestPredicate check f context Resolved{jsonValue} = case jsonValue of-  Object o -> toJSON (f context) == (Object $ H.delete "values" o)+  Object o -> deleteValues (toJSON (f context)) == deleteValues (Object o)   _ -> False+  where+    deleteValues :: Value -> Value+    deleteValues (Object o) = Object $ H.delete "values" o+    deleteValues _ = Object H.empty  examples :: ToJSON a => (Context -> a) -> [Text] -> [Example] examples f = examplesCustom (check f)
Duckling/Time/DA/Corpus.hs view
@@ -23,7 +23,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale DA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale DA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/DE/Corpus.hs view
@@ -24,10 +24,10 @@ import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (testContext {locale = makeLocale DE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale DE Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale DE Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale DE Nothing}, testOptions, examples)   where     examples =       [ "ein Hotel"@@ -413,37 +413,36 @@   , examples (datetimeInterval ((2012, 12, 21, 0, 0, 0), (2013, 3, 21, 0, 0, 0)) Day)              [ "diesen winter"              ]-  , examples (datetime (2013, 12, 25, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 25, 0, 0, 0) Day "Weihnachten")              [ "Weihnachten"              , "Weihnachtstag"              ]-  , examples (datetime (2013, 12, 31, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 31, 0, 0, 0) Day "Silvester")              [ "Silvester"              ]-  , examples (datetime (2014, 1, 1, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 1, 1, 0, 0, 0) Day "Neujahr")              [ "Neujahrstag"              , "Neujahr"              ]-  , examples (datetime (2013, 2, 14, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 2, 14, 0, 0, 0) Day "Valentinstag")              [ "Valentinstag"              ]-  , examples (datetime (2013, 5, 12, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Muttertag" )              [ "Muttertag"              ]-  , examples (datetime (2013, 6, 16, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Vatertag" )              [ "Vatertag"              ]-  , examples (datetime (2013, 10, 3, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 10, 3, 0, 0, 0) Day "Tag der Deutschen Einheit")              [ "Tag der Deutschen Einheit"-             , "3. Oktober"              ]-  , examples (datetime (2013, 10, 31, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 10, 31, 0, 0, 0) Day "Halloween")              [ "Halloween"              ]-  , examples (datetime (2013, 11, 1, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 1, 0, 0, 0) Day "Allerheiligen" )              [ "Allerheiligen"              ]-  , examples (datetime (2013, 12, 6, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 6, 0, 0, 0) Day "Nikolaus")              [ "Nikolaus"              , "Nikolaustag"              ]
Duckling/Time/DE/Rules.hs view
@@ -80,9 +80,9 @@  ruleHolidays :: [Rule] ruleHolidays = mkRuleHolidays-  [ ( "new year's day"                    , "neujahr(s?tag)?"+  [ ( "Neujahr"                           , "neujahr(s?tag)?"     , monthDay  1  1 )-  , ( "valentine's day"                   , "valentin'?stag"+  , ( "Valentinstag"                      , "valentin'?stag"     , monthDay  2 14 )   , ( "Schweizer Bundesfeiertag"     , "schweiz(er)? (bundes)?feiertag|bundes feiertag"@@ -92,21 +92,21 @@   , ( "Oesterreichischer Nationalfeiertag"     , "((ö)sterreichischer?)? nationalfeiertag|national feiertag"     , monthDay 10 26 )-  , ( "halloween day"                     , "hall?owe?en?"+  , ( "Halloween"                         , "hall?owe?en?"     , monthDay 10 31 )   , ( "Allerheiligen"                     , "allerheiligen?|aller heiligen?"     , monthDay 11  1 )   , ( "Nikolaus"                          , "nikolaus(tag)?|nikolaus tag|nikolo"     , monthDay 12  6 )-  , ( "christmas eve"                     , "heilig(er)? abend"+  , ( "Heiligabend"                       , "heilig(er)? abend"     , monthDay 12 24 )-  , ( "christmas"                         , "weih?nacht(en|stag)?"+  , ( "Weihnachten"                       , "weih?nacht(en|stag)?"     , monthDay 12 25 )-  , ( "new year's eve"                    , "silvester"+  , ( "Silvester"                         , "silvester"     , monthDay 12 31 )-  , ( "Mother's Day"                      , "mutt?ertag|mutt?er (tag)?"+  , ( "Muttertag"                      , "mutt?ertag|mutt?er (tag)?"     , nthDOWOfMonth 2 7 5 )-  , ( "Father's Day"                      , "vatt?er( ?tag)?"+  , ( "Vatertag"                      , "vatt?er( ?tag)?"     , nthDOWOfMonth 3 7 6 )   ] 
Duckling/Time/EL/Corpus.hs view
@@ -27,10 +27,10 @@ context = testContext {locale = makeLocale EL Nothing}  corpus :: Corpus-corpus = (context, allExamples)+corpus = (context, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (context, examples)+negativeCorpus = (context, testOptions, examples)   where     examples =       [ "ένας ενήληκας"
Duckling/Time/EN/AU/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,66 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 4, 25, 0, 0, 0) Day "ANZAC Day")+             [ "anzac day"+             ]+  , examples (datetimeHoliday (2013, 9, 1, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 9, 2, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 9, 1, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeIntervalHoliday ((2020, 2, 8, 0, 0, 0), (2020, 2, 11, 0, 0, 0)) Day "Royal Hobart Regatta")+             [ "Royal Hobart Regatta 2020"+             ]+  , examples (datetimeIntervalHoliday ((2018, 7, 8, 0, 0, 0), (2018, 7, 16, 0, 0, 0)) Day "NAIDOC Week")+             [ "NAIDOC week 2018"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 10, 7, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 10, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeHoliday (2018, 5, 28, 0, 0, 0) Day "Reconciliation Day")+             [ "reconciliation day 2018"+             ]+  , examples (datetimeHoliday (2019, 5, 27, 0, 0, 0) Day "Reconciliation Day")+             [ "reconciliation day 2019"              ]   ]
Duckling/Time/EN/AU/Rules.hs view
@@ -20,9 +20,12 @@ import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (parseInt) import Duckling.Regex.Types+import Duckling.Time.Computed (easterSunday) import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.Time.Types as TTime+import qualified Duckling.TimeGrain.Types as TG  ruleDDMM :: Rule ruleDDMM = Rule@@ -42,7 +45,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +72,76 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "ANZAC Day", "anzac day", monthDay 4 25 )+  , ( "Australia Day", "(ana|anniversary|australia|foundation) day"+    , monthDay 1 26 )+  , ( "Harmony Day", "harmony day", monthDay 3 21 )+  , ( "National Sorry Day", "national sorry day", monthDay 5 26 )+  , ( "Queensland Day", "queensland day", monthDay 6 6 )+  , ( "Remembrance Day", "remembrance day", monthDay 11 11 )+  , ( "Take our Daughters and Sons to Work Day"+    , "take our daughters and sons to work day", monthDay 1 5 ) +  -- Fixed day/week/month, year over year+  , ( "Adelaide Cup", "adelaide cup", nthDOWOfMonth 2 1 3 )+  , ( "Administrative Professionals' Day"+    , "(admin(istrative professionals'?)|secretaries'?) day"+    , nthDOWOfMonth 1 5 5 )+  , ( "Canberra Day", "canberra day", nthDOWOfMonth 2 1 3 )+  , ( "Eight Hours Day", "eight hours day", nthDOWOfMonth 2 1 3 )+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 1 7 9 )+  , ( "Labour Day", "labour day", nthDOWOfMonth 1 1 10 )+  , ( "Melbourne Cup Day", "melbourne cup day", nthDOWOfMonth 1 2 11 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "National Close the Gap Day", "national close the gap day"+    , nthDOWOfMonth 3 4 3 )+  , ( "National Tree Day", "(arbor|national tree) day"+    , predLastOf (dayOfWeek 7) (month 6) )+  , ( "National Schools Tree Day", "national schools tree day"+    , predLastOf (dayOfWeek 5) (month 6) )+  , ( "New South Wales Bank Holiday", "new south wales bank holiday"+    , nthDOWOfMonth 1 1 8 )+  , ( "Picnic Day", "(northern territory )?picnic day", nthDOWOfMonth 1 1 8 )+  , ( "Recreation Day", "recreation day", nthDOWOfMonth 1 1 10 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  , ( "Western Australia Day", "western australia day", nthDOWOfMonth 1 1 6 )++  -- Other+  , ( "Reconciliation Day", "reconciliation\\s+day"+    , predNthAfter 0 (dayOfWeek 1) (monthDay 5 26) )+  ]++rulePeriodicHolidays' :: [Rule]+rulePeriodicHolidays' = mkRuleHolidays'+  -- Fixed day/week/month, year over year+  -- Week from Sunday of July until following Sunday that has the second Friday+  [ ( "NAIDOC Week"+    , "(naidoc|national aboriginal and islander day observance committee) week"+    , let fri = nthDOWOfMonth 2 5 7+          start = cycleNthAfter False TG.Day (- 5) fri+          end = cycleNthAfter False TG.Day 2 fri+      in interval TTime.Open start end )+  -- 3 days ending on the second Monday of February+  , ( "Royal Hobart Regatta", "royal hobart regatta"+    , let end = nthDOWOfMonth 2 1 2+      in interval TTime.Open (cycleNthAfter False TG.Day (- 2) end) end )+  ]++ruleComputedHolidays :: [Rule]+ruleComputedHolidays = mkRuleHolidays+  [ ( "Easter Tuesday", "easter\\s+tue(sday)?"+    , cycleNthAfter False TG.Day 2 easterSunday )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ ruleComputedHolidays+  ++ rulePeriodicHolidays+  ++ rulePeriodicHolidays'
Duckling/Time/EN/BZ/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,54 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 11, 19, 0, 0, 0) Day "Garifuna Settlement Day")+             [ "garifuna settlement day"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"              ]   ]
Duckling/Time/EN/BZ/Rules.hs view
@@ -42,7 +42,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +69,26 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Garifuna Settlement Day", "garifuna settlement day", monthDay 11 19 )+  , ( "Labour Day", "labour day", monthDay 5 1 )+  , ( "National Heroes and Benefactors Day"+    , "national heroes and benefactors day", monthDay 3 9 )+  , ( "Pan American Day", "pan american day", monthDay 10 12 )+  , ( "St. George's Caye Day", "st\\.? george'?s caye day", monthDay 9 10 ) +  -- Fixed day/week/month, year over year+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ rulePeriodicHolidays
Duckling/Time/EN/CA/Corpus.hs view
@@ -33,29 +33,114 @@              , "10/31/74"              , "10-31-74"              , "10.31.1974"+             , "10 31 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "4/25 at 4:00pm"              ]-  , examples (datetime (2013, 10, 14, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 10, 14, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 10, 13, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 10, 13, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 10, 8, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 10, 8, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 10, 10, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 10, 10, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 10, 9, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 10, 9, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 7, 1, 0, 0, 0) Day "Memorial Day")+             [ "canada day"+             , "memorial day"+             , "dominion day"+             , "Next Memorial Day"+             ]+  , examples (datetimeHoliday (2013, 4, 9, 0, 0, 0) Day "Vimy Ridge Day")+             [ "vimy ridge day"+             ]+  , examples (datetimeHoliday (2013, 7, 12, 0, 0, 0) Day "The Twelfth")+             [ "the Glorious Twelfth"+             , "Orangemen's Day"+             , "the twelfth"+             ]+  , examples (datetimeHoliday (2013, 6, 24, 0, 0, 0) Day "Discovery Day")+             [ "discovery day"+             , "next discovery  day"+             ]+  , examples (datetimeHoliday (2018, 6, 25, 0, 0, 0) Day "Discovery Day")+             [ "discovery day 2018"+             ]+  , examples (datetimeHoliday (2020, 6, 22, 0, 0, 0) Day "Discovery Day")+             [ "discovery   day 2020"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2018, 5, 21, 0, 0, 0) Day "Victoria Day")+             [ "Victoria day 2018"+             , "Sovereign's birthday 2018"+             ]+  , examples (datetimeHoliday (2013, 8, 5, 0, 0, 0) Day "Civic Holiday")+             [ "Civic Holiday"+             , "British Columbia Day"+             , "Natal Day"+             , "New Brunswick Day"+             , "Saskatchewan Day"+             , "Terry Fox Day"+             ]+  , examples (datetimeHoliday (2018, 2, 19, 0, 0, 0) Day "Family Day")+             [ "family day 2018"+             , "islander day 2018"+             , "louis riel day 2018"+             , "nova scotia heritage day 2018"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2017, 5, 22, 0, 0, 0) Day "National Patriots' Day")+             [ "national patriots' day 2017"+             ]+  , examples (datetimeHoliday (2018, 5, 21, 0, 0, 0) Day "National Patriots' Day")+             [ "national patriots' day 2018"+             ]+  , examples (datetimeHoliday (2019, 5, 20, 0, 0, 0) Day "National Patriots' Day")+             [ "national patriots' day 2019"+             ]+  , examples (datetimeHoliday (2013, 9, 2, 0, 0, 0) Day "Labour Day")+             [ "labor day"+             ]+  , examples (datetimeHoliday (2012, 9, 3, 0, 0, 0) Day "Labour Day")+             [ "labor day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeIntervalHoliday ((2013, 8, 30, 18, 0, 0), (2013, 9, 3, 0, 0, 0)) Hour "Labour Day weekend")+             [ "labor day weekend"+             ]+  , examples (datetimeHoliday (2013, 2, 2, 0, 0, 0) Day "Groundhog Day")+             [ "Groundhog day"+             , "groundhogs day"              ]   ]
Duckling/Time/EN/CA/Rules.hs view
@@ -44,7 +44,7 @@ ruleMMDDYYYY = Rule   { name = "mm/dd/yyyy"   , pattern =-    [ regex "(1[0-2]|0?[1-9])[/-](3[01]|[12]\\d|0?[1-9])[-/](\\d{2,4})"+    [ regex "(1[0-2]|0?[1-9])[-/\\s](3[01]|[12]\\d|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (mm:dd:yy:_)):_) -> do@@ -71,20 +71,63 @@       _ -> Nothing   } --- Second Monday of October-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 2 1 10-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Anniversary of the Statute of Westminster", "anniversary of the statute of westminster", monthDay 12 11 )+  , ( "Memorial Day", "(canada|dominion|memorial) day", monthDay 7 1 )+  , ( "Groundhog Day", "groundhogs? day", monthDay 2 2 )+  , ( "Healthcare Aide Day", "healthcare aide day", monthDay 10 18 )+  , ( "National Aboriginal Day", "national aboriginal day", monthDay 6 21 )+  , ( "National Flag of Canada Day", "national flag of canada day", monthDay 2 15 )+  , ( "National Tartan Day", "national tartan day", monthDay 4 6 )+  , ( "Nunavut Day", "nunavut day", monthDay 7 9 )+  , ( "Remembrance Day", "remembrance day", monthDay 11 11 )+  , ( "St David's Day", "st\\.? david'?s day", monthDay 3 1 )+  , ( "St. Jean Baptiste Day", "st\\.? jean baptiste day", monthDay 6 24 )+  , ( "The Twelfth", "orangemen's day|the (glorious )?twelfth", monthDay 7 12 )+  , ( "Victoria Day", "sovereign's birthday|victoria day"+    , predLastOf (dayOfWeek 1) (monthDay 5 25) )+  , ( "Vimy Ridge Day", "vimy ridge day", monthDay 4 9 ) +  -- Fixed day/week/month, year over year+  , ( "Civic Holiday"+    , "british columbia day|civic holiday|natal day|new brunswick day|Saskatchewan Day|terry fox day"+    , nthDOWOfMonth 1 1 8+    )+  , ( "Family Day"+    , "(family|islander|louis riel|nova scotia heritage) day"+    , nthDOWOfMonth 3 1 2 )+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Gold Cup Parade", "gold cup parade", nthDOWOfMonth 3 5 8 )+  , ( "Heritage Day in Alberta", "heritage day in alberta", nthDOWOfMonth 1 1 8 )+  , ( "Labour Day", "labou?r day", nthDOWOfMonth 1 1 9 )+  -- Long weekend before the first Monday of September+  , ( "Labour Day weekend", "labou?r day week(\\s|-)?ends?"+    , longWEBefore $ nthDOWOfMonth 1 1 9+    )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Royal St. John's Regatta", "regatta day|royal st\\.? john's regatta"+    , nthDOWOfMonth 1 3 8 )+  , ( "Take our Daughters and Sons to Work Day"+    , "take our daughters and sons to work day", nthDOWOfMonth 1 3 11 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 2 1 10 )+  , ( "Yukon's Discovery Day", "(klondike gold|yukon's) discovery day"+    , nthDOWOfMonth 3 1 8 )++  -- Monday before May 25th+  , ( "National Patriots' Day", "national patriot'?s'? day"+    , predNthAfter (-1) (dayOfWeek 1) (monthDay 5 25) )++  -- Closest Monday to June 24th+  , ( "Discovery Day", "discovery\\s+day"+    , predNthClosest 0 (dayOfWeek 1) (monthDay 6 24) )+  ]+ rules :: [Rule] rules =   [ ruleMMDD   , ruleMMDDYYYY   , ruleMMDDYYYYDot-  , ruleThanksgiving   ]+  ++ rulePeriodicHolidays
Duckling/Time/EN/Corpus.hs view
@@ -12,21 +12,23 @@   ( corpus   , defaultCorpus   , negativeCorpus+  , latentCorpus   ) where  import Data.String import Prelude +import Duckling.Resolve import Duckling.Testing.Types hiding (examples) import Duckling.Time.Corpus import Duckling.Time.Types hiding (Month) import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  defaultCorpus :: Corpus-defaultCorpus = (testContext, allExamples ++ custom)+defaultCorpus = (testContext, testOptions, allExamples ++ custom)   where     custom = concat       [ examples (datetime (2013, 2, 15, 0, 0, 0) Day)@@ -45,31 +47,37 @@       , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)                  [ "4/25 at 4:00pm"                  ]-      , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+      , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")                  [ "thanksgiving day"                  , "thanksgiving"                  , "thanksgiving 2013"                  , "this thanksgiving"                  , "next thanksgiving day"+                 , "thanksgiving in 9 months"+                 , "thanksgiving 9 months from now"                  ]-      , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+      , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")                  [ "thanksgiving of next year"+                 , "thanksgiving in a year"                  , "thanksgiving 2014"                  ]-      , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+      , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")                  [ "last thanksgiving"                  , "thanksgiving day 2012"+                 , "thanksgiving 3 months ago"+                 , "thanksgiving 1 year ago"                  ]-      , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+      , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")                  [ "thanksgiving 2016"+                 , "thanksgiving in 3 years"                  ]-      , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+      , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")                  [ "thanksgiving 2017"                  ]       ]  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "laughing out loud"@@ -77,7 +85,6 @@       , "we are separated"       , "25"       , "this is the one"-      , "in 61"       , "this one"       , "this past one"       , "at single"@@ -94,8 +101,44 @@       , "at 650.650.6500"       , "at 650-650-6500"       , "two sixty a m"+      , "Pay ABC 2000"       ] +latentCorpus :: Corpus+latentCorpus = (testContext, testOptions {withLatent = True}, xs)+  where+    xs = concat+      [ examples (datetime (2013, 2, 24, 0, 0, 0) Day)+                 [ "the 24"+                 , "On 24th"+                 ]+      , examples (datetime (2013, 2, 12, 7, 0, 0) Hour)+                 [ "7"+                 ]+      --, examples (datetime (1954, 1, 1, 0, 0, 0) Year)+      --           [ "1954"+      --           ]+      , examples (datetime (2013, 5, 1, 0, 0, 0) Month)+                 [ "May"+                 ]+      , examples (datetimeInterval+          ((2013, 2, 12, 4, 0, 0), (2013, 2, 12, 12, 0, 0)) Hour)+                 [ "morning"+                 ]+      , examples (datetimeInterval+          ((2013, 2, 12, 12, 0, 0), (2013, 2, 12, 19, 0, 0)) Hour)+                 [ "afternoon"+                 ]+      , examples (datetimeInterval+          ((2013, 2, 12, 18, 0, 0), (2013, 2, 13, 0, 0, 0)) Hour)+                 [ "evening"+                 ]+      , examples (datetimeInterval+          ((2013, 2, 12, 18, 0, 0), (2013, 2, 13, 0, 0, 0)) Hour)+                 [ "night"+                 ]+      ]+ allExamples :: [Example] allExamples = concat   [ examples (datetime (2013, 2, 12, 4, 30, 0) Second)@@ -110,6 +153,9 @@   , examples (datetime (2013, 2, 1, 0, 0, 0) Day)              [ "2/2013"              ]+  , examples (datetime (2014, 1, 1, 0, 0, 0) Year)+             [ "in 2014"+             ]   , examples (datetime (2013, 2, 11, 0, 0, 0) Day)              [ "yesterday"              ]@@ -184,6 +230,10 @@   , examples (datetime (2013, 8, 8, 0, 0, 0) Day)              [ "Aug 8"              ]+  , examples (datetime (2014, 3, 1, 0, 0, 0) Month)+             [ "March in 1 year"+             , "March in a year"+             ]   , examples (datetime (2014, 7, 18, 0, 0, 0) Day)              [ "Fri, Jul 18"              , "Jul 18, Fri"@@ -236,6 +286,18 @@   , examples (datetime (2013, 3, 1, 0, 0, 0) Month)              [ "next month"              ]+  , examples (datetime (2013, 3, 20, 0, 0, 0) Day)+             [ "20 of next month"+             , "20th of the next month"+             , "20th day of next month"+             ]+  , examples (datetime (2013, 2, 20, 0, 0, 0) Day)+             [ "20th of the current month"+             , "20 of this month"+             ]+  , examples (datetime (2013, 1, 20, 0, 0, 0) Day)+             [ "20th of the previous month"+             ]   , examples (datetime (2013, 1, 1, 0, 0, 0) Quarter)              [ "this quarter"              , "this qtr"@@ -364,6 +426,9 @@              [ "3:18am"              , "3:18a"              ]+  , examples (datetime (2016, 2, 1, 7, 0, 0) Hour)+             [ "at 7 in 3 years"+             ]   , examples (datetime (2013, 2, 12, 15, 0, 0) Hour)              [ "at 3pm"              , "@ 3pm"@@ -536,9 +601,6 @@   , examples (datetime (2011, 2, 1, 0, 0, 0) Month)              [ "two years ago"              ]-  , examples (datetime (1954, 1, 1, 0, 0, 0) Year)-             [ "1954"-             ]   , examples (datetime (2013, 2, 19, 4, 0, 0) Hour)              [ "7 days hence"              ]@@ -574,94 +636,152 @@   , examples (datetimeInterval ((2012, 12, 21, 0, 0, 0), (2013, 3, 21, 0, 0, 0)) Day)              [ "this winter"              ]-  , examples (datetime (2013, 12, 25, 0, 0, 0) Day)+  , examples (datetimeInterval ((2012, 12, 21, 0, 0, 0), (2013, 3, 19, 0, 0, 0)) Day)+             [ "this season"+             , "current seasons"+             ]+  , examples (datetimeInterval ((2012, 9, 23, 0, 0, 0), (2012, 12, 20, 0, 0, 0)) Day)+             [ "last season"+             , "past seasons"+             , "previous seasons"+             ]+  , examples (datetimeInterval ((2013, 3, 20, 0, 0, 0), (2013, 6, 20, 0, 0, 0)) Day)+             [ "next season"+             ]+  , examples (datetimeInterval ((2013, 2, 11, 18, 0, 0), (2013, 2, 12, 0, 0, 0)) Hour)+             [ "last night"+             , "yesterday evening"+             ]+  , examples (datetimeInterval ((2013, 2, 11, 21, 0, 0), (2013, 2, 12, 0, 0, 0)) Hour)+             [ "late last night"+             ]+  , examples (datetimeHoliday (2013, 12, 25, 0, 0, 0) Day "Christmas")              [ "xmas"              , "christmas"              , "christmas day"              ]-  , examples (datetime (2013, 12, 31, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 25, 18, 0, 0) Hour "Christmas")+             [ "xmas at 6 pm"+             ]+  , examples (datetimeIntervalHoliday ((2013, 12, 25, 4, 0, 0), (2013, 12, 25, 12, 0, 0)) Hour "Christmas")+             [ "morning of xmas"+             , "morning of christmas 2013"+             , "morning of this christmas day"+             ]+  , examples (datetimeHoliday (2013, 12, 31, 0, 0, 0) Day "New Year's Eve")              [ "new year's eve"              , "new years eve"              ]-  , examples (datetime (2014, 1, 1, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 1, 1, 0, 0, 0) Day "New Year's Day")              [ "new year's day"              , "new years day"              ]-  , examples (datetime (2013, 2, 14, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 2, 14, 0, 0, 0) Day "Valentine's Day")              [ "valentine's day"              , "valentine day"              ]-  , examples (datetime (2013, 5, 12, 0, 0, 0) Day)-             [ "Mother's Day"-             , "next mothers day"-             ]-  , examples (datetime (2012, 5, 13, 0, 0, 0) Day)-             [ "last mothers day"-             ]-  , examples (datetime (2014, 5, 11, 0, 0, 0) Day)-             [ "mothers day 2014"-             ]-  , examples (datetime (2013, 6, 16, 0, 0, 0) Day)-             [ "Father's Day"-             ]-  , examples (datetime (2012, 6, 17, 0, 0, 0) Day)-             [ "last fathers day"-             ]-  , examples (datetime (1996, 6, 16, 0, 0, 0) Day)-             [ "fathers day 1996"-             ]-  , examples (datetime (2013, 5, 27, 0, 0, 0) Day)-             [ "memorial day"-             , "Next Memorial Day"-             ]-  , examples (datetime (2012, 5, 28, 0, 0, 0) Day)-             [ "last memorial day"-             , "memorial day of last year"-             ]-  , examples (datetimeInterval ((2013, 5, 24, 18, 0, 0), (2013, 5, 28, 0, 0, 0)) Hour)-             [ "memorial day week-end"-             ]   , examples (datetime (2013, 7, 4, 0, 0, 0) Day)-             [ "independence day"-             , "4th of July"+             [ "4th of July"              , "4 of july"              ]-  , examples (datetime (2013, 9, 2, 0, 0, 0) Day)-             [ "labor day"-             ]-  , examples (datetime (2012, 9, 3, 0, 0, 0) Day)-             [ "labor day of last year"-             , "Labor Day 2012"-             ]-  , examples (datetimeInterval ((2013, 8, 30, 18, 0, 0), (2013, 9, 3, 0, 0, 0)) Hour)-             [ "labor day weekend"-             ]-  , examples (datetime (2013, 10, 31, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 10, 31, 0, 0, 0) Day "Halloween")              [ "halloween"              , "next halloween"              , "Halloween 2013"              ]-  , examples (datetime (2013, 11, 29, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 29, 0, 0, 0) Day "Black Friday")              [ "black friday"              , "black friday of this year"              , "black friday 2013"              ]-  , examples (datetime (2017, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 24, 0, 0, 0) Day "Black Friday")              [ "black friday 2017"              ]-  , examples (datetime (2014, 1, 20, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 10, 16, 0, 0, 0) Day "Boss's Day")+             [ "boss's day"+             , "boss's"+             , "boss day"+             , "next boss's day"+             ]+  , examples (datetimeHoliday (2016, 10, 17, 0, 0, 0) Day "Boss's Day")+             [ "boss's day 2016"+             ]+  , examples (datetimeHoliday (2021, 10, 15, 0, 0, 0) Day "Boss's Day")+             [ "boss's day 2021"+             ]+  , examples (datetimeHoliday (2014, 1, 20, 0, 0, 0) Day "Martin Luther King's Day")              [ "MLK day"              , "next Martin Luther King day"              , "this MLK day"              ]-  , examples (datetime (2013, 1, 21, 0, 0, 0) Day)-             [ "last MLK day"+  , examples (datetimeHoliday (2013, 1, 21, 0, 0, 0) Day "Martin Luther King's Day")+             [ "last MLK Jr. day"              , "MLK day 2013"              ]-  , examples (datetime (2012, 1, 16, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 1, 16, 0, 0, 0) Day "Martin Luther King's Day")              [ "MLK day of last year"              , "MLK day 2012"+             , "Civil Rights Day of last year"              ]+  , examples (datetimeHoliday (2013, 11, 1, 0, 0, 0) Day "World Vegan Day")+             [ "world vegan day"+             ]+  , examples (datetimeHoliday (2013, 3, 31, 0, 0, 0) Day "Easter Sunday")+             [ "easter"+             , "easter 2013"+             ]+ , examples (datetimeHoliday (2012, 4, 08, 0, 0, 0) Day "Easter Sunday")+             [ "last easter"+             ]+  , examples (datetimeHoliday (2013, 4, 1, 0, 0, 0) Day "Easter Monday")+             [ "easter mon"+             ]+  , examples (datetimeHoliday (2010, 4, 4, 0, 0, 0) Day "Easter Sunday")+             [ "easter 2010"+             , "Easter Sunday two thousand ten"+             ]+  , examples (datetime (2013, 4, 3, 0, 0, 0) Day)+             [ "three days after Easter"+             ]+  , examples (datetimeHoliday (2013, 3, 28, 0, 0, 0) Day "Maundy Thursday")+             [ "Maundy Thursday"+             , "Covenant thu"+             , "Thu of Mysteries"+             ]+  , examples (datetimeHoliday (2013, 5, 19, 0, 0, 0) Day "Pentecost")+             [ "Pentecost"+             , "white sunday 2013"+             ]+  , examples (datetimeHoliday (2013, 5, 20, 0, 0, 0) Day "Whit Monday")+             [ "whit monday"+             , "Monday of the Holy Spirit"+             ]+  , examples (datetimeHoliday (2013, 3, 24, 0, 0, 0) Day "Palm Sunday")+             [ "palm sunday"+             , "branch sunday 2013"+             ]+  , examples (datetimeHoliday (2013, 5, 26, 0, 0, 0) Day "Trinity Sunday")+             [ "trinity sunday"+             ]+  , examples (datetimeHoliday (2013, 2, 12, 0, 0, 0) Day "Shrove Tuesday")+             [ "pancake day 2013"+             ]+  , examples (datetimeIntervalHoliday ((2018, 2, 14, 0, 0, 0), (2018, 4, 1, 0, 0, 0)) Day "Lent")+             [ "lent 2018"+             ]+  , examples (datetimeHoliday (2018, 4, 8, 0, 0, 0) Day "Orthodox Easter Sunday")+             [ "orthodox easter 2018"+             ]+  , examples (datetimeHoliday (2018, 2, 19, 0, 0, 0) Day "Clean Monday")+             [ "clean monday 2018"+             , "orthodox shrove monday two thousand eighteen"+             ]+  , examples (datetimeHoliday (2018, 3, 31, 0, 0, 0) Day "Lazarus Saturday")+             [ "lazarus saturday 2018"+             ]+  , examples (datetimeIntervalHoliday ((2018, 2, 19, 0, 0, 0), (2018, 3, 31, 0, 0, 0)) Day "Great Lent")+             [ "great fast 2018"+             ]   , examples (datetimeInterval ((2013, 2, 12, 18, 0, 0), (2013, 2, 13, 0, 0, 0)) Hour)              [ "this evening"              , "today evening"@@ -691,6 +811,10 @@              , "monday early morning"              , "monday in the early hours of the morning"              ]+  , examples (datetimeInterval ((2013, 2, 12, 21, 0, 0), (2013, 2, 13, 0, 0, 0)) Hour)+             [ "late tonight"+             , "late tonite"+             ]   , examples (datetimeInterval ((2013, 2, 15, 4, 0, 0), (2013, 2, 15, 12, 0, 0)) Hour)              [ "february the 15th in the morning"              , "15 of february in the morning"@@ -778,6 +902,12 @@              , "between 9:30 and 11:00 on thursday"              , "between 9:30 and 11:00 on thursday"              , "between 9:30 and 11:00 on thursday"+             , "between 9:30 and 11:00 on thursday"+             , "between 9:30 and 11:00 on thursday"+             , "between 9:30 and 11:00 on thursday"+             , "between 9:30 and 11:00 on thursday"+             , "between 9:30 and 11:00 on thursday"+             , "between 9:30 and 11:00 on thursday"              , "9:30 - 11:00 on Thursday"              , "later than 9:30 but before 11:00 on Thursday"              , "Thursday from 9:30 to 11:00"@@ -821,7 +951,26 @@              ]   , examples (datetimeInterval ((2013, 2, 12, 4, 30, 0), (2013, 3, 1, 0, 0, 0)) Second)              [ "by EOM"+             , "by the EOM"+             , "by end of the month"+             , "by the end of month"              ]+  , examples (datetimeInterval ((2013, 2, 21, 0, 0, 0), (2013, 3, 1, 0, 0, 0)) Day)+             [ "EOM"+             , "the EOM"+             , "at the EOM"+             , "the end of the month"+             , "end of the month"+             , "at the end of month"+             ]+  , examples (datetimeInterval ((2013, 2, 1, 0, 0, 0), (2013, 2, 11, 0, 0, 0)) Day)+             [ "BOM"+             , "the BOM"+             , "at the BOM"+             , "beginning of the month"+             , "the beginning of the month"+             , "at the beginning of month"+             ]   , examples (datetimeInterval ((2013, 2, 12, 4, 30, 0), (2013, 4, 1, 0, 0, 0)) Second)              [ "by the end of next month"              ]@@ -978,5 +1127,261 @@              ]   , examples (datetimeInterval ((2013, 8, 19, 0, 0, 0), (2013, 8, 22, 0, 0, 0)) Day)              [ "19th To 21st aug"+             ]+  , examples (datetimeInterval ((2013, 4, 21, 0, 0, 0), (2013, 5, 1, 0, 0, 0)) Day)+             [ "end of April"+             , "at the end of April"+             ]+  , examples (datetimeInterval ((2014, 1, 1, 0, 0, 0), (2014, 1, 11, 0, 0, 0)) Day)+             [ "beginning of January"+             , "at the beginning of January"+             ]+  , examples (datetimeInterval ((2012, 9, 1, 0, 0, 0), (2013, 1, 1, 0, 0, 0)) Month)+             [ "end of 2012"+             , "at the end of 2012"+             ]+  , examples (datetimeInterval ((2017, 1, 1, 0, 0, 0), (2017, 4, 1, 0, 0, 0)) Month)+             [ "beginning of 2017"+             , "at the beginning of 2017"+             ]+  , examples (datetimeInterval ((2013, 1, 1, 0, 0, 0), (2013, 4, 1, 0, 0, 0)) Month)+             [ "beginning of year"+             , "the beginning of the year"+             , "the BOY"+             , "BOY"+             ]+  , examples (datetimeInterval ((2013, 2, 12, 4, 30, 0), (2014, 1, 1, 0, 0, 0)) Second)+             [ "by EOY"+             , "by the EOY"+             , "by end of the year"+             , "by the end of year"+             ]+  , examples (datetimeInterval ((2013, 9, 1, 0, 0, 0), (2014, 1, 1, 0, 0, 0)) Month)+             [ "EOY"+             , "the EOY"+             , "at the EOY"+             , "the end of the year"+             , "end of the year"+             , "at the end of year"+             ]+  , examples (datetimeInterval ((2013, 2, 11, 0, 0, 0), (2013, 2, 14, 0, 0, 0)) Day)+             [ "beginning of this week"+             , "beginning of current week"+             , "beginning of coming week"+             , "at the beginning of this week"+             , "at the beginning of current week"+             , "at the beginning of coming week"+             ]+  , examples (datetimeInterval ((2013, 2, 4, 0, 0, 0), (2013, 2, 7, 0, 0, 0)) Day)+             [ "beginning of last week"+             , "beginning of past week"+             , "beginning of previous week"+             , "at the beginning of last week"+             , "at the beginning of past week"+             , "at the beginning of previous week"+             ]+  , examples (datetimeInterval ((2013, 2, 18, 0, 0, 0), (2013, 2, 21, 0, 0, 0)) Day)+             [ "beginning of next week"+             , "beginning of the following week"+             , "beginning of around next week"+             , "at the beginning of next week"+             , "at the beginning of the following week"+             , "at the beginning of around next week"+             ]+  , examples (datetimeInterval ((2013, 2, 15, 0, 0, 0), (2013, 2, 18, 0, 0, 0)) Day)+             [ "end of this week"+             , "end of current week"+             , "end of coming week"+             , "at the end of this week"+             , "at the end of current week"+             , "at the end of coming week"+             ]+  , examples (datetimeInterval ((2013, 2, 8, 0, 0, 0), (2013, 2, 11, 0, 0, 0)) Day)+             [ "end of last week"+             , "end of past week"+             , "end of previous week"+             , "at the end of last week"+             , "at the end of past week"+             , "at the end of previous week"+             ]+  , examples (datetimeInterval ((2013, 2, 22, 0, 0, 0), (2013, 2, 25, 0, 0, 0)) Day)+             [ "end of next week"+             , "end of the following week"+             , "end of around next week"+             , "at the end of next week"+             , "at the end of the following week"+             , "at the end of around next week"+             ]+  , examples (datetimeHoliday (2014, 1, 31, 0, 0, 0) Day "Chinese New Year")+             [ "chinese new year"+             , "chinese lunar new year's day"+             ]+  , examples (datetimeHoliday (2013, 2, 10, 0, 0, 0) Day "Chinese New Year")+             [ "last chinese new year"+             , "last chinese lunar new year's day"+             ]+  , examples (datetimeHoliday (2018, 2, 16, 0, 0, 0) Day "Chinese New Year")+             [ "chinese new year's day 2018"+             ]+  , examples (datetimeHoliday (2018, 9, 18, 0, 0, 0) Day "Yom Kippur")+             [ "yom kippur 2018"+             ]+  , examples (datetimeHoliday (2018, 9, 30, 0, 0, 0) Day "Shemini Atzeret")+             [ "shemini atzeret 2018"+             ]+  , examples (datetimeHoliday (2018, 10, 1, 0, 0, 0) Day "Simchat Torah")+             [ "simchat torah 2018"+             ]+  , examples (datetimeHoliday (2018, 7, 21, 0, 0, 0) Day "Tisha B'Av")+             [ "tisha b'av 2018"+             ]+  , examples (datetimeHoliday (2018, 4, 18, 0, 0, 0) Day "Yom Ha'atzmaut")+             [ "yom haatzmaut 2018"+             ]+  , examples (datetimeHoliday (2017, 5, 13, 0, 0, 0) Day "Lag BaOmer")+             [ "lag b'omer 2017"+             ]+  , examples (datetimeHoliday (2018, 4, 11, 0, 0, 0) Day "Yom HaShoah")+             [ "Yom Hashoah 2018"+             , "Holocaust Day 2018"+             ]+  , examples (datetimeIntervalHoliday ((2018, 9, 9, 0, 0, 0), (2018, 9, 12, 0, 0, 0)) Day "Rosh Hashanah")+             [ "rosh hashanah 2018"+             ]+  , examples (datetimeIntervalHoliday ((2018, 12, 2, 0, 0, 0), (2018, 12, 10, 0, 0, 0)) Day "Hanukkah")+             [ "Chanukah 2018"+             ]+  , examples (datetimeIntervalHoliday ((2018, 3, 30, 0, 0, 0), (2018, 4, 8, 0, 0, 0)) Day "Passover")+             [ "passover 2018"+             ]+  , examples (datetimeIntervalHoliday ((2018, 9, 23, 0, 0, 0), (2018, 10, 2, 0, 0, 0)) Day "Sukkot")+             [ "feast of the ingathering 2018"+             , "succos 2018"+             ]+  , examples (datetimeIntervalHoliday ((2018, 5, 19, 0, 0, 0), (2018, 5, 22, 0, 0, 0)) Day "Shavuot")+             [ "shavuot 2018"+             ]+  , examples (datetimeHoliday (2017, 11, 30, 0, 0, 0) Day "Mawlid")+             [ "mawlid al-nabawi 2017"+             ]+  , examples (datetimeHoliday (2018, 6, 15, 0, 0, 0) Day "Eid al-Fitr")+             [ "Eid al-Fitr 2018"+             ]+  , examples (datetimeHoliday (2018, 8, 21, 0, 0, 0) Day "Eid al-Adha")+             [ "Eid al-Adha 2018"+             , "id ul-adha 2018"+             , "sacrifice feast 2018"+             , "Bakr Id 2018"+             ]+  , examples (datetimeHoliday (2017, 6, 22, 0, 0, 0) Day "Laylat al-Qadr")+             [ "laylat al kadr 2017"+             , "night of measures 2017"+             ]+  , examples (datetimeHoliday (2018, 6, 11, 0, 0, 0) Day "Laylat al-Qadr")+             [ "laylat al-qadr 2018"+             , "night of power 2018"+             ]+  , examples (datetimeHoliday (2018, 9, 11, 0, 0, 0) Day "Islamic New Year")+             [ "Islamic New Year 2018"+             , "Amun Jadid 2018"+             ]+  , examples (datetimeHoliday (2017, 9, 30, 0, 0, 0) Day "Ashura")+             [ "day of Ashura 2017"+             ]+  , examples (datetimeHoliday (2018, 1, 30, 0, 0, 0) Day "Tu BiShvat")+             [ "tu bishvat 2018"+             ]+  , examples (datetimeHoliday (2017, 6, 23, 0, 0, 0) Day "Jumu'atul-Wida")+             [ "Jamat Ul-Vida 2017"+             , "Jumu'atul-Wida 2017"+             ]+  , examples (datetimeHoliday (2018, 6, 8, 0, 0, 0) Day "Jumu'atul-Wida")+             [ "Jamat Ul-Vida 2018"+             , "Jumu'atul-Wida 2018"+             ]+  , examples (datetimeHoliday (2018, 4, 13, 0, 0, 0) Day "Isra and Mi'raj")+             [ "isra and mi'raj 2018"+             , "the prophet's ascension 2018"+             ]+  , examples (datetimeHoliday (2019, 4, 3, 0, 0, 0) Day "Isra and Mi'raj")+             [ "the night journey 2019"+             , "ascension to heaven 2019"+             ]+  , examples (datetimeIntervalHoliday ((2018, 5, 16, 0, 0, 0), (2018, 6, 15, 0, 0, 0)) Day "Ramadan")+             [ "Ramadan 2018"+             ]+  , examples (datetimeHoliday (2017, 10, 17, 0, 0, 0) Day "Dhanteras")+             [ "dhanatrayodashi in 2017"+             ]+  , examples (datetimeHoliday (2019, 10, 25, 0, 0, 0) Day "Dhanteras")+             [ "dhanteras 2019"+             ]+  , examples (datetimeHoliday (2019, 10, 26, 0, 0, 0) Day "Naraka Chaturdashi")+             [ "kali chaudas 2019"+             , "choti diwali two thousand nineteen"+             ]+  , examples (datetimeHoliday (2019, 10, 27, 0, 0, 0) Day "Diwali")+             [ "diwali 2019"+             , "Deepavali in 2019"+             , "Lakshmi Puja six years hence"+             ]+  , examples (datetimeHoliday (2019, 10, 29, 0, 0, 0) Day "Bhai Dooj")+             [ "bhai dooj 2019"+             ]+  , examples (datetimeHoliday (2019, 11, 2, 0, 0, 0) Day "Chhath")+             [ "chhath 2019"+             , "dala puja 2019"+             , "Surya Shashthi in 2019"+             ]+  , examples (datetimeHoliday (2021, 10, 12, 0, 0, 0) Day "Maha Saptami")+             [ "Maha Saptami 2021"+             ]+  , examples (datetimeHoliday (2018, 10, 18, 0, 0, 0) Day "Vijayadashami")+             [ "Dussehra 2018"+             , "vijayadashami in five years"+             ]+  , examples (datetimeIntervalHoliday ((2018, 10, 9, 0, 0, 0), (2018, 10, 19, 0, 0, 0)) Day "Navaratri")+             [ "navaratri 2018"+             , "durga puja in 2018"+             ]+  , examples (datetimeHoliday (2018, 8, 26, 0, 0, 0) Day "Raksha Bandhan")+             [ "rakhi 2018"+             ]+  , examples (datetimeHoliday (2018, 1, 14, 0, 0, 0) Day "Thai Pongal")+             [ "pongal 2018"+             , "makara sankranthi 2018"+             ]+  , examples (datetimeHoliday (2018, 1, 13, 0, 0, 0) Day "Boghi")+             [ "bogi pandigai 2018"+             ]+  , examples (datetimeHoliday (2018, 1, 15, 0, 0, 0) Day "Mattu Pongal")+             [ "maattu pongal 2018"+             ]+  , examples (datetimeHoliday (2018, 1, 16, 0, 0, 0) Day "Kaanum Pongal")+             [ "kaanum pongal 2018"+             , "kanni pongal 2018"+             ]+  , examples (datetimeHoliday (2019, 1, 15, 0, 0, 0) Day "Thai Pongal")+             [ "makar sankranti 2019"+             , "maghi in 2019"+             ]+  , examples (datetimeHoliday (2018, 8, 24, 0, 0, 0) Day "Thiru Onam")+             [ "onam 2018"+             , "Thiru Onam 2018"+             , "Thiruvonam 2018"+             ]+  , examples (datetimeHoliday (2019, 2, 10, 0, 0, 0) Day "Vasant Panchami")+             [ "vasant panchami in 2019"+             , "basant panchami 2019"+             ]+  , examples (datetimeHoliday (2019, 3, 20, 0, 0, 0) Day "Holika Dahan")+             [ "chhoti holi 2019"+             , "holika dahan 2019"+             , "kamudu pyre 2019"+             ]+  , examples (datetimeHoliday (2019, 3, 21, 0, 0, 0) Day "Holi")+             [ "holi 2019"+             , "dhulandi 2019"+             , "phagwah 2019"              ]   ]
Duckling/Time/EN/GB/Corpus.hs view
@@ -33,33 +33,66 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]+  , examples (datetime (2013, 10, 10, 0, 0, 0) Day)+             [ "10/10"+             , "10/10/2013"+             ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"              ]-  , examples (datetime (2013, 10, 10, 0, 0, 0) Day)-             [ "10/10"-             , "10/10/2013"+  , examples (datetimeHoliday (2013, 11, 5, 0, 0, 0) Day "Guy Fawkes Day")+             [ "guy fawkes day"+             ]+  , examples (datetimeHoliday (2018, 8, 27, 0, 0, 0) Day "August Bank Holiday")+             [ "august bank holiday 2018"+             , "summer bank holiday 2018"+             , "late summer bank holiday 2018"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 3, 10, 0, 0, 0) Day "Mothering Sunday")+             [ "Mother's Day"+             , "next mothers day"+             , "mothering sunday"+             ]+  , examples (datetimeHoliday (2012, 3, 18, 0, 0, 0) Day "Mothering Sunday")+             [ "mothers day 2012"+             , "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 3, 30, 0, 0, 0) Day "Mothering Sunday")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 19, 0, 0, 0) Day "Pentecost")+             [ "whitsunday"              ]   ]
Duckling/Time/EN/GB/Rules.hs view
@@ -20,9 +20,11 @@ import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (parseInt) import Duckling.Regex.Types+import Duckling.Time.Computed (easterSunday) import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.TimeGrain.Types as TG  ruleDDMM :: Rule ruleDDMM = Rule@@ -42,7 +44,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +71,41 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Bank Holiday", "bank holiday", monthDay 12 28 )+  , ( "Battle of the Boyne", "battle of the boyne", monthDay 7 12 )+  , ( "Burns Night", "burns night", monthDay 1 25 )+  , ( "Guy Fawkes Day", "guy fawkes day", monthDay 11 5 )+  , ( "Shakespeare Day", "shakespeare day", monthDay 4 23 )+  , ( "St Andrew's Day", "st\\.? andrew'?s day", monthDay 11 30 )+  , ( "St. David's Day", "st\\.? david'?s day", monthDay 3 1 )+  , ( "Victory in Europe Day", "victory in europe day", monthDay 5 8 ) +  -- Fixed day/week/month, year over year+  , ( "August Bank Holiday", "(august|(late )?summer) bank holiday"+    , predLastOf (dayOfWeek 1) (month 8) )+  , ( "Early May Bank Holiday", "early may bank holiday", nthDOWOfMonth 1 1 5 )+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Remembrance Sunday", "remembrance sunday", nthDOWOfMonth 2 7 11 )+  , ( "Spring Bank Holiday", "(sprint|late may) bank holiday"+    , predLastOf (dayOfWeek 1) (month 5) )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]++ruleComputedHolidays :: [Rule]+ruleComputedHolidays = mkRuleHolidays+  -- 3 weeks before Easter+  [ ( "Mothering Sunday", "mothering sunday|mother'?s?'? day"+    , cycleNthAfter False TG.Day (-21) easterSunday )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ ruleComputedHolidays+  ++ rulePeriodicHolidays
Duckling/Time/EN/IE/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,55 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2018, 8, 6, 0, 0, 0) Day "August Bank Holiday")+             [ "august bank holiday 2018"+             , "summer bank holiday 2018"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 6, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 5, 7, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"              ]   ]
Duckling/Time/EN/IE/Rules.hs view
@@ -42,7 +42,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +69,25 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed day/week/month, year over year+  [ ( "August Bank Holiday", "(august|summer) bank holiday"+    , nthDOWOfMonth 1 1 8 )+  , ( "Early May Bank Holiday", "early may bank holiday", nthDOWOfMonth 1 1 5 )+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "June Bank Holiday", "june bank holiday", nthDOWOfMonth 1 1 6 )+  , ( "Labour Day", "labour day", nthDOWOfMonth 1 1 5 )+  , ( "October Bank Holiday", "october (bank )?holiday"+    , predLastOf (dayOfWeek 1) (month 10) )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]  rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ rulePeriodicHolidays
Duckling/Time/EN/IN/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,66 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 2, 19, 0, 0, 0) Day "Shivaji Jayanti")+             [ "shivaji jayanti 2013"+             ]+  , examples (datetimeHoliday (2013, 8, 15, 0, 0, 0) Day "Independence Day")+             [ "independence day"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeHoliday (2018, 3, 30, 0, 0, 0) Day "Hazarat Ali's Birthday")+             [ "Hazarat Ali's Birthday 2018"+             ]+  , examples (datetimeHoliday (2019, 3, 20, 0, 0, 0) Day "Hazarat Ali's Birthday")+             [ "Hazarat Ali's Birthday 2019"+             ]+  , examples (datetimeIntervalHoliday ((2018, 5, 16, 0, 0, 0), (2018, 6, 15, 0, 0, 0)) Day "Ramadan")+             [ "ramzaan 2018"              ]   ]
Duckling/Time/EN/IN/Rules.hs view
@@ -20,9 +20,11 @@ import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (parseInt) import Duckling.Regex.Types+import Duckling.Time.Computed import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.TimeGrain.Types as TG  ruleDDMM :: Rule ruleDDMM = Rule@@ -42,7 +44,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +71,35 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Guru Tegh Bahadur's Martyrdom Day", "guru tegh bahadur'?s martyrdom day"+    , monthDay 11 24 )+  , ( "Independence Day", "independence day", monthDay 8 15 )+  , ( "Labour Day", "labour day", monthDay 5 1 )+  , ( "Mahatma Gandhi Jayanti", "mahatma gandhi jayanti", monthDay 10 2 )+  , ( "Republic Day", "republic day", monthDay 1 26 )+  , ( "Shivaji Jayanti", "shivaji jayanti", monthDay 2 19 ) +  -- Fixed day/week/month, year over year+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Friendship Day", "friendship day", nthDOWOfMonth 1 7 8 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]++ruleComputedHolidays :: [Rule]+ruleComputedHolidays = mkRuleHolidays+  [ ( "Hazarat Ali's Birthday", "hazarat ali's birthday"+    , cycleNthAfter False TG.Day 12 rajab )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ ruleComputedHolidays+  ++ rulePeriodicHolidays
Duckling/Time/EN/JM/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,54 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 23, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 5, 23, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeHoliday (2013, 10, 21, 0, 0, 0) Day "Heroes' Day")+             [ "heroes' day"              ]   ]
Duckling/Time/EN/JM/Rules.hs view
@@ -42,7 +42,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +69,22 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Labour Day", "labour day", monthDay 5 23 ) +  -- Fixed day/week/month, year over year+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Heroes' Day", "heroes' day", nthDOWOfMonth 3 1 10 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ rulePeriodicHolidays
Duckling/Time/EN/NZ/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,54 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 4, 25, 0, 0, 0) Day "ANZAC Day")+             [ "ANZAC day"+             ]+  , examples (datetimeHoliday (2013, 9, 1, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 9, 2, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 9, 1, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday  (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 10, 28, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 10, 22, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"              ]   ]
Duckling/Time/EN/NZ/Rules.hs view
@@ -20,9 +20,11 @@ import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (parseInt) import Duckling.Regex.Types+import Duckling.Time.Computed (easterSunday) import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.TimeGrain.Types as TG  ruleDDMM :: Rule ruleDDMM = Rule@@ -42,7 +44,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +71,35 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "ANZAC Day", "anzac day", monthDay 4 25 )+  , ( "Guy Fawkes Night", "guy fawkes night", monthDay 11 5 )+  , ( "Waitangi Day", "waitangi day", monthDay 2 6 ) +  -- Fixed day/week/month, year over year+  , ( "Administrative Professionals' Day"+    , "(admin(istrative professionals'?)|secretaries'?) day"+    , nthDOWOfMonth 3 3 4 )+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 1 7 9 )+  , ( "Labour Day", "labour day", nthDOWOfMonth 4 1 10 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Queen's birthday", "queen's birthday", nthDOWOfMonth 1 1 6 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]++ruleComputedHolidays :: [Rule]+ruleComputedHolidays = mkRuleHolidays+  [ ( "Easter Tuesday", "easter\\s+tue(sday)?"+    , cycleNthAfter False TG.Day 2 easterSunday )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ ruleComputedHolidays+  ++ rulePeriodicHolidays
Duckling/Time/EN/PH/Corpus.hs view
@@ -33,29 +33,65 @@              , "10/31/74"              , "10-31-74"              , "10.31.1974"+             , "10 31 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "4/25 at 4:00pm"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 12, 30, 0, 0, 0) Day "Rizal Day")+             [ "Rizal day"+             ]+  , examples (datetimeHoliday (2013, 6, 12, 0, 0, 0) Day "Independence Day")+             [ "Independence day"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeHoliday (2013, 8, 26, 0, 0, 0) Day "National Heroes' Day")+             [ "national heroes' day"              ]   ]
Duckling/Time/EN/PH/Rules.hs view
@@ -42,7 +42,7 @@ ruleMMDDYYYY = Rule   { name = "mm/dd/yyyy"   , pattern =-    [ regex "(1[0-2]|0?[1-9])[/-](3[01]|[12]\\d|0?[1-9])[-/](\\d{2,4})"+    [ regex "(1[0-2]|0?[1-9])[-/\\s](3[01]|[12]\\d|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (mm:dd:yy:_)):_) -> do@@ -69,20 +69,33 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Arbor Day", "arbor day", monthDay 6 25 )+  , ( "Bonifacio Day", "bonifacio day", monthDay 11 30 )+  , ( "Independence Day", "independence day", monthDay 6 12 )+  , ( "Labour Day", "labour day", monthDay 5 1 )+  , ( "Ninoy Aquino Day", "ninoy aquino day", monthDay 8 21 )+  , ( "People Power Anniversary", "(edsa revolution|people power) anniversary"+    , monthDay 2 25 )+  , ( "Rizal Day", "rizal day", monthDay 12 30 )+  , ( "The Day of Valor", "the day of valor", monthDay 4 9 ) +  -- Fixed day/week/month, year over year+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "National Elections Day", "national elections day", nthDOWOfMonth 2 1 5 )+  , ( "National Heroes' Day", "(national )?heroes' day"+    , predLastOf (dayOfWeek 1) (month 8) )+  , ( "Parents' Day", "parents' day", nthDOWOfMonth 1 1 12 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]+ rules :: [Rule] rules =   [ ruleMMDD   , ruleMMDDYYYY   , ruleMMDDYYYYDot-  , ruleThanksgiving   ]+  ++ rulePeriodicHolidays
Duckling/Time/EN/Rules.hs view
@@ -7,6 +7,7 @@   {-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NoRebindableSyntax #-} {-# LANGUAGE OverloadedStrings #-}@@ -27,6 +28,7 @@ import Duckling.Numeral.Types (NumeralData (..)) import Duckling.Ordinal.Types (OrdinalData (..)) import Duckling.Regex.Types+import Duckling.Time.Computed import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types@@ -41,10 +43,11 @@   { name = "intersect"   , pattern =     [ Predicate isNotLatent-    , Predicate isNotLatent+    , Predicate $ or . sequence [isNotLatent, isGrainOfTime TG.Year]     ]   , prod = \tokens -> case tokens of-      (Token Time td1:Token Time td2:_) -> Token Time <$> intersect td1 td2+      (Token Time td1:Token Time td2:_) ->+        Token Time . notLatent <$> intersect td1 td2       _ -> Nothing   } @@ -54,10 +57,11 @@   , pattern =     [ Predicate isNotLatent     , regex "of|from|for|'s|,"-    , Predicate isNotLatent+    , Predicate $ or . sequence [isNotLatent, isGrainOfTime TG.Year]     ]   , prod = \tokens -> case tokens of-      (Token Time td1:_:Token Time td2:_) -> Token Time <$> intersect td1 td2+      (Token Time td1:_:Token Time td2:_) ->+        Token Time . notLatent <$> intersect td1 td2       _ -> Nothing   } @@ -85,15 +89,15 @@       _ -> Nothing   } -ruleAbsorbInMonth :: Rule-ruleAbsorbInMonth = Rule-  { name = "in <named-month>"+ruleAbsorbInMonthYear :: Rule+ruleAbsorbInMonthYear = Rule+  { name = "in <named-month>|year"   , pattern =     [ regex "in"-    , Predicate isAMonth+    , Predicate $ or . sequence [isAMonth, isGrainOfTime TG.Year]     ]   , prod = \tokens -> case tokens of-      (_:token:_) -> Just token+      (_:Token Time td:_) -> tt $ notLatent td       _ -> Nothing   } @@ -115,8 +119,6 @@   , ("today"        , TG.Day   , 0  , "todays?|(at this time)"           )   , ("tomorrow"     , TG.Day   , 1  , "(tmrw?|tomm?or?rows?)"            )   , ("yesterday"    , TG.Day   , - 1, "yesterdays?"                      )-  , ("end of month" , TG.Month , 1  , "(the )?(EOM|end of (the )?month)" )-  , ("end of year"  , TG.Year  , 1  , "(the )?(EOY|end of (the )?year)"  )   ]  ruleNow :: Rule@@ -231,6 +233,21 @@       _ -> Nothing   } +ruleLastNight :: Rule+ruleLastNight = Rule+  { name = "last night"+  , pattern =+    [ regex "(late )?last night"+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (match:_)):_) ->+        let hours = if Text.toLower match == "late " then 3 else 6+            start = durationBefore (DurationData hours TG.Hour) end+            end = cycleNth TG.Day 0+        in Token Time . partOfDay . notLatent <$> interval TTime.Open start end+      _ -> Nothing+  }+ ruleNthTimeOfTime :: Rule ruleNthTimeOfTime = Rule   { name = "nth <time> of <time>"@@ -293,42 +310,20 @@       _ -> Nothing   } -ruleYear :: Rule-ruleYear = Rule-  { name = "year"-  , pattern = [Predicate $ isIntegerBetween 1000 2100]+ruleYearLatent :: Rule+ruleYearLatent = Rule+  { name = "year (latent)"+  , pattern =+      [ Predicate $+        or . sequence [isIntegerBetween (- 10000) 0, isIntegerBetween 25 10000]+      ]   , prod = \tokens -> case tokens of       (token:_) -> do         n <- getIntValue token-        tt $ year n+        tt . mkLatent $ year n       _ -> Nothing   } -ruleYearPastLatent :: Rule-ruleYearPastLatent = Rule- { name = "past year (latent)"- , pattern =-   [ Predicate $-       or . sequence [isIntegerBetween (- 10000) 0, isIntegerBetween 25 999]-   ]- , prod = \tokens -> case tokens of-     (token:_) -> do-       n <- getIntValue token-       tt . mkLatent $ year n-     _ -> Nothing- }--ruleYearFutureLatent :: Rule-ruleYearFutureLatent = Rule- { name = "future year (latent)"- , pattern = [Predicate $ isIntegerBetween 2101 10000]- , prod = \tokens -> case tokens of-     (token:_) -> do-       n <- getIntValue token-       tt . mkLatent $ year n-     _ -> Nothing- }- ruleDOMLatent :: Rule ruleDOMLatent = Rule   { name = "<day-of-month> (ordinal)"@@ -820,11 +815,14 @@ ruleTonight :: Rule ruleTonight = Rule   { name = "tonight"-  , pattern = [regex "toni(ght|gth|te)s?"]-  , prod = \_ -> do-      let today = cycleNth TG.Day 0-      evening <- interval TTime.Open (hour False 18) (hour False 0)-      Token Time . partOfDay . notLatent <$> intersect today evening+  , pattern = [regex "(late )?toni(ght|gth|te)s?"]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (match:_)):_) -> do+        let today = cycleNth TG.Day 0+            h = if Text.toLower match == "late " then 21 else 18+        evening <- interval TTime.Open (hour False h) (hour False 0)+        Token Time . partOfDay . notLatent <$> intersect today evening+      _ -> Nothing   }  ruleAfterPartofday :: Rule@@ -881,6 +879,26 @@   , prod = \_ -> tt $ mkOkForThisNext weekend   } +ruleSeason :: Rule+ruleSeason = Rule+  { name = "last|this|next <season>"+  , pattern =+    [ regex "(this|current|next|last|past|previous) seasons?"+    ]+  , prod = \case+      (Token RegexMatch (GroupMatch (match:_)):_) -> do+        n <- case Text.toLower match of+               "this" -> Just 0+               "current" -> Just 0+               "last" -> Just (-1)+               "past" -> Just (-1)+               "previous" -> Just (-1)+               "next" -> Just 1+               _ -> Nothing+        tt $ predNth n False season+      _ -> Nothing+  }+ ruleSeasons :: [Rule] ruleSeasons = mkRuleSeasons   [ ( "summer", "summer"     , monthDay  6 21, monthDay  9 23 )@@ -1180,19 +1198,19 @@   ]  ruleMonths :: [Rule]-ruleMonths = mkRuleMonths-  [ ( "January"  , "january|jan\\.?"     )-  , ( "February" , "february|feb\\.?"    )-  , ( "March"    , "march|mar\\.?"       )-  , ( "April"    , "april|apr\\.?"       )-  , ( "May"      , "may"                 )-  , ( "June"     , "june|jun\\.?"        )-  , ( "July"     , "july|jul\\.?"        )-  , ( "August"   , "august|aug\\.?"      )-  , ( "September", "september|sept?\\.?" )-  , ( "October"  , "october|oct\\.?"     )-  , ( "November" , "november|nov\\.?"    )-  , ( "December" , "december|dec\\.?"    )+ruleMonths = mkRuleMonthsWithLatent+  [ ( "January"  , "january|jan\\.?"    , False )+  , ( "February" , "february|feb\\.?"   , False )+  , ( "March"    , "march|mar\\.?"      , False )+  , ( "April"    , "april|apr\\.?"      , False )+  , ( "May"      , "may"                , True  )+  , ( "June"     , "june|jun\\.?"       , False )+  , ( "July"     , "july|jul\\.?"       , False )+  , ( "August"   , "august|aug\\.?"     , False )+  , ( "September", "september|sept?\\.?", False )+  , ( "October"  , "october|oct\\.?"    , False )+  , ( "November" , "november|nov\\.?"   , False )+  , ( "December" , "december|dec\\.?"   , False )   ]  rulePartOfMonth :: Rule@@ -1217,42 +1235,485 @@       _ -> Nothing   } -ruleUSHolidays :: [Rule]-ruleUSHolidays = mkRuleHolidays+ruleEndOrBeginningOfMonth :: Rule+ruleEndOrBeginningOfMonth = Rule+  { name = "at the beginning|end of <named-month>"+  , pattern =+    [ regex "(at the )?(beginning|end) of"+    , Predicate isAMonth+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (_:match:_)):Token Time td:_) -> do+        (sd, ed) <- case Text.toLower match of+          "beginning" -> Just (1, 10)+          "end"       -> Just (21, -1)+          _           -> Nothing+        start <- intersect td $ dayOfMonth sd+        end <- if ed /= -1+          then intersect td $ dayOfMonth ed+          else Just $ cycleLastOf TG.Day td+        Token Time <$> interval TTime.Open start end+      _ -> Nothing+  }++ruleEndOfMonth :: Rule+ruleEndOfMonth = Rule+  { name = "end of month"+  , pattern = [ regex "(by (the )?|(at )?the )?(EOM|end of (the )?month)" ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (match:_)):_)+        | (Just start, Just end) <- parsed ->+          Token Time <$> interval TTime.Open start end+        where+          cycleMonth = cycleNth TG.Month+          parsed = if "by" `Text.isPrefixOf` Text.toLower match+            then+              ( Just $ cycleNth TG.Second 0+              , intersect (dayOfMonth 1) $ cycleMonth 1)+            else+              ( intersect (dayOfMonth 21) $ cycleMonth 0+              , Just $ cycleLastOf TG.Day $ cycleMonth 0)+      _ -> Nothing+  }++ruleBeginningOfMonth :: Rule+ruleBeginningOfMonth = Rule+  { name = "beginning of month"+  , pattern = [ regex "((at )?the )?(BOM|beginning of (the )?month)" ]+  , prod = \_ -> do+      start <- intersect (dayOfMonth 1) $ cycleNth TG.Month 0+      end <- intersect (dayOfMonth 10) $ cycleNth TG.Month 0+      Token Time <$> interval TTime.Open start end+  }++ruleEndOrBeginningOfYear :: Rule+ruleEndOrBeginningOfYear = Rule+  { name = "at the beginning|end of <year>"+  , pattern =+    [ regex "(at the )?(beginning|end) of"+    , Predicate $ isGrainOfTime TG.Year+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (_:match:_)):Token Time td:_) -> do+        (sd, ed) <- case Text.toLower match of+          "beginning" -> Just (1, 4)+          "end"       -> Just (9, -1)+          _           -> Nothing+        start <- intersect td $ month sd+        end <- if ed /= -1+          then intersect td $ cycleLastOf TG.Month $ month ed+          else cycleNthAfter False TG.Year 1 <$> intersect td (month 1)+        Token Time <$> interval TTime.Open start end+      _ -> Nothing+  }++ruleEndOfYear :: Rule+ruleEndOfYear = Rule+  { name = "end of year"+  , pattern = [ regex "(by (the )?|(at )?the )?(EOY|end of (the )?year)" ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (match:_)):_) -> do+        start <- std+        end <- intersect (month 1) $ cycleYear 1+        Token Time <$> interval TTime.Open start end+          where+            std = if "by" `Text.isPrefixOf` Text.toLower match+              then Just $ cycleNth TG.Second 0+              else intersect (month 9) $ cycleYear 0+            cycleYear = cycleNth TG.Year+      _ -> Nothing+  }++ruleBeginningOfYear :: Rule+ruleBeginningOfYear = Rule+  { name = "beginning of year"+  , pattern = [ regex "((at )?the )?(BOY|beginning of (the )?year)" ]+  , prod = \_ -> do+      start <- intersect (month 1) $ cycleNth TG.Year 0+      end <- intersect (month 4) $ cycleNth TG.Year 0+      Token Time <$> interval TTime.Open start end+  }++ruleEndOrBeginningOfWeek :: Rule+ruleEndOrBeginningOfWeek = Rule+  { name = "at the beginning|end of <week>"+  , pattern =+    [ regex "(at the )?(beginning|end) of"+    , Predicate $ isGrainOfTime TG.Week+    ]+  , prod = \tokens -> case tokens of+      (Token RegexMatch (GroupMatch (_:match1:_)):Token Time td:_) -> do+        (sd, ed) <- case Text.toLower match1 of+          "beginning" -> Just (1, 3)+          "end"       -> Just (5, 7)+          _           -> Nothing+        start <- intersect td $ dayOfWeek sd+        end <- intersect td $ dayOfWeek ed+        Token Time <$> interval TTime.Open start end+      _ -> Nothing+  }++rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays   -- Fixed dates, year over year-  [ ( "Christmas"       , "(xmas|christmas)( day)?"         , monthDay 12 25 )-  , ( "Christmas Eve"   , "(xmas|christmas)( day)?('s)? eve", monthDay 12 24 )-  , ( "New Year's Eve"  , "new year'?s? eve"                , monthDay 12 31 )-  , ( "New Year's Day"  , "new year'?s?( day)?"             , monthDay  1  1 )-  , ( "Valentine's Day" , "valentine'?s?( day)?"            , monthDay  2 14 )-  , ( "Independence Day", "independence day"                , monthDay  7  4 )-  , ( "Halloween"       , "hall?owe?en( day)?"              , monthDay 10 31 )+  [ ( "Africa Day", "africa(n (freedom|liberation))? day", monthDay 5 25 )+  , ( "Africa Industrialization Day", "africa industrialization day", monthDay 11 20 )+  , ( "All Saints' Day", "all saints' day", monthDay 11 1 )+  , ( "All Souls' Day", "all souls' day", monthDay 11 2 )+  , ( "April Fools", "(april|all) fool'?s('? day)?", monthDay 4 1 )+  , ( "Arabic Language Day", "arabic language day", monthDay 12 18 )+  , ( "Assumption of Mary", "assumption of mary", monthDay 8 15 )+  , ( "Boxing Day", "boxing day", monthDay 12 26 )+  , ( "Chinese Language Day", "chinese language day", monthDay 4 20 )+  , ( "Christmas", "(xmas|christmas)( day)?", monthDay 12 25 )+  , ( "Christmas Eve", "(xmas|christmas)( day)?('s)? eve", monthDay 12 24 )+  , ( "Day of Remembrance for all Victims of Chemical Warfare", "day of remembrance for all victims of chemical warfare", monthDay 4 29 )+  , ( "Day of Remembrance of the Victims of the Rwanda Genocide", "day of remembrance of the victims of the rwanda genocide", monthDay 4 7 )+  , ( "Day of the Seafarer", "day of the seafarer", monthDay 6 25 )+  , ( "Earth Day", "earth day", monthDay 4 22 )+  , ( "English Language Day", "english language day", monthDay 4 23 )+  , ( "Epiphany", "Epiphany", monthDay 1 6 )+  , ( "Feast of St Francis of Assisi", "feast of st\\.? francis of assisi", monthDay 10 4 )+  , ( "Feast of the Immaculate Conception", "feast of the immaculate conception", monthDay 12 8 )+  , ( "Global Day of Parents", "global day of parents", monthDay 6 1 )+  , ( "Halloween", "hall?owe?en( day)?", monthDay 10 31 )+  , ( "Human Rights Day", "human rights? day", monthDay 12 10 )+  , ( "International Albinism Awareness Day", "international albinism awareness day", monthDay 6 13 )+  , ( "International Anti-Corruption Day", "international anti(\\-|\\s)corruption day", monthDay 12 9 )+  , ( "International Asteroid Day", "international asteroid day", monthDay 6 30 )+  , ( "International Celebrate Bisexuality Day", "international celebrate bisexuality day", monthDay 9 23 )+  , ( "International Chernobyl Disaster Remembrance Day", "international chernobyl disaster remembrance day", monthDay 4 26 )+  , ( "International Civil Aviation Day", "international civil aviation day", monthDay 12 7 )+  , ( "International Customs Day", "international customs day", monthDay 1 26 )+  , ( "International Day Against Drug Abuse and Illicit Trafficking", "international day against drug abuse and illicit trafficking", monthDay 6 26 )+  , ( "International Day against Nuclear Tests", "international day against nuclear tests", monthDay 8 29 )+  , ( "International Day for Biological Diversity", "international day for biological diversity|world biodiversity day", monthDay 5 22 )+  , ( "International Day for Monuments and Sites", "international day for monuments and sites", monthDay 4 18 )+  , ( "International Day for Preventing the Exploitation of the Environment in War and Armed Conflict", "international day for preventing the exploitation of the environment in war and armed conflict", monthDay 11 6 )+  , ( "International Day for South-South Cooperation", "international day for south(\\-|\\s)south cooperation", monthDay 9 12 )+  , ( "International Day for Tolerance", "international day for tolerance", monthDay 11 16 )+  , ( "International Day for the Abolition of Slavery", "international day for the abolition of slavery", monthDay 12 2 )+  , ( "International Day for the Elimination of Racial Discrimination", "international day for the elimination of racial discrimination", monthDay 3 21 )+  , ( "International Day for the Elimination of Sexual Violence in Conflict", "international day for the elimination of sexual violence in conflict", monthDay 6 19 )+  , ( "International Day for the Elimination of Violence against Women", "international day for the elimination of violence against women", monthDay 11 25 )+  , ( "International Day for the Eradication of Poverty", "international day for the eradication of poverty", monthDay 10 17 )+  , ( "International Day for the Preservation of the Ozone Layer", "international day for the preservation of the ozone Layer", monthDay 9 16 )+  , ( "International Day for the Remembrance of the Slave Trade and its Abolition", "international day for the remembrance of the slave trade and its abolition", monthDay 8 23 )+  , ( "International Day for the Right to the Truth concerning Gross Human Rights Violations and for the Dignity of Victims", "international day for the right to the truth concerning gross human rights violations and for the dignity of victims", monthDay 3 24 )+  , ( "International Day for the Total Elimination of Nuclear Weapons", "international day for the total elimination of nuclear weapons", monthDay 9 26 )+  , ( "International Day in Support of Victims of Torture", "international day in support of victims of torture", monthDay 6 26 )+  , ( "International Day of Charity", "international day of charity", monthDay 9 5 )+  , ( "International Day of Commemoration in Memory of the Victims of the Holocaust", "international day of commemoration in memory of the victims of the holocaust", monthDay 1 27 )+  , ( "International Day of Democracy", "international day of democracy", monthDay 9 15 )+  , ( "International Day of Disabled Persons", "international day of disabled persons", monthDay 12 3 )+  , ( "International Day of Families", "international day of families", monthDay 5 15 )+  , ( "International Day of Family Remittances", "international day of family remittances", monthDay 6 16 )+  , ( "International Day of Forests", "international day of forests", monthDay 3 21 )+  , ( "International Day of Friendship", "international day of friendship", monthDay 7 30 )+  , ( "International Day of Happiness", "international day of happiness", monthDay 3 20 )+  , ( "International Day of Human Space Flight", "international day of human space flight", monthDay 4 12 )+  , ( "International Day of Innocent Children Victims of Aggression", "international day of innocent children victims of aggression", monthDay 6 4 )+  , ( "International Day of Non-Violence", "international day of non(\\-|\\s)violence", monthDay 10 2 )+  , ( "International Day of Nowruz", "international day of nowruz", monthDay 3 21 )+  , ( "International Day of Older Persons", "international day of older persons", monthDay 10 1 )+  , ( "International Day of Peace", "international day of peace", monthDay 9 21 )+  , ( "International Day of Persons with Disabilities", "international day of persons with disabilities", monthDay 12 3 )+  , ( "International Day of Remembrance of Slavery Victims and the Transatlantic Slave Trade", "international day of remembrance of slavery victims and the transatlantic slave trade", monthDay 3 25 )+  , ( "International Day of Rural Women", "international day of rural women", monthDay 10 15 )+  , ( "International Day of Solidarity with Detained and Missing Staff Members", "international day of solidarity with detained and missing staff members", monthDay 3 25 )+  , ( "International Day of Solidarity with the Palestinian People", "international day of solidarity with the palestinian people", monthDay 11 29 )+  , ( "International Day of Sport for Development and Peace", "international day of sport for development and peace", monthDay 4 6 )+  , ( "International Day of United Nations Peacekeepers", "international day of united nations peacekeepers", monthDay 5 29 )+  , ( "International Day of Women and Girls in Science", "international day of women and girls in science", monthDay 2 11 )+  , ( "International Day of Yoga", "international day of yoga", monthDay 6 21 )+  , ( "International Day of Zero Tolerance for Female Genital Mutilation", "international day of zero tolerance for female genital mutilation", monthDay 2 6 )+  , ( "International Day of the Girl Child", "international day of the girl child", monthDay 10 11 )+  , ( "International Day of the Victims of Enforced Disappearances", "international day of the victims of enforced disappearances", monthDay 8 30 )+  , ( "International Day of the World's Indigenous People", "international day of the world'?s indigenous people", monthDay 8 9 )+  , ( "International Day to End Impunity for Crimes against Journalists", "international day to end impunity for crimes against journalists", monthDay 11 2 )+  , ( "International Day to End Obstetric Fistula", "international day to end obstetric fistula", monthDay 5 23 )+  , ( "International Day for Disaster Reduction", "iddr|international day for (natural )?disaster reduction", monthDay 10 13 )+  , ( "International Human Solidarity Day", "international human solidarity day", monthDay 12 20 )+  , ( "International Jazz Day", "international jazz day", monthDay 4 30 )+  , ( "International Literacy Day", "international literacy day", monthDay 9 8 )+  , ( "International Men's Day", "international men'?s day", monthDay 11 19 )+  , ( "International Migrants Day", "international migrants day", monthDay 12 18 )+  , ( "International Mother Language Day", "international mother language day", monthDay 2 21 )+  , ( "International Mountain Day", "international mountain day", monthDay 12 11 )+  , ( "International Nurses Day", "international nurses day", monthDay 5 12 )+  , ( "International Overdose Awareness Day", "international overdose awareness day", monthDay 8 31 )+  , ( "International Volunteer Day for Economic and Social Development", "international volunteer day for economic and social development", monthDay 12 5 )+  , ( "International Widows' Day", "international widows'? day", monthDay 6 23 )+  , ( "International Women's Day", "international women'?s day", monthDay 3 8 )+  , ( "International Youth Day", "international youth day", monthDay 8 12 )+  , ( "May Day", "may day", monthDay 5 1 )+  , ( "Nelson Mandela Day", "nelson mandela day", monthDay 7 18 )+  , ( "New Year's Day", "new year'?s?( day)?", monthDay  1  1 )+  , ( "New Year's Eve", "new year'?s? eve", monthDay 12 31 )+  , ( "Orthodox Christmas Day", "orthodox christmas day", monthDay 1 7 )+  , ( "Orthodox New Year", "orthodox new year", monthDay 1 14 )+  , ( "Public Service Day", "public service day", monthDay 6 23 )+  , ( "St. George's Day", "(saint|st\\.?) george'?s day|feast of saint george", monthDay 4 23 )+  , ( "St Patrick's Day", "st\\.? patrick'?s day", monthDay 3 17 )+  , ( "St. Stephen's Day", "st\\.? stephen'?s day", monthDay 12 26 )+  , ( "Time of Remembrance and Reconciliation for Those Who Lost Their Lives during the Second World War", "time of remembrance and reconciliation for those who lost their lives during the second world war", monthDay 5 8 )+  , ( "United Nations Day", "united nations day", monthDay 10 24 )+  , ( "United Nations' Mine Awareness Day", "united nations'? mine awareness day", monthDay 4 4 )+  , ( "United Nations' World Health Day", "united nations'? world health day", monthDay 4 7 )+  , ( "Universal Children's Day", "universal children'?s day", monthDay 11 20 )+  , ( "Valentine's Day", "valentine'?s?( day)?", monthDay 2 14 )+  , ( "World AIDS Day", "world aids day", monthDay 12 1 )+  , ( "World Autism Awareness Day", "world autism awareness day", monthDay 4 2 )+  , ( "World Autoimmune Arthritis Day", "world autoimmune arthritis day", monthDay 5 20 )+  , ( "World Blood Donor Day", "world blood donor day", monthDay 6 14 )+  , ( "World Book and Copyright Day", "world book and copyright day", monthDay 4 23 )+  , ( "World Braille Day", "world braille day", monthDay 1 4 )+  , ( "World Cancer Day", "world cancer day", monthDay 2 4 )+  , ( "World Cities Day", "world cities day", monthDay 10 31 )+  , ( "World CP Day", "world (cerebral palsy| cp) day", monthDay 10 6 )+  , ( "World Day Against Child Labour", "world day against child labour", monthDay 6 12 )+  , ( "World Day against Trafficking in Persons", "world day against trafficking in persons", monthDay 7 30 )+  , ( "World Day for Audiovisual Heritage", "world day for audiovisual heritage", monthDay 10 27 )+  , ( "World Day for Cultural Diversity for Dialogue and Development", "world day for cultural diversity for dialogue and development", monthDay 5 21 )+  , ( "World Day for Safety and Health at Work", "world day for safety and health at work", monthDay 4 28 )+  , ( "World Day for the Abolition of Slavery", "world day for the abolition of slavery", monthDay 12 2 )+  , ( "World Day of Social Justice", "world day of social justice", monthDay 2 20 )+  , ( "World Day of the Sick", "world day of the sick", monthDay 2 11 )+  , ( "World Day to Combat Desertification and Drought", "world day to combat desertification and drought", monthDay 6 17 )+  , ( "World Development Information Day", "world development information day", monthDay 10 24 )+  , ( "World Diabetes Day", "world diabetes day", monthDay 11 14 )+  , ( "World Down Syndrome Day", "world down syndrome day", monthDay 3 21 )+  , ( "World Elder Abuse Awareness Day", "world elder abuse awareness day", monthDay 6 15 )+  , ( "World Environment Day", "world environment day", monthDay 6 5 )+  , ( "World Food Day", "world food day", monthDay 10 16 )+  , ( "World Genocide Commemoration Day", "world genocide commemoration day", monthDay 12 9 )+  , ( "World Heart Day", "world heart day", monthDay 9 29 )+  , ( "World Hepatitis Day", "world hepatitis day", monthDay 7 28 )+  , ( "World Humanitarian Day", "world humanitarian day", monthDay 8 19 )+  , ( "World Information Society Day", "world information society day", monthDay 5 17 )+  , ( "World Intellectual Property Day", "world intellectual property day", monthDay 4 26 )+  , ( "World Malaria Day", "world malaria day", monthDay 4 25 )+  , ( "World Mental Health Day", "world mental health day", monthDay 10 10 )+  , ( "World Meteorological Day", "world meteorological day", monthDay 3 23 )+  , ( "World No Tobacco Day", "world no tobacco day", monthDay 5 31 )+  , ( "World Oceans Day", "world oceans day", monthDay 6 8 )+  , ( "World Ovarian Cancer Day", "world ovarian cancer day", monthDay 5 8 )+  , ( "World Pneumonia Day", "world pneumonia day", monthDay 11 12 )+  , ( "World Poetry Day", "world poetry day", monthDay 3 21 )+  , ( "World Population Day", "world population day", monthDay 7 11 )+  , ( "World Post Day", "world post day", monthDay 10 9 )+  , ( "World Prematurity Day", "world prematurity day", monthDay 11 17 )+  , ( "World Press Freedom Day", "world press freedom day", monthDay 5 3 )+  , ( "World Rabies Day", "world rabies day", monthDay 9 28 )+  , ( "World Radio Day", "world radio day", monthDay 2 13 )+  , ( "World Refugee Day", "world refugee day", monthDay 6 20 )+  , ( "World Science Day for Peace and Development", "world science day for peace and development", monthDay 11 10 )+  , ( "World Sexual Health Day", "world sexual health day", monthDay 9 4 )+  , ( "World Soil Day", "world soil day", monthDay 12 5 )+  , ( "World Stroke Day", "world stroke day", monthDay 10 29 )+  , ( "World Suicide Prevention Day", "world suicide prevention day", monthDay 9 10 )+  , ( "World Teachers' Day", "world teachers'? day", monthDay 10 5 )+  , ( "World Television Day", "world television day", monthDay 11 21 )+  , ( "World Toilet Day", "world toilet day", monthDay 11 19 )+  , ( "World Tourism Day", "world tourism day", monthDay 9 27 )+  , ( "World Tuberculosis Day", "world tuberculosis day", monthDay 3 24 )+  , ( "World Tuna Day", "world tuna day", monthDay 5 2 )+  , ( "World Vegan Day", "world vegan day", monthDay 11 1 )+  , ( "World Vegetarian Day", "world vegetarian day", monthDay 10 1 )+  , ( "World Water Day", "world water day", monthDay 3 22 )+  , ( "World Wetlands Day", "world wetlands day", monthDay 2 2 )+  , ( "World Wildlife Day", "world wildlife day", monthDay 3 3 )+  , ( "World Youth Skills Day", "world youth skills day", monthDay 7 15 )+  , ( "Zero Discrimination Day", "zero discrimination day", monthDay 3 1 )    -- Fixed day/week/month, year over year+  , ( "Commonwealth Day", "commonwealth day", nthDOWOfMonth 2 1 3 )+  , ( "Day of Remembrance for Road Traffic Victims"+    , "(world )?day of remembrance for road traffic victims"+    , nthDOWOfMonth 3 7 11 )+  , ( "International Day of Cooperatives"+    , "international day of co\\-?operatives", nthDOWOfMonth 1 6 7 )   , ( "Martin Luther King's Day"-    , "(MLK|Martin Luther King,?)( Jr.?| Junior)? day"+    , "(MLK|Martin Luther King,?)( Jr\\.?| Junior)? day|(civil|idaho human) rights day"     , nthDOWOfMonth 3 1 1     )-  , ( "Father's Day"            , "father'?s?'? day", nthDOWOfMonth 3 7 6 )-  , ( "Mother's Day"            , "mother'?s?'? day", nthDOWOfMonth 2 7 5 )-  , ( "Labor Day"               , "labor day"       , nthDOWOfMonth 1 1 9 )    -- The day after Thanksgiving (not always the fourth Friday of November)   , ( "Black Friday", "black frid?day"     , cycleNthAfter False TG.Day 1 $ nthDOWOfMonth 4 4 11     )-  -- Last Monday of May-  , ( "Memorial Day", "memorial day", predLastOf (dayOfWeek 1) (month 5) )-  -- Long weekend before the last Monday of May-  , ( "Memorial Day weekend", "memorial day week(\\s|-)?ends?"-    , longWEBefore $ predLastOf (dayOfWeek 1) (month 5)-    )-  -- Long weekend before the first Monday of September-  , ( "Labor Day weekend", "labor day week(\\s|-)?ends?"-    , longWEBefore $ nthDOWOfMonth 1 1 9+  , ( "World Habitat Day", "world habitat day", nthDOWOfMonth 1 1 10 )+  , ( "World Kidney Day", "world kidney day", nthDOWOfMonth 2 4 3 )+  , ( "World Leprosy Day", "world leprosy day"+    , predLastOf (dayOfWeek 7) (month 1) )+  , ( "World Maritime Day", "world maritime day"+    , predLastOf (dayOfWeek 4) (month 9) )+  , ( "World Migratory Bird Day", "world migratory bird day"+    , nthDOWOfMonth 2 6 5 )+  , ( "World Philosophy Day", "world philosophy day", nthDOWOfMonth 3 4 11 )+  , ( "World Religion Day", "world religion day", nthDOWOfMonth 3 7 1 )+  , ( "World Sight Day", "world sight day", nthDOWOfMonth 2 4 10 )+  ]++ruleComputedHolidays :: [Rule]+ruleComputedHolidays = mkRuleHolidays+  [ ( "Ascension Day", "ascension\\s+(thurs)?day"+    , cycleNthAfter False TG.Day 39 easterSunday )+  , ( "Ash Wednesday", "ash\\s+wednesday|carnival"+    , cycleNthAfter False TG.Day (-46) easterSunday )+  , ( "Ashura", "(day of )?ashura"+    , cycleNthAfter False TG.Day 9 muharram )+  , ( "Bhai Dooj", "bhai(ya)?\\s+d(u|oo)j|bhau\\-beej|bhai\\s+(tika|phonta)"+    , cycleNthAfter False TG.Day 4 dhanteras )+  -- 6th day after Diwali+  , ( "Chhath", "chhathi?|chhath (parv|puja)|dala (chhath|puja)|surya shashthi"+    , cycleNthAfter False TG.Day 8 dhanteras )+  , ( "Boghi", "boghi|bogi\\s+pandigai"+    , cycleNthAfter False TG.Day (-1) thaiPongal )+  , ( "Chinese New Year", "chinese\\s+(lunar\\s+)?new\\s+year('s\\s+day)?"+    , chineseNewYear )+  , ( "Clean Monday"+    , "(orthodox\\s+)?(ash|clean|green|pure|shrove)\\s+monday|monday of lent"+    , cycleNthAfter False TG.Day (-48) orthodoxEaster )+  , ( "Corpus Christi", "(the feast of )?corpus\\s+christi"+    , cycleNthAfter False TG.Day 60 easterSunday )+  , ( "Dhanteras", "dhanatrayodashi|dhanteras|dhanvantari\\s+trayodashi"+    , dhanteras )+  , ( "Diwali", "deepavali|diwali|lakshmi\\s+puja"+    , cycleNthAfter False TG.Day 2 dhanteras )+  , ( "Durga Ashtami", "(durga|maha)(\\s+a)?shtami"+    , cycleNthAfter False TG.Day 7 navaratri )+  , ( "Easter Monday", "easter\\s+mon(day)?"+    , cycleNthAfter False TG.Day 1 easterSunday )+  , ( "Easter Sunday", "easter(\\s+sun(day)?)?", easterSunday )+  , ( "Eid al-Adha", "bakr[\\-\\s]e?id|e?id [au]l\\-adha|sacrifice feast"+    , eidalAdha )+  , ( "Eid al-Fitr", "eid al\\-fitr", eidalFitr )+  , ( "Govardhan Puja", "govardhan\\s+puja|annak(u|oo)t"+    , cycleNthAfter False TG.Day 3 dhanteras )+  , ( "Good Friday", "(good|great|holy)\\s+fri(day)?"+    , cycleNthAfter False TG.Day (-2) easterSunday )+  , ( "Holi", "(rangwali )?holi|dhuleti|dhulandi|phagwah"+    , cycleNthAfter False TG.Day 39 vasantPanchami )+  , ( "Holika Dahan", "holika dahan|kamudu pyre|chhoti holi"+    , cycleNthAfter False TG.Day 38 vasantPanchami )+  , ( "Holy Saturday"+    , "(black|holy (and great )?|joyous)sat(urday)?|the great sabbath|easter eve"+    , cycleNthAfter False TG.Day (-1) easterSunday )+  , ( "Islamic New Year", "(arabic|hijri|islamic) new year|amun jadid|muharram"+    , muharram )+  , ( "Isra and Mi'raj"+    , "isra and mi'raj|(the )?prophet'?s'? ascension|(the )?ascension to heaven|the night journey"+    , cycleNthAfter False TG.Day 26 rajab     )+  , ( "Jumu'atul-Wida", "jumu'atul\\-widaa?'?|jamat[\\-\\s]ul[\\-\\s]vida"+    , predNthAfter (-1) (dayOfWeek 5) eidalFitr )+  , ( "Kaanum Pongal", "(kaanum|kanni)\\s+pongal"+    , cycleNthAfter False TG.Day 2 thaiPongal )+  , ( "Lag BaOmer", "lag b[a']omer", lagBaOmer )+  , ( "Laylat al-Qadr"+    , "laylat al[\\-\\s][qk]adr|night of (destiny|measures|power|value)"+    , cycleNthAfter False TG.Day 26 ramadan )+  , ( "Lazarus Saturday", "lazarus\\s+saturday"+    , cycleNthAfter False TG.Day (-8) orthodoxEaster )+  , ( "Maha Navami", "maha\\s+navami", cycleNthAfter False TG.Day 8 navaratri )+  , ( "Maha Saptami", "maha\\s+saptami", cycleNthAfter False TG.Day 6 navaratri )+  , ( "Mattu Pongal", "maa?ttu\\s+pongal"+    , cycleNthAfter False TG.Day 1 thaiPongal )+  , ( "Maundy Thursday"+    , "(covenant|(great and )?holy|maundy|sheer)\\s+thu(rsday)?|thu(rsday)? of mysteries"+    , cycleNthAfter False TG.Day (-3) easterSunday )+  , ( "Mawlid"+    , "mawlid(\\s+al\\-nab(awi|i\\s+al\\-sharif))?|mevli[dt]|mulud|birth(day)? of (the )?prophet( muhammad)?|(the )?prophet's birthday"+    , mawlid )+  , ( "Naraka Chaturdashi"+    , "naraka? (nivaran )?chaturdashi|(kali|roop) chaudas|choti diwali"+    , cycleNthAfter False TG.Day 1 dhanteras )+  , ( "Orthodox Easter Monday", "orthodox\\s+easter\\s+mon(day)?"+    , cycleNthAfter False TG.Day 1 orthodoxEaster )+  , ( "Orthodox Easter Sunday", "orthodox\\s+easter(\\s+sun(day)?)?|pascha?"+    , orthodoxEaster )+  , ( "Orthodox Holy Saturday", "orthodox\\s+holy\\s+sat(urday)?|the great sabbath"+    , cycleNthAfter False TG.Day (-1) orthodoxEaster )+  , ( "Orthodox Great Friday", "orthodox\\s+great(\\s+and\\s+holy)?\\s+friday"+    , cycleNthAfter False TG.Day (-2) orthodoxEaster )+  , ( "Orthodox Palm Sunday", "orthodox\\s+(branch|palm|yew\\s+sunday)"+    , cycleNthAfter False TG.Day (-7) orthodoxEaster )+  , ( "Palm Sunday", "branch|palm|yew\\s+sunday"+    , cycleNthAfter False TG.Day (-7) easterSunday )+  , ( "Pentecost", "pentecost|white sunday|whitsunday"+    , cycleNthAfter False TG.Day 49 easterSunday )+  , ( "Raksha Bandhan", "raksha(\\s+)?bandhan|rakhi", rakshaBandhan )+  , ( "Shemini Atzeret", "shemini\\s+atzeret"+    , cycleNthAfter False TG.Day 21 roshHashana )+  , ( "Shrove Tuesday", "pancake (tues)?day|shrove tuesday"+    , cycleNthAfter False TG.Day (-47) easterSunday )+  , ( "Simchat Torah", "simc?hat\\s+torah"+    , cycleNthAfter False TG.Day 22 roshHashana )+  , ( "Thai Pongal"+    , "(thai )?pongal|pongal pandigai|(makara? |magha )?sankranth?i|maghi"+    , thaiPongal )+  , ( "Thiru Onam", "(thiru(v|\\s+))?onam", thiruOnam )+  , ( "Tisha B'Av", "tisha b'av", tishaBAv )+  , ( "Trinity Sunday", "trinity\\s+sunday"+    , cycleNthAfter False TG.Day 56 easterSunday )+  , ( "Vasant Panchami", "[bv]asant\\s+panchami", vasantPanchami )+  , ( "Vijayadashami", "dasara|duss(eh|he)ra|vijayadashami"+    , cycleNthAfter False TG.Day 9 navaratri )+  -- 15th day of Shevat+  , ( "Tu BiShvat", "tu b[i']shvat", tuBishvat )+  , ( "Yom Ha'atzmaut", "yom ha'?atzmaut", yomHaatzmaut )+  , ( "Yom HaShoah"+    , "yom hashoah|yom hazikaron lashoah ve-lag'vurah|holocaust (remembrance )?day"+    , cycleNthAfter False TG.Day 12 passover )+  , ( "Yom Kippur", "yom\\s+kippur", cycleNthAfter False TG.Day 9 roshHashana )+  , ( "Whit Monday", "(pentecost|whit)\\s+monday|monday of the holy spirit"+    , cycleNthAfter False TG.Day 50 easterSunday )++  -- Other+  , ( "Boss's Day", "boss'?s?( day)?"+    , predNthClosest 0 weekday (monthDay 10 16) )   ] +ruleComputedHolidays' :: [Rule]+ruleComputedHolidays' = mkRuleHolidays'+  [ ( "Great Lent", "great\\s+(fast|lent)"+    , let start = cycleNthAfter False TG.Day (-48) orthodoxEaster+          end = cycleNthAfter False TG.Day (-9) orthodoxEaster+        in interval TTime.Open start end )+  , ( "Hanukkah", "c?hanukk?ah"+    , let start = chanukah+          end = cycleNthAfter False TG.Day 7 chanukah+        in interval TTime.Open start end )+  , ( "Lent", "lent"+    , let start = cycleNthAfter False TG.Day (-46) easterSunday+          end = cycleNthAfter False TG.Day (-1) easterSunday+        in interval TTime.Open start end )+  , ( "Navaratri", "durga\\s+puja|durgotsava|nava?rath?ri"+    , let start = navaratri+          end = cycleNthAfter False TG.Day 9 navaratri+        in interval TTime.Open start end )+  , ( "Passover", "passover|pesa[ck]?h"+    , let start = passover+          end = cycleNthAfter False TG.Day 8 passover+        in interval TTime.Open start end )+  , ( "Ramadan", "rama[dt]h?an|ramzaa?n"+    , let start = ramadan+          end = cycleNthAfter False TG.Day (-1) eidalFitr+        in interval TTime.Open start end )+  , ( "Rosh Hashanah", "rosh hashanah|yom teruah"+    , let start = roshHashana+          end = cycleNthAfter False TG.Day 2 roshHashana+        in interval TTime.Open start end )+  , ( "Shavuot", "feast of weeks|shavu'?oth?|shovuos"+    , let start = cycleNthAfter False TG.Day 50 passover+          end = cycleNthAfter False TG.Day 52 passover+        in interval TTime.Open start end )+  , ( "Sukkot", "feast of (booths|tabernacles|the ingathering)|su[ck]{2}o[st]"+    , let start = cycleNthAfter False TG.Day 14 roshHashana+          end = cycleNthAfter False TG.Day 22 roshHashana+        in interval TTime.Open start end )+  ]  ruleCycleThisLastNext :: Rule ruleCycleThisLastNext = Rule@@ -1276,6 +1737,19 @@       _ -> Nothing   } +ruleDOMOfTimeMonth :: Rule+ruleDOMOfTimeMonth = Rule+  { name = "<day-of-month> (ordinal or number) of <month>"+  , pattern =+    [ Predicate isDOMValue+    , regex "of( the)?"+    , Predicate $ isGrainOfTime TG.Month+    ]+  , prod = \tokens -> case tokens of+      (token:_:Token Time td:_) -> Token Time <$> intersectDOM td token+      _ -> Nothing+  }+ ruleCycleTheAfterBeforeTime :: Rule ruleCycleTheAfterBeforeTime = Rule   { name = "the <cycle> after|before <time>"@@ -1494,6 +1968,38 @@       _ -> Nothing   } +ruleDayDurationHenceAgo :: Rule+ruleDayDurationHenceAgo = Rule+  { name = "<day> <duration> hence|ago"+  , pattern =+    [ Predicate $ or . sequence [isGrainOfTime TG.Day, isGrainOfTime TG.Month]+    , dimension Duration+    , regex "(from now|hence|ago)"+    ]+  , prod = \tokens -> case tokens of+      (Token Time td:+       Token Duration dd:+       Token RegexMatch (GroupMatch (match:_)):+       _) -> case Text.toLower match of+         "ago" -> Token Time <$> intersect td (durationIntervalAgo dd)+         _     -> Token Time <$> intersect td (inDurationInterval dd)+      _ -> Nothing+  }++ruleDayInDuration :: Rule+ruleDayInDuration = Rule+  { name = "<day> in <duration>"+  , pattern =+    [ Predicate $ or . sequence [isGrainOfTime TG.Day, isGrainOfTime TG.Month]+    , regex "in"+    , dimension Duration+    ]+  , prod = \tokens -> case tokens of+      (Token Time td:_:Token Duration dd:_) ->+        Token Time <$> intersect td (inDurationInterval dd)+      _ -> Nothing+  }+ ruleInNumeral :: Rule ruleInNumeral = Rule   { name = "in <number> (implicit minutes)"@@ -1560,7 +2066,7 @@   , ruleIntersectOf   , ruleAbsorbOnTime   , ruleAbsorbOnADOW-  , ruleAbsorbInMonth+  , ruleAbsorbInMonthYear   , ruleAbsorbCommaTOD   , ruleNextDOW   , ruleNextTime@@ -1569,14 +2075,13 @@   , ruleTimeBeforeLastAfterNext   , ruleLastDOWOfTime   , ruleLastCycleOfTime+  , ruleLastNight   , ruleLastWeekendOfMonth   , ruleNthTimeOfTime   , ruleTheNthTimeOfTime   , ruleNthTimeAfterTime   , ruleTheNthTimeAfterTime-  , ruleYear-  , ruleYearPastLatent-  , ruleYearFutureLatent+  , ruleYearLatent   , ruleTheDOMNumeral   , ruleTheDOMOrdinal   , ruleDOMLatent@@ -1637,6 +2142,7 @@   , ruleIntervalAfterFromSinceTOD   , ruleCycleTheAfterBeforeTime   , ruleCycleThisLastNext+  , ruleDOMOfTimeMonth   , ruleCycleAfterBeforeTime   , ruleCycleOrdinalOfTime   , ruleCycleTheOrdinalOfTime@@ -1649,15 +2155,27 @@   , ruleDurationInWithinAfter   , ruleDurationLastNext   , ruleDurationHenceAgo+  , ruleDayDurationHenceAgo+  , ruleDayInDuration   , ruleDurationAfterBeforeTime   , ruleIntervalForDurationFrom   , ruleInNumeral   , ruleTimezone   , rulePartOfMonth+  , ruleEndOrBeginningOfMonth+  , ruleEndOrBeginningOfYear+  , ruleEndOrBeginningOfWeek   , ruleNow+  , ruleSeason+  , ruleEndOfMonth+  , ruleBeginningOfMonth+  , ruleEndOfYear+  , ruleBeginningOfYear   ]   ++ ruleInstants   ++ ruleDaysOfWeek   ++ ruleMonths   ++ ruleSeasons-  ++ ruleUSHolidays+  ++ ruleComputedHolidays+  ++ ruleComputedHolidays'+  ++ rulePeriodicHolidays
Duckling/Time/EN/TT/Corpus.hs view
@@ -33,6 +33,7 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "25/4 at 4:00pm"@@ -41,25 +42,57 @@              [ "10/10"              , "10/10/2013"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 5, 30, 0, 0, 0) Day "Indian Arrival Day")+             [ "Indian arrival day"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 6, 19, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 6, 19, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeHoliday (2017, 9, 30, 0, 0, 0) Day "Hosay")+             [ "hosay 2017"              ]   ]
Duckling/Time/EN/TT/Rules.hs view
@@ -20,9 +20,11 @@ import Duckling.Dimensions.Types import Duckling.Numeral.Helpers (parseInt) import Duckling.Regex.Types+import Duckling.Time.Computed import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.TimeGrain.Types as TG  ruleDDMM :: Rule ruleDDMM = Rule@@ -42,7 +44,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +71,29 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Indian Arrival Day", "indian arrival day", monthDay 5 30 )+  , ( "Labour Day", "labour day", monthDay 6 19 )+  , ( "Spiritual Baptist Liberation Day", "spiritual baptist liberation day", monthDay 3 30 ) +  -- Fixed day/week/month, year over year+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]++ruleComputedHolidays :: [Rule]+ruleComputedHolidays = mkRuleHolidays+  [ ( "Hosay", "hosay", cycleNthAfter False TG.Day 9 muharram )+  ]+ rules :: [Rule] rules =   [ ruleDDMM   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ ruleComputedHolidays+  ++ rulePeriodicHolidays
Duckling/Time/EN/US/Corpus.hs view
@@ -33,29 +33,112 @@              , "10/31/74"              , "10-31-74"              , "10.31.1974"+             , "10 31 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "4/25 at 4:00pm"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2012, 11, 26, 0, 0, 0) Day "Cyber Monday")+             [ "last cyber monday"+             , "cyber monday 2012"+             ]+  , examples (datetimeHoliday (2017, 11, 27, 0, 0, 0) Day "Cyber Monday")+             [ "cyber monday 2017"+             ]+  , examples (datetimeHoliday (2013, 5, 27, 0, 0, 0) Day "Memorial Day")+             [ "memorial day"+             , "Next Memorial Day"+             , "decoration day"+             ]+  , examples (datetimeHoliday (2012, 5, 28, 0, 0, 0) Day "Memorial Day")+             [ "last memorial day"+             , "memorial day of last year"+             ]+  , examples (datetimeIntervalHoliday ((2013, 5, 24, 18, 0, 0), (2013, 5, 28, 0, 0, 0)) Hour "Memorial Day weekend")+             [ "memorial day week-end"+             ]+  , examples (datetimeHoliday (2013, 7, 4, 0, 0, 0) Day "Independence Day")+             [ "independence day"+             ]+  , examples (datetimeHoliday (2013, 11, 11, 0, 0, 0) Day "Veterans Day")+             [ "veterans day"+             ]+  , examples (datetimeHoliday (2013, 5, 1, 0, 0, 0) Day "Loyalty Day")+             [ "law day"+             , "Lei Day"+             , "loyalty day"+             ]+  , examples (datetimeHoliday (2013, 2, 18, 0, 0, 0) Day "President's Day")+             [ "George Washington Day"+             , "washington's birthday"+             , "presidents' day"+             , "president day 2013"+             , "Daisy Gatson Bates Day"+             ]+  , examples (datetimeHoliday (2013, 2, 12, 0, 0, 0) Day "Lincoln's Birthday")+             [ "Lincolns birthday"+             , "Abraham Lincoln's birthday"+             , "Lincoln birthday"+             , "Lincolns' birthday"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2019, 9, 8, 0, 0, 0) Day "National Grandparents Day")+             [ "national grandparents day 2019"+             ]+  , examples (datetimeHoliday (2018, 5, 11, 0, 0, 0) Day "Military Spouse Day")+             [ "Military Spouse day 2018"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 9, 2, 0, 0, 0) Day "Labor Day")+             [ "labor day"+             ]+  , examples (datetimeHoliday (2012, 9, 3, 0, 0, 0) Day "Labor Day")+             [ "labor day of last year"+             , "Labor Day 2012"+             ]+  , examples (datetimeIntervalHoliday ((2013, 8, 30, 18, 0, 0), (2013, 9, 3, 0, 0, 0)) Hour "Labor Day weekend")+             [ "labor day weekend"+             ]+  , examples (datetimeHoliday (2013, 2, 2, 0, 0, 0) Day "Groundhog Day")+             [ "Groundhog day"+             , "groundhogs day"              ]   ]
Duckling/Time/EN/US/Rules.hs view
@@ -12,10 +12,7 @@  module Duckling.Time.EN.US.Rules   ( rules-  , ruleMMDD-  , ruleMMDDYYYY-  , ruleMMDDYYYYDot-  , ruleThanksgiving+  , rulesBackwardCompatible   ) where  import Data.Maybe@@ -27,6 +24,8 @@ import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.Time.Types as TTime+import qualified Duckling.TimeGrain.Types as TG  ruleMMDD :: Rule ruleMMDD = Rule@@ -46,7 +45,7 @@ ruleMMDDYYYY = Rule   { name = "mm/dd/yyyy"   , pattern =-    [ regex "(1[0-2]|0?[1-9])[/-](3[01]|[12]\\d|0?[1-9])[/-](\\d{2,4})"+    [ regex "(1[0-2]|0?[1-9])[-/\\s](3[01]|[12]\\d|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (mm:dd:yy:_)):_) -> do@@ -73,20 +72,181 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+ruleBackwardCompatibleHolidays :: [Rule]+ruleBackwardCompatibleHolidays = mkRuleHolidays+  [ ("Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11)+  , ("Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6)+  ] -rules :: [Rule]-rules =+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "African Liberation Day", "african liberation day", monthDay 5 25 )+  , ( "Air Force Birthday", "air force birthday", monthDay 9 18 )+  , ( "Alaska Day", "alaska day", monthDay 10 18 )+  , ( "American Eagle Day", "american eagle day", monthDay 6 20 )+  , ( "Army Birthday", "army birthday", monthDay 6 14 )+  , ( "Bennington Battle Day", "bennington battle day", monthDay 8 16 )+  , ( "Bunker Hill Day", "bunker hill day", monthDay 6 17 )+  , ( "California Admission Day", "california admission day", monthDay 9 9 )+  , ( "Cinco de Mayo", "cinco de mayo", monthDay 5 5 )+  , ( "Citizenship Day", "citizenship day|i am an american day", monthDay 9 17 )+  , ( "Coast Guard Birthday", "coast guard (birth)?day", monthDay 8 4 )+  , ( "Colorado Day", "colorado day", monthDay 8 1 )+  , ( "Constitution Day and Citizenship Day", "constitution day and citizenship day", monthDay 9 17 )+  , ( "César Chávez Day", "c[ée]sar ch[áa]vez day", monthDay 3 31 )+  , ( "D-Day", "d\\-day", monthDay 6 6 )+  , ( "Day After Christmas Day", "day after christmas day", monthDay 12 26 )+  , ( "Elizabeth Peratrovich Day", "elizabeth peratrovich day", monthDay 2 16 )+  , ( "Emancipation Day", "emancipation day", monthDay 4 16 )+  , ( "Evacuation Day", "evacuation day", monthDay 3 17 )+  , ( "Father Damien Day", "father damien day", monthDay 4 15 )+  , ( "Feast of Our Lady of Guadalupe", "feast of our lady of guadalupe", monthDay 12 12 )+  , ( "Flag Day", "flag day", monthDay 6 14 )+  , ( "Groundhog Day", "groundhogs? day", monthDay 2 2 )+  , ( "Harvey Milk Day", "harvey milk day", monthDay 5 22 )+  , ( "Inauguration Day", "inauguration day", monthDay 1 20 )+  , ( "Independence Day", "independence day", monthDay 7 4 )+  , ( "Juneteenth", "juneteenth", monthDay 6 19 )+  , ( "Kamehameha Day", "kamehameha day", monthDay 6 11 )+  , ( "Kansas Day", "kansas day", monthDay 1 29 )+  , ( "Kent State Shootings Remembrance", "kent state shootings remembrance", monthDay 5 4 )+  , ( "Loyalty Day", "l(aw|ei|oyalty) day", monthDay 5 1 )+  , ( "Leif Erikson Day", "leif erikson day", monthDay 10 9 )+  , ( "Lincoln's Birthday", "(abraham )?lincoln'?s?'? birthday", monthDay 2 12 )+  , ( "Linus Pauling Day", "linus pauling day", monthDay 2 28 )+  , ( "Lyndon Baines Johnson Day", "lyndon baines johnson day", monthDay 8 27 )+  , ( "Marine Corps Birthday", "marine corps (birth)?day", monthDay 11 10 )+  , ( "Maryland Day", "maryland day", monthDay 3 25 )+  , ( "National Aviation Day", "national aviation day", monthDay 8 19 )+  , ( "National Freedom Day", "national freedom day", monthDay 2 1 )+  , ( "National Guard Birthday", "national guard (birth)?day", monthDay 12 13 )+  , ( "National Korean War Veterans Armistice Day", "national korean war veterans armistice day", monthDay 7 27 )+  , ( "National Maritime Day", "national maritime day", monthDay 5 22 )+  , ( "National Missing Children's Day", "national missing children'?s day", monthDay 5 25 )+  , ( "National Nurses Day", "national nurses day", monthDay 5 6 )+  , ( "National Tartan Day", "national tartan day", monthDay 4 6 )+  , ( "Navy Birthday", "(u\\.?s\\.? )?navy (birth)?day", monthDay 10 13 )+  , ( "Oklahoma Day", "oklahoma day", monthDay 4 22 )+  , ( "Pan American Aviation Day", "pan american aviation day", monthDay 12 17 )+  , ( "Pascua Florida Day", "pascua florida day", monthDay 4 2 )+  , ( "Patriot Day", "patriot day", monthDay 9 11 )+  , ( "Peace Officers Memorial Day", "peace officers memorial day", monthDay 5 15 )+  , ( "Pearl Harbor Remembrance Day", "pearl harbor remembrance day", monthDay 12 7 )+  , ( "Pioneer Day", "pioneer day", monthDay 7 24 )+  , ( "Prince Jonah Kuhio Kalanianaole Day", "prince jonah kuhio kalanianaole day", monthDay 3 26 )+  , ( "Purple Heart Day", "purple heart day", monthDay 8 7 )+  , ( "Read Across America Day", "read across america day", monthDay 3 2 )+  , ( "Rhode Island Independence Day", "rhode island independence day", monthDay 5 4 )+  , ( "Rosa Parks Day", "rosa parks day", monthDay 2 4 )+  , ( "San Jacinto Day", "san jacinto day", monthDay 4 21 )+  , ( "Self-Injury Awareness Day", "self\\-injury awareness day", monthDay 3 1 )+  , ( "Senior Citizens Day", "senior citizens day", monthDay 8 21 )+  , ( "St Nicholas' Day", "st\\.? nicholas'? day", monthDay 12 6 )+  , ( "St. David's Day", "st\\.? david'?s day", monthDay 3 1 )+  , ( "Statehood Day", "statehood day", monthDay 6 1 )+  , ( "Statehood Day in Arizona", "statehood day in arizona", monthDay 2 14 )+  , ( "Stephen Foster Memorial Day", "stephen foster memorial day", monthDay 1 13 )+  , ( "Susan B Anthony's Birthday", "susan b\\.? anthony'?s birthday", monthDay 2 15 )+  , ( "Texas Independence Day", "texas independence day", monthDay 3 2 )+  , ( "Thomas Jefferson's Birthday", "thomas jefferson'?s birthday", monthDay 4 13 )+  , ( "Truman Day", "truman day", monthDay 5 8 )+  , ( "Veterans Day", "veterans day", monthDay 11 11 )+  , ( "West Virginia Day", "west virginia day", monthDay 6 20 )+  , ( "White Cane Safety Day", "white cane safety day", monthDay 10 15 )+  , ( "Women's Equality Day", "women'?s equality day", monthDay 8 26 )+  , ( "Wright Brothers Day", "wright brothers day", monthDay 12 17 )++  -- Fixed day/week/month, year over year+  , ( "Arbor Day", "arbor day", predLastOf (dayOfWeek 5) (month 4) )+  , ( "Armed Forces Day", "armed forces day", nthDOWOfMonth 3 6 5 )+  , ( "Casimir Pulaski Day", "casimir pulaski day", nthDOWOfMonth 1 1 3 )+  , ( "Child Health Day", "child health day", nthDOWOfMonth 1 1 10 )+  , ( "Columbus Day", "columbus day", nthDOWOfMonth 2 1 10 )+  -- Saturday after Labor Day+  , ( "Carl Garner Federal Lands Cleanup Day"+    , "carl garner federal lands cleanup day"+    , cycleNthAfter False TG.Day 5 $ nthDOWOfMonth 1 1 9 )+  -- Monday after Thanksgiving+  , ( "Cyber Monday", "cyber monday"+    , cycleNthAfter False TG.Day 4 $ nthDOWOfMonth 4 4 11 )+  , ( "Election Day", "election day"+    , cycleNthAfter False TG.Day 1 $ nthDOWOfMonth 1 1 11 )+  , ( "Employee Appreciation Day", "employee appreciation day"+    , nthDOWOfMonth 1 5 3 )+  , ( "Friendship Day", "friendship day", nthDOWOfMonth 1 7 8 )+  , ( "Gold Star Mother's Day", "gold star mother's day"+    , predLastOf (dayOfWeek 7) (month 9) )+  , ( "Indigenous People's Day", "indigenous people's day"+    , nthDOWOfMonth 2 1 10 )+  , ( "Labor Day", "labor day", nthDOWOfMonth 1 1 9 )+  -- Long weekend before the first Monday of September+  , ( "Labor Day weekend", "labor day week(\\s|-)?ends?"+    , longWEBefore $ nthDOWOfMonth 1 1 9+    )+  , ( "Lee Jackson Day", "lee jackson day", nthDOWOfMonth 2 5 1 )+  -- Last Monday of May+  , ( "Memorial Day", "(decoration|memorial) day"+    , predLastOf (dayOfWeek 1) (month 5) )+  -- Long weekend before the last Monday of May+  , ( "Memorial Day weekend", "(decoration|memorial) day week(\\s|-)?ends?"+    , longWEBefore $ predLastOf (dayOfWeek 1) (month 5) )+  -- 2 days before Mother's Day+  , ( "Military Spouse Day", "military spouse (appreciation )?day"+    , cycleNthAfter False TG.Day (- 2) $ nthDOWOfMonth 2 7 5 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "National CleanUp Day", "national clean\\-?up day", nthDOWOfMonth 3 6 9 )+  , ( "National Day of Prayer", "national day of prayer", nthDOWOfMonth 1 4 5 )+  , ( "National Defense Transportation Day"+    , "national defense transportation day"+    , nthDOWOfMonth 3 5 5 )+  , ( "National Explosive Ordnance Disposal Day"+    , "national (eod|explosive ordnance disosal) day"+    , nthDOWOfMonth 1 6 5 )+  -- First Sunday after Labor Day+  , ( "National Grandparents Day", "national grandparents day"+    , cycleNthAfter False TG.Day 6 $ nthDOWOfMonth 1 1 9 )+  , ( "National POW/MIA Recognition Day", "national pow/mia recognition day"+    , nthDOWOfMonth 3 5 9 )+  , ( "National Wear Red Day", "national wear red day", nthDOWOfMonth 1 5 2 )+  -- Day after Thanksgiving+  , ( "Native American Heritage Day"+    , "(american indian|native american) heritage day"+    , cycleNthAfter False TG.Day 1 $ nthDOWOfMonth 4 4 11 )+  , ( "Native Americans' Day", "native americans' day", nthDOWOfMonth 4 1 9 )+  , ( "Nevada Day", "nevada day", predLastOf (dayOfWeek 5) (month 10) )+  , ( "Parents' Day", "parents' day", nthDOWOfMonth 4 7 7 )+  , ( "Patriots' Day", "patriot'?s'? day", nthDOWOfMonth 3 1 4 )+  , ( "Robert E. Lee Day", "robert e\\. lee day|lee's (birth)?day"+    , nthDOWOfMonth 3 1 1 )+  , ( "Seward's Day", "seward's day", predLastOf (dayOfWeek 1) (month 3) )+  , ( "Statehood Day", "(admission|statehood) day", nthDOWOfMonth 3 5 8 )+  , ( "Sweetest Day", "sweetest day", nthDOWOfMonth 3 6 10 )+  , ( "Take our Daughters and Sons to Work Day"+    , "take our daughters and sons to work day", nthDOWOfMonth 4 4 4 )+  , ( "Town Meeting Day", "town meeting day", nthDOWOfMonth 1 2 3 )+  , ( "Victory Day", "victory day", nthDOWOfMonth 2 1 8 )+  , ( "President's Day"+    , "(george )?washington'?s? (birth)?day|president'?s?'? day|daisy gatson bates'? day"+    , nthDOWOfMonth 3 1 2+    )+  ]++rulePeriodicHolidays' :: [Rule]+rulePeriodicHolidays' = mkRuleHolidays'+  -- Fixed dates, year over year+  [ ( "Kwanzaa", "kwanzaa", interval TTime.Open (monthDay 12 26) (monthDay 1 1) )+  ]++rulesBackwardCompatible :: [Rule]+rulesBackwardCompatible =   [ ruleMMDD   , ruleMMDDYYYY   , ruleMMDDYYYYDot-  , ruleThanksgiving   ]+  ++ ruleBackwardCompatibleHolidays++rules :: [Rule]+rules = rulesBackwardCompatible+  ++ rulePeriodicHolidays+  ++ rulePeriodicHolidays'
Duckling/Time/EN/ZA/Corpus.hs view
@@ -33,29 +33,68 @@              , "31/10/74"              , "31-10-74"              , "31.10.1974"+             , "31 10 1974"              ]   , examples (datetime (2013, 4, 25, 16, 0, 0) Minute)              [ "4/25 at 4:00pm"              ]-  , examples (datetime (2013, 11, 28, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 28, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving day"              , "thanksgiving"              , "thanksgiving 2013"              , "this thanksgiving"              , "next thanksgiving day"              ]-  , examples (datetime (2014, 11, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 11, 27, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving of next year"              , "thanksgiving 2014"              ]-  , examples (datetime (2012, 11, 22, 0, 0, 0) Day)+  , examples (datetimeHoliday (2012, 11, 22, 0, 0, 0) Day "Thanksgiving Day")              [ "last thanksgiving"              , "thanksgiving day 2012"              ]-  , examples (datetime (2016, 11, 24, 0, 0, 0) Day)+  , examples (datetimeHoliday (2016, 11, 24, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2016"              ]-  , examples (datetime (2017, 11, 23, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 11, 23, 0, 0, 0) Day "Thanksgiving Day")              [ "thanksgiving 2017"+             ]+  , examples (datetimeHoliday (2013, 12, 16, 0, 0, 0) Day "Day of Reconciliation")+             [ "day of the vow"+             , "day of reconciliation"+             , "day of the covenant"+             ]+  , examples (datetimeIntervalHoliday ((2013, 9, 1, 0, 0, 0), (2013, 9, 8, 0, 0, 0)) Day "National Arbor Week")+             [ "national arbor week"+             ]+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "Father's Day"+             ]+  , examples (datetimeHoliday (2012, 6, 17, 0, 0, 0) Day "Father's Day")+             [ "last fathers day"+             ]+  , examples (datetimeHoliday (1996, 6, 16, 0, 0, 0) Day "Father's Day")+             [ "fathers day 1996"+             ]+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Mother's Day")+             [ "Mother's Day"+             , "next mothers day"+             ]+  , examples (datetimeHoliday (2012, 5, 13, 0, 0, 0) Day "Mother's Day")+             [ "last mothers day"+             ]+  , examples (datetimeHoliday (2014, 5, 11, 0, 0, 0) Day "Mother's Day")+             [ "mothers day 2014"+             ]+  , examples (datetimeHoliday (2013, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day"+             ]+  , examples (datetimeHoliday (2012, 5, 1, 0, 0, 0) Day "Labour Day")+             [ "labour day of last year"+             , "Labour Day 2012"+             ]+  , examples (datetimeHoliday (2013, 10, 10, 0, 0, 0) Day "Heroes' Day")+             [ "heroes' day"+             , "kruger day"              ]   ]
Duckling/Time/EN/ZA/Rules.hs view
@@ -23,6 +23,7 @@ import Duckling.Time.Helpers import Duckling.Time.Types (TimeData (..)) import Duckling.Types+import qualified Duckling.Time.Types as TTime  ruleMMDD :: Rule ruleMMDD = Rule@@ -42,7 +43,7 @@ ruleDDMMYYYY = Rule   { name = "dd/mm/yyyy"   , pattern =-    [ regex "(3[01]|[12]\\d|0?[1-9])[/-](1[0-2]|0?[1-9])[-/](\\d{2,4})"+    [ regex "(3[01]|[12]\\d|0?[1-9])[-/\\s](1[0-2]|0?[1-9])[-/\\s](\\d{2,4})"     ]   , prod = \tokens -> case tokens of       (Token RegexMatch (GroupMatch (dd:mm:yy:_)):_) -> do@@ -69,20 +70,35 @@       _ -> Nothing   } --- Fourth Thursday of November-ruleThanksgiving :: Rule-ruleThanksgiving = Rule-  { name = "Thanksgiving Day"-  , pattern =-    [ regex "thanks?giving( day)?"-    ]-  , prod = \_ -> tt . mkOkForThisNext $ nthDOWOfMonth 4 4 11-  }+rulePeriodicHolidays :: [Rule]+rulePeriodicHolidays = mkRuleHolidays+  -- Fixed dates, year over year+  [ ( "Day of Goodwill", "day of goodwill", monthDay 12 26 )+  , ( "Day of Reconciliation", "day of( the)? (covenant|reconciliation|vow)", monthDay 12 16 )+  , ( "Heritage Day", "heritage day", monthDay 9 24 )+  , ( "Heroes' Day", "(heroes'|kruger) day", monthDay 10 10 )+  , ( "Labour Day", "labour day", monthDay 5 1 )+  , ( "National Women's Day", "national women'?s day", monthDay 8 9 )+  , ( "Workers' Day", "workers'? day", monthDay 5 1 ) +  -- Fixed day/week/month, year over year+  , ( "Father's Day", "father'?s?'? day", nthDOWOfMonth 3 7 6 )+  , ( "Mother's Day", "mother'?s?'? day", nthDOWOfMonth 2 7 5 )+  , ( "Thanksgiving Day", "thanks?giving( day)?", nthDOWOfMonth 4 4 11 )+  ]++rulePeriodicHolidays' :: [Rule]+rulePeriodicHolidays' = mkRuleHolidays'+  -- Fixed dates, year over year+  [ ( "National Arbor Week", "national arbor week"+    , interval TTime.Open (monthDay 9 1) (monthDay 9 7) )+  ]+ rules :: [Rule] rules =   [ ruleMMDD   , ruleDDMMYYYY   , ruleDDMMYYYYDot-  , ruleThanksgiving   ]+  ++ rulePeriodicHolidays+  ++ rulePeriodicHolidays'
Duckling/Time/ES/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/ES/Rules.hs view
@@ -276,18 +276,6 @@       _ -> Nothing   } -ruleSeason4 :: Rule-ruleSeason4 = Rule-  { name = "season"-  , pattern =-    [ regex "primavera"-    ]-  , prod = \_ ->-      let from = monthDay 3 20-          to = monthDay 6 21-      in Token Time <$> interval TTime.Open from to-  }- ruleYearLatent2 :: Rule ruleYearLatent2 = Rule   { name = "year (latent)"@@ -689,29 +677,13 @@       _ -> Nothing   } -ruleSeason3 :: Rule-ruleSeason3 = Rule-  { name = "season"-  , pattern =-    [ regex "invierno"-    ]-  , prod = \_ ->-      let from = monthDay 12 21-          to = monthDay 3 20-      in Token Time <$> interval TTime.Open from to-  }--ruleSeason :: Rule-ruleSeason = Rule-  { name = "season"-  , pattern =-    [ regex "verano"-    ]-  , prod = \_ ->-      let from = monthDay 6 21-          to = monthDay 9 23-      in Token Time <$> interval TTime.Open from to-  }+ruleSeasons :: [Rule]+ruleSeasons = mkRuleSeasons+  [ ( "verano"   , "verano"   , monthDay  6 21, monthDay  9 23 )+  , ( "otoño"    , "oto(ñ|n)o", monthDay  9 23, monthDay 12 21 )+  , ( "invierno" , "invierno" , monthDay 12 21, monthDay  3 20 )+  , ( "primavera", "primavera", monthDay  3 20, monthDay  6 21 )+  ]  ruleRightNow :: Rule ruleRightNow = Rule@@ -1032,18 +1004,6 @@   , prod = \_ -> tt . cycleNth TG.Day $ - 1   } -ruleSeason2 :: Rule-ruleSeason2 = Rule-  { name = "season"-  , pattern =-    [ regex "oto(ñ|n)o"-    ]-  , prod = \_ ->-      let from = monthDay 9 23-          to = monthDay 12 21-      in Token Time <$> interval TTime.Open from to-  }- ruleDayofweekDayofmonth :: Rule ruleDayofweekDayofmonth = Rule   { name = "<day-of-week> <day-of-month>"@@ -1389,10 +1349,6 @@   , rulePasadosNCycle   , ruleProximasNCycle   , ruleRightNow-  , ruleSeason-  , ruleSeason2-  , ruleSeason3-  , ruleSeason4   , ruleTheDayAfterTomorrow   , ruleTheDayBeforeYesterday   , ruleThisDayofweek@@ -1426,3 +1382,4 @@   ]   ++ ruleDaysOfWeek   ++ ruleMonths+  ++ ruleSeasons
Duckling/Time/FR/Corpus.hs view
@@ -24,10 +24,10 @@ import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale FR Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale FR Nothing}, testOptions, examples)   where     examples =       [ "Ana a un court de tennis"
Duckling/Time/GA/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/HE/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale HE Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HE Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/HR/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/HU/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale HU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/Helpers.hs view
@@ -8,7 +8,7 @@  {-# LANGUAGE GADTs #-} {-# LANGUAGE NoRebindableSyntax #-}-+{-# LANGUAGE TupleSections #-}  module Duckling.Time.Helpers   ( -- Patterns@@ -22,17 +22,20 @@   , hourMinute, hourMinuteSecond, inDuration, intersect, intersectDOM, interval   , inTimezone, longWEBefore, minute, minutesAfter, minutesBefore, mkLatent   , month, monthDay, notLatent, now, nthDOWOfMonth, partOfDay, predLastOf-  , predNth, predNthAfter, second, timeOfDayAMPM, weekend, withDirection, year-  , yearMonthDay, tt+  , predNth, predNthAfter, predNthClosest, season, second, timeOfDayAMPM+  , weekday, weekend, withDirection, year, yearMonthDay, tt, durationIntervalAgo+  , inDurationInterval     -- Other-  , getIntValue+  , getIntValue, timeComputed   -- Rule constructors-  , mkRuleInstants, mkRuleDaysOfWeek, mkRuleMonths, mkRuleSeasons-  , mkRuleHolidays+  , mkRuleInstants, mkRuleDaysOfWeek, mkRuleMonths, mkRuleMonthsWithLatent+  , mkRuleSeasons, mkRuleHolidays, mkRuleHolidays'   ) where  import Data.Maybe+import Data.Ord (comparing) import Data.Text (Text)+import Data.Tuple.Extra (both) import Prelude import qualified Data.Time as Time import qualified Data.Time.Calendar.WeekDate as Time@@ -74,9 +77,20 @@ timeNegPeriod (DurationData v g) = DurationData   {TDuration.grain = g, TDuration.value = negate v} +timeShiftPeriod :: Int -> DurationData -> DurationData+timeShiftPeriod n dd@DurationData{TDuration.value = v} =+  dd{TDuration.value = v + n}+ -- ----------------------------------------------------------------- -- Time predicates +timeComputed :: [TTime.TimeObject] -> TTime.Predicate+timeComputed xs = mkSeriesPredicate series+  where+    series t _ = (reverse start, end)+      where+        (start, end) = span (flip TTime.timeBefore t) xs+ timeCycle :: TG.Grain -> TTime.Predicate timeCycle grain = mkSeriesPredicate series   where@@ -176,6 +190,27 @@            [] -> Nothing            (nth:_) -> Just nth +-- | Take the nth closest value to `basePred` among those yielded by+-- `cyclicPred`.+-- n = 0 is the closest value, n = 1 is the second closest value, etc.+-- n < 0 is treated as n = 0.+takeNthClosest :: Int -> TTime.Predicate -> TTime.Predicate -> TTime.Predicate+takeNthClosest n cyclicPred basePred =+  mkSeriesPredicate $! TTime.timeSeqMap False f basePred+  where+  f t ctx = nth (n `max` 0) past future Nothing+    where+    (past, future) = runPredicate cyclicPred t ctx+    nth n pa fu res+      | n < 0 = res+      | otherwise = case comparing (against t) x y of+          GT -> nth (n-1) (tailSafe pa) fu x+          _ -> nth (n-1) pa (tailSafe fu) y+      where (x,y) = both listToMaybe (pa,fu)+    against t = fmap (negate . TTime.diffStartTime t)+    tailSafe (_:xs) = xs+    tailSafe [] = []+ -- | Takes the last occurrence of `cyclicPred` within `basePred`. takeLastOf :: TTime.Predicate -> TTime.Predicate -> TTime.Predicate takeLastOf cyclicPred basePred =@@ -316,21 +351,26 @@     res -> Just res  intersect' :: (TimeData, TimeData) -> TimeData-intersect' (TimeData pred1 _ g1 _ _ d1 _, TimeData pred2 _ g2 _ _ d2 _)+intersect' (TimeData pred1 _ g1 _ _ d1 _ h1, TimeData pred2 _ g2 _ _ d2 _ h2)   | g1 < g2 = TTime.timedata'     { TTime.timePred = timeCompose pred1 pred2     , TTime.timeGrain = g1     , TTime.direction = dir+    , TTime.holiday = hol     }   | otherwise = TTime.timedata'     { TTime.timePred = timeCompose pred2 pred1     , TTime.timeGrain = g2     , TTime.direction = dir+    , TTime.holiday = hol     }   where     dir = case catMaybes [d1, d2] of       [] -> Nothing       (x:_) -> Just x+    hol = case catMaybes [h1, h2] of+      [] -> Nothing+      (h:_) -> Just h  now :: TimeData now = td {TTime.timeGrain = TG.NoGrain}@@ -381,6 +421,20 @@ hourMinuteSecond is12H h m s = timeOfDay (Just h) is12H $   intersect' (intersect' (hour is12H h, minute m), second s) +season :: TimeData+season = TTime.timedata'+  { TTime.timePred = TTime.seasonPredicate+  , TTime.timeGrain = TG.Day+  }++-- | Note that this function is not the counterpart of `weekend`.+-- `weekend` returns an interval while `weekday` returns a single day.+weekday :: TimeData+weekday = TTime.timedata'+  { TTime.timePred = TTime.weekdayPredicate+  , TTime.timeGrain = TG.Day+  }+ cycleN :: Bool -> TG.Grain -> Int -> TimeData cycleN notImmediate grain n = TTime.timedata'   { TTime.timePred = takeN n notImmediate $ timeCycle grain@@ -414,9 +468,12 @@  -- Generalized version of cycleNth with custom predicate predNth :: Int -> Bool -> TimeData -> TimeData-predNth n notImmediate TimeData {TTime.timePred = p, TTime.timeGrain = g} =+predNth n notImmediate TimeData+  {TTime.timePred = p, TTime.timeGrain = g, TTime.holiday = h} =   TTime.timedata'-    {TTime.timePred = takeNth n notImmediate p, TTime.timeGrain = g}+    {TTime.timePred = takeNth n notImmediate p+    , TTime.timeGrain = g+    , TTime.holiday = h}  -- Generalized version of `cycleNthAfter` with custom predicate predNthAfter :: Int -> TimeData -> TimeData -> TimeData@@ -426,8 +483,19 @@     , TTime.timeGrain = g     } +-- This function can be used to express predicates invoving "closest",+-- such as "the second closest Monday to Oct 5th"+predNthClosest :: Int -> TimeData -> TimeData -> TimeData+predNthClosest n TimeData+  {TTime.timePred = p, TTime.timeGrain = g, TTime.holiday = h} base =+  TTime.timedata'+    { TTime.timePred = takeNthClosest n p $ TTime.timePred base+    , TTime.timeGrain = g+    , TTime.holiday = h+    }+ interval' :: TTime.TimeIntervalType -> (TimeData, TimeData) -> TimeData-interval' intervalType (TimeData p1 _ g1 _ _ _ _, TimeData p2 _ g2 _ _ _ _) =+interval' intervalType (TimeData p1 _ g1 _ _ _ _ _, TimeData p2 _ g2 _ _ _ _ _) =   TTime.timedata'     { TTime.timePred = mkTimeIntervalsPredicate intervalType' p1 p2     , TTime.timeGrain = min g1 g2@@ -450,6 +518,9 @@ durationAgo :: DurationData -> TimeData durationAgo dd = inDuration $ timeNegPeriod dd +durationIntervalAgo :: DurationData -> TimeData+durationIntervalAgo dd = inDurationInterval $ timeNegPeriod dd+ durationAfter :: DurationData -> TimeData -> TimeData durationAfter dd TimeData {TTime.timePred = pred1, TTime.timeGrain = g} =   TTime.timedata'@@ -470,11 +541,18 @@   where     t = takeNth 0 False $ timeCycle TG.Second +inDurationInterval :: DurationData -> TimeData+inDurationInterval dd = interval' TTime.Open+  (inDuration dd, inDuration $ timeShiftPeriod 1 dd)+ inTimezone :: Text -> TimeData -> Maybe TimeData inTimezone input td@TimeData {TTime.timePred = p} = do   tz <- parseTimezone input   Just $ td {TTime.timePred = shiftTimezone (Series.TimeZoneSeries tz []) p} +withHoliday :: Text -> TimeData -> TimeData+withHoliday n td = td {TTime.holiday = Just n}+ mkLatent :: TimeData -> TimeData mkLatent td = td {TTime.latent = True} @@ -568,10 +646,14 @@       mkSingleRegexRule name ptn . tt . mkOkForThisNext $ dayOfWeek i  mkRuleMonths :: [(Text, String)] -> [Rule]-mkRuleMonths months  = zipWith go months [1..12]+mkRuleMonths = mkRuleMonthsWithLatent . map (uncurry (,, False))++mkRuleMonthsWithLatent :: [(Text, String, Bool)] -> [Rule]+mkRuleMonthsWithLatent months  = zipWith go months [1..12]   where-    go (name, ptn) i =-      mkSingleRegexRule name ptn . tt . mkOkForThisNext $ month i+    go (name, ptn, latent) i =+      mkSingleRegexRule name ptn . tt . (if latent then mkLatent else id)+      . mkOkForThisNext $ month i  mkRuleSeasons :: [(Text, String, TimeData, TimeData)] -> [Rule] mkRuleSeasons = map go@@ -582,4 +664,12 @@ mkRuleHolidays :: [(Text, String, TimeData)] -> [Rule] mkRuleHolidays = map go   where-    go (name, ptn, td) = mkSingleRegexRule name ptn . tt $ mkOkForThisNext td+    go (name, ptn, td) = mkSingleRegexRule name ptn . tt+      $ withHoliday name $ mkOkForThisNext td++mkRuleHolidays' :: [(Text, String, Maybe TimeData)] -> [Rule]+mkRuleHolidays' = map go+  where+    go (name, ptn, td) = mkSingleRegexRule name ptn $ do+      td <- td+      tt $ withHoliday name $ mkOkForThisNext td
Duckling/Time/IT/Corpus.hs view
@@ -24,10 +24,10 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale IT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale IT Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale IT Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale IT Nothing}, testOptions, examples)   where     examples =       [ "ma"
Duckling/Time/KO/Corpus.hs view
@@ -23,7 +23,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/NB/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.Testing.Types hiding (examples)  corpus :: Corpus-corpus = (testContext {locale = makeLocale NB Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NB Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/NL/Corpus.hs view
@@ -27,10 +27,10 @@ context = testContext {locale = makeLocale NL Nothing}  corpus :: Corpus-corpus = (context, allExamples)+corpus = (context, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (context, examples)+negativeCorpus = (context, testOptions, examples)   where     examples =       [ "een hotel"@@ -420,39 +420,37 @@   , examples (datetimeInterval ((2012, 12, 21, 0, 0, 0), (2013, 3, 21, 0, 0, 0)) Day)              [ "deze winter"              ]-  , examples (datetime (2013, 12, 25, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 25, 0, 0, 0) Day "Kerstmis")              [ "kerst"              , "kerstmis"              ]-  , examples (datetime (2013, 12, 31, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 31, 0, 0, 0) Day "Oudjaar")              [ "oudjaar"              , "oudejaarsavond"              ]-  , examples (datetime (2014, 1, 1, 0, 0, 0) Day)+  , examples (datetimeHoliday (2014, 1, 1, 0, 0, 0) Day "Nieuwjaarsdag")              [ "nieuwjaarsdag"              , "nieuwjaar"              ]-  , examples (datetime (2013, 2, 14, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 2, 14, 0, 0, 0) Day "Valentijnsdag")              [ "Valentijnsdag"              ]-  , examples (datetime (2013, 5, 12, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 5, 12, 0, 0, 0) Day "Moederdag")              [ "moederdag"-             , "tweede zondag in mei"              ]-  , examples (datetime (2013, 6, 16, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 6, 16, 0, 0, 0) Day "Vaderdag")              [ "vaderdag"-             , "derde zondag in juni"              ]-  , examples (datetime (2017, 04, 27, 0, 0, 0) Day)+  , examples (datetimeHoliday (2017, 04, 27, 0, 0, 0) Day "Koningsdag")              [ "Koningsdag 2017"              ]-  , examples (datetime (2013, 10, 31, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 10, 31, 0, 0, 0) Day "Halloween")              [ "Halloween"              ]-  , examples (datetime (2013, 11, 1, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 11, 1, 0, 0, 0) Day "Allerheiligen")              [ "Allerheiligen"              ]-  , examples (datetime (2013, 12, 5, 0, 0, 0) Day)+  , examples (datetimeHoliday (2013, 12, 5, 0, 0, 0) Day "Sinterklaas")              [ "Sinterklaas"              , "Pakjesavond"              , "Sinterklaasavond"
Duckling/Time/NL/Rules.hs view
@@ -81,29 +81,29 @@  ruleHolidays :: [Rule] ruleHolidays = mkRuleHolidays-  [ ( "new year's day"      , "nieuwjaars?(dag)?"+  [ ( "Nieuwjaarsdag"      , "nieuwjaars?(dag)?"     , monthDay  1  1 )-  , ( "valentine's day"     , "valentijns?(dag)?"+  , ( "Valentijnsdag"     , "valentijns?(dag)?"     , monthDay  2 14 )-  , ( "halloween day"       , "hall?oween?"+  , ( "Halloween"       , "hall?oween?"     , monthDay 10 31 )-  , ( "Dutch King day"      , "konings?dag"+  , ( "Koningsdag"      , "konings?dag"     , monthDay  4 27 )   , ( "Allerheiligen"       , "allerheiligen?|aller heiligen?"     , monthDay 11  1 )   , ( "Sinterklaas"         , "sinterklaas(avond)?|pakjesavond"     , monthDay 12  5 )-  , ( "christmas eve"       , "kerstavond"+  , ( "Kerstavond"       , "kerstavond"     , monthDay 12 24 )-  , ( "boxing day christmas", "tweede kerstdag"+  , ( "Tweede Kerstdag", "tweede kerstdag"     , monthDay 12 26 )-  , ( "christmas"           , "kerstmis|(eerste )?kerstdag|kerst"+  , ( "Kerstmis"           , "kerstmis|(eerste )?kerstdag|kerst"     , monthDay 12 25 )-  , ( "new year's eve"      , "oudjaar|oudejaars?avond"+  , ( "Oudjaar"      , "oudjaar|oudejaars?avond"     , monthDay 12 31 )-  , ( "Mother's Day"        , "moederdag"+  , ( "Moederdag"        , "moederdag"     , nthDOWOfMonth 2 7 5 )-  , ( "Father's Day"        , "vaderdag"+  , ( "Vaderdag"        , "vaderdag"     , nthDOWOfMonth 3 7 6 )   ] 
Duckling/Time/PL/Corpus.hs view
@@ -24,10 +24,10 @@ import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (testContext {locale = makeLocale PL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PL Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale PL Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale PL Nothing}, testOptions, examples)   where     examples =       [ "nie"@@ -155,6 +155,17 @@              , "8 Sie."              , "Ósmy Sie."              , "Osmego Sie."+             ]+  , examples (datetime (2013, 11, 20, 0, 0, 0) Day)+             [ "20 listopada"+             , "20 listopadowi"+             , "20 listopadem"+             , "20 listopad"+             ]+  , examples (datetime (2013, 5, 20, 0, 0, 0) Day)+             [ "20 maja"+             , "20 maj"+             , "20 majem"              ]   , examples (datetime (2014, 10, 0, 0, 0, 0) Month)              [ "Październik 2014"
Duckling/Time/PL/Rules.hs view
@@ -54,18 +54,18 @@  ruleMonths :: [Rule] ruleMonths = mkRuleMonths-  [ ( "January" , "styczeń|styczen|stycznia|styczniowi|styczniem|styczniu|sty(cz)?\\.?" )-  , ( "February" , "luty|lutego|lutemu|lut?\\.?" )-  , ( "March" , "marzec|marca|marcowi|marcem|marcu|marz?\\.?" )-  , ( "April" , "kwiecień|kwiecien|kwietnia|kwietniowi|kwietniem|kwietniu|kwiet?\\.?" )-  , ( "May" , "maj|maja|majowi|majem|maju" )-  , ( "June" , "czerwiec|czerwca|czerwcowi|czerwcem|czerwcu|czer?\\.?" )-  , ( "July" , "lipiec|lipca|lipcowi|lipcem|lipcu|lip\\.?" )-  , ( "August" , "sierpień|sierpien|sierpnia|sierpniowi|sierpniem|sierpniu|sierp\\.?|sier\\.?|sie\\.?" )-  , ( "September" , "wrzesień|wrzesien|września|wrzesnia|wrześniowi|wrzesniowi|wrzesień|wrzesien|wrześniem|wrzesniem|wrześniu|wrzesniu|wrz\\.?|wrze\\.?" )+  [ ( "January" , "stycz(eń|en|nia|niowi|niem|niu)|sty(cz)?\\.?" )+  , ( "February" , "lu(ty|tego|temu|t?\\.?)" )+  , ( "March" , "mar(zec|ca|cowi|cem|cu|z?\\.?)" )+  , ( "April" , "kwie(cień|cien|tnia|tniowi|tniem|tniu|t?\\.?)" )+  , ( "May" , "maj(a|owi|em|u)?" )+  , ( "June" , "czerw(iec|ca|cowi|cem|cu)|czer?\\.?" )+  , ( "July" , "lip(iec|ca|cowi|cem|cu)|lip\\.?" )+  , ( "August" , "sierp(ie(n|ń)|ni(a|owi|em|u))|sierp\\.?|sier\\.?|sie\\.?" )+  , ( "September" , "wrze(s|ś)(ie(ń|n)|ni(a|owi|em|u))|wrz\\.?|wrze\\.?" )   , ( "October" , "pa(z|ź)dziernik(a|owi|iem|u)?|paź\\.?|paz\\.?" )-  , ( "November" , "listopad|listopada|listopadowi|listopadem|listopadzie|lis\\.?|list\\.?" )-  , ( "December" , "grudzień|grudzien|grudnia|grudniowi|grudniem|grudniu|gru\\.?|grud\\.?" )+  , ( "November" , "listopad(a|owi|em|zie)?|lis\\.?|list\\.?" )+  , ( "December" , "grudz(ień|ien)|grudn(ia|iowi|iem|niu)|gru\\.?|grud\\.?" )   ]  ruleRelativeMinutesTotillbeforeIntegerHourofday :: Rule
Duckling/Time/PT/Corpus.hs view
@@ -24,10 +24,10 @@ import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext {locale = makeLocale PT Nothing}, examples)+negativeCorpus = (testContext {locale = makeLocale PT Nothing}, testOptions, examples)   where     examples =       [ "no 987"
Duckling/Time/RO/Corpus.hs view
@@ -23,14 +23,14 @@ import Duckling.Testing.Types hiding (examples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "sa"       ]  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/SV/Corpus.hs view
@@ -23,7 +23,7 @@ import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (testContext {locale = makeLocale SV Nothing}, allExamples)+corpus = (testContext {locale = makeLocale SV Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Time/Types.hs view
@@ -16,15 +16,16 @@  module Duckling.Time.Types where -import Control.Applicative ((<|>)) import Control.Arrow ((***)) import Control.DeepSeq import Control.Monad (join) import Data.Aeson+import Data.Foldable (find) import Data.Hashable import Data.Maybe import Data.Monoid import Data.Text (Text)+import Data.Tuple.Extra (both) import GHC.Generics import Prelude import TextShow (showt)@@ -65,18 +66,19 @@   , form :: Maybe Form   , direction :: Maybe IntervalDirection   , okForThisNext :: Bool -- allows specific this+Time+  , holiday :: Maybe Text   }  instance Eq TimeData where-  (==) (TimeData _ l1 g1 n1 f1 d1 _) (TimeData _ l2 g2 n2 f2 d2 _) =+  (==) (TimeData _ l1 g1 n1 f1 d1 _ _) (TimeData _ l2 g2 n2 f2 d2 _ _) =     l1 == l2 && g1 == g2 && n1 == n2 && f1 == f2 && d1 == d2  instance Hashable TimeData where-  hashWithSalt s (TimeData _ latent grain imm form dir _) = hashWithSalt s+  hashWithSalt s (TimeData _ latent grain imm form dir _ _) = hashWithSalt s     (0::Int, (latent, grain, imm, form, dir))  instance Ord TimeData where-  compare (TimeData _ l1 g1 n1 f1 d1 _) (TimeData _ l2 g2 n2 f2 d2 _) =+  compare (TimeData _ l1 g1 n1 f1 d1 _ _) (TimeData _ l2 g2 n2 f2 d2 _ _) =     case compare g1 g2 of       EQ -> case compare f1 f2 of         EQ -> case compare l1 l2 of@@ -88,12 +90,13 @@       z -> z  instance Show TimeData where-  show (TimeData _ latent grain _ form dir _) =+  show (TimeData _ latent grain _ form dir _ holiday) =     "TimeData{" ++     "latent=" ++ show latent ++     ", grain=" ++ show grain ++     ", form=" ++ show form ++     ", direction=" ++ show dir +++    ", holiday=" ++ show holiday ++     "}"  instance NFData TimeData where@@ -101,8 +104,8 @@  instance Resolve TimeData where   type ResolvedValue TimeData = TimeValue-  resolve _ TimeData {latent = True} = Nothing-  resolve context TimeData {timePred, notImmediate, direction} = do+  resolve _ Options {withLatent = False} TimeData {latent = True} = Nothing+  resolve context _ TimeData {timePred, latent, notImmediate, direction, holiday} = do     value <- case future of       [] -> listToMaybe past       ahead:nextAhead:_@@ -110,10 +113,10 @@       ahead:_ -> Just ahead     values <- Just . take 3 $ if List.null future then past else future     Just $ case direction of-      Nothing -> TimeValue (timeValue tzSeries value) $-        map (timeValue tzSeries) values-      Just d -> TimeValue (openInterval tzSeries d value) $-        map (openInterval tzSeries d) values+      Nothing -> (TimeValue (timeValue tzSeries value)+        (map (timeValue tzSeries) values) holiday, latent)+      Just d -> (TimeValue (openInterval tzSeries d value)+        (map (openInterval tzSeries d) values) holiday, latent)     where       DucklingTime (Series.ZoneSeriesTime utcTime tzSeries) = referenceTime context       refTime = TimeObject@@ -138,6 +141,7 @@   , form = Nothing   , direction = Nothing   , okForThisNext = False+  , holiday = Nothing   }  data TimeContext = TimeContext@@ -164,7 +168,7 @@   | OpenIntervalValue (InstantValue, IntervalDirection)   deriving (Show, Eq) -data TimeValue = TimeValue SingleTimeValue [SingleTimeValue]+data TimeValue = TimeValue SingleTimeValue [SingleTimeValue] (Maybe Text)   deriving (Show, Eq)  instance ToJSON InstantValue where@@ -192,9 +196,14 @@     ]  instance ToJSON TimeValue where-  toJSON (TimeValue value values) = case toJSON value of-    Object o -> Object $ H.insert "values" (toJSON values) o+  toJSON (TimeValue value values holiday) = case toJSON value of+    Object o ->+      Object $ insertHoliday holiday $ H.insert "values" (toJSON values) o     _ -> Object H.empty+    where+      insertHoliday :: Maybe Text -> Object -> Object+      insertHoliday Nothing obj = obj+      insertHoliday (Just h) obj = H.insert "holidayBeta" (toJSON h) obj  -- | Return a tuple of (past, future) elements type SeriesPredicate = TimeObject -> TimeContext -> ([TimeObject], [TimeObject])@@ -202,6 +211,12 @@ data AMPM = AM | PM   deriving (Eq, Show) +data SeasonName = Spring | Summer | Fall | Winter deriving (Enum,Eq,Ord,Show)++-- | Regular seasons of the Northern Hemisphere.+data Season = Season { startYear :: Integer, seasonName :: SeasonName }+  deriving (Eq,Ord,Show)+ newtype NoShow a = NoShow a  instance Show (NoShow a) where@@ -337,9 +352,78 @@   -- SeriesPredicate might contain one, but we'll underapproximate for   -- now +-- Computes the difference of the start time of two `TimeObject`s.+diffStartTime :: TimeObject -> TimeObject -> Time.NominalDiffTime+diffStartTime TimeObject{start = x} TimeObject{start = y} =+  abs (Time.diffUTCTime x y)+ isEmptyPredicate :: Predicate -> Bool isEmptyPredicate EmptyPredicate{} = True isEmptyPredicate _ = False++seasonStart :: Season -> Time.Day+seasonStart (Season year Spring) = Time.fromGregorian year 3 20+seasonStart (Season year Summer) = Time.fromGregorian year 6 21+seasonStart (Season year Fall) = Time.fromGregorian year 9 23+seasonStart (Season year Winter) = Time.fromGregorian year 12 21++seasonEnd :: Season -> Time.Day+seasonEnd = Time.addDays (-1) . seasonStart . nextSeason++nextSeason :: Season -> Season+nextSeason (Season year Winter) = Season (year+1) Spring+nextSeason (Season year x) = Season year (succ x)++prevSeason :: Season -> Season+prevSeason (Season year Spring) = Season (year-1) Winter+prevSeason (Season year x) = Season year (pred x)++seasonOf :: Time.Day -> Season+seasonOf day = fromMaybe (Season (year-1) Winter) mbSeason+  where+  (year,_,_) = Time.toGregorian day+  mbSeason = find ((<= day) . seasonStart) $+               Season year <$> [Winter,Fall,Summer,Spring]++seasonPredicate :: Predicate+seasonPredicate = mkSeriesPredicate series+  where+  series t = const (past,future)+    where+    day = Time.utctDay (start t)+    (past,future) = both (map toTimeObj) (toZipper day)+    toTimeObj season = TimeObject { start = s, grain = TG.Day, end = Just e }+      where (s,e) = both toMidnight (seasonStart season, seasonEnd season)+    toZipper d = (before, currentAndAfter)+      where+      current = seasonOf d+      currentAndAfter = iterate nextSeason current+      before = iterate prevSeason (prevSeason current)++-- Predicate for weekdays, i.e., Mon to Fri.+weekdayPredicate :: Predicate+weekdayPredicate = mkSeriesPredicate series+  where+  series t = const (past,future)+    where+    day = Time.utctDay (start t)+    (_,_,dayOfWeek) = Time.toWeekDate day+    past = toTimeObj . toMidnight . fst <$>+      iterate prevWeekday (prevWeekday (day,dayOfWeek))+    future = toTimeObj . toMidnight <$>+      if dayOfWeek <= 5 then day:days else days+        where days = fst <$> iterate nextWeekday (nextWeekday (day,dayOfWeek))+    toTimeObj t = TimeObject { start = t, grain = TG.Day, end = Nothing }+    nextWeekday (d,dow)+      | dow < 5 = (Time.addDays 1 d, dow+1)+      | otherwise = (Time.addDays (toInteger $ 8-dow) d, 1)+    prevWeekday (d,dow)+      | dow == 1 = (Time.addDays (-3) d, 5)+      | dow == 7 = (Time.addDays (-2) d, 5)+      | otherwise = (Time.addDays (-1) d, dow-1)++toMidnight :: Time.Day -> Time.UTCTime+toMidnight = flip Time.UTCTime (Time.timeOfDayToTime Time.midnight)  -- Predicate runners 
Duckling/Time/VI/Corpus.hs view
@@ -22,7 +22,7 @@ import Duckling.TimeGrain.Types hiding (add)  corpus :: Corpus-corpus = (context, allExamples)+corpus = (context, testOptions, allExamples)   where     context = testContext       { locale = makeLocale VI Nothing
Duckling/Time/ZH/Corpus.hs view
@@ -26,7 +26,7 @@ defaultCorpus = corpus  corpus :: Corpus-corpus = (testContext {locale = makeLocale ZH Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ZH Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat@@ -401,7 +401,6 @@   , examples (datetimeInterval ((2012, 12, 0, 0, 0, 0), (2013, 2, 0, 0, 0, 0)) Month)              [ "上两个月"              , "上二个月"-             , "上二月"              , "前两个月"              , "前二个月"              , "前两月"
Duckling/Time/ZH/Rules.hs view
@@ -796,19 +796,6 @@       _ -> Nothing   } -ruleLastTuesdayLastJuly :: Rule-ruleLastTuesdayLastJuly = Rule-  { name = "last tuesday, last july"-  , pattern =-    [ regex "上"-    , dimension Time-    ]-  , prod = \tokens -> case tokens of-      (_:Token Time td:_) ->-        tt $ predNth (-1) False td-      _ -> Nothing-  }- rulePartofdayDimTime :: Rule rulePartofdayDimTime = Rule   { name = "<part-of-day> <dim time>"@@ -1014,7 +1001,6 @@   , ruleNCycleLast   , ruleLastNight   , ruleLastTime-  , ruleLastTuesdayLastJuly   , ruleLastYear   , ruleMidnight   , ruleMmdd
+ Duckling/TimeGrain/BG/Rules.hs view
@@ -0,0 +1,41 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++{-# LANGUAGE OverloadedStrings #-}++module Duckling.TimeGrain.BG.Rules+  ( rules+  ) where++import Data.String+import Data.Text (Text)+import Prelude++import Duckling.Dimensions.Types+import Duckling.TimeGrain.Types+import Duckling.Types++grains :: [(Text, String, Grain)]+grains = [ ("second (grain) ", "сек(унд(а|и))?",               Second)+         , ("minute (grain)" , "мин(ут(а|и))?",                Minute)+         , ("hour (grain)"   , "ч(ас(ове(те)?|а|ът)?)?",       Hour)+         , ("day (grain)"    , "ден(а|я(т)?)?|дни(те)?",       Day)+         , ("week (grain)"   , "седмица(та)?|седмици(те)?",    Week)+         , ("month (grain)"  , "месец(и(те)?|а|ът)?",          Month)+         , ("quarter (grain)", "тримесечи(я|е(то|та)?)",       Quarter)+         , ("year (grain)"   , "г(од(ин(а(та)?|и(те)?))?)?",   Year)+         ]++rules :: [Rule]+rules = map go grains+  where+    go (name, regexPattern, grain) = Rule+      { name = name+      , pattern = [regex regexPattern]+      , prod = \_ -> Just $ Token TimeGrain grain+      }
Duckling/TimeGrain/EN/Rules.hs view
@@ -9,15 +9,16 @@ {-# LANGUAGE OverloadedStrings #-}  module Duckling.TimeGrain.EN.Rules-  ( rules ) where+  ( rules+  ) where +import Data.String import Data.Text (Text) import Prelude-import Data.String  import Duckling.Dimensions.Types-import qualified Duckling.TimeGrain.Types as TG import Duckling.Types+import qualified Duckling.TimeGrain.Types as TG  grains :: [(Text, String, TG.Grain)] grains = [ ("second (grain) ", "sec(ond)?s?",      TG.Second)@@ -26,8 +27,8 @@          , ("day (grain)"    , "days?",            TG.Day)          , ("week (grain)"   , "weeks?",           TG.Week)          , ("month (grain)"  , "months?",          TG.Month)-         , ("quarter (grain)", "(quarter|qtr)s?",        TG.Quarter)-         , ("year (grain)"   , "y(ea)?rs?",           TG.Year)+         , ("quarter (grain)", "(quarter|qtr)s?",  TG.Quarter)+         , ("year (grain)"   , "y(ea)?rs?",        TG.Year)          ]  rules :: [Rule]
Duckling/TimeGrain/Types.hs view
@@ -38,7 +38,7 @@  instance Resolve Grain where   type ResolvedValue Grain = Grain-  resolve _ _ = Nothing+  resolve _ _ _ = Nothing  instance TextShow Grain where   showb = fromText . Text.toLower . Text.pack . show
Duckling/Types.hs view
@@ -6,34 +6,57 @@ -- of patent rights can be found in the PATENTS file in the same directory.  +{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE NoRebindableSyntax #-} {-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}  module Duckling.Types where  import Control.DeepSeq import Data.Aeson import Data.GADT.Compare+import Data.GADT.Show import Data.Hashable+import Data.HashSet (HashSet) import Data.Maybe-import Data.String+import Data.Some import Data.Text (Text)-import Data.Typeable ((:~:)(Refl), Typeable)+import Data.Typeable ((:~:)(Refl), eqT, Typeable) import GHC.Generics import Prelude+import TextShow (TextShow(..)) import qualified Data.ByteString.Lazy as LB import qualified Data.Text.Encoding as Text import qualified Text.Regex.Base as R import qualified Text.Regex.PCRE as PCRE+import qualified TextShow as TS -import Duckling.Dimensions.Types+import Duckling.AmountOfMoney.Types (AmountOfMoneyData)+import Duckling.Distance.Types (DistanceData)+import Duckling.Duration.Types (DurationData)+import Duckling.Email.Types (EmailData)+import Duckling.Locale+import Duckling.Numeral.Types (NumeralData)+import Duckling.Ordinal.Types (OrdinalData)+import Duckling.PhoneNumber.Types (PhoneNumberData)+import Duckling.Quantity.Types (QuantityData)+import Duckling.Regex.Types (GroupMatch) import Duckling.Resolve+import Duckling.Temperature.Types (TemperatureData)+import Duckling.Time.Types (TimeData)+import Duckling.TimeGrain.Types (Grain)+import Duckling.Url.Types (UrlData)+import Duckling.Volume.Types (VolumeData)  -- ----------------------------------------------------------------- -- Token@@ -53,6 +76,115 @@ instance NFData Token where   rnf (Token _ v) = rnf v ++-- -----------------------------------------------------------------+-- Dimension++class (Show a, Typeable a) => CustomDimension a where+  type DimensionData a+  dimRules :: a -> [Rule]+  dimLangRules :: Lang -> a -> [Rule]+  dimLocaleRules :: Region -> a -> [Rule]+  dimDependents :: a -> HashSet (Some Dimension)++-- | GADT for differentiating between dimensions+-- Each dimension should have its own constructor and provide the data structure+-- for its parsed data+data Dimension a where+  RegexMatch :: Dimension GroupMatch+  AmountOfMoney :: Dimension AmountOfMoneyData+  Distance :: Dimension DistanceData+  Duration :: Dimension DurationData+  Email :: Dimension EmailData+  Numeral :: Dimension NumeralData+  Ordinal :: Dimension OrdinalData+  PhoneNumber :: Dimension PhoneNumberData+  Quantity :: Dimension QuantityData+  Temperature :: Dimension TemperatureData+  Time :: Dimension TimeData+  TimeGrain :: Dimension Grain+  Url :: Dimension UrlData+  Volume :: Dimension VolumeData+  CustomDimension :: CustomDimension a => a -> Dimension (DimensionData a)++-- Show+instance Show (Dimension a) where+  show RegexMatch = "RegexMatch"+  show Distance = "Distance"+  show Duration = "Duration"+  show Email = "Email"+  show AmountOfMoney = "AmountOfMoney"+  show Numeral = "Numeral"+  show Ordinal = "Ordinal"+  show PhoneNumber = "PhoneNumber"+  show Quantity = "Quantity"+  show Temperature = "Temperature"+  show Time = "Time"+  show TimeGrain = "TimeGrain"+  show Url = "Url"+  show Volume = "Volume"+  show (CustomDimension dim) = show dim+instance GShow Dimension where gshowsPrec = showsPrec++-- TextShow+instance TextShow (Dimension a) where+  showb d = TS.fromString $ show d+instance TextShow (Some Dimension) where+  showb (This d) = showb d++-- Hashable+instance Hashable (Some Dimension) where+  hashWithSalt s (This a) = hashWithSalt s a+instance Hashable (Dimension a) where+  hashWithSalt s RegexMatch          = hashWithSalt s (0::Int)+  hashWithSalt s Distance            = hashWithSalt s (1::Int)+  hashWithSalt s Duration            = hashWithSalt s (2::Int)+  hashWithSalt s Email               = hashWithSalt s (3::Int)+  hashWithSalt s AmountOfMoney       = hashWithSalt s (4::Int)+  hashWithSalt s Numeral             = hashWithSalt s (5::Int)+  hashWithSalt s Ordinal             = hashWithSalt s (6::Int)+  hashWithSalt s PhoneNumber         = hashWithSalt s (7::Int)+  hashWithSalt s Quantity            = hashWithSalt s (8::Int)+  hashWithSalt s Temperature         = hashWithSalt s (9::Int)+  hashWithSalt s Time                = hashWithSalt s (10::Int)+  hashWithSalt s TimeGrain           = hashWithSalt s (11::Int)+  hashWithSalt s Url                 = hashWithSalt s (12::Int)+  hashWithSalt s Volume              = hashWithSalt s (13::Int)+  hashWithSalt s (CustomDimension _) = hashWithSalt s (14::Int)++instance GEq Dimension where+  geq RegexMatch RegexMatch = Just Refl+  geq RegexMatch _ = Nothing+  geq Distance Distance = Just Refl+  geq Distance _ = Nothing+  geq Duration Duration = Just Refl+  geq Duration _ = Nothing+  geq Email Email = Just Refl+  geq Email _ = Nothing+  geq AmountOfMoney AmountOfMoney = Just Refl+  geq AmountOfMoney _ = Nothing+  geq Numeral Numeral = Just Refl+  geq Numeral _ = Nothing+  geq Ordinal Ordinal = Just Refl+  geq Ordinal _ = Nothing+  geq PhoneNumber PhoneNumber = Just Refl+  geq PhoneNumber _ = Nothing+  geq Quantity Quantity = Just Refl+  geq Quantity _ = Nothing+  geq Temperature Temperature = Just Refl+  geq Temperature _ = Nothing+  geq Time Time = Just Refl+  geq Time _ = Nothing+  geq TimeGrain TimeGrain = Just Refl+  geq TimeGrain _ = Nothing+  geq Url Url = Just Refl+  geq Url _ = Nothing+  geq Volume Volume = Just Refl+  geq Volume _ = Nothing+  geq (CustomDimension (_ :: a)) (CustomDimension (_ :: b))+    | Just Refl <- eqT :: Maybe (a :~: b) = Just Refl+  geq (CustomDimension _) _ = Nothing+ isDimension :: Dimension a -> Token -> Bool isDimension dim (Token dim' _) = isJust $ geq dim dim' @@ -67,12 +199,15 @@   { range :: Range   , node :: Node   , jsonValue :: Value+  , isLatent :: Bool   } deriving (Eq, Show)  instance Ord ResolvedToken where-  compare (Resolved range1 _ json1) (Resolved range2 _ json2) =+  compare (Resolved range1 _ json1 latent1) (Resolved range2 _ json2 latent2) =     case compare range1 range2 of-      EQ -> compare (toJText json1) (toJText json2)+      EQ -> case compare (toJText json1) (toJText json2) of+        EQ -> compare latent1 latent2+        z -> z       z  -> z  data Candidate = Candidate ResolvedToken Double Bool@@ -127,21 +262,23 @@   show (Rule name _ _) = show name  data Entity = Entity-  { dim   :: Text-  , body  :: Text-  , value :: Value-  , start :: Int-  , end   :: Int-  , enode :: Node+  { dim    :: Text+  , body   :: Text+  , value  :: Value+  , start  :: Int+  , end    :: Int+  , latent :: Bool+  , enode  :: Node   } deriving (Eq, Generic, Show, NFData)  instance ToJSON Entity where   toJSON ent = object-    [ "dim"   .= dim ent-    , "body"  .= body ent-    , "value" .= value ent-    , "start" .= start ent-    , "end"   .= end ent+    [ "dim"    .= dim ent+    , "body"   .= body ent+    , "value"  .= value ent+    , "start"  .= start ent+    , "end"    .= end ent+    , "latent" .= latent ent     ]  toJText :: ToJSON x => x -> Text
Duckling/Url/Corpus.hs view
@@ -20,10 +20,10 @@ import Duckling.Url.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  negativeCorpus :: NegativeCorpus-negativeCorpus = (testContext, examples)+negativeCorpus = (testContext, testOptions, examples)   where     examples =       [ "foo"
Duckling/Url/Helpers.hs view
@@ -12,10 +12,8 @@   ( url   ) where -import Data.String import Data.Text (Text) import qualified Data.Text as Text-import Prelude  import qualified Duckling.Url.Types as TUrl import Duckling.Url.Types (UrlData(..))
Duckling/Url/Types.hs view
@@ -19,7 +19,6 @@ import Data.Aeson import Data.Hashable import Data.Maybe-import Data.Monoid import Data.Text (Text) import GHC.Generics import Prelude@@ -34,7 +33,7 @@  instance Resolve UrlData where   type ResolvedValue UrlData = UrlData-  resolve _ x = Just x+  resolve _ _ x = Just (x, False)  instance ToJSON UrlData where   toJSON (UrlData value domain) = object
Duckling/Volume/AR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Volume.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale AR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale AR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/EN/Corpus.hs view
@@ -18,7 +18,7 @@ import Duckling.Volume.Types  corpus :: Corpus-corpus = (testContext, allExamples)+corpus = (testContext, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/ES/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale ES Nothing}, allExamples)+corpus = (testContext {locale = makeLocale ES Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/FR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale FR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale FR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/GA/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale GA Nothing}, allExamples)+corpus = (testContext {locale = makeLocale GA Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/HR/Corpus.hs view
@@ -19,7 +19,7 @@ import Duckling.Volume.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale HR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale HR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/IT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale IT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale IT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/KO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale KO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale KO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/NL/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale NL Nothing}, allExamples)+corpus = (testContext {locale = makeLocale NL Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/PT/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale PT Nothing}, allExamples)+corpus = (testContext {locale = makeLocale PT Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/RO/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Testing.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RO Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RO Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/RU/Corpus.hs view
@@ -21,7 +21,7 @@ import Duckling.Volume.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale RU Nothing}, allExamples)+corpus = (testContext {locale = makeLocale RU Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/TR/Corpus.hs view
@@ -20,7 +20,7 @@ import Duckling.Volume.Types  corpus :: Corpus-corpus = (testContext {locale = makeLocale TR Nothing}, allExamples)+corpus = (testContext {locale = makeLocale TR Nothing}, testOptions, allExamples)  allExamples :: [Example] allExamples = concat
Duckling/Volume/Types.hs view
@@ -43,9 +43,9 @@  instance Resolve VolumeData where   type ResolvedValue VolumeData = VolumeValue-  resolve _ VolumeData {unit = Nothing} = Nothing-  resolve _ VolumeData {unit = Just unit, value} = Just VolumeValue-    {vValue = value, vUnit = unit}+  resolve _ _ VolumeData {unit = Nothing} = Nothing+  resolve _ _ VolumeData {unit = Just unit, value} = Just (VolumeValue+    {vValue = value, vUnit = unit}, False)  data VolumeValue = VolumeValue   { vUnit :: Unit
duckling.cabal view
@@ -1,5 +1,5 @@ name:                duckling-version:             0.1.4.0+version:             0.1.5.0 synopsis:            A Haskell library for parsing text into structured data. description:   Duckling is a library for parsing text into structured data.@@ -69,6 +69,7 @@                      , Duckling.Rules.RO                      , Duckling.Rules.RU                      , Duckling.Rules.SV+                     , Duckling.Rules.TA                      , Duckling.Rules.TR                      , Duckling.Rules.UK                      , Duckling.Rules.VI@@ -112,6 +113,7 @@                      , Duckling.Ranking.Classifiers.RO_XX                      , Duckling.Ranking.Classifiers.RU_XX                      , Duckling.Ranking.Classifiers.SV_XX+                     , Duckling.Ranking.Classifiers.TA_XX                      , Duckling.Ranking.Classifiers.TR_XX                      , Duckling.Ranking.Classifiers.UK_XX                      , Duckling.Ranking.Classifiers.VI_XX@@ -155,6 +157,7 @@                      , Duckling.Dimensions.RO                      , Duckling.Dimensions.RU                      , Duckling.Dimensions.SV+                     , Duckling.Dimensions.TA                      , Duckling.Dimensions.TR                      , Duckling.Dimensions.UK                      , Duckling.Dimensions.VI@@ -191,11 +194,17 @@                      , Duckling.AmountOfMoney.SV.Rules                      , Duckling.AmountOfMoney.VI.Corpus                      , Duckling.AmountOfMoney.VI.Rules+                     , Duckling.AmountOfMoney.NL.Corpus+                     , Duckling.AmountOfMoney.NL.Rules+                     , Duckling.AmountOfMoney.ZH.Corpus+                     , Duckling.AmountOfMoney.ZH.Rules                      , Duckling.AmountOfMoney.Helpers                      , Duckling.AmountOfMoney.Rules                      , Duckling.AmountOfMoney.Types                       -- Distance+                     , Duckling.Distance.BG.Corpus+                     , Duckling.Distance.BG.Rules                      , Duckling.Distance.CS.Corpus                      , Duckling.Distance.CS.Rules                      , Duckling.Distance.EN.Corpus@@ -220,6 +229,10 @@                      , Duckling.Distance.RU.Rules                      , Duckling.Distance.TR.Corpus                      , Duckling.Distance.TR.Rules+                     , Duckling.Distance.SV.Corpus+                     , Duckling.Distance.SV.Rules+                     , Duckling.Distance.ZH.Corpus+                     , Duckling.Distance.ZH.Rules                      , Duckling.Distance.Helpers                      , Duckling.Distance.Rules                      , Duckling.Distance.Types@@ -227,6 +240,8 @@                      -- Duration                      , Duckling.Duration.AR.Corpus                      , Duckling.Duration.AR.Rules+                     , Duckling.Duration.BG.Corpus+                     , Duckling.Duration.BG.Rules                      , Duckling.Duration.DA.Rules                      , Duckling.Duration.DE.Rules                      , Duckling.Duration.EL.Corpus@@ -333,6 +348,8 @@                      , Duckling.Numeral.RU.Rules                      , Duckling.Numeral.SV.Corpus                      , Duckling.Numeral.SV.Rules+                     , Duckling.Numeral.TA.Corpus+                     , Duckling.Numeral.TA.Rules                      , Duckling.Numeral.TR.Corpus                      , Duckling.Numeral.TR.Rules                      , Duckling.Numeral.UK.Corpus@@ -350,6 +367,8 @@                      -- Ordinal                      , Duckling.Ordinal.AR.Corpus                      , Duckling.Ordinal.AR.Rules+                     , Duckling.Ordinal.BG.Corpus+                     , Duckling.Ordinal.BG.Rules                      , Duckling.Ordinal.DA.Corpus                      , Duckling.Ordinal.DA.Rules                      , Duckling.Ordinal.DE.Corpus@@ -543,6 +562,7 @@                      , Duckling.Time.ZH.MO.Rules                      , Duckling.Time.ZH.TW.Corpus                      , Duckling.Time.ZH.TW.Rules+                     , Duckling.Time.Computed                      , Duckling.Time.Corpus                      , Duckling.Time.Helpers                      , Duckling.Time.Types@@ -551,6 +571,7 @@                       -- TimeGrain                      , Duckling.TimeGrain.AR.Rules+                     , Duckling.TimeGrain.BG.Rules                      , Duckling.TimeGrain.DA.Rules                      , Duckling.TimeGrain.DE.Rules                      , Duckling.TimeGrain.EN.Rules@@ -670,9 +691,12 @@                      , Duckling.AmountOfMoney.RU.Tests                      , Duckling.AmountOfMoney.SV.Tests                      , Duckling.AmountOfMoney.VI.Tests+                     , Duckling.AmountOfMoney.NL.Tests+                     , Duckling.AmountOfMoney.ZH.Tests                      , Duckling.AmountOfMoney.Tests                       -- Distance+                     , Duckling.Distance.BG.Tests                      , Duckling.Distance.CS.Tests                      , Duckling.Distance.EN.Tests                      , Duckling.Distance.ES.Tests@@ -685,10 +709,13 @@                      , Duckling.Distance.RO.Tests                      , Duckling.Distance.RU.Tests                      , Duckling.Distance.TR.Tests+                     , Duckling.Distance.SV.Tests+                     , Duckling.Distance.ZH.Tests                      , Duckling.Distance.Tests                       -- Duration                      , Duckling.Duration.AR.Tests+                     , Duckling.Duration.BG.Tests                      , Duckling.Duration.EL.Tests                      , Duckling.Duration.EN.Tests                      , Duckling.Duration.FR.Tests@@ -743,6 +770,7 @@                      , Duckling.Numeral.RO.Tests                      , Duckling.Numeral.RU.Tests                      , Duckling.Numeral.SV.Tests+                     , Duckling.Numeral.TA.Tests                      , Duckling.Numeral.TR.Tests                      , Duckling.Numeral.UK.Tests                      , Duckling.Numeral.VI.Tests@@ -751,6 +779,7 @@                       -- Ordinal                      , Duckling.Ordinal.AR.Tests+                     , Duckling.Ordinal.BG.Tests                      , Duckling.Ordinal.DA.Tests                      , Duckling.Ordinal.DE.Tests                      , Duckling.Ordinal.EL.Tests@@ -891,6 +920,22 @@                      , time                      , timezone-olson        >= 0.1.7 && < 0.2                      , timezone-series+                     , unordered-containers+  default-language:    Haskell2010+  default-extensions:  OverloadedStrings++executable custom-dimension-example+  main-is:             CustomDimensionExample.hs+  hs-source-dirs:      exe+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N+  build-depends:       duckling+                     , aeson+                     , base+                     , deepseq+                     , dependent-sum+                     , hashable+                     , text+                     , text-show                      , unordered-containers   default-language:    Haskell2010   default-extensions:  OverloadedStrings
+ exe/CustomDimensionExample.hs view
@@ -0,0 +1,82 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.++{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE NoRebindableSyntax #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}++module Main (main) where++import Control.DeepSeq+import Control.Monad+import Data.Aeson+import Data.Hashable+import Data.Semigroup ((<>))+import Data.Some+import Data.Text (Text)+import Data.Typeable+import GHC.Generics+import Prelude+import qualified Data.HashSet as HashSet+import qualified TextShow as TS++import Duckling.Debug+import Duckling.Locale+import Duckling.Resolve (Resolve(..))+import Duckling.Types++data MyDimension = MyDimension deriving (Eq, Show, Typeable)++instance CustomDimension MyDimension where+  type DimensionData MyDimension = MyData+  dimRules _ = [myRule]+  dimLangRules _ _ = []+  dimLocaleRules _ _ = []+  dimDependents _ = HashSet.empty++data MyData = MyData+  { iField :: Int+  , bField :: Bool+  , tField :: Text+  }+  deriving (Eq, Generic, Hashable, Ord, Show, NFData)++instance Resolve MyData where+  type ResolvedValue MyData = MyValue+  resolve _ _ MyData{..} = Just+    ( MyValue $ TS.showt iField <> "," <> TS.showt bField <> "," <> tField+    , False )++newtype MyValue = MyValue { value :: Text }+  deriving (Eq, Ord, Show)++instance ToJSON MyValue where+  toJSON (MyValue value) = object [ "value" .= value ]++myRule :: Rule+myRule = Rule+  { name = "my dimension"+  , pattern =+    [ regex "my dimension"+    ]+  , prod = \case+      (_:_) -> Just . Token (CustomDimension MyDimension) $ MyData+                 { iField = 42+                 , bField = True+                 , tField = "hello world"+                 }+      _ -> Nothing+  }++main :: IO ()+main = do+  let en = makeLocale EN Nothing+  debug en "input for my dimension" [This (CustomDimension MyDimension)] >>= print
exe/Duckling/Ranking/Generate.hs view
@@ -161,36 +161,37 @@  getCorpusForLang :: Lang -> Corpus getCorpusForLang AR = ARTime.corpus-getCorpusForLang BG = (testContext, [])-getCorpusForLang CS = (testContext, [])+getCorpusForLang BG = (testContext, testOptions, [])+getCorpusForLang CS = (testContext, testOptions, []) getCorpusForLang DA = DATime.corpus getCorpusForLang DE = DETime.corpus getCorpusForLang EL = ELTime.corpus getCorpusForLang EN = ENTime.corpus getCorpusForLang ES = ESTime.corpus-getCorpusForLang ET = (testContext, [])+getCorpusForLang ET = (testContext, testOptions, []) getCorpusForLang FR = FRTime.corpus getCorpusForLang GA = GATime.corpus getCorpusForLang HR = HRTime.corpus getCorpusForLang HE = HETime.corpus getCorpusForLang HU = HUTime.corpus-getCorpusForLang HI = (testContext, [])-getCorpusForLang ID = (testContext, [])+getCorpusForLang HI = (testContext, testOptions, [])+getCorpusForLang ID = (testContext, testOptions, []) getCorpusForLang IT = ITTime.corpus-getCorpusForLang JA = (testContext, [])-getCorpusForLang KA = (testContext, [])+getCorpusForLang JA = (testContext, testOptions, [])+getCorpusForLang KA = (testContext, testOptions, []) getCorpusForLang KO = KOTime.corpus-getCorpusForLang MY = (testContext, [])+getCorpusForLang MY = (testContext, testOptions, []) getCorpusForLang NB = NBTime.corpus-getCorpusForLang NE = (testContext, [])+getCorpusForLang NE = (testContext, testOptions, []) getCorpusForLang NL = NLTime.corpus getCorpusForLang PL = PLTime.corpus getCorpusForLang PT = PTTime.corpus getCorpusForLang RO = ROTime.corpus-getCorpusForLang RU = (testContext, [])+getCorpusForLang RU = (testContext, testOptions, []) getCorpusForLang SV = SVTime.corpus-getCorpusForLang TR = (testContext, [])-getCorpusForLang UK = (testContext, [])+getCorpusForLang TA = (testContext, testOptions, [])+getCorpusForLang TR = (testContext, testOptions, [])+getCorpusForLang UK = (testContext, testOptions, []) getCorpusForLang VI = VITime.corpus getCorpusForLang ZH = ZHTime.corpus 
exe/Duckling/Ranking/Train.hs view
@@ -68,10 +68,10 @@ -- | Classes: -- | 1) True (node contributed to a token passing test predicate) -- | 2) False (node didn't contribute to any passing tokens)-makeDataset1 :: [Rule] -> Context -> Dataset -> Example -> Dataset-makeDataset1 rules context dataset (sentence, predicate) = dataset'+makeDataset1 :: [Rule] -> Context -> Options -> Dataset -> Example -> Dataset+makeDataset1 rules context options dataset (sentence, predicate) = dataset'   where-    tokens = parseAndResolve rules sentence context+    tokens = parseAndResolve rules sentence context options     (ok, ko) = List.partition (predicate context) tokens     subnodes :: Node -> HashSet Node     subnodes node@(Node{..}) = case children of@@ -92,5 +92,5 @@  -- | Build a dataset (rule name -> datums) makeDataset :: [Rule] -> Corpus -> Dataset-makeDataset rules (context, examples) =-   List.foldl' (makeDataset1 rules context) HashMap.empty examples+makeDataset rules (context, options, examples) =+   List.foldl' (makeDataset1 rules context options) HashMap.empty examples
exe/ExampleMain.hs view
@@ -8,12 +8,12 @@  {-# LANGUAGE OverloadedStrings #-} -import Control.Applicative+import Control.Applicative hiding (empty) import Control.Arrow ((***)) import Control.Monad (unless) import Control.Monad.IO.Class import Data.Aeson-import Data.ByteString (ByteString)+import Data.ByteString (ByteString, empty) import Data.HashMap.Strict (HashMap) import Data.Maybe import Data.String@@ -79,6 +79,7 @@   tz <- getPostParam "tz"   loc <- getPostParam "locale"   ref <- getPostParam "reftime"+  latent <- getPostParam "latent"    case t of     Nothing -> do@@ -92,17 +93,19 @@           { referenceTime = maybe now (parseRefTime timezone) ref           , locale = maybe (makeLocale (parseLang l) Nothing) parseLocale loc           }+        options = Options {withLatent = parseLatent latent}          dimParse = fromMaybe [] $ decode $ LBS.fromStrict $ fromMaybe "" ds         dims = mapMaybe fromName dimParse -        parsedResult = parse (Text.decodeUtf8 tx) context dims+        parsedResult = parse (Text.decodeUtf8 tx) context options dims        writeLBS $ encode parsedResult   where     defaultLang = EN     defaultLocale = makeLocale defaultLang Nothing     defaultTimeZone = "America/Los_Angeles"+    defaultLatent = False      parseTimeZone :: Maybe ByteString -> Text     parseTimeZone = fromMaybe defaultTimeZone . fmap Text.decodeUtf8@@ -125,3 +128,7 @@       where         msec = read $ Text.unpack $ Text.decodeUtf8 refTime         utcTime = posixSecondsToUTCTime $ fromInteger msec / 1000++    parseLatent :: Maybe ByteString -> Bool+    parseLatent x = fromMaybe defaultLatent+      (readMaybe (Text.unpack $ Text.toTitle $ Text.decodeUtf8 $ fromMaybe empty x)::Maybe Bool)
tests/Duckling/AmountOfMoney/EN/Tests.hs view
@@ -18,7 +18,7 @@ import Duckling.AmountOfMoney.EN.Corpus import Duckling.Dimensions.Types import Duckling.Testing.Asserts-import Duckling.Testing.Types (testContext)+import Duckling.Testing.Types (testContext, testOptions) import Duckling.Types (Range(..))  tests :: TestTree@@ -31,7 +31,7 @@  intersectTests :: TestTree intersectTests = testCase "Intersect Test" $-  mapM_ (analyzedNTest testContext . withTargets [This AmountOfMoney]) xs+  mapM_ (analyzedNTest testContext testOptions . withTargets [This AmountOfMoney]) xs   where     xs = [ ("7c7", 2)          , ("7c7c", 3)@@ -45,7 +45,7 @@  rangeTests :: TestTree rangeTests = testCase "Range Test" $-  mapM_ (analyzedRangeTest testContext . withTargets [This AmountOfMoney]) xs+  mapM_ (analyzedRangeTest testContext testOptions . withTargets [This AmountOfMoney]) xs   where     xs = [ ("between 3 and 1 dollars", Range 14 23)          , ("between 1 and between 2 and 3 dollars", Range 14 37)
+ tests/Duckling/AmountOfMoney/NL/Tests.hs view
@@ -0,0 +1,24 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.AmountOfMoney.NL.Tests+  ( tests+  ) where++import Data.String+import Prelude+import Test.Tasty++import Duckling.AmountOfMoney.NL.Corpus+import Duckling.Dimensions.Types+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "NL Tests"+  [ makeCorpusTest [This AmountOfMoney] corpus+  ]
tests/Duckling/AmountOfMoney/Tests.hs view
@@ -6,7 +6,9 @@ -- of patent rights can be found in the PATENTS file in the same directory.  -module Duckling.AmountOfMoney.Tests (tests) where+module Duckling.AmountOfMoney.Tests+  ( tests+  ) where  import Data.String import Prelude@@ -22,11 +24,13 @@ import qualified Duckling.AmountOfMoney.ID.Tests as ID import qualified Duckling.AmountOfMoney.KO.Tests as KO import qualified Duckling.AmountOfMoney.NB.Tests as NB+import qualified Duckling.AmountOfMoney.NL.Tests as NL import qualified Duckling.AmountOfMoney.PT.Tests as PT import qualified Duckling.AmountOfMoney.RO.Tests as RO import qualified Duckling.AmountOfMoney.RU.Tests as RU import qualified Duckling.AmountOfMoney.SV.Tests as SV import qualified Duckling.AmountOfMoney.VI.Tests as VI+import qualified Duckling.AmountOfMoney.ZH.Tests as ZH  tests :: TestTree tests = testGroup "AmountOfMoney Tests"@@ -40,9 +44,11 @@   , ID.tests   , KO.tests   , NB.tests+  , NL.tests   , PT.tests   , RO.tests   , RU.tests   , SV.tests   , VI.tests+  , ZH.tests   ]
+ tests/Duckling/AmountOfMoney/ZH/Tests.hs view
@@ -0,0 +1,23 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.AmountOfMoney.ZH.Tests+  ( tests ) where++import Data.String+import Prelude+import Test.Tasty++import Duckling.AmountOfMoney.ZH.Corpus+import Duckling.Dimensions.Types+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "ZH Tests"+  [ makeCorpusTest [This AmountOfMoney] corpus+  ]
tests/Duckling/Api/Tests.hs view
@@ -40,9 +40,9 @@  parseTest :: TestTree parseTest = testCase "Parse Test" $-  case parse sentence testContext [This Numeral] of+  case parse sentence testContext testOptions [This Numeral] of     [] -> assertFailure "empty result"-    (Entity dim body value start end _:_) -> do+    (Entity dim body value start end _ _:_) -> do       assertEqual "dim" "number" dim       assertEqual "body" "42" body       assertEqual "value" val (toJText value)@@ -84,7 +84,7 @@   where     check :: (Text, [Some Dimension], [Some Dimension]) -> IO ()     check (sentence, targets, expected) =-      let go = analyze sentence testContext $ HashSet.fromList targets+      let go = analyze sentence testContext testOptions $ HashSet.fromList targets           actual = flip map go $                      \(Resolved{node=Node{token=Token d _}}) -> This d       in assertEqual ("wrong winners for " ++ show sentence) expected actual@@ -98,12 +98,12 @@     ]   where     check (s, targets) =-      let tokens = analyze s testContext $ HashSet.fromList targets+      let tokens = analyze s testContext testOptions $ HashSet.fromList targets         in assertEqual "wrong ordering" (sortOn range tokens) tokens  rangeTest :: TestTree rangeTest = testCase "Range Tests" $ do-  mapM_ (analyzedFirstTest testContext) xs+  mapM_ (analyzedFirstTest testContext testOptions) xs   where     xs = map (\(input, targets, range) -> (input, targets, f range))              [ ( "order status 3233763377", [This PhoneNumber], Range 13 23 )
+ tests/Duckling/Distance/BG/Tests.hs view
@@ -0,0 +1,24 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.Distance.BG.Tests+  ( tests+  ) where++import Data.String+import Prelude+import Test.Tasty++import Duckling.Dimensions.Types+import Duckling.Distance.BG.Corpus+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "BG Tests"+  [ makeCorpusTest [This Distance] corpus+  ]
tests/Duckling/Distance/EN/Tests.hs view
@@ -7,10 +7,11 @@   module Duckling.Distance.EN.Tests-  ( tests ) where+  ( tests+  ) where -import Prelude import Data.String+import Prelude import Test.Tasty  import Duckling.Dimensions.Types
+ tests/Duckling/Distance/SV/Tests.hs view
@@ -0,0 +1,23 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.Distance.SV.Tests+  ( tests+  ) where++import Data.String+import Test.Tasty++import Duckling.Dimensions.Types+import Duckling.Distance.SV.Corpus+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "SV Tests"+  [ makeCorpusTest [This Distance] corpus+  ]
tests/Duckling/Distance/Tests.hs view
@@ -6,12 +6,15 @@ -- of patent rights can be found in the PATENTS file in the same directory.  -module Duckling.Distance.Tests (tests) where+module Duckling.Distance.Tests+  ( tests+  ) where -import Prelude import Data.String+import Prelude import Test.Tasty +import qualified Duckling.Distance.BG.Tests as BG import qualified Duckling.Distance.CS.Tests as CS import qualified Duckling.Distance.EN.Tests as EN import qualified Duckling.Distance.ES.Tests as ES@@ -24,10 +27,13 @@ import qualified Duckling.Distance.RO.Tests as RO import qualified Duckling.Distance.RU.Tests as RU import qualified Duckling.Distance.TR.Tests as TR+import qualified Duckling.Distance.SV.Tests as SV+import qualified Duckling.Distance.ZH.Tests as ZH  tests :: TestTree tests = testGroup "Distance Tests"-  [ CS.tests+  [ BG.tests+  , CS.tests   , EN.tests   , ES.tests   , FR.tests@@ -39,4 +45,6 @@   , RO.tests   , RU.tests   , TR.tests+  , SV.tests+  , ZH.tests   ]
+ tests/Duckling/Distance/ZH/Tests.hs view
@@ -0,0 +1,41 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.Distance.ZH.Tests+  ( tests ) where++import Data.String+import Prelude+import Test.Tasty+import Test.Tasty.HUnit++import Duckling.Dimensions.Types+import Duckling.Distance.Types+import Duckling.Distance.ZH.Corpus+import Duckling.Locale+import Duckling.Resolve+import Duckling.Testing.Asserts+import Duckling.Testing.Types++tests :: TestTree+tests = testGroup "ZH Tests"+  [ makeCorpusTest [This Distance] corpus+  , ambiguousTests+  ]++ambiguousTests :: TestTree+ambiguousTests = testCase "Ambiguous Tests" $+  analyzedAmbiguousTest context testOptions+    (testText, [This Distance], predicates)+  where+    context = testContext {locale = makeLocale ZH Nothing}+    testText = "3千米"+    predicates = simpleCheck <$>+      [ simple Kilometre 3.0+      , simple Metre 3000.0+      ]
+ tests/Duckling/Duration/BG/Tests.hs view
@@ -0,0 +1,24 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.Duration.BG.Tests+  ( tests+  ) where++import Data.String+import Prelude+import Test.Tasty++import Duckling.Dimensions.Types+import Duckling.Duration.BG.Corpus+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "BG Tests"+  [ makeCorpusTest [This Duration] corpus+  ]
tests/Duckling/Duration/Tests.hs view
@@ -15,6 +15,7 @@ import Test.Tasty  import qualified Duckling.Duration.AR.Tests as AR+import qualified Duckling.Duration.BG.Tests as BG import qualified Duckling.Duration.EL.Tests as EL import qualified Duckling.Duration.EN.Tests as EN import qualified Duckling.Duration.FR.Tests as FR@@ -35,6 +36,7 @@ tests :: TestTree tests = testGroup "Duration Tests"   [ AR.tests+  , BG.tests   , EL.tests   , EN.tests   , FR.tests
tests/Duckling/Numeral/EN/Tests.hs view
@@ -34,7 +34,8 @@  surroundTests :: TestTree surroundTests = testCase "Surround Tests" $-  mapM_ (analyzedFirstTest testContext . withTargets [This Numeral]) xs+  mapM_ (analyzedFirstTest testContext testOptions .+    withTargets [This Numeral]) xs   where     xs = concat       [ examples (NumeralValue 3)@@ -51,14 +52,14 @@  intersectTests :: TestTree intersectTests = testCase "Intersect Test" $-  mapM_ (analyzedNTest testContext . withTargets [This Numeral]) xs+  mapM_ (analyzedNTest testContext testOptions . withTargets [This Numeral]) xs   where     xs = [ ("10 millions minus 10", 2)          ]  rangeTests :: TestTree rangeTests = testCase "Range Test" $-  mapM_ (analyzedRangeTest testContext . withTargets [This Numeral]) xs+  mapM_ (analyzedRangeTest testContext testOptions . withTargets [This Numeral]) xs   where     xs = [ ("negative negative 5", Range 9 19) -- prevent double negatives          , ("negative-5", Range 8 10) -- prevent double negatives
+ tests/Duckling/Numeral/TA/Tests.hs view
@@ -0,0 +1,22 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.++module Duckling.Numeral.TA.Tests+  ( tests ) where++import Data.String+import Prelude+import Test.Tasty++import Duckling.Dimensions.Types+import Duckling.Numeral.TA.Corpus+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "TA Tests"+  [ makeCorpusTest [This Numeral] corpus+  ]
tests/Duckling/Numeral/Tests.hs view
@@ -41,6 +41,7 @@ import qualified Duckling.Numeral.RO.Tests as RO import qualified Duckling.Numeral.RU.Tests as RU import qualified Duckling.Numeral.SV.Tests as SV+import qualified Duckling.Numeral.TA.Tests as TA import qualified Duckling.Numeral.TR.Tests as TR import qualified Duckling.Numeral.UK.Tests as UK import qualified Duckling.Numeral.VI.Tests as VI@@ -77,6 +78,7 @@   , RO.tests   , RU.tests   , SV.tests+  , TA.tests   , TR.tests   , UK.tests   , VI.tests
+ tests/Duckling/Ordinal/BG/Tests.hs view
@@ -0,0 +1,23 @@+-- Copyright (c) 2016-present, Facebook, Inc.+-- All rights reserved.+--+-- This source code is licensed under the BSD-style license found in the+-- LICENSE file in the root directory of this source tree. An additional grant+-- of patent rights can be found in the PATENTS file in the same directory.+++module Duckling.Ordinal.BG.Tests+  ( tests ) where++import Prelude+import Data.String+import Test.Tasty++import Duckling.Dimensions.Types+import Duckling.Ordinal.BG.Corpus+import Duckling.Testing.Asserts++tests :: TestTree+tests = testGroup "BG Tests"+  [ makeCorpusTest [This Ordinal] corpus+  ]
tests/Duckling/Ordinal/Tests.hs view
@@ -13,6 +13,7 @@ import Test.Tasty  import qualified Duckling.Ordinal.AR.Tests as AR+import qualified Duckling.Ordinal.BG.Tests as BG import qualified Duckling.Ordinal.DA.Tests as DA import qualified Duckling.Ordinal.DE.Tests as DE import qualified Duckling.Ordinal.EL.Tests as EL@@ -44,6 +45,7 @@ tests :: TestTree tests = testGroup "Ordinal Tests"   [ AR.tests+  , BG.tests   , DA.tests   , DE.tests   , EL.tests
tests/Duckling/PhoneNumber/Tests.hs view
@@ -34,7 +34,8 @@  surroundTests :: TestTree surroundTests = testCase "Surround Tests" $-  mapM_ (analyzedFirstTest testContext . withTargets [This PhoneNumber]) xs+  mapM_ (analyzedFirstTest testContext testOptions .+    withTargets [This PhoneNumber]) xs   where     xs = examples (PhoneNumberValue "06354640807")                   [ "hey 06354640807"
tests/Duckling/Testing/Asserts.hs view
@@ -11,6 +11,7 @@ module Duckling.Testing.Asserts   ( analyzedTargetTest   , analyzedFirstTest+  , analyzedAmbiguousTest   , analyzedNTest   , analyzedNothingTest   , analyzedRangeTest@@ -19,6 +20,7 @@   , withTargets   ) where +import Data.List (partition) import Data.String import Data.Text (Text) import Prelude@@ -37,62 +39,82 @@ withTargets :: [Some Dimension] -> (Text, a) -> (Text, [Some Dimension], a) withTargets targets (input, expected) = (input, targets, expected) -analyzedTargetTest :: Context -> (Text, Some Dimension) -> IO ()-analyzedTargetTest context (input, target) =+analyzedTargetTest :: Context -> Options -> (Text, Some Dimension) -> IO ()+analyzedTargetTest context options (input, target) =   assertBool msg $ all (== target) dimensions   where     msg = "analyze " ++ show (input, [target])           ++ "dimensions = " ++ show dimensions-    dimensions = flip map (analyze input context $ HashSet.singleton target) $+    dimensions = flip map (analyze input context options $ HashSet.singleton target) $       \(Resolved{node=Node{token=Token dimension _}}) -> This dimension -analyzedFirstTest :: Context -> (Text, [Some Dimension], TestPredicate) -> IO ()-analyzedFirstTest context (input, targets, predicate) =+analyzedFirstTest :: Context -> Options ->+  (Text, [Some Dimension], TestPredicate) -> IO ()+analyzedFirstTest context options (input, targets, predicate) =   case tokens of     [] -> assertFailure ("empty result on " ++ show (input, targets))     (token:_) -> assertBool ("don't pass predicate on " ++ show input) $       predicate context token     where-      tokens = analyze input context $ HashSet.fromList targets+      tokens = analyze input context options $ HashSet.fromList targets +analyzedAmbiguousTest :: Context -> Options ->+  (Text, [Some Dimension], [TestPredicate]) -> IO ()+analyzedAmbiguousTest context options (input, targets, predicates) =+  case tokens of+    [] -> assertFailure ("empty result on " ++ show (input, targets))+    _ -> assertBool ("don't pass predicate on " ++ show input) $+      all (\predicate -> any (predicate context) tokens) predicates+    where+      tokens = analyze input context options $ HashSet.fromList targets+ makeCorpusTest :: [Some Dimension] -> Corpus -> TestTree-makeCorpusTest targets (context, xs) = testCase "Corpus Tests" $ mapM_ check xs+makeCorpusTest targets (context, options, xs) = testCase "Corpus Tests" $+  mapM_ check xs   where     dims = HashSet.fromList targets     check :: Example -> IO ()-    check (input, predicate) = let tokens = analyze input context dims in-      case tokens of-        [] -> assertFailure $ "empty result on " ++ show input-        (_:_:_) -> assertFailure $-          show (length tokens) ++ " tokens found for " ++ show input-        (token:_) -> do-          assertEqual ("don't fully match " ++ show input)-            (Range 0 (Text.length input)) (range token)-          assertBool ("don't pass predicate on " ++ show input) $-            predicate context token+    check (input, predicate) =+      let tokens = analyze input context options dims in+      let inputRange = Range 0 $ Text.length input in+      let (fullRangeTokens, restTokens) =+            partition ((== inputRange) . range) tokens in+      case fullRangeTokens of+        [] -> case restTokens of+          [] -> assertFailure $ "empty result on " ++ show input+          (_:_:_) -> assertFailure $+            show (length restTokens) ++ " tokens found for " ++ show input+          _ -> assertFailure $ "don't fully match " ++ show input+        [token] -> assertBool ("don't pass predicate on " ++ show input) $+          predicate context token+        _ -> assertFailure $ show (length fullRangeTokens)+          ++ " different ambiguous parses on " ++ show input + makeNegativeCorpusTest :: [Some Dimension] -> NegativeCorpus -> TestTree-makeNegativeCorpusTest targets (context, xs) = testCase "Negative Corpus Tests" $-  mapM_ (analyzedNothingTest context . (, targets)) xs+makeNegativeCorpusTest targets (context, options, xs) =+  testCase "Negative Corpus Tests"+  $ mapM_ (analyzedNothingTest context options . (, targets)) xs -analyzedRangeTest :: Context -> (Text, [Some Dimension], Range) -> IO ()-analyzedRangeTest context (input, targets, expRange) = case tokens of+analyzedRangeTest :: Context -> Options -> (Text, [Some Dimension], Range)+  -> IO ()+analyzedRangeTest context options  (input, targets, expRange) = case tokens of   [] -> assertFailure $ "empty result on " ++ show input   (_:_:_) -> assertFailure $     show (length tokens) ++ " tokens found for " ++ show input   (token:_) ->     assertEqual ("wrong range for " ++ show input) expRange (range token)   where-    tokens = analyze input context $ HashSet.fromList targets+    tokens = analyze input context options $ HashSet.fromList targets -analyzedNothingTest :: Context -> (Text, [Some Dimension]) -> IO ()-analyzedNothingTest context (input, targets) =-  analyzedNTest context (input, targets, 0)+analyzedNothingTest :: Context -> Options -> (Text, [Some Dimension]) -> IO ()+analyzedNothingTest context options (input, targets) =+  analyzedNTest context options (input, targets, 0) -analyzedNTest :: Context -> (Text, [Some Dimension], Int) -> IO ()-analyzedNTest context (input, targets, n) =+analyzedNTest :: Context -> Options -> (Text, [Some Dimension], Int) -> IO ()+analyzedNTest context options (input, targets, n) =   assertBool msg . (== n) $ length tokens   where     msg = "analyze " ++ show (input, targets)           ++ "tokens= " ++ show tokens-    tokens = analyze input context $ HashSet.fromList targets+    tokens = analyze input context options $ HashSet.fromList targets
tests/Duckling/Time/EN/Tests.hs view
@@ -52,6 +52,7 @@   , intersectTests   , rangeTests   , localeTests+  , makeCorpusTest [This Time] latentCorpus   ]  localeTests :: TestTree@@ -121,7 +122,7 @@  exactSecondTests :: TestTree exactSecondTests = testCase "Exact Second Tests" $-  mapM_ (analyzedFirstTest context . withTargets [This Time]) xs+  mapM_ (analyzedFirstTest context testOptions . withTargets [This Time]) xs   where     context = testContext {referenceTime = refTime (2016, 12, 6, 13, 21, 42) 1}     xs = concat@@ -131,7 +132,8 @@       , examples (datetime (2016, 12, 6, 13, 31, 42) Second)                  [ "in ten minutes"                  ]-      , examples (datetimeInterval ((2016, 12, 6, 13, 21, 42), (2016, 12, 12, 0, 0, 0)) Second)+      , examples (datetimeInterval+          ((2016, 12, 6, 13, 21, 42), (2016, 12, 12, 0, 0, 0)) Second)                  [ "by next week"                  , "by Monday"                  ]@@ -139,7 +141,7 @@  valuesTest :: TestTree valuesTest = testCase "Values Test" $-  mapM_ (analyzedFirstTest testContext . withTargets [This Time]) xs+  mapM_ (analyzedFirstTest testContext testOptions . withTargets [This Time]) xs   where     xs = examplesCustom (parserCheck 1 parseValuesSize)                         [ "now"@@ -154,7 +156,7 @@  intersectTests :: TestTree intersectTests = testCase "Intersect Test" $-  mapM_ (analyzedNTest testContext . withTargets [This Time]) xs+  mapM_ (analyzedNTest testContext testOptions . withTargets [This Time]) xs   where     xs = [ ("tomorrow July", 2)          , ("Mar tonight", 2)@@ -163,7 +165,7 @@  rangeTests :: TestTree rangeTests = testCase "Range Test" $-  mapM_ (analyzedRangeTest testContext . withTargets [This Time]) xs+  mapM_ (analyzedRangeTest testContext testOptions . withTargets [This Time]) xs   where     xs = [ ("at 615.", Range 0 6) -- make sure ruleHHMMLatent allows this          , ("last in 2'", Range 5 10) -- ruleLastTime too eager
tests/Duckling/Time/SV/Tests.hs view
@@ -46,6 +46,6 @@     ctx = testContext {locale = makeLocale SV Nothing}     dims = HashSet.singleton $ This Time     check :: Example -> IO ()-    check (input, predicate) = case analyze input ctx dims of+    check (input, predicate) = case analyze input ctx testOptions dims of       [] -> assertFailure $ "empty result on " ++ show input       xs -> mapM_ (assertBool ("predicate on " ++ show input) . predicate ctx) xs
tests/Duckling/Time/Tests.hs view
@@ -75,7 +75,7 @@  timeFormatTest :: TestTree timeFormatTest = testCase "Format Test" $-  mapM_ (analyzedFirstTest testContext . withTargets [This Time]) xs+  mapM_ (analyzedFirstTest testContext testOptions . withTargets [This Time]) xs   where     xs = examplesCustom (parserCheck expected parseValue) ["now"]     expected = "2013-02-12T04:30:00.000-02:00"
tests/Duckling/Url/Tests.hs view
@@ -32,7 +32,7 @@  surroundTests :: TestTree surroundTests = testCase "Surround Tests" $-  mapM_ (analyzedFirstTest testContext . withTargets [This Url]) xs+  mapM_ (analyzedFirstTest testContext testOptions . withTargets [This Url]) xs   where     xs = examples (UrlData "www.lets-try-this-one.co.uk/episode-7" "lets-try-this-one.co.uk")                   [ "phishing link: www.lets-try-this-one.co.uk/episode-7  If you want my job"