Skip to content
This repository was archived by the owner on Apr 28, 2021. It is now read-only.

Commit c133bad

Browse files
Newinfinite007facebook-github-bot
Newinfinite007
authored andcommitted
Hindi Language Numeral Dimension(minimalistic model). Tests passed.
Summary: Closes facebook#119 Reviewed By: JonCoens Differential Revision: D6597628 Pulled By: patapizza fbshipit-source-id: 8bac0f686d6cecc38d9998e37042fe48f73530dc
1 parent 15b3988 commit c133bad

File tree

14 files changed

+381
-0
lines changed

14 files changed

+381
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
.stack-work/
22
log/
3+
.idea/

Duckling/Dimensions.hs

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import qualified Duckling.Dimensions.ET as ETDimensions
3232
import qualified Duckling.Dimensions.FR as FRDimensions
3333
import qualified Duckling.Dimensions.GA as GADimensions
3434
import qualified Duckling.Dimensions.HE as HEDimensions
35+
import qualified Duckling.Dimensions.HI as HIDimensions
3536
import qualified Duckling.Dimensions.HR as HRDimensions
3637
import qualified Duckling.Dimensions.HU as HUDimensions
3738
import qualified Duckling.Dimensions.ID as IDDimensions
@@ -93,6 +94,7 @@ langDimensions ET = ETDimensions.allDimensions
9394
langDimensions FR = FRDimensions.allDimensions
9495
langDimensions GA = GADimensions.allDimensions
9596
langDimensions HE = HEDimensions.allDimensions
97+
langDimensions HI = HIDimensions.allDimensions
9698
langDimensions HR = HRDimensions.allDimensions
9799
langDimensions HU = HUDimensions.allDimensions
98100
langDimensions ID = IDDimensions.allDimensions

Duckling/Dimensions/HI.hs

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--Copyright (c) 2016-present, Facebook, Inc.
2+
-- All rights reserved.
3+
--
4+
-- This source code is licensed under the BSD-style license found in the
5+
-- LICENSE file in the root directory of this source tree. An additional grant
6+
-- of patent rights can be found in the PATENTS file in the same directory.
7+
8+
9+
module Duckling.Dimensions.HI
10+
( allDimensions
11+
) where
12+
13+
import Duckling.Dimensions.Types
14+
15+
allDimensions :: [Some Dimension]
16+
allDimensions =
17+
[ This Numeral
18+
]

Duckling/Locale.hs

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ data Lang
4343
| FR
4444
| GA
4545
| HE
46+
| HI
4647
| HR
4748
| HU
4849
| ID

Duckling/Numeral/HI/Corpus.hs

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
-- Copyright (c) 2016-present, Facebook, Inc.
2+
-- All rights reserved.
3+
--
4+
-- This source code is licensed under the BSD-style license found in the
5+
-- LICENSE file in the root directory of this source tree. An additional grant
6+
-- of patent rights can be found in the PATENTS file in the same directory.
7+
8+
9+
{-# LANGUAGE OverloadedStrings #-}
10+
11+
module Duckling.Numeral.HI.Corpus
12+
( corpus
13+
) where
14+
15+
import Data.String
16+
import Prelude
17+
18+
import Duckling.Locale
19+
import Duckling.Numeral.Types
20+
import Duckling.Resolve
21+
import Duckling.Testing.Types
22+
23+
corpus :: Corpus
24+
corpus = (testContext {locale = makeLocale HI Nothing}, allExamples)
25+
26+
allExamples :: [Example]
27+
allExamples = concat
28+
[ examples (NumeralValue 0)
29+
[ "शून्य"
30+
, ""
31+
]
32+
, examples (NumeralValue 1)
33+
[ "एक"
34+
]
35+
, examples (NumeralValue 2)
36+
[ "दो"
37+
]
38+
, examples (NumeralValue 3)
39+
[ "तीन"
40+
]
41+
, examples (NumeralValue 4)
42+
[ "चार"
43+
]
44+
, examples (NumeralValue 5)
45+
[ "पाँच"
46+
]
47+
, examples (NumeralValue 6)
48+
[ "छह"
49+
]
50+
, examples (NumeralValue 7)
51+
[ "सात"
52+
]
53+
, examples (NumeralValue 8)
54+
[ "आठ"
55+
]
56+
, examples (NumeralValue 9)
57+
[ "नौ"
58+
]
59+
, examples (NumeralValue 10)
60+
[ "दस"
61+
]
62+
, examples (NumeralValue 15)
63+
[ "पन्द्रह"
64+
]
65+
, examples (NumeralValue 17)
66+
[ "सत्रह"
67+
]
68+
, examples (NumeralValue 20)
69+
[ "बीस"
70+
]
71+
, examples (NumeralValue 22)
72+
[ "बाईस"
73+
]
74+
, examples (NumeralValue 24)
75+
[ "चौबीस"
76+
]
77+
, examples (NumeralValue 26)
78+
[ "छब्बीस"
79+
]
80+
, examples (NumeralValue 28)
81+
[ "अट्ठाईस"
82+
]
83+
, examples (NumeralValue 50)
84+
[ "५०"
85+
, "पचास"
86+
]
87+
]

Duckling/Numeral/HI/Rules.hs

+170
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
-- Copyright (c) 2016-present, Facebook, Inc.
2+
-- All rights reserved.
3+
--
4+
-- This source code is licensed under the BSD-style license found in the
5+
-- LICENSE file in the root directory of this source tree. An additional grant
6+
-- of patent rights can be found in the PATENTS file in the same directory.
7+
8+
9+
{-# LANGUAGE GADTs #-}
10+
{-# LANGUAGE OverloadedStrings #-}
11+
{-# LANGUAGE NoRebindableSyntax #-}
12+
13+
module Duckling.Numeral.HI.Rules
14+
( rules
15+
) where
16+
17+
import Data.HashMap.Strict (HashMap)
18+
import Data.Maybe
19+
import Data.String
20+
import Data.Text (Text)
21+
import Prelude
22+
import qualified Data.HashMap.Strict as HashMap
23+
import qualified Data.Text as Text
24+
25+
import Duckling.Dimensions.Types
26+
import Duckling.Numeral.Helpers
27+
import Duckling.Numeral.Types (NumeralData (..))
28+
import Duckling.Regex.Types
29+
import Duckling.Types
30+
import qualified Duckling.Numeral.Types as TNumeral
31+
32+
devanagariMap :: HashMap Char Char
33+
devanagariMap = HashMap.fromList
34+
[ ( '०', '0' )
35+
, ( '१', '1' )
36+
, ( '२', '2' )
37+
, ( '३', '3' )
38+
, ( '४', '4' )
39+
, ( '५', '5' )
40+
, ( '६', '6' )
41+
, ( '७', '7' )
42+
, ( '८', '8' )
43+
, ( '९', '9' )
44+
]
45+
46+
devanagariToArab :: Char -> Char
47+
devanagariToArab c = HashMap.lookupDefault c c devanagariMap
48+
49+
ruleDevanagari :: Rule
50+
ruleDevanagari = Rule
51+
{ name = "devanagari forms"
52+
, pattern =
53+
[ regex "([०१२३४५६७८९]{1,18})"
54+
]
55+
, prod = \tokens -> case tokens of
56+
(Token RegexMatch (GroupMatch (match:_)):_) ->
57+
toInteger <$> parseInt (Text.map devanagariToArab match) >>= integer
58+
_ -> Nothing
59+
}
60+
61+
ruleNumeralMap :: HashMap Text Integer
62+
ruleNumeralMap = HashMap.fromList
63+
[ ( "शून्य", 0 )
64+
, ( "एक", 1 )
65+
, ( "दो" , 2 )
66+
, ( "तीन", 3 )
67+
, ( "चार", 4 )
68+
, ( "पाँच", 5 )
69+
, ( "छह", 6 )
70+
, ( "सात", 7 )
71+
, ( "आठ", 8 )
72+
, ( "नौ" , 9 )
73+
, ( "दस", 10 )
74+
]
75+
76+
ruleNumeral :: Rule
77+
ruleNumeral = Rule
78+
{ name = "number (0..10)"
79+
, pattern =
80+
[ regex "(शून्य|एक|दो|तीन|चार|पाँच|छह|सात|आठ|नौ|दस)"
81+
]
82+
, prod = \tokens -> case tokens of
83+
(Token RegexMatch (GroupMatch (match:_)):_) ->
84+
HashMap.lookup match ruleNumeralMap >>= integer
85+
_ -> Nothing
86+
}
87+
88+
elevenToNineteenMap :: HashMap Text Integer
89+
elevenToNineteenMap = HashMap.fromList
90+
[ ( "ग्यारह", 11 )
91+
, ( "बारह", 12 )
92+
, ( "तेरह", 13 )
93+
, ( "चौदह", 14 )
94+
, ( "पन्द्रह", 15 )
95+
, ( "सोलह", 16 )
96+
, ( "सत्रह", 17 )
97+
, ( "अठारह", 18 )
98+
, ( "उन्नीस", 19 )
99+
]
100+
101+
ruleElevenToNineteen :: Rule
102+
ruleElevenToNineteen = Rule
103+
{ name = "number (11..19)"
104+
, pattern =
105+
[ regex "(ग्यारह|बारह|तेरह|चौदह|पन्द्रह|सोलह|सत्रह|अठारह|उन्नीस)"
106+
]
107+
, prod = \tokens -> case tokens of
108+
(Token RegexMatch (GroupMatch (match:_)):_) ->
109+
HashMap.lookup match elevenToNineteenMap >>= integer
110+
_ -> Nothing
111+
}
112+
113+
twentyoneToTwentynineMap :: HashMap Text Integer
114+
twentyoneToTwentynineMap = HashMap.fromList
115+
[ ( "इक्कीस", 21 )
116+
, ( "बाईस", 22 )
117+
, ( "तेईस", 23 )
118+
, ( "चौबीस", 24 )
119+
, ( "पच्चीस", 25 )
120+
, ( "छब्बीस", 26 )
121+
, ( "सत्ताईस", 27 )
122+
, ( "अट्ठाईस", 28 )
123+
, ( "उनतीस", 29 )
124+
]
125+
126+
ruleTwentyoneToTwentynine :: Rule
127+
ruleTwentyoneToTwentynine = Rule
128+
{ name = "number (21..29)"
129+
, pattern =
130+
[ regex "(इक्कीस|बाईस|तेईस|चौबीस|पच्चीस|छब्बीस|सत्ताईस|अट्ठाईस|उनतीस)"
131+
]
132+
, prod = \tokens -> case tokens of
133+
(Token RegexMatch (GroupMatch (match:_)):_) ->
134+
HashMap.lookup match twentyoneToTwentynineMap >>= integer
135+
_ -> Nothing
136+
}
137+
138+
tensMap :: HashMap Text Integer
139+
tensMap = HashMap.fromList
140+
[ ( "बीस", 20 )
141+
, ( "तीस", 30 )
142+
, ( "चालीस", 40 )
143+
, ( "पचास", 50 )
144+
, ( "साठ", 60 )
145+
, ( "सत्तर", 70 )
146+
, ( "अस्सी", 80 )
147+
, ( "नब्बे", 90 )
148+
]
149+
150+
ruleTens :: Rule
151+
ruleTens = Rule
152+
{ name = "integer (20,30..90)"
153+
, pattern =
154+
[ regex "(बीस|तीस|चालीस|पचास|साठ|सत्तर|अस्सी|नब्बे)"
155+
]
156+
, prod = \tokens -> case tokens of
157+
(Token RegexMatch (GroupMatch (match:_)):_) ->
158+
HashMap.lookup match tensMap >>= integer
159+
_ -> Nothing
160+
}
161+
162+
163+
rules :: [Rule]
164+
rules =
165+
[ ruleDevanagari
166+
, ruleNumeral
167+
, ruleElevenToNineteen
168+
, ruleTwentyoneToTwentynine
169+
, ruleTens
170+
]

Duckling/Ranking/Classifiers.hs

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import qualified Duckling.Ranking.Classifiers.ET_XX as ET_XXClassifiers
2828
import qualified Duckling.Ranking.Classifiers.FR_XX as FR_XXClassifiers
2929
import qualified Duckling.Ranking.Classifiers.GA_XX as GA_XXClassifiers
3030
import qualified Duckling.Ranking.Classifiers.HE_XX as HE_XXClassifiers
31+
import qualified Duckling.Ranking.Classifiers.HI_XX as HI_XXClassifiers
3132
import qualified Duckling.Ranking.Classifiers.HR_XX as HR_XXClassifiers
3233
import qualified Duckling.Ranking.Classifiers.HU_XX as HU_XXClassifiers
3334
import qualified Duckling.Ranking.Classifiers.ID_XX as ID_XXClassifiers
@@ -63,6 +64,7 @@ classifiers (Locale ET _) = ET_XXClassifiers.classifiers
6364
classifiers (Locale FR _) = FR_XXClassifiers.classifiers
6465
classifiers (Locale GA _) = GA_XXClassifiers.classifiers
6566
classifiers (Locale HE _) = HE_XXClassifiers.classifiers
67+
classifiers (Locale HI _) = HI_XXClassifiers.classifiers
6668
classifiers (Locale HR _) = HR_XXClassifiers.classifiers
6769
classifiers (Locale HU _) = HU_XXClassifiers.classifiers
6870
classifiers (Locale ID _) = ID_XXClassifiers.classifiers

Duckling/Ranking/Classifiers/HI_XX.hs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-- Copyright (c) 2016-present, Facebook, Inc.
2+
-- All rights reserved.
3+
--
4+
-- This source code is licensed under the BSD-style license found in the
5+
-- LICENSE file in the root directory of this source tree. An additional grant
6+
-- of patent rights can be found in the PATENTS file in the same directory.
7+
8+
-----------------------------------------------------------------
9+
-- Auto-generated by regenClassifiers
10+
--
11+
-- DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
12+
-- @generated
13+
-----------------------------------------------------------------
14+
{-# LANGUAGE OverloadedStrings #-}
15+
module Duckling.Ranking.Classifiers.HI_XX (classifiers) where
16+
import Data.String
17+
import Prelude
18+
import qualified Data.HashMap.Strict as HashMap
19+
import Duckling.Ranking.Types
20+
21+
classifiers :: Classifiers
22+
classifiers = HashMap.fromList []

Duckling/Rules.hs

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import qualified Duckling.Rules.ET as ETRules
3535
import qualified Duckling.Rules.FR as FRRules
3636
import qualified Duckling.Rules.GA as GARules
3737
import qualified Duckling.Rules.HE as HERules
38+
import qualified Duckling.Rules.HI as HIRules
3839
import qualified Duckling.Rules.HR as HRRules
3940
import qualified Duckling.Rules.HU as HURules
4041
import qualified Duckling.Rules.ID as IDRules
@@ -88,6 +89,7 @@ defaultRules ET = ETRules.defaultRules
8889
defaultRules FR = FRRules.defaultRules
8990
defaultRules GA = GARules.defaultRules
9091
defaultRules HE = HERules.defaultRules
92+
defaultRules HI = HIRules.defaultRules
9193
defaultRules HR = HRRules.defaultRules
9294
defaultRules HU = HURules.defaultRules
9395
defaultRules ID = IDRules.defaultRules
@@ -121,6 +123,7 @@ localeRules ET = ETRules.localeRules
121123
localeRules FR = FRRules.localeRules
122124
localeRules GA = GARules.localeRules
123125
localeRules HE = HERules.localeRules
126+
localeRules HI = HIRules.localeRules
124127
localeRules HR = HRRules.localeRules
125128
localeRules HU = HURules.localeRules
126129
localeRules ID = IDRules.localeRules
@@ -154,6 +157,7 @@ langRules ET = ETRules.langRules
154157
langRules FR = FRRules.langRules
155158
langRules GA = GARules.langRules
156159
langRules HE = HERules.langRules
160+
langRules HI = HIRules.langRules
157161
langRules HR = HRRules.langRules
158162
langRules HU = HURules.langRules
159163
langRules ID = IDRules.langRules

0 commit comments

Comments
 (0)