Be more permissive with numerals [20, 90]

Summary: There are a handful of more spelling for russian numbers [20, 30 .. 90] that we aren't handling. Additionally, we optimise for recall over precision by allowing some invalid spellings that could be understandable typos.

Reviewed By: patapizza

Differential Revision: D26285711

Pulled By: chessai

fbshipit-source-id: fd8a8f373d228a526e79b22326eff48bb966310d
This commit is contained in:
evjava@yandex.ru 2021-02-05 15:23:28 -08:00 committed by Facebook GitHub Bot
parent 3f2f307735
commit ff4a1a5bae
2 changed files with 37 additions and 2 deletions

View File

@ -55,6 +55,7 @@ allExamples = concat
, examples (NumeralValue 33)
[ "33"
, "тридцать три"
, "тридцати три"
, "0033"
]
, examples (NumeralValue 11)
@ -83,12 +84,34 @@ allExamples = concat
]
, examples (NumeralValue 444)
[ "четыреста сорок четыре"
, "четыреста сорока четыре"
, "444"
]
, examples (NumeralValue 525)
[ "пятьсот двадцать пять"
, "пятьсот двадцати пять"
, "525"
]
, examples (NumeralValue 555)
[ "пятьсот пятьдесят пять"
, "пятьсот пятидесяти пять"
]
, examples (NumeralValue 565)
[ "пятьсот шестьдесят пять"
, "пятьсот шестидесяти пять"
]
, examples (NumeralValue 575)
[ "пятьсот семьдесят пять"
, "пятьсот семидесяти пять"
]
, examples (NumeralValue 585)
[ "пятьсот восемьдесят пять"
, "пятьсот восьмидесяти пять"
]
, examples (NumeralValue 595)
[ "пятьсот девяносто пять"
, "пятьсот девяноста пять"
]
, examples (NumeralValue 1.5)
[ "1.5"
, "полторы"

View File

@ -30,20 +30,32 @@ import qualified Duckling.Numeral.Types as TNumeral
tensMap :: HashMap Text Integer
tensMap = HashMap.fromList
[ ( "двадцать", 20)
, ( "двадцати", 20)
, ( "тридцать", 30)
, ( "тридцати", 30)
, ( "сорок", 40)
, ( "сорока", 40)
, ( "пятьдесят", 50)
, ( "пятидесяти", 50)
, ( "шестьдесят", 60)
, ( "шестидесяти", 60)
, ( "шестидесят", 60)
, ( "семьдесят", 70)
, ( "семидесяти", 70)
, ( "семидесят", 70)
, ( "восемьдесят", 80)
, ( "восьмидесяти", 80)
, ( "восьмидесят", 80)
, ( "восемьдесяти", 80)
, ( "девяносто", 90)
, ( "девяноста", 90)
]
ruleInteger5 :: Rule
ruleInteger5 = Rule
{ name = "integer (20..90)"
, pattern =
[ regex "(двадцать|тридцать|сорок|пятьдесят|шестьдесят|семьдесят|восемьдесят|девяносто)"
[ regex "(двадцат(ь|и)|тридцат(ь|и)|сорока?|пят(ь|и)десяти?|шест(ь|и)десяти?|сем(ь|и)десяти?|вос(е|ь)м(ь|и)десяти?|девяност(о|а))"
]
, prod = \tokens -> case tokens of
(Token RegexMatch (GroupMatch (match:_)):_) ->
@ -78,7 +90,7 @@ ruleInteger3 :: Rule
ruleInteger3 = Rule
{ name = "integer 2"
, pattern =
[ regex "(два|две|двое|пара|пару|парочку|парочка)"
[ regex "(дв(а|е|ух|ое)|пар(а|у|очк(у|а)))"
]
, prod = \_ -> integer 2
}