mirror of
https://github.com/facebook/duckling.git
synced 2024-09-11 21:27:13 +03:00
Move Candidate to Ranking/Types.hs
Summary: In my opinion putting `Candidate` into the core `Types.hs` is a mistake - it's used exclusively in the ranking stage, so cluttering the core tokenizing and recursive parsing / value resolution logic in `Duckling.Types` with this irrelevant datatype makes things less clear than if we keep it in the `Ranking` modules. Reviewed By: chessai Differential Revision: D28462902 fbshipit-source-id: cd4bb88c4a16945265e8f21c8808b06ae3383559
This commit is contained in:
parent
69d951220e
commit
81ab073acf
@ -18,12 +18,20 @@ module Duckling.Ranking.Types
|
|||||||
, Classifier(..)
|
, Classifier(..)
|
||||||
, Classifiers
|
, Classifiers
|
||||||
, ClassData(..)
|
, ClassData(..)
|
||||||
|
, Candidate(..)
|
||||||
|
|
||||||
, infinity
|
, infinity
|
||||||
) where
|
) where
|
||||||
import Data.HashMap.Strict (HashMap)
|
import Data.HashMap.Strict (HashMap)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Prelude
|
import Prelude
|
||||||
|
import Duckling.Types
|
||||||
|
( Node(..)
|
||||||
|
, Range(..)
|
||||||
|
, ResolvedToken(..)
|
||||||
|
, Token(..)
|
||||||
|
, isDimension
|
||||||
|
)
|
||||||
|
|
||||||
-- -----------------------------------------------------------------
|
-- -----------------------------------------------------------------
|
||||||
-- Aliases
|
-- Aliases
|
||||||
@ -55,3 +63,43 @@ data ClassData = ClassData
|
|||||||
|
|
||||||
infinity :: Double
|
infinity :: Double
|
||||||
infinity = 1 / 0
|
infinity = 1 / 0
|
||||||
|
|
||||||
|
-- -----------------------------------------------------------------
|
||||||
|
-- Candidate
|
||||||
|
|
||||||
|
-- |A Candidate represents a potential match going into the ranker
|
||||||
|
data Candidate = Candidate
|
||||||
|
ResolvedToken -- ^ The actual resolved token we are considering
|
||||||
|
Double -- ^ naive Bayes log-likelihood - sum of LL of all rules used
|
||||||
|
Bool -- ^ Does the ResolvedToken's dimension match the caller's request?
|
||||||
|
deriving (Eq, Show)
|
||||||
|
|
||||||
|
instance Ord Candidate where
|
||||||
|
compare (Candidate Resolved{range = Range s1 e1, node = Node{token = Token d1 _}} score1 t1)
|
||||||
|
(Candidate Resolved{range = Range s2 e2, node = Node{token = tok2}} score2 t2)
|
||||||
|
| isDimension d1 tok2 = case starts of
|
||||||
|
EQ -> case ends of
|
||||||
|
EQ -> compare score1 score2
|
||||||
|
z -> z
|
||||||
|
LT -> case ends of
|
||||||
|
LT -> EQ
|
||||||
|
_ -> GT
|
||||||
|
GT -> case ends of
|
||||||
|
GT -> EQ
|
||||||
|
_ -> LT
|
||||||
|
| t1 == t2 = compRange
|
||||||
|
| t1 && compRange == GT = GT
|
||||||
|
| t2 && compRange == LT = LT
|
||||||
|
| otherwise = EQ
|
||||||
|
where
|
||||||
|
starts = compare s1 s2
|
||||||
|
ends = compare e1 e2
|
||||||
|
-- a > b if a recovers b
|
||||||
|
compRange = case starts of
|
||||||
|
EQ -> ends
|
||||||
|
LT -> case ends of
|
||||||
|
LT -> EQ
|
||||||
|
_ -> GT
|
||||||
|
GT -> case ends of
|
||||||
|
GT -> EQ
|
||||||
|
_ -> LT
|
||||||
|
@ -253,43 +253,6 @@ instance Ord ResolvedToken where
|
|||||||
z -> z
|
z -> z
|
||||||
|
|
||||||
|
|
||||||
-- |A Candidate represents a potential match going into the ranker
|
|
||||||
data Candidate = Candidate
|
|
||||||
ResolvedToken -- ^ The actual resolved token we are considering
|
|
||||||
Double -- ^ naive Bayes log-likelihood - sum of LL of all rules used
|
|
||||||
Bool -- ^ Does the ResolvedToken's dimension match the caller's request?
|
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
instance Ord Candidate where
|
|
||||||
compare (Candidate Resolved{range = Range s1 e1, node = Node{token = Token d1 _}} score1 t1)
|
|
||||||
(Candidate Resolved{range = Range s2 e2, node = Node{token = tok2}} score2 t2)
|
|
||||||
| isDimension d1 tok2 = case starts of
|
|
||||||
EQ -> case ends of
|
|
||||||
EQ -> compare score1 score2
|
|
||||||
z -> z
|
|
||||||
LT -> case ends of
|
|
||||||
LT -> EQ
|
|
||||||
_ -> GT
|
|
||||||
GT -> case ends of
|
|
||||||
GT -> EQ
|
|
||||||
_ -> LT
|
|
||||||
| t1 == t2 = compRange
|
|
||||||
| t1 && compRange == GT = GT
|
|
||||||
| t2 && compRange == LT = LT
|
|
||||||
| otherwise = EQ
|
|
||||||
where
|
|
||||||
starts = compare s1 s2
|
|
||||||
ends = compare e1 e2
|
|
||||||
-- a > b if a recovers b
|
|
||||||
compRange = case starts of
|
|
||||||
EQ -> ends
|
|
||||||
LT -> case ends of
|
|
||||||
LT -> EQ
|
|
||||||
_ -> GT
|
|
||||||
GT -> case ends of
|
|
||||||
GT -> EQ
|
|
||||||
_ -> LT
|
|
||||||
|
|
||||||
data Range = Range Int Int
|
data Range = Range Int Int
|
||||||
deriving (Eq, Ord, Generic, Hashable, Show, NFData)
|
deriving (Eq, Ord, Generic, Hashable, Show, NFData)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user