Пример #1
0
    def __init__(self, culture_info=None):
        if culture_info is None:
            culture_info = CultureInfo(Culture.German)

        self._culture_info = culture_info
        self._lang_marker = GermanNumeric.LangMarker
        self._decimal_separator_char = GermanNumeric.DecimalSeparatorChar
        self._fraction_marker_token = GermanNumeric.FractionMarkerToken
        self._non_decimal_separator_char = GermanNumeric.NonDecimalSeparatorChar
        self._half_a_dozen_text = GermanNumeric.HalfADozenText
        self._word_separator_token = GermanNumeric.WordSeparatorToken

        self._written_decimal_separator_texts = GermanNumeric.WrittenDecimalSeparatorTexts
        self._written_group_separator_texts = GermanNumeric.WrittenGroupSeparatorTexts
        self._written_integer_separator_texts = GermanNumeric.WrittenIntegerSeparatorTexts
        self._written_fraction_separator_texts = GermanNumeric.WrittenFractionSeparatorTexts

        self._cardinal_number_map = GermanNumeric.CardinalNumberMap
        self._ordinal_number_map = GermanNumeric.OrdinalNumberMap
        self._round_number_map = GermanNumeric.RoundNumberMap
        self._negative_number_sign_regex = RegExpUtility.get_safe_reg_exp(
            GermanNumeric.NegativeNumberSignRegex)
        self._half_a_dozen_regex = RegExpUtility.get_safe_reg_exp(
            GermanNumeric.HalfADozenRegex)
        self._digital_number_regex = RegExpUtility.get_safe_reg_exp(
            GermanNumeric.DigitalNumberRegex)
Пример #2
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.French)
     super().__init__(culture_info)
     self._internal_number_extractor = FrenchNumberExtractor(NumberMode.DEFAULT)
     self._internal_number_parser = AgnosticNumberParserFactory.get_parser(ParserType.NUMBER, FrenchNumberParserConfiguration(culture_info))
     self._connector_token = FrenchNumericWithUnit.ConnectorToken
Пример #3
0
    def __init__(self, culture_info=None):
        if culture_info is None:
            culture_info = CultureInfo(Culture.Spanish)

        self._culture_info = culture_info
        self._lang_marker = SpanishNumeric.LangMarker
        self._decimal_separator_char = SpanishNumeric.DecimalSeparatorChar
        self._fraction_marker_token = SpanishNumeric.FractionMarkerToken
        self._non_decimal_separator_char = SpanishNumeric.NonDecimalSeparatorChar
        self._half_a_dozen_text = SpanishNumeric.HalfADozenText
        self._word_separator_token = SpanishNumeric.WordSeparatorToken

        self._written_decimal_separator_texts = SpanishNumeric.WrittenDecimalSeparatorTexts
        self._written_group_separator_texts = SpanishNumeric.WrittenGroupSeparatorTexts
        self._written_integer_separator_texts = SpanishNumeric.WrittenIntegerSeparatorTexts
        self._written_fraction_separator_texts = SpanishNumeric.WrittenFractionSeparatorTexts

        ordinal_number_map: Dict[str, int] = dict(
            SpanishNumeric.OrdinalNumberMap)
        for prefix_key in SpanishNumeric.PrefixCardinalMap:
            for suffix_key in SpanishNumeric.SuffixOrdinalMap:
                if not prefix_key+suffix_key in ordinal_number_map:
                    prefix_value = SpanishNumeric.PrefixCardinalMap[prefix_key]
                    suffix_value = SpanishNumeric.SuffixOrdinalMap[suffix_key]
                    ordinal_number_map[prefix_key +
                                       suffix_key] = prefix_value*suffix_value
        self._cardinal_number_map = SpanishNumeric.CardinalNumberMap
        self._ordinal_number_map = ordinal_number_map
        self._round_number_map = SpanishNumeric.RoundNumberMap
        self._negative_number_sign_regex = RegExpUtility.get_safe_reg_exp(
            SpanishNumeric.NegativeNumberSignRegex)
        self._half_a_dozen_regex = RegExpUtility.get_safe_reg_exp(
            SpanishNumeric.HalfADozenRegex)
        self._digital_number_regex = RegExpUtility.get_safe_reg_exp(
            SpanishNumeric.DigitalNumberRegex)
Пример #4
0
    def __init__(self, culture_info=None):
        if culture_info is None:
            culture_info = CultureInfo(Culture.Chinese)

        self._culture_info = culture_info
        self._lang_marker = ChineseNumeric.LangMarker
        self._decimal_separator_char = ChineseNumeric.DecimalSeparatorChar
        self._fraction_marker_token = ChineseNumeric.FractionMarkerToken
        self._non_decimal_separator_char = ChineseNumeric.NonDecimalSeparatorChar
        self._half_a_dozen_text = ChineseNumeric.HalfADozenText
        self._word_separator_token = ChineseNumeric.WordSeparatorToken

        self._round_number_map = ChineseNumeric.RoundNumberMap
        self._digital_number_regex = RegExpUtility.get_safe_reg_exp(ChineseNumeric.DigitalNumberRegex)

        self.zero_to_nine_map_chs = ChineseNumeric.ZeroToNineMap
        self.round_number_map_chs = ChineseNumeric.RoundNumberMapChar
        self.full_to_half_map_chs = ChineseNumeric.FullToHalfMap
        self.trato_sim_map_chs = ChineseNumeric.TratoSimMap
        self.unit_map_chs = ChineseNumeric.UnitMap
        self.round_direct_list_chs = ChineseNumeric.RoundDirectList

        self.digit_num_regex = ChineseNumeric.DigitNumRegex
        self.dozen_regex = ChineseNumeric.DozenRegex
        self.percentage_regex = ChineseNumeric.PercentageRegex
        self.double_and_round_chs_regex = RegExpUtility.get_safe_reg_exp(ChineseNumeric.DoubleAndRoundRegex)
        self.frac_split_regex = RegExpUtility.get_safe_reg_exp(ChineseNumeric.FracSplitRegex)
        self._negative_number_sign_regex = RegExpUtility.get_safe_reg_exp(ChineseNumeric.NegativeNumberSignRegex)
        self.point_regex_chs = ChineseNumeric.PointRegex
        self.spe_get_number_regex = RegExpUtility.get_safe_reg_exp(ChineseNumeric.SpeGetNumberRegex)
        self.pair_regex = RegExpUtility.get_safe_reg_exp(ChineseNumeric.PairRegex)
Пример #5
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.Spanish)
     super().__init__(culture_info)
     self._unit_num_extractor = SpanishNumberExtractor()
     self._build_prefix = SpanishNumericWithUnit.BuildPrefix
     self._build_suffix = SpanishNumericWithUnit.BuildSuffix
Пример #6
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.English)
     super().__init__(culture_info)
     self._unit_num_extractor = EnglishNumberExtractor()
     self._build_prefix = EnglishNumericWithUnit.BuildPrefix
     self._build_suffix = EnglishNumericWithUnit.BuildSuffix
     self._compound_unit_connector_regex = RegExpUtility.get_safe_reg_exp(EnglishNumericWithUnit.CompoundUnitConnectorRegex)
Пример #7
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.Chinese)
     super().__init__(culture_info)
     self._internal_number_extractor = ChineseNumberExtractor(
         ChineseNumberExtractorMode.EXTRACT_ALL)
     self._internal_number_parser = AgnosticNumberParserFactory.get_parser(
         ParserType.NUMBER, ChineseNumberParserConfiguration(culture_info))
Пример #8
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.Portuguese)
     super().__init__(culture_info)
     self._internal_number_extractor = PortugueseNumberExtractor(
         NumberMode.DEFAULT)
     self._internal_number_parser = AgnosticNumberParserFactory.get_parser(
         ParserType.NUMBER, PortugueseNumberParserConfiguration(culture_info))
Пример #9
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.Chinese)
     super().__init__(culture_info)
     self._unit_num_extractor = ChineseNumberExtractor(
         ChineseNumberExtractorMode.EXTRACT_ALL)
     self._build_prefix = ChineseNumericWithUnit.BuildPrefix
     self._build_suffix = ChineseNumericWithUnit.BuildSuffix
Пример #10
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.French)
     super().__init__(culture_info)
     self._unit_num_extractor = FrenchNumberExtractor()
     self._build_prefix = FrenchNumericWithUnit.BuildPrefix
     self._build_suffix = FrenchNumericWithUnit.BuildSuffix
     self._connector_token = FrenchNumericWithUnit.ConnectorToken
Пример #11
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.Chinese)
     super().__init__(culture_info)
     self._unit_num_extractor = ChineseNumberExtractor(ChineseNumberExtractorMode.EXTRACT_ALL)
     self._build_prefix = ChineseNumericWithUnit.BuildPrefix
     self._build_suffix = ChineseNumericWithUnit.BuildSuffix
     self._compound_unit_connector_regex = RegExpUtility.get_safe_reg_exp(ChineseNumericWithUnit.CompoundUnitConnectorRegex)
     self._pm_non_unit_regex = RegExpUtility.get_safe_reg_exp(BaseUnits.PmNonUnitRegex)
Пример #12
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.Chinese)
     super().__init__(culture_info)
     self._internal_number_extractor = ChineseNumberExtractor(
         ChineseNumberExtractorMode.EXTRACT_ALL)
     self._internal_number_parser = AgnosticNumberParserFactory.get_parser(
         ParserType.NUMBER, ChineseNumberParserConfiguration(culture_info))
     self.currency_name_to_iso_code_map = ChineseNumericWithUnit.CurrencyNameToIsoCodeMap
     self.currency_fraction_code_list = ChineseNumericWithUnit.FractionalUnitNameToCodeMap
Пример #13
0
 def __init__(self):
     super().__init__(CultureInfo(Culture.Chinese))
     self._year_regex = RegExpUtility.get_safe_reg_exp(
         ChineseDateTime.DurationYearRegex)
     self._half_suffix_regex = RegExpUtility.get_safe_reg_exp(
         ChineseDateTime.DurationHalfSuffixRegex)
     self._extract_type = Constants.SYS_DATETIME_DURATION
     self._suffix_list = ChineseDateTime.DurationSuffixList
     self._prefix_list = dict()
     self._ambiguous_unit_list = ChineseDateTime.DurationAmbiguousUnits
Пример #14
0
 def __init__(self, culture_info: CultureInfo):
     if culture_info is None:
         culture_info = CultureInfo(Culture.French)
     super().__init__(culture_info)
     self._unit_num_extractor = FrenchNumberExtractor()
     self._build_prefix = FrenchNumericWithUnit.BuildPrefix
     self._build_suffix = FrenchNumericWithUnit.BuildSuffix
     self._connector_token = FrenchNumericWithUnit.ConnectorToken
     self._compound_unit_connector_regex = RegExpUtility.get_safe_reg_exp(FrenchNumericWithUnit.CompoundUnitConnectorRegex)
     self._pm_non_unit_regex = RegExpUtility.get_safe_reg_exp(BaseUnits.PmNonUnitRegex)
Пример #15
0
    def __init__(self, culture_info=None):
        if culture_info is None:
            culture_info = CultureInfo(Culture.Japanese)

        self._culture_info = culture_info

        self._lang_marker = JapaneseNumeric.LangMarker
        self._decimal_separator_char = JapaneseNumeric.DecimalSeparatorChar
        self._fraction_marker_token = JapaneseNumeric.FractionMarkerToken
        self._non_decimal_separator_char = JapaneseNumeric.NonDecimalSeparatorChar
        self._half_a_dozen_text = JapaneseNumeric.HalfADozenText
        self._word_separator_token = JapaneseNumeric.WordSeparatorToken
        self._zero_char = JapaneseNumeric.ZeroChar
        self._pair_char = JapaneseNumeric.PairChar
        self._non_standard_separator_variants = []
        self._is_multi_decimal_separator_culture = JapaneseNumeric.MultiDecimalSeparatorCulture

        self._round_number_map = JapaneseNumeric.RoundNumberMap
        self._digital_number_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.DigitalNumberRegex)

        self._zero_to_nine_map = JapaneseNumeric.ZeroToNineMap
        self._round_number_map_char = JapaneseNumeric.RoundNumberMapChar
        self._full_to_half_map = JapaneseNumeric.FullToHalfMap
        self._unit_map = JapaneseNumeric.UnitMap
        self._round_direct_list = JapaneseNumeric.RoundDirectList
        self._ten_chars = JapaneseNumeric.TenChars
        self._digit_num_regex = JapaneseNumeric.DigitNumRegex
        self._dozen_regex = JapaneseNumeric.DozenRegex
        self._percentage_regex = JapaneseNumeric.PercentageRegex
        self._double_and_round_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.DoubleAndRoundRegex)
        self._frac_split_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.FracSplitRegex)
        self._negative_number_sign_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.NegativeNumberSignRegex)
        self._point_regex = JapaneseNumeric.PointRegex
        self._spe_get_number_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.SpeGetNumberRegex)
        self._pair_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.PairRegex)
        self._round_number_integer_regex = RegExpUtility.get_safe_reg_exp(
            JapaneseNumeric.RoundNumberIntegerRegex)
    def initialize_configuration(self):
        # region English
        self.register_model('CurrencyModel', Culture.English, lambda options: CurrencyModel(
            [ExtractorParserModel(BaseMergedUnitExtractor(EnglishCurrencyExtractorConfiguration(
            )), BaseMergedUnitParser(EnglishCurrencyParserConfiguration()))]
        ))
        self.register_model('TemperatureModel', Culture.English, lambda options: TemperatureModel(
            [ExtractorParserModel(NumberWithUnitExtractor(EnglishTemperatureExtractorConfiguration(
            )), NumberWithUnitParser(EnglishTemperatureParserConfiguration()))]
        ))
        self.register_model('DimensionModel', Culture.English, lambda options: DimensionModel(
            [ExtractorParserModel(NumberWithUnitExtractor(EnglishDimensionExtractorConfiguration(
            )), NumberWithUnitParser(EnglishDimensionParserConfiguration()))]
        ))
        self.register_model('AgeModel', Culture.English, lambda options: AgeModel(
            [ExtractorParserModel(NumberWithUnitExtractor(EnglishAgeExtractorConfiguration(
            )), NumberWithUnitParser(EnglishAgeParserConfiguration()))]
        ))
        # endregion

        # region Chinese
        self.register_model('CurrencyModel', Culture.Chinese, lambda options: CurrencyModel([
            ExtractorParserModel(
                BaseMergedUnitExtractor(
                    ChineseCurrencyExtractorConfiguration()),
                BaseMergedUnitParser(ChineseCurrencyParserConfiguration())),
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    EnglishCurrencyExtractorConfiguration()),
                NumberWithUnitParser(EnglishCurrencyParserConfiguration()))
        ]))
        self.register_model('TemperatureModel', Culture.Chinese, lambda options: TemperatureModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    ChineseTemperatureExtractorConfiguration()),
                NumberWithUnitParser(ChineseTemperatureParserConfiguration())),
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    EnglishTemperatureExtractorConfiguration()),
                NumberWithUnitParser(EnglishTemperatureParserConfiguration()))
        ]))
        self.register_model('DimensionModel', Culture.Chinese, lambda options: DimensionModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    ChineseDimensionExtractorConfiguration()),
                NumberWithUnitParser(ChineseDimensionParserConfiguration())),
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    EnglishDimensionExtractorConfiguration()),
                NumberWithUnitParser(EnglishDimensionParserConfiguration()))
        ]))
        self.register_model('AgeModel', Culture.Chinese, lambda options: AgeModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(ChineseAgeExtractorConfiguration()),
                NumberWithUnitParser(ChineseAgeParserConfiguration())),
            ExtractorParserModel(
                NumberWithUnitExtractor(EnglishAgeExtractorConfiguration()),
                NumberWithUnitParser(EnglishAgeParserConfiguration()))
        ]))
        # endregion

        # region French
        self.register_model('CurrencyModel', Culture.French, lambda options: CurrencyModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    FrenchCurrencyExtractorConfiguration()),
                NumberWithUnitParser(FrenchCurrencyParserConfiguration()))
        ]))
        self.register_model('TemperatureModel', Culture.French, lambda options: TemperatureModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    FrenchTemperatureExtractorConfiguration()),
                NumberWithUnitParser(FrenchTemperatureParserConfiguration()))
        ]))
        self.register_model('DimensionModel', Culture.French, lambda options: DimensionModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    FrenchDimensionExtractorConfiguration()),
                NumberWithUnitParser(FrenchDimensionParserConfiguration()))
        ]))
        self.register_model('AgeModel', Culture.French, lambda options: AgeModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(FrenchAgeExtractorConfiguration()),
                NumberWithUnitParser(FrenchAgeParserConfiguration()))
        ]))
        # endregion

        # region Portuguese
        self.register_model('CurrencyModel', Culture.Portuguese, lambda options: CurrencyModel(
            [ExtractorParserModel(BaseMergedUnitExtractor(PortugueseCurrencyExtractorConfiguration(
            )), BaseMergedUnitParser(PortugueseCurrencyParserConfiguration()))]
        ))
        self.register_model('TemperatureModel', Culture.Portuguese, lambda options: TemperatureModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    PortugueseTemperatureExtractorConfiguration()),
                NumberWithUnitParser(PortugueseTemperatureParserConfiguration()))
        ]))
        self.register_model('DimensionModel', Culture.Portuguese, lambda options: DimensionModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(
                    PortugueseDimensionExtractorConfiguration()),
                NumberWithUnitParser(PortugueseDimensionParserConfiguration()))
        ]))
        self.register_model('AgeModel', Culture.Portuguese, lambda options: AgeModel([
            ExtractorParserModel(
                NumberWithUnitExtractor(PortugueseAgeExtractorConfiguration()),
                NumberWithUnitParser(PortugueseAgeParserConfiguration()))
        ]))
        # endregion

        # region Spanish
        self.register_model('CurrencyModel', Culture.Spanish, lambda options: CurrencyModel(
            [ExtractorParserModel(BaseMergedUnitExtractor(SpanishCurrencyExtractorConfiguration(
            )), BaseMergedUnitParser(SpanishCurrencyParserConfiguration()))]
        ))
        self.register_model('TemperatureModel', Culture.Spanish, lambda options: TemperatureModel(
            [ExtractorParserModel(NumberWithUnitExtractor(SpanishTemperatureExtractorConfiguration(
            )), NumberWithUnitParser(SpanishTemperatureParserConfiguration()))]
        ))
        self.register_model('DimensionModel', Culture.Spanish, lambda options: DimensionModel(
            [ExtractorParserModel(NumberWithUnitExtractor(SpanishDimensionExtractorConfiguration(
            )), NumberWithUnitParser(SpanishDimensionParserConfiguration()))]
        ))
        self.register_model('AgeModel', Culture.Spanish, lambda options: AgeModel(
            [ExtractorParserModel(NumberWithUnitExtractor(SpanishAgeExtractorConfiguration(
            )), NumberWithUnitParser(SpanishAgeParserConfiguration()))]
        ))
        # endregion

        # region Spanish Mexican
        self.register_model('CurrencyModel', Culture.SpanishMexican, lambda options: CurrencyModel(
            [ExtractorParserModel(BaseMergedUnitExtractor(SpanishCurrencyExtractorConfiguration(
            )), BaseMergedUnitParser(
                SpanishCurrencyParserConfiguration(culture_info=CultureInfo(Culture.SpanishMexican))))]
        ))
        self.register_model('TemperatureModel', Culture.SpanishMexican, lambda options: TemperatureModel(
            [ExtractorParserModel(NumberWithUnitExtractor(SpanishTemperatureExtractorConfiguration(
            )), NumberWithUnitParser(
                SpanishTemperatureParserConfiguration(culture_info=CultureInfo(Culture.SpanishMexican))))]
        ))
        self.register_model('DimensionModel', Culture.SpanishMexican, lambda options: DimensionModel(
            [ExtractorParserModel(NumberWithUnitExtractor(SpanishDimensionExtractorConfiguration(
            )), NumberWithUnitParser(
                SpanishDimensionParserConfiguration(culture_info=CultureInfo(Culture.SpanishMexican))))]
        ))
        self.register_model('AgeModel', Culture.SpanishMexican, lambda options: AgeModel(
            [ExtractorParserModel(NumberWithUnitExtractor(SpanishAgeExtractorConfiguration(
            )), NumberWithUnitParser(SpanishAgeParserConfiguration(culture_info=CultureInfo(Culture.SpanishMexican))))]
        ))
 def __init__(self):
     super().__init__(CultureInfo(Culture.Chinese))
     self._extract_type = Constants.SYS_DATETIME_DURATION
     self._suffix_list = ChineseDateTime.DurationSuffixList
     self._prefix_list = dict()
     self._ambiguous_unit_list = ChineseDateTime.DurationAmbiguousUnits
    def initialize_configuration(self):
        # region English
        self.register_model(
            'NumberModel', Culture.English, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, EnglishNumberParserConfiguration()),
                EnglishNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.English, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, EnglishNumberParserConfiguration()),
                EnglishOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.English, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, EnglishNumberParserConfiguration()),
                EnglishPercentageExtractor()))
        # endregion

        # region German
        self.register_model(
            'NumberModel', Culture.German, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, GermanNumberParserConfiguration()),
                GermanNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.German, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, GermanNumberParserConfiguration()),
                GermanOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.German, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, GermanNumberParserConfiguration()),
                GermanPercentageExtractor()))
        # endregion

        # region Chinese
        self.register_model(
            'NumberModel', Culture.Chinese, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, ChineseNumberParserConfiguration()),
                ChineseNumberExtractor()))
        self.register_model(
            'OrdinalModel', Culture.Chinese, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, ChineseNumberParserConfiguration()),
                ChineseOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.Chinese, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, ChineseNumberParserConfiguration()),
                ChinesePercentageExtractor()))
        # endregion

        # region Japanese
        self.register_model(
            'NumberModel', Culture.Japanese, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, JapaneseNumberParserConfiguration()),
                JapaneseNumberExtractor()))
        self.register_model(
            'OrdinalModel', Culture.Japanese, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, JapaneseNumberParserConfiguration()),
                JapaneseOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.Japanese, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, JapaneseNumberParserConfiguration()
                ), JapanesePercentageExtractor()))
        # endregion

        # region Spanish
        self.register_model(
            'NumberModel', Culture.Spanish, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, SpanishNumberParserConfiguration()),
                SpanishNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.Spanish, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, SpanishNumberParserConfiguration()),
                SpanishOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.Spanish, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, SpanishNumberParserConfiguration()),
                SpanishPercentageExtractor()))
        # endregion

        # region Spanish Mexican
        self.register_model(
            'NumberModel', Culture.SpanishMexican, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER,
                    SpanishNumberParserConfiguration(
                        CultureInfo(Culture.SpanishMexican))),
                SpanishNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.SpanishMexican,
            lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL,
                    SpanishNumberParserConfiguration(
                        CultureInfo(Culture.SpanishMexican))),
                SpanishOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.SpanishMexican,
            lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE,
                    SpanishNumberParserConfiguration(
                        CultureInfo(Culture.SpanishMexican))),
                SpanishPercentageExtractor()))
        # endregion

        # region Portuguese
        self.register_model(
            'NumberModel', Culture.Portuguese, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, PortugueseNumberParserConfiguration()),
                PortugueseNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.Portuguese, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, PortugueseNumberParserConfiguration()),
                PortugueseOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.Portuguese, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, PortugueseNumberParserConfiguration(
                    )), PortuguesePercentageExtractor()))
        # endregion

        # region French
        self.register_model(
            'NumberModel', Culture.French, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, FrenchNumberParserConfiguration()),
                FrenchNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.French, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, FrenchNumberParserConfiguration()),
                FrenchOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.French, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, FrenchNumberParserConfiguration()),
                FrenchPercentageExtractor()))
        # endregion

        # region Italian
        self.register_model(
            'NumberModel', Culture.Italian, lambda options: NumberModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.NUMBER, ItalianNumberParserConfiguration()),
                ItalianNumberExtractor(NumberMode.PURE_NUMBER)))
        self.register_model(
            'OrdinalModel', Culture.Italian, lambda options: OrdinalModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.ORDINAL, ItalianNumberParserConfiguration()),
                ItalianOrdinalExtractor()))
        self.register_model(
            'PercentModel', Culture.Italian, lambda options: PercentModel(
                AgnosticNumberParserFactory.get_parser(
                    ParserType.PERCENTAGE, ItalianNumberParserConfiguration()),
                ItalianPercentageExtractor()))